OSDN Git Service

add _NET_SYSTEM_TRAY_OPCODE and MANAGER to pre-defined X11 atoms table
authorIvailo Monev <xakepa10@gmail.com>
Sun, 9 Aug 2020 14:07:02 +0000 (17:07 +0300)
committerIvailo Monev <xakepa10@gmail.com>
Sun, 9 Aug 2020 14:07:02 +0000 (17:07 +0300)
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
src/gui/kernel/qapplication_x11.cpp
src/gui/kernel/qt_x11_p.h
src/gui/util/qsystemtrayicon_x11.cpp

index 9af0882..eb0c1ea 100644 (file)
@@ -209,6 +209,8 @@ static const char* X11AtomsTbl[QX11Data::NPredefinedAtoms] = {
     "_NET_WM_CM_S0\0",
 
     "_NET_SYSTEM_TRAY_VISUAL\0",
+    "_NET_SYSTEM_TRAY_OPCODE\0",
+    "MANAGER\0",
 
     "_NET_ACTIVE_WINDOW\0",
 
index 15999aa..7fc6537 100644 (file)
@@ -388,6 +388,8 @@ struct QX11Data
         _NET_WM_CM_S0,
 
         _NET_SYSTEM_TRAY_VISUAL,
+        _NET_SYSTEM_TRAY_OPCODE,
+        MANAGER,
 
         _NET_ACTIVE_WINDOW,
 
index 9baf6e0..05ece57 100644 (file)
@@ -132,9 +132,8 @@ bool QSystemTrayIconSys::sysTrayTracker(void *message, long *result)
         }
         retval = true;
     } else if (ev->type == ClientMessage && sysTrayWindow == XNone) {
-        static Atom manager_atom = XInternAtom(display, "MANAGER", False);
         XClientMessageEvent *cm = (XClientMessageEvent *)message;
-        if ((cm->message_type == manager_atom) && ((Atom)cm->data.l[1] == sysTraySelection)) {
+        if (cm->message_type == ATOM(MANAGER) && (Atom)cm->data.l[1] == sysTraySelection) {
             sysTrayWindow = cm->data.l[2];
             memset(&sysTrayVisual, 0, sizeof(sysTrayVisual));
             XSelectInput(display, sysTrayWindow, StructureNotifyMask);
@@ -231,13 +230,12 @@ void QSystemTrayIconSys::addToTray()
     }
 
     // GNOME, NET WM Specification
-    static Atom netwm_tray_atom = XInternAtom(display, "_NET_SYSTEM_TRAY_OPCODE", False);
     long l[5] = { CurrentTime, SYSTEM_TRAY_REQUEST_DOCK, static_cast<long>(winId()), 0, 0 };
     XEvent ev;
     memset(&ev, 0, sizeof(ev));
     ev.xclient.type = ClientMessage;
     ev.xclient.window = sysTrayWindow;
-    ev.xclient.message_type = netwm_tray_atom;
+    ev.xclient.message_type = ATOM(_NET_SYSTEM_TRAY_OPCODE);
     ev.xclient.format = 32;
     memcpy((char *)&ev.xclient.data, (const char *) l, sizeof(l));
     XSendEvent(display, sysTrayWindow, False, 0, &ev);