windowing/windowserver/nga/SERVER/EVENT.CPP
branchRCL_3
changeset 18 57c618273d5c
parent 10 0e9202c0340c
child 19 bbf46f59e123
equal deleted inserted replaced
17:e375a7921169 18:57c618273d5c
   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;