32 #include "password.h" |
32 #include "password.h" |
33 #include "pointer.h" |
33 #include "pointer.h" |
34 #include "debugbar.h" |
34 #include "debugbar.h" |
35 #include "advancedpointereventhelper.h" |
35 #include "advancedpointereventhelper.h" |
36 #include "graphics/wsgraphicdrawerinternal.h" |
36 #include "graphics/wsgraphicdrawerinternal.h" |
|
37 #include "debughelper.h" |
37 |
38 |
38 GLREF_D CDebugLogBase *wsDebugLog; |
39 GLREF_D CDebugLogBase *wsDebugLog; |
39 |
40 |
40 GLREF_C void StateDump(); |
41 GLREF_C void StateDump(); |
41 GLREF_C void HeapDump(); |
42 GLREF_C void HeapDump(); |
382 TRAPD(err,iEventHandlers.AppendL(TRawEventHandler(aEventHandler, aAdvancedPointersEnabled))); |
383 TRAPD(err,iEventHandlers.AppendL(TRawEventHandler(aEventHandler, aAdvancedPointersEnabled))); |
383 WS_ASSERT_DEBUG(err==KErrNone, EWsPanicEventHandlerInconsistency); |
384 WS_ASSERT_DEBUG(err==KErrNone, EWsPanicEventHandlerInconsistency); |
384 #else |
385 #else |
385 iEventHandlers.AppendL(TRawEventHandler(aEventHandler, aAdvancedPointersEnabled)); //Shouldn't leave |
386 iEventHandlers.AppendL(TRawEventHandler(aEventHandler, aAdvancedPointersEnabled)); //Shouldn't leave |
386 #endif |
387 #endif |
|
388 #ifdef LOG_WSERV_EVENTS |
|
389 RDebug::Printf("_WSEVENT_POINTER: TWindowServerEvent::AddEventHandler Added handler = %d AdvancedPointerEnabled = %d", iEventHandlers.Count(),aAdvancedPointersEnabled); |
|
390 #endif |
387 } |
391 } |
388 |
392 |
389 void TWindowServerEvent::RemoveEventHandler(const MEventHandler *aEventHandler) |
393 void TWindowServerEvent::RemoveEventHandler(const MEventHandler *aEventHandler) |
390 { |
394 { |
391 TInt count=iEventHandlers.Count(); |
395 TInt count=iEventHandlers.Count(); |
392 TInt ii; |
396 TInt ii; |
393 for(ii=0;ii<count;++ii) |
397 for(ii=0;ii<count;++ii) |
394 { |
398 { |
395 if (iEventHandlers[ii].iEventHandler==aEventHandler) |
399 if (iEventHandlers[ii].iEventHandler==aEventHandler) |
396 { |
400 { |
|
401 #ifdef LOG_WSERV_EVENTS |
|
402 RDebug::Printf("_WSEVENT_POINTER: TWindowServerEvent::RemoveEventHandler Removed handler = %d",ii); |
|
403 #endif |
397 if (iEventHandlerCount>0) |
404 if (iEventHandlerCount>0) |
398 { |
405 { |
399 iBinaryFlags |= ERemovedEventHandlerWhileProcessingRawEvents; |
406 iBinaryFlags |= ERemovedEventHandlerWhileProcessingRawEvents; |
400 iEventHandlers[ii].iEventHandler=NULL; // replace the Handler with null to keep size of the array |
407 iEventHandlers[ii].iEventHandler=NULL; // replace the Handler with null to keep size of the array |
401 } |
408 } |
709 return ETrue; |
716 return ETrue; |
710 } |
717 } |
711 |
718 |
712 void TWindowServerEvent::QueueKeyEvent(CWsWindowGroup *aWin, TWsEvent &aEvent, TWservEventPriorities aPriority) |
719 void TWindowServerEvent::QueueKeyEvent(CWsWindowGroup *aWin, TWsEvent &aEvent, TWservEventPriorities aPriority) |
713 { |
720 { |
|
721 #ifdef LOG_WSERV_EVENTS |
|
722 RDebug::Print(_L("_WSEVENT_KEY: TWindowServerEvent::QueueKeyEvent, Queuing event name %S for application read, window handle: %d"), &WsEventName(aEvent), CWsTop::FocusWindowGroup()->ClientHandle()); |
|
723 #endif |
714 aEvent.SetTimeNow(); |
724 aEvent.SetTimeNow(); |
715 aWin->EventQueue()->QueueEvent(aEvent, aPriority); |
725 aWin->EventQueue()->QueueEvent(aEvent, aPriority); |
716 } |
726 } |
717 |
727 |
718 /** |
728 /** |
979 |
989 |
980 @param aRawEvent Raw event |
990 @param aRawEvent Raw event |
981 */ |
991 */ |
982 void TWindowServerEvent::QueueKeyUpDown(const TRawEvent &aRawEvent) |
992 void TWindowServerEvent::QueueKeyUpDown(const TRawEvent &aRawEvent) |
983 { |
993 { |
|
994 #ifdef LOG_WSERV_EVENTS |
|
995 RDebug::Print(_L("_WSEVENT_KEY: TWindowServerEvent::QueueKeyUpDown, Event Name: %S, Scan code: %d"), &RawEventName(aRawEvent), aRawEvent.ScanCode()); |
|
996 #endif |
984 TEventCode type = aRawEvent.Type() == TRawEvent::EKeyUp ? EEventKeyUp : EEventKeyDown; |
997 TEventCode type = aRawEvent.Type() == TRawEvent::EKeyUp ? EEventKeyUp : EEventKeyDown; |
985 |
998 |
986 // Check for key up/down capture |
999 // Check for key up/down capture |
987 TKeyEvent keyEvent; |
1000 TKeyEvent keyEvent; |
988 keyEvent.iScanCode = aRawEvent.ScanCode() __REMOVE_WINS_CHARCODE; |
1001 keyEvent.iScanCode = aRawEvent.ScanCode() __REMOVE_WINS_CHARCODE; |
1157 { |
1170 { |
1158 TRawEvent::TType eventType = aRawEvent.Type(); |
1171 TRawEvent::TType eventType = aRawEvent.Type(); |
1159 TBool isPointerEvent = TWsPointer::IsPointerEventType(eventType); |
1172 TBool isPointerEvent = TWsPointer::IsPointerEventType(eventType); |
1160 if (isPointerEvent) |
1173 if (isPointerEvent) |
1161 { |
1174 { |
1162 TWsPointer::UpdatePrimaryPointer(aRawEvent); |
1175 #ifdef LOG_WSERV_EVENTS |
|
1176 RDebug::Print(_L("_WSEVENT_POINTER: TWindowServerEvent::ProcessRawEvent EventName = %S PointerNumber = %d PrimaryPointerNumber = %d Coordinates = ( %d, %d )"), |
|
1177 &RawEventName(aRawEvent),aRawEvent.PointerNumber(),TWsPointer::PrimaryPointer(),aRawEvent.Pos().iX,aRawEvent.Pos().iY); |
|
1178 #endif |
|
1179 TWsPointer::UpdatePrimaryPointer(aRawEvent); |
1163 } |
1180 } |
1164 TInt count=iEventHandlers.Count(); |
1181 TInt count=iEventHandlers.Count(); |
1165 TInt ii; |
1182 TInt ii; |
1166 TBool eventHandled = EFalse; |
1183 TBool eventHandled = EFalse; |
1167 iEventHandlerCount++; |
1184 iEventHandlerCount++; |
1174 aRawEvent.PointerNumber() == TWsPointer::PrimaryPointer()) && |
1191 aRawEvent.PointerNumber() == TWsPointer::PrimaryPointer()) && |
1175 handler.iEventHandler->OfferRawEvent(aRawEvent)) |
1192 handler.iEventHandler->OfferRawEvent(aRawEvent)) |
1176 { |
1193 { |
1177 if (CClick::IsHandler()) |
1194 if (CClick::IsHandler()) |
1178 { |
1195 { |
|
1196 #ifdef LOG_WSERV_EVENTS |
|
1197 RDebug::Print(_L("_WSEVENT_KEY: Send event %S for Key Click"), &RawEventName(aRawEvent)); |
|
1198 #endif |
1179 SendEventToKeyClick(aRawEvent); |
1199 SendEventToKeyClick(aRawEvent); |
1180 } |
1200 } |
1181 eventHandled = ETrue; |
1201 eventHandled = ETrue; |
|
1202 #ifdef LOG_WSERV_EVENTS |
|
1203 RDebug::Printf("_WSEVENT_POINTER: TWindowServerEvent::ProcessRawEvent Event Consumed by ANIM.dll Handler No = %d Advanced Pointer Enabled = %d",ii,handler.iAdvancedPointersEnabled); |
|
1204 #endif |
1182 break; |
1205 break; |
1183 } |
1206 } |
1184 } |
1207 } |
1185 if (--iEventHandlerCount == 0) |
1208 if (--iEventHandlerCount == 0) |
1186 { |
1209 { |
1193 } |
1216 } |
1194 } |
1217 } |
1195 } |
1218 } |
1196 if (eventHandled) |
1219 if (eventHandled) |
1197 { |
1220 { |
|
1221 #ifdef LOG_WSERV_EVENTS |
|
1222 RDebug::Printf("_WSEVENT: Event is already handled by anim dll not by window server"); |
|
1223 // This is to determine when we press the power button which bring power dialog |
|
1224 // whether it is a pointer event or key event |
|
1225 // Also when we plugin the charging cable this is to determine whether it is a pointer event or key event |
|
1226 RDebug::Print(_L("_WSEVENT: RawEvent Name = %S"), &RawEventName(aRawEvent)); |
|
1227 #endif |
1198 if (isPointerEvent) |
1228 if (isPointerEvent) |
1199 { |
1229 { |
1200 TWsPointer::RollbackPrimaryPointer(); |
1230 #ifdef LOG_WSERV_EVENTS |
|
1231 RDebug::Printf("_WSEVENT_POINTER: 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); |
|
1232 RDebug::Printf("_WSEVENT_POINTER: 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); |
|
1233 #endif |
|
1234 //Prevention of the phone pointer event "dead lock". |
|
1235 TPointerEvent::TType type; |
|
1236 TBool handled = ETrue; |
|
1237 GetPointerEvent(type, aRawEvent, handled); |
|
1238 switch(type) |
|
1239 { |
|
1240 case TPointerEvent::EButton1Down: |
|
1241 case TPointerEvent::EButton2Down: |
|
1242 case TPointerEvent::EButton3Down: |
|
1243 TWsPointer::iPointers[aRawEvent.PointerNumber()].iState = TWsPointer::EPointerStateDown; |
|
1244 break; |
|
1245 case TPointerEvent::EButton1Up: |
|
1246 case TPointerEvent::EButton2Up: |
|
1247 case TPointerEvent::EButton3Up: |
|
1248 TWsPointer::iPointers[aRawEvent.PointerNumber()].iState = TWsPointer::EPointerStateUp; |
|
1249 break; |
|
1250 case TPointerEvent::EOutOfRange: |
|
1251 TWsPointer::iPointers[aRawEvent.PointerNumber()].iState = TWsPointer::EPointerStateOutOfRange; |
|
1252 break; |
|
1253 default: |
|
1254 break; |
|
1255 } |
1201 } |
1256 } |
1202 return; |
1257 return; |
1203 } |
1258 } |
|
1259 |
1204 switch(eventType) |
1260 switch(eventType) |
1205 { |
1261 { |
1206 case TRawEvent::ERedraw: |
1262 case TRawEvent::ERedraw: |
1207 CWsTop::RedrawScreens(); |
1263 CWsTop::RedrawScreens(); |
1208 break; |
1264 break; |
1246 CWsTop::WindowServer()->AnimationScheduler()->OnActive(); |
1302 CWsTop::WindowServer()->AnimationScheduler()->OnActive(); |
1247 #endif |
1303 #endif |
1248 break; |
1304 break; |
1249 case TRawEvent::EKeyDown: |
1305 case TRawEvent::EKeyDown: |
1250 { |
1306 { |
|
1307 #ifdef LOG_WSERV_EVENTS |
|
1308 RDebug::Printf("_WSEVENT_KEY: TRawEvent::EKeyDown"); |
|
1309 #endif |
1251 _LIT(KWSERVDebugLogKeyDownArrival,"Key down arrives %d"); |
1310 _LIT(KWSERVDebugLogKeyDownArrival,"Key down arrives %d"); |
1252 CScreen* screen = CWsTop::Screen(); |
1311 CScreen* screen = CWsTop::Screen(); |
1253 WS_ASSERT_ALWAYS(screen, EWsPanicNoScreen); |
1312 WS_ASSERT_ALWAYS(screen, EWsPanicNoScreen); |
1254 if(CDebugBar* dbg = screen->DebugBar()) |
1313 if(CDebugBar* dbg = screen->DebugBar()) |
1255 dbg->OnKeyEvent(); |
1314 dbg->OnKeyEvent(); |
1272 } |
1331 } |
1273 } |
1332 } |
1274 break; |
1333 break; |
1275 case TRawEvent::EKeyUp: |
1334 case TRawEvent::EKeyUp: |
1276 { |
1335 { |
|
1336 #ifdef LOG_WSERV_EVENTS |
|
1337 RDebug::Printf("_WSEVENT_KEY: TRawEvent::EKeyUp"); |
|
1338 #endif |
1277 _LIT(KWSERVDebugLogKeyUpArrival,"Key up arrives %d"); |
1339 _LIT(KWSERVDebugLogKeyUpArrival,"Key up arrives %d"); |
1278 CScreen* screen = CWsTop::Screen(); |
1340 CScreen* screen = CWsTop::Screen(); |
1279 WS_ASSERT_ALWAYS(screen, EWsPanicNoScreen); |
1341 WS_ASSERT_ALWAYS(screen, EWsPanicNoScreen); |
1280 if(CDebugBar* dbg = screen->DebugBar()) |
1342 if(CDebugBar* dbg = screen->DebugBar()) |
1281 dbg->OnKeyEvent(); |
1343 dbg->OnKeyEvent(); |
1332 } |
1394 } |
1333 break; |
1395 break; |
1334 default: |
1396 default: |
1335 break; |
1397 break; |
1336 } |
1398 } |
|
1399 #ifdef LOG_WSERV_EVENTS |
|
1400 RDebug::Printf("_WSEVENT_POINTER: TWindowServerEvent::ProcessRawEvent 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); |
|
1401 RDebug::Printf("_WSEVENT_POINTER: TWindowServerEvent::ProcessRawEvent 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); |
|
1402 #endif |
1337 } |
1403 } |
1338 |
1404 |
1339 void TWindowServerEvent::ProcessKeyEvent(const TKeyEvent &aKeyEvent,TInt aRepeats) |
1405 void TWindowServerEvent::ProcessKeyEvent(const TKeyEvent &aKeyEvent,TInt aRepeats) |
1340 { |
1406 { |
|
1407 #ifdef LOG_WSERV_EVENTS |
|
1408 RDebug::Printf("_WSEVENT_KEY: TWindowServerEvent::ProcessKeyEvent, key code: %d, repeat: %d", aKeyEvent.iCode, aRepeats); |
|
1409 #endif |
|
1410 TKeyData keyData; |
|
1411 keyData.iModifiers=aKeyEvent.iModifiers; |
|
1412 keyData.iApp=0; |
|
1413 keyData.iHandle=0; |
|
1414 keyData.iIsCaptureKey=EFalse; |
|
1415 keyData.iKeyCode=aKeyEvent.iCode; |
1341 if (CKeyboardRepeat::IsAreadyActive()) |
1416 if (CKeyboardRepeat::IsAreadyActive()) |
1342 { |
1417 { |
1343 CKeyboardRepeat::CancelRepeat(NULL); |
1418 CKeyboardRepeat::CancelRepeat(NULL); |
1344 } |
1419 } |
1345 ProcessKeyPress(aKeyEvent, aRepeats == 0, aRepeats); |
1420 ProcessKeyPress(aKeyEvent, aRepeats == 0, aRepeats); |
1598 UserSvr::RequestEventCancel(); |
1673 UserSvr::RequestEventCancel(); |
1599 } |
1674 } |
1600 |
1675 |
1601 void CRawEventReceiver::RunL() |
1676 void CRawEventReceiver::RunL() |
1602 { |
1677 { |
|
1678 #ifdef LOG_WSERV_EVENTS |
|
1679 RDebug::Printf("_WSEVENT_KEY: CRawEventReceiver::RunL Entry point for event receiver"); |
|
1680 #endif |
1603 //__PROFILE_START(11); |
1681 //__PROFILE_START(11); |
1604 if (TWsPointer::PreProcessDriverEvent(iEventBuf.Event() |
1682 if (TWsPointer::PreProcessDriverEvent(iEventBuf.Event() |
1605 #if defined(__WINS__) |
1683 #if defined(__WINS__) |
1606 ,ETrue |
1684 ,ETrue |
1607 #endif |
1685 #endif |