Example #1
0
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;
}