8#include <QtCore/QDebug>
10#include <QtGui/QScreen>
12#include <qpa/qplatformnativeinterface.h>
45 , m_trayAtom(trayAtom)
53 xcb_client_message_event_t trayRequest;
54 trayRequest.response_type = XCB_CLIENT_MESSAGE;
55 trayRequest.format = 32;
56 trayRequest.sequence = 0;
57 trayRequest.window = m_trayWindow;
58 trayRequest.type = m_trayAtom;
59 trayRequest.data.data32[0] = XCB_CURRENT_TIME;
61 trayRequest.data.data32[2] =
window;
62 xcb_send_event(m_connection->
xcb_connection(), 0, m_trayWindow, XCB_EVENT_MASK_NO_EVENT, (
const char *)&trayRequest);
80inline void QXcbSystemTrayTracker::emitSystemTrayWindowChanged()
89 if (
t->data.data32[1] == m_selection)
90 emitSystemTrayWindowChanged();
96 if (
event->window == m_trayWindow) {
98 m_trayWindow = XCB_WINDOW_NONE;
99 emitSystemTrayWindowChanged();
105 xcb_visualid_t visual = netSystemTrayVisual();
106 if (visual == XCB_NONE)
111xcb_visualid_t QXcbSystemTrayTracker::netSystemTrayVisual()
113 if (m_trayWindow == XCB_WINDOW_NONE)
121 tray_atom, XCB_ATOM_VISUALID, 0, 1);
122 if (!systray_atom_reply)
125 xcb_visualid_t systrayVisualId = XCB_NONE;
126 if (systray_atom_reply->value_len > 0 && xcb_get_property_value_length(systray_atom_reply.get()) > 0) {
127 xcb_visualid_t * vids = (uint32_t *)xcb_get_property_value(systray_atom_reply.get());
128 systrayVisualId = vids[0];
131 return systrayVisualId;
136#include "moc_qxcbsystemtraytracker.cpp"
const char * constData() const noexcept
Returns a pointer to the const data stored in the byte array.
static QByteArray number(int, int base=10)
Returns a byte-array representing the whole number n as text.
@ Atom_NET_SYSTEM_TRAY_OPCODE
@ Atom_NET_SYSTEM_TRAY_VISUAL
xcb_connection_t * xcb_connection() const
xcb_atom_t atom(QXcbAtom::Atom qatom) const
xcb_window_t selectionOwner(xcb_atom_t atom) const
QXcbScreen * primaryScreen() const
void addWindowEventListener(xcb_window_t id, QXcbWindowEventListener *eventListener)
void removeWindowEventListener(xcb_window_t id)
xcb_screen_t * screen() const
void systemTrayWindowChanged(QScreen *screen)
static QXcbSystemTrayTracker * create(QXcbConnection *connection)
xcb_visualid_t visualId()
void requestSystemTrayWindowDock(xcb_window_t window) const
void notifyManagerClientMessageEvent(const xcb_client_message_event_t *)
void handleDestroyNotifyEvent(const xcb_destroy_notify_event_t *) override
xcb_window_t trayWindow()
Combined button and popup list for selecting options.
#define QByteArrayLiteral(str)
DBusConnection * connection
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
GLint GLint GLint GLint GLint GLint GLint GLbitfield mask
#define Q_XCB_REPLY_UNCHECKED(call,...)
@ SystemTrayCancelMessage
QItemSelection * selection
[0]