180 TTimeIntervalMicroSeconds32 CKeyboardRepeat::iTime; |
180 TTimeIntervalMicroSeconds32 CKeyboardRepeat::iTime; |
181 CWsWindowGroup *CKeyboardRepeat::iFocus=NULL; |
181 CWsWindowGroup *CKeyboardRepeat::iFocus=NULL; |
182 TBool CKeyboardRepeat::iAlternateRepeatExists=EFalse; |
182 TBool CKeyboardRepeat::iAlternateRepeatExists=EFalse; |
183 CWsCaptureLongKey* CKeyboardRepeat::iLongCapture=NULL; |
183 CWsCaptureLongKey* CKeyboardRepeat::iLongCapture=NULL; |
184 |
184 |
|
185 TTimeIntervalMicroSeconds TWindowServerEvent::iPauseInterval; |
|
186 TTime TWindowServerEvent::iPauseStartTime; |
|
187 TInt TWindowServerEvent::iConfigationPauseTime = 0; |
|
188 |
185 |
189 |
186 void TWindowServerEvent::DeleteHotKeys() |
190 void TWindowServerEvent::DeleteHotKeys() |
187 { |
191 { |
188 CWsHotKey *hotKey=iHotKeys; |
192 CWsHotKey *hotKey=iHotKeys; |
189 while(hotKey) |
193 while(hotKey) |
239 CKeyboardRepeat::NewL(); |
243 CKeyboardRepeat::NewL(); |
240 CKeyboardRepeat::SetRepeatTime(EDefaultInitialRepeatTime, EDefaultRepeatTime); |
244 CKeyboardRepeat::SetRepeatTime(EDefaultInitialRepeatTime, EDefaultRepeatTime); |
241 iEventHandlers=RArray<TRawEventHandler>(2); |
245 iEventHandlers=RArray<TRawEventHandler>(2); |
242 iNotificationHandlers=new(ELeave) CArrayFixFlat<SNotificationHandler>(2); |
246 iNotificationHandlers=new(ELeave) CArrayFixFlat<SNotificationHandler>(2); |
243 iDrawerHandlers = new(ELeave) RArray<TDrawerHandler>(4); |
247 iDrawerHandlers = new(ELeave) RArray<TDrawerHandler>(4); |
|
248 iPauseInterval = TTimeIntervalMicroSeconds(0); |
|
249 _LIT(KWSERVIniFileVarEventsPauseAfterRotation,"SUPPRESSEVENTSTIMEAFTERROTATION"); |
|
250 WsIniFile->FindVar(KWSERVIniFileVarEventsPauseAfterRotation,iConfigationPauseTime); |
244 } |
251 } |
245 |
252 |
246 void TWindowServerEvent::LinkHotKey(CWsHotKey *aWsHotKey) |
253 void TWindowServerEvent::LinkHotKey(CWsHotKey *aWsHotKey) |
247 { |
254 { |
248 aWsHotKey->SetLink(iHotKeys); |
255 aWsHotKey->SetLink(iHotKeys); |
324 TRAPD(err,iEventHandlers.AppendL(TRawEventHandler(aEventHandler, aAdvancedPointersEnabled))); |
331 TRAPD(err,iEventHandlers.AppendL(TRawEventHandler(aEventHandler, aAdvancedPointersEnabled))); |
325 WS_ASSERT_DEBUG(err==KErrNone, EWsPanicEventHandlerInconsistency); |
332 WS_ASSERT_DEBUG(err==KErrNone, EWsPanicEventHandlerInconsistency); |
326 #else |
333 #else |
327 iEventHandlers.AppendL(TRawEventHandler(aEventHandler, aAdvancedPointersEnabled)); //Shouldn't leave |
334 iEventHandlers.AppendL(TRawEventHandler(aEventHandler, aAdvancedPointersEnabled)); //Shouldn't leave |
328 #endif |
335 #endif |
|
336 #ifdef LOG_WSERV_EVENTS |
|
337 RDebug::Printf("{EVNT}TWindowServerEvent::AddEventHandler Added Handler = %d Advanced Pointers Enabled = %d", iEventHandlers.Count(),aAdvancedPointersEnabled); |
|
338 #endif |
329 } |
339 } |
330 |
340 |
331 void TWindowServerEvent::RemoveEventHandler(const MEventHandler *aEventHandler) |
341 void TWindowServerEvent::RemoveEventHandler(const MEventHandler *aEventHandler) |
332 { |
342 { |
333 TInt count=iEventHandlers.Count(); |
343 TInt count=iEventHandlers.Count(); |
334 TInt ii; |
344 TInt ii; |
335 for(ii=0;ii<count;++ii) |
345 for(ii=0;ii<count;++ii) |
336 { |
346 { |
337 if (iEventHandlers[ii].iEventHandler==aEventHandler) |
347 if (iEventHandlers[ii].iEventHandler==aEventHandler) |
338 { |
348 { |
|
349 #ifdef LOG_WSERV_EVENTS |
|
350 RDebug::Printf("{EVNT}TWindowServerEvent::RemoveEventHandler Removed Handler = %d",ii); |
|
351 #endif |
339 if (iEventHandlerCount>0) |
352 if (iEventHandlerCount>0) |
340 { |
353 { |
341 iBinaryFlags |= ERemovedEventHandlerWhileProcessingRawEvents; |
354 iBinaryFlags |= ERemovedEventHandlerWhileProcessingRawEvents; |
342 iEventHandlers[ii].iEventHandler=NULL; // replace the Handler with null to keep size of the array |
355 iEventHandlers[ii].iEventHandler=NULL; // replace the Handler with null to keep size of the array |
343 } |
356 } |
935 default: |
948 default: |
936 break; |
949 break; |
937 } |
950 } |
938 } |
951 } |
939 |
952 |
|
953 /* |
|
954 Pause in processing all raw pointer and key events (except processing by anim's dll plug-ins). |
|
955 All events will be ignored except for anim's dll plug-ins. |
|
956 Pause prevents pointer events to come to wrong windows due to screen width and size changes. |
|
957 @param aPauseInterval - the pause interval in microseconds. |
|
958 */ |
|
959 void TWindowServerEvent::PauseProcessRawEvents(TInt aPauseInterval) |
|
960 { |
|
961 iPauseInterval = TTimeIntervalMicroSeconds(aPauseInterval); |
|
962 iPauseStartTime.UniversalTime(); |
|
963 #ifdef LOG_WSERV_EVENTS |
|
964 RDebug::Printf("{EVNT}TWindowServerEvent::PauseProcessRawEvents aPauseInterval = %d",aPauseInterval); |
|
965 #endif |
|
966 } |
|
967 |
940 void TWindowServerEvent::ProcessRawEvent(const TRawEvent& aRawEvent) |
968 void TWindowServerEvent::ProcessRawEvent(const TRawEvent& aRawEvent) |
941 // |
969 // |
942 // Event has completed. |
970 // Event has completed. |
943 // |
971 // |
944 { |
972 { |
|
973 TBool pauseProcessEvents = EFalse; |
|
974 //Check if the pause in processing all raw pointer and key events was set. |
|
975 if(iPauseInterval.Int64() > 0) |
|
976 { |
|
977 TTime current; |
|
978 current.UniversalTime(); |
|
979 TTimeIntervalMicroSeconds interval = current.MicroSecondsFrom( |
|
980 iPauseStartTime); |
|
981 if ((interval.Int64() > iPauseInterval.Int64()) || (interval.Int64() < 0)) |
|
982 { |
|
983 iPauseInterval = TTimeIntervalMicroSeconds(0); |
|
984 } |
|
985 else |
|
986 { |
|
987 // Set flag ignore of processing all raw events (except processing by anim's dll plug-ins) |
|
988 // All events will be ignored except for anim's dll plug-ins. |
|
989 pauseProcessEvents = ETrue; |
|
990 } |
|
991 } |
|
992 |
|
993 #ifdef LOG_WSERV_EVENTS |
|
994 if(pauseProcessEvents) |
|
995 RDebug::Printf("{EVNT}TWindowServerEvent::ProcessRawEvent Processing of Raw Event - DISABLED"); |
|
996 else |
|
997 RDebug::Printf("{EVNT}TWindowServerEvent::ProcessRawEvent Processing of Raw Event - ENABLED"); |
|
998 #endif |
|
999 |
945 TRawEvent::TType eventType = aRawEvent.Type(); |
1000 TRawEvent::TType eventType = aRawEvent.Type(); |
946 TBool isPointerEvent = TWsPointer::IsPointerEventType(eventType); |
1001 TBool isPointerEvent = TWsPointer::IsPointerEventType(eventType); |
947 if (isPointerEvent) |
1002 if (isPointerEvent) |
948 { |
1003 { |
949 TWsPointer::UpdatePrimaryPointer(aRawEvent); |
1004 #ifdef LOG_WSERV_EVENTS |
|
1005 RDebug::Printf("{EVNT}TWindowServerEvent::ProcessRawEvent EventType = 0x0%X PointerNumber = %d PrimaryPointerNumber = %d XY(%d,%d)", |
|
1006 aRawEvent.Type(),aRawEvent.PointerNumber(),TWsPointer::PrimaryPointer(),aRawEvent.Pos().iX,aRawEvent.Pos().iY); |
|
1007 #endif |
|
1008 TWsPointer::UpdatePrimaryPointer(aRawEvent); |
950 } |
1009 } |
951 TInt count=iEventHandlers.Count(); |
1010 TInt count=iEventHandlers.Count(); |
952 TInt ii; |
1011 TInt ii; |
953 TBool eventHandled = EFalse; |
1012 TBool eventHandled = EFalse; |
954 iEventHandlerCount++; |
1013 iEventHandlerCount++; |
964 if (CClick::IsHandler()) |
1023 if (CClick::IsHandler()) |
965 { |
1024 { |
966 SendEventToKeyClick(aRawEvent); |
1025 SendEventToKeyClick(aRawEvent); |
967 } |
1026 } |
968 eventHandled = ETrue; |
1027 eventHandled = ETrue; |
|
1028 #ifdef LOG_WSERV_EVENTS |
|
1029 RDebug::Printf("{EVNT}TWindowServerEvent::ProcessRawEvent Event Consumed by Handler No = %d Advanced Pointers Enabled = %d",ii,handler.iAdvancedPointersEnabled); |
|
1030 #endif |
969 break; |
1031 break; |
970 } |
1032 } |
971 } |
1033 } |
972 if (--iEventHandlerCount == 0) |
1034 if (--iEventHandlerCount == 0) |
973 { |
1035 { |
978 { |
1040 { |
979 if (iEventHandlers[ii].iEventHandler==NULL) iEventHandlers.Remove(ii); |
1041 if (iEventHandlers[ii].iEventHandler==NULL) iEventHandlers.Remove(ii); |
980 } |
1042 } |
981 } |
1043 } |
982 } |
1044 } |
983 if (eventHandled) |
1045 if ((eventHandled)||(pauseProcessEvents)) |
984 { |
1046 { |
985 if (isPointerEvent) |
1047 if (isPointerEvent) |
986 { |
1048 { |
987 TWsPointer::RollbackPrimaryPointer(); |
1049 //Prevention of the phone pointer event "dead lock". |
988 } |
1050 TPointerEvent::TType type; |
|
1051 TBool handled = ETrue; |
|
1052 GetPointerEvent(type, aRawEvent, handled); |
|
1053 switch(type) |
|
1054 { |
|
1055 case TPointerEvent::EButton1Down: |
|
1056 case TPointerEvent::EButton2Down: |
|
1057 case TPointerEvent::EButton3Down: |
|
1058 TWsPointer::iPointers[aRawEvent.PointerNumber()].iState = TWsPointer::EPointerStateDown; |
|
1059 break; |
|
1060 case TPointerEvent::EButton1Up: |
|
1061 case TPointerEvent::EButton2Up: |
|
1062 case TPointerEvent::EButton3Up: |
|
1063 TWsPointer::iPointers[aRawEvent.PointerNumber()].iState = TWsPointer::EPointerStateUp; |
|
1064 break; |
|
1065 case TPointerEvent::EOutOfRange: |
|
1066 TWsPointer::iPointers[aRawEvent.PointerNumber()].iState = TWsPointer::EPointerStateOutOfRange; |
|
1067 break; |
|
1068 default: |
|
1069 break; |
|
1070 } |
|
1071 #ifdef LOG_WSERV_EVENTS |
|
1072 RDebug::Printf("{EVNT}TWindowServerEvent::ProcessRawEvent Pointer Number= %d State = %x XY(%d,%d)",TWsPointer::iPointers[0].iNumber,TWsPointer::iPointers[0].iState,TWsPointer::iPointers[0].iPos.iX,TWsPointer::iPointers[0].iPos.iY); |
|
1073 RDebug::Printf("{EVNT}TWindowServerEvent::ProcessRawEvent Pointer Number= %d State = %x XY(%d,%d)",TWsPointer::iPointers[1].iNumber,TWsPointer::iPointers[1].iState,TWsPointer::iPointers[1].iPos.iX,TWsPointer::iPointers[1].iPos.iY); |
|
1074 #endif |
|
1075 } |
|
1076 #ifdef LOG_WSERV_EVENTS |
|
1077 if(pauseProcessEvents) |
|
1078 RDebug::Printf("{EVNT}TWindowServerEvent::ProcessRawEvent Further Processing of Raw Event - IGNORED"); |
|
1079 #endif |
989 return; |
1080 return; |
990 } |
1081 } |
|
1082 |
991 switch(eventType) |
1083 switch(eventType) |
992 { |
1084 { |
993 case TRawEvent::ERedraw: |
1085 case TRawEvent::ERedraw: |
994 CWsTop::RedrawScreens(); |
1086 CWsTop::RedrawScreens(); |
995 break; |
1087 break; |
1110 } |
1202 } |
1111 break; |
1203 break; |
1112 default: |
1204 default: |
1113 break; |
1205 break; |
1114 } |
1206 } |
|
1207 #ifdef LOG_WSERV_EVENTS |
|
1208 RDebug::Printf("{EVNT}TWindowServerEvent::ProcessRawEvent Pointer Number= %d State = %x XY(%d,%d)",TWsPointer::iPointers[0].iNumber,TWsPointer::iPointers[0].iState,TWsPointer::iPointers[0].iPos.iX,TWsPointer::iPointers[0].iPos.iY); |
|
1209 RDebug::Printf("{EVNT}TWindowServerEvent::ProcessRawEvent Pointer Number= %d State = %x XY(%d,%d)",TWsPointer::iPointers[1].iNumber,TWsPointer::iPointers[1].iState,TWsPointer::iPointers[1].iPos.iX,TWsPointer::iPointers[1].iPos.iY); |
|
1210 #endif |
1115 } |
1211 } |
1116 |
1212 |
1117 void TWindowServerEvent::ProcessKeyEvent(const TKeyEvent &aKeyEvent,TInt aRepeats) |
1213 void TWindowServerEvent::ProcessKeyEvent(const TKeyEvent &aKeyEvent,TInt aRepeats) |
1118 { |
1214 { |
1119 TKeyData keyData; |
1215 TKeyData keyData; |