windowing/windowserver/nga/SERVER/EVENT.CPP
changeset 136 62bb7c97884c
parent 121 d72fc2aace31
equal deleted inserted replaced
121:d72fc2aace31 136:62bb7c97884c
    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