bool LXQtTray::nativeEventFilter(const QByteArray &eventType, void *message, long *) { if (eventType != "xcb_generic_event_t") return false; xcb_generic_event_t* event = static_cast<xcb_generic_event_t *>(message); TrayIcon* icon; int event_type = event->response_type & ~0x80; switch (event_type) { case ClientMessage: clientMessageEvent(event); break; // case ConfigureNotify: // icon = findIcon(event->xconfigure.window); // if (icon) // icon->configureEvent(&(event->xconfigure)); // break; case DestroyNotify: { unsigned long event_window; event_window = reinterpret_cast<xcb_destroy_notify_event_t*>(event)->window; icon = findIcon(event_window); if (icon) { icon->windowDestroyed(event_window); mIcons.removeAll(icon); delete icon; } break; } default: if (event_type == mDamageEvent + XDamageNotify) { xcb_damage_notify_event_t* dmg = reinterpret_cast<xcb_damage_notify_event_t*>(event); icon = findIcon(dmg->drawable); if (icon) icon->update(); } break; } return false; }
void RazorTray::x11EventFilter(XEvent* event) { TrayIcon* icon; switch(event->type) { case ClientMessage: if(event->xany.window == mTrayId) clientMessageEvent(&(event->xclient)); break; // case ConfigureNotify: // icon = findIcon(event->xconfigure.window); // if (icon) // icon->configureEvent(&(event->xconfigure)); // break; case SelectionClear: stopTray(); break; case DestroyNotify: icon = findIcon(event->xany.window); if(icon) { mIcons.removeAll(icon); delete icon; } break; default: if(event->type == mDamageEvent + XDamageNotify) { XDamageNotifyEvent* dmg = reinterpret_cast<XDamageNotifyEvent*>(event); icon = findIcon(dmg->drawable); if(icon) icon->update(); } break; } }