bool QDeclarativeTester::eventFilter(QObject *o, QEvent *e) { if (!filterEvents) return false; Destination destination; if (o == m_view) { destination = View; } else if (o == m_view->viewport()) { destination = ViewPort; } else { return false; } switch (e->type()) { case QEvent::KeyPress: case QEvent::KeyRelease: addKeyEvent(destination, (QKeyEvent *)e); return true; case QEvent::MouseButtonPress: case QEvent::MouseButtonRelease: case QEvent::MouseMove: case QEvent::MouseButtonDblClick: addMouseEvent(destination, (QMouseEvent *)e); return true; default: break; } return false; }
static int dequeueKeyEvent (unsigned char *set, unsigned char *key, int *press) { Queue *queue = getKeyEventQueue(0); if (keyReleaseEvent) { if (afterTimePeriod(&keyReleasePeriod, NULL)) { if (!addKeyEvent(keyReleaseEvent)) return 0; keyReleaseEvent = NULL; } } if (queue) { KeyEvent *event; while ((event = dequeueItem(queue))) { #ifdef ENABLE_API if (apiStarted) { if ((api_handleKeyEvent(event->set, event->key, event->press)) == EOF) { deallocateKeyEvent(event); continue; } } #endif /* ENABLE_API */ *set = event->set; *key = event->key; *press = event->press; deallocateKeyEvent(event); return 1; } } return 0; }
int enqueueKeyEvent (unsigned char set, unsigned char key, int press) { if (keyReleaseEvent) { if (press && (set == keyReleaseEvent->set) && (key == keyReleaseEvent->key)) { if (!afterTimePeriod(&keyReleasePeriod, NULL)) { deallocateKeyEvent(keyReleaseEvent); keyReleaseEvent = NULL; return 1; } } { KeyEvent *event = keyReleaseEvent; keyReleaseEvent = NULL; if (!addKeyEvent(event)) { deallocateKeyEvent(event); return 0; } } } { KeyEvent *event; if ((event = malloc(sizeof(*event)))) { event->set = set; event->key = key; event->press = press; if (keyReleaseTimeout && !press) { keyReleaseEvent = event; startTimePeriod(&keyReleasePeriod, keyReleaseTimeout); return 1; } if (addKeyEvent(event)) return 1; deallocateKeyEvent(event); } else { logMallocError(); } } return 0; }