windowing/windowserver/nga/SERVER/EVQUEUE.CPP
branchRCL_3
changeset 164 25ffed67c7ef
parent 163 bbf46f59e123
equal deleted inserted replaced
163:bbf46f59e123 164:25ffed67c7ef
    20 #include "server.h"
    20 #include "server.h"
    21 #include "wstop.h"
    21 #include "wstop.h"
    22 #include "panics.h"
    22 #include "panics.h"
    23 #include "pointer.h"
    23 #include "pointer.h"
    24 #include "advancedpointereventhelper.h"
    24 #include "advancedpointereventhelper.h"
    25 #include "debughelper.h"
       
    26 
    25 
    27 GLREF_D CDebugLogBase* wsDebugLog;
    26 GLREF_D CDebugLogBase* wsDebugLog;
    28 
    27 
    29 #if defined(_DEBUG)
    28 #if defined(_DEBUG)
    30 #define __CHECK_QUEUE() CheckQueue()
    29 #define __CHECK_QUEUE() CheckQueue()
    99 */
    98 */
   100 void CEventBase::EventReadyCheck()
    99 void CEventBase::EventReadyCheck()
   101 	{
   100 	{
   102 	if ((iEventSignalledState&EEventFlagSignalled && !(iEventSignalledState&EEventFlagCancelled)) || !iEventMsg.IsNull())
   101 	if ((iEventSignalledState&EEventFlagSignalled && !(iEventSignalledState&EEventFlagCancelled)) || !iEventMsg.IsNull())
   103 		{
   102 		{
   104 #ifdef LOG_WSERV_EVENTS
       
   105 		RDebug::Printf("_WSEVENT: CEventBase::EventReadyCheck, Event is not ready");
       
   106 #endif
       
   107 		iWsOwner->PPanic(EWservPanicReadOutstanding);
   103 		iWsOwner->PPanic(EWservPanicReadOutstanding);
   108 		}
   104 		}
   109 	}
   105 	}
   110 
   106 
   111 void CEventBase::EventReady(const RMessagePtr2& aEventMsg)
   107 void CEventBase::EventReady(const RMessagePtr2& aEventMsg)
   648 			case EEventKey:
   644 			case EEventKey:
   649 			case EEventPointerEnter:
   645 			case EEventPointerEnter:
   650 			case EEventPointerExit:
   646 			case EEventPointerExit:
   651 			case EEventDragDrop:
   647 			case EEventDragDrop:
   652 breakLoopAndRemoveEvent:
   648 breakLoopAndRemoveEvent:
   653 #ifdef LOG_WSERV_EVENTS
       
   654 				RDebug::Print(_L("_WSEVENT: CEventQueue::Purge(), The event to be purged is %S"), &WsEventName(*eventToPurge));
       
   655 #endif
       
   656 				RemoveEvent(indexToPurge);
   649 				RemoveEvent(indexToPurge);
   657 				return;
   650 				return;
   658 			case EEventKeyUp:
   651 			case EEventKeyUp:
   659 				if (iQueueList.First()!=this)
   652 				if (iQueueList.First()!=this)
   660 					goto breakLoopAndRemoveEvent;
   653 					goto breakLoopAndRemoveEvent;
   955 //
   948 //
   956 	{
   949 	{
   957 	TBool ret=ETrue;
   950 	TBool ret=ETrue;
   958 	Wait();
   951 	Wait();
   959 	if (iCount==iQueueSize && !Expand(aPriority))
   952 	if (iCount==iQueueSize && !Expand(aPriority))
   960 		{
       
   961 		ret=EFalse;
   953 		ret=EFalse;
   962 #ifdef LOG_WSERV_EVENTS
       
   963 		RDebug::Printf("WSEVENT: CEventQueue::QueueEvent(): 0x%X:  Queue Full!!!!!, iCount = %d, iQueueSize = %d", this, iCount, iQueueSize);
       
   964 		RDebug::Print(_L("WSEVENT: CEventQueue::QueueEvent(): 0x%X:  Queue Full!!!!! TWsEvent.Type() = %S"), this, &WsEventName(event));
       
   965 #endif
       
   966 		}
       
   967 	else
   954 	else
   968 		{
   955 		{
   969 		if (!iEventMsg.IsNull())
   956 		if (!iEventMsg.IsNull())
   970 			{
   957 			{
   971 			SignalEvent();
   958 			SignalEvent();
   972 			}
   959 			}
   973 #ifdef LOG_WSERV_EVENTS
       
   974 		RDebug::Printf("_WSEVENT: CEventQueue::QueueEvent, Right before adding the event");
       
   975 #endif
       
   976 		*EventPtr(iCount++)=event;
   960 		*EventPtr(iCount++)=event;
   977 #ifdef LOG_WSERV_EVENTS
       
   978 		RDebug::Print(_L("_WSEVENT: CEventQueue::QueueEvent, Event %S successfully queued"), &WsEventName(event));
       
   979 #endif
       
   980 		}
   961 		}
   981 	Signal();
   962 	Signal();
   982 	return(ret);
   963 	return(ret);
   983 	}
   964 	}
   984 
   965 
  1074 	{
  1055 	{
  1075 	if (iCount>0)
  1056 	if (iCount>0)
  1076 		{
  1057 		{
  1077 		WS_ASSERT_DEBUG((iEventPtr+iHead)->Type()!=EEventMarkInvalid, EWsPanicCheckEventQueue);
  1058 		WS_ASSERT_DEBUG((iEventPtr+iHead)->Type()!=EEventMarkInvalid, EWsPanicCheckEventQueue);
  1078 		CEventBase::GetData(iEventPtr+iHead,sizeof(*iEventPtr));
  1059 		CEventBase::GetData(iEventPtr+iHead,sizeof(*iEventPtr));
  1079 #ifdef LOG_WSERV_EVENTS
       
  1080 		RDebug::Printf("_WSEVENT: CEventQueue::GetData(), TWsEvent.Type() = %d", (iEventPtr+iHead)->Type());
       
  1081 #endif
       
  1082 		__ZAP_EVENT(iEventPtr+iHead);
  1060 		__ZAP_EVENT(iEventPtr+iHead);
  1083 		iHead=(iHead+1)%iQueueSize;
  1061 		iHead=(iHead+1)%iQueueSize;
  1084 		iCount--;
  1062 		iCount--;
  1085 		}
  1063 		}
  1086 	else
  1064 	else
  1103 void CEventQueue::RemoveEvent(TInt index)
  1081 void CEventQueue::RemoveEvent(TInt index)
  1104 //
  1082 //
  1105 // Remove event 'index' in the queue, this event MUST exist in the queue
  1083 // Remove event 'index' in the queue, this event MUST exist in the queue
  1106 //
  1084 //
  1107 	{
  1085 	{
  1108 #ifdef LOG_WSERV_EVENTS
       
  1109 	RDebug::Printf("_WSEVENT: CEventQueue::RemoveEvent(index), Remove event index %d in the queue", index);
       
  1110 #endif
       
  1111 	WS_ASSERT_DEBUG(index < iCount, EWsPanicCheckEventQueue);
  1086 	WS_ASSERT_DEBUG(index < iCount, EWsPanicCheckEventQueue);
  1112 	RemoveEvent(EventPtr(index));
  1087 	RemoveEvent(EventPtr(index));
  1113 	}
  1088 	}
  1114 
  1089 
  1115 void CEventQueue::RemoveEvent(TWsEvent* aEvToRemove)
  1090 void CEventQueue::RemoveEvent(TWsEvent* aEvToRemove)
  1116 //
  1091 //
  1117 // Remove event in the queue, this event MUST exist in the queue
  1092 // Remove event in the queue, this event MUST exist in the queue
  1118 //
  1093 //
  1119 	{
  1094 	{
  1120 #ifdef LOG_WSERV_EVENTS
       
  1121 	RDebug::Print(_L("_WSEVENT: CEventQueue::RemoveEvent(aEvToRemove), Remove event %S in the queue"), &WsEventName(*aEvToRemove));
       
  1122 #endif
       
  1123 	iCount--;
  1095 	iCount--;
  1124 	TWsEvent* last = EventPtr(iCount);
  1096 	TWsEvent* last = EventPtr(iCount);
  1125 	TWsEvent* prev;
  1097 	TWsEvent* prev;
  1126 	while(aEvToRemove!=last)
  1098 	while(aEvToRemove!=last)
  1127 		{
  1099 		{