bool SearchBar::eventFilter(QObject* object, QEvent* e) { QFocusEvent* focusEvent = 0; // HACK This event comes from the ViewContainer when // updateViewActions is called. ViewContainer can't // check the status of the search box, and so tramples // on the QAction we're managing - that is until the // ambiguous shortcut dialog box pops up, at which point // a focus event is sent to the searchbar and the other // stanza in this method is triggered. // 414 was the time of day when I named the event. bool hack = (object == parent() && e->type() == QEvent::User+414); if (hack && hasFocus()) focusEvent = new QFocusEvent(QEvent::FocusIn); else focusEvent = dynamic_cast<QFocusEvent*>(e); if (focusEvent) { Application* konvApp = Application::instance(); QAction * action = static_cast<QAction*>(konvApp->getMainWindow()->actionCollection()->action("focus_input_box")); if (action->shortcut().matches(QKeySequence(Qt::Key_Escape))) { action->setEnabled(focusEvent->lostFocus()); m_closeShortcut->setEnabled(focusEvent->gotFocus()); } } if (hack) delete focusEvent; return hack; }
void PWidget::eventFocus(QObject *, QEvent *e) { PukeMessage pm; widgetId wI; // debug("PWidget: eventFocus"); QFocusEvent *fe = Q_FOCUS_EVENT(e); wI = widgetIden(); pm.iCommand = - e->type() - 1020; // 1020 offset for events pm.iWinId = wI.iWinId; pm.iArg = 0; pm.cArg = new char[2]; pm.iTextSize = 2*sizeof(char); pm.cArg[0] = fe->gotFocus(); pm.cArg[1] = fe->lostFocus(); emit outputMessage(wI.fd, &pm); delete[] pm.cArg; }