void LxQtKbIndicator::x11EventFilter(XEvent* event) { XkbEvent* xkbEvent = reinterpret_cast<XkbEvent*>(event); if (xkbEvent->type == mXkbEventBase + XkbEventCode) if (xkbEvent->any.xkb_type == XkbIndicatorStateNotify) emit indicatorsChanged(xkbEvent->indicators.changed, xkbEvent->indicators.state); }
bool RazorKbIndicatorEventFilter::X11_eventFilter(void *message) { XkbEvent* event = static_cast<XkbEvent*>(message); if (event->type == XkbEventBase + XkbEventCode) if (event->any.xkb_type == XkbIndicatorStateNotify) emit indicatorsChanged(event->indicators.changed, event->indicators.state); if (oldEventFilter) return oldEventFilter(message); return false; }
RazorKbIndicator::RazorKbIndicator(const RazorPanelPluginStartInfo *startInfo, QWidget *parent): RazorPanelPlugin(startInfo, parent), content(new QLabel(this)), eventFilter(RazorKbIndicatorEventFilter::instance()) { setObjectName("KbIndicator"); connect(eventFilter, SIGNAL(indicatorsChanged(uint,uint)), this, SLOT(setIndicators(uint,uint))); addWidget(content); settingsChanged(); content->setEnabled(eventFilter->getLockStatus(bit)); }
LxQtKbIndicator::LxQtKbIndicator(const ILxQtPanelPluginStartupInfo &startupInfo): QObject(), ILxQtPanelPlugin(startupInfo), mContent(new QLabel()) { connect(this, SIGNAL(indicatorsChanged(uint,uint)), this, SLOT(setIndicators(uint,uint))); mContent->setAlignment(Qt::AlignCenter); int code; int major = XkbMajorVersion; int minor = XkbMinorVersion; int XkbErrorBase; mDisplay = QX11Info::display(); if (XkbLibraryVersion(&major, &minor)) if (XkbQueryExtension(mDisplay, &code, &mXkbEventBase, &XkbErrorBase, &major, &minor)) if (XkbUseExtension(mDisplay, &major, &minor)) XkbSelectEvents(mDisplay, XkbUseCoreKbd, XkbIndicatorStateNotifyMask, XkbIndicatorStateNotifyMask); QTimer::singleShot(0, this, SLOT(delayedInit())); }