void JXApplication::HandleOneEvent() { itsHadBlockingWindowFlag = kJFalse; UpdateCurrentTime(); const JBoolean allowSleep = HandleCustomEvent(); UpdateCurrentTime(); JBoolean hasEvents = kJFalse; JPtrArrayIterator<JXDisplay> iter(itsDisplayList); JXDisplay* display; JIndex displayIndex = 0; while (iter.Next(&display)) { displayIndex++; itsCurrDisplayIndex = displayIndex; // itsCurrDisplayIndex might change during event if (XPending(*display) != 0) { hasEvents = kJTrue; // get the next event XEvent xEvent; XNextEvent(*display, &xEvent); if (xEvent.type != MotionNotify) { itsLastIdleTime = itsCurrentTime; } // dispatch the event display->HandleEvent(xEvent, itsCurrentTime); } else { display->Idle(itsCurrentTime); } } PopAllIdleTaskStack(); PerformTasks(hasEvents, allowSleep); }
void JXApplication::HandleOneEvent() { itsHadBlockingWindowFlag = kJFalse; UpdateCurrentTime(); const JBoolean allowSleep = HandleCustomEvent(); UpdateCurrentTime(); JBoolean hasEvents = kJFalse; JPtrArrayIterator<JXDisplay> iter(itsDisplayList); JXDisplay* display; JIndex displayIndex = 0; while (iter.Next(&display)) { displayIndex++; itsCurrDisplayIndex = displayIndex; // itsCurrDisplayIndex might change during event if (XPending(*display) != 0) { hasEvents = kJTrue; // get the next event XEvent xEvent; XNextEvent(*display, &xEvent); if (xEvent.type != MotionNotify) { itsLastIdleTime = itsCurrentTime; } // dispatch the event display->HandleEvent(xEvent, itsCurrentTime); } else { display->Idle(itsCurrentTime); } } PopAllIdleTaskStack(); // Perform idle tasks when we don't receive any events and // during long intervals of "mouse moved". if (!hasEvents) { PerformPermanentTasks(); PerformIdleTasks(); itsLastIdleTime = itsCurrentTime; PerformUrgentTasks(); if (allowSleep) { JWait(itsMaxSleepTime / 1000.0); } } else if (hasEvents && itsCurrentTime - itsLastIdleTime > itsMaxSleepTime) { PerformPermanentTasks(); PerformIdleTasks(); itsLastIdleTime = itsCurrentTime; PerformUrgentTasks(); } else { PerformPermanentTasks(); PerformUrgentTasks(); } }