LRESULT CALLBACK FilterProc( int nCode, WPARAM wParam, LPARAM lParam ) { if ( qApp ) { qApp->sendPostedEvents(); qApp->eventLoop()->activateSocketNotifiers(); qWinProcessConfigRequests(); } return CallNextHookEx( hhook, nCode, wParam, lParam ); }
bool QEventDispatcherGix::processEvents(QEventLoop::ProcessEventsFlags flags) { Q_D(QEventDispatcherGix); int rv = 0; d->interrupt = false; QApplication::sendPostedEvents(); int nevents = 0; do { while (!d->interrupt) { gi_msg_t event; if (!(flags & QEventLoop::ExcludeUserInputEvents) && !d->queuedUserInputEvents.isEmpty()) { // process a pending user input event event = d->queuedUserInputEvents.takeFirst(); } else if (gi_peek_message(&event) > 0) { // process events from the X server gi_next_message( &event); if (flags & QEventLoop::ExcludeUserInputEvents) { // queue user input events switch (event.type) { case GI_MSG_BUTTON_DOWN: case GI_MSG_BUTTON_UP: case GI_MSG_MOUSE_MOVE: case GI_MSG_KEY_DOWN: case GI_MSG_KEY_UP: case GI_MSG_MOUSE_ENTER: case GI_MSG_MOUSE_EXIT: d->queuedUserInputEvents.append(event); continue; case GI_MSG_CLIENT_MSG: d->queuedUserInputEvents.append(event); continue; default: break; } } } else { // no event to process break; } // send through event filter if (filterEvent(&event)) continue; nevents++; rv = qApp->pfProcessEvent(&event); //if (rv == 1) { // return true; } } } while (!d->interrupt && gi_get_event_cached(FALSE) > 0); out: if (!d->interrupt) { //QEventLoop::GixExcludeTimers const uint exclude_all = QEventLoop::ExcludeSocketNotifiers | QEventLoop::WaitForMoreEvents; if (nevents > 0 && ((uint)flags & exclude_all) == exclude_all) { QApplication::sendPostedEvents(); return nevents > 0; } // return true if we handled events, false otherwise return QEventDispatcherUNIX::processEvents(flags) || (nevents > 0); } if (configRequests ) // any pending configs? qWinProcessConfigRequests(); return nevents > 0; }