Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37747584
en ru br
Репозитории ALT
S:4.8.7-alt25
5.1: 4.6.3-alt1.M51.1
4.1: 4.4.3-alt1.M41.1
4.0: 4.3.4-alt5.M40.1
3.0: 4.0.1-alt1
+updates:4.0.1-alt2
+backports:4.2.3-alt7.1.M30
www.altlinux.org/Changes

Группа :: Система/Библиотеки
Пакет: qt4

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: 0195-compositing-properties.diff
Скачать


qt-bugs@ issue : none
bugs.kde.org number : none
applied: no
author: Lubos Lunak <l.lunak@kde.org>
This patch makes override-redirect windows (popup menu, dropdown menu,
tooltip, combobox, etc.) also have more window properties like WM_CLASS,
so they can be used when compositing.
--- src/gui/kernel/qwidget_x11.cpp.sav	2007-08-23 21:32:15.000000000 +0200
+++ src/gui/kernel/qwidget_x11.cpp	2007-10-01 23:14:53.000000000 +0200
@@ -616,7 +616,11 @@ void QWidgetPrivate::create_sys(WId wind
         wsa.save_under = True;
         XChangeWindowAttributes(dpy, id, CWOverrideRedirect | CWSaveUnder,
                                 &wsa);
-        q->x11SetWindowType();
+        XClassHint class_hint;
+        QByteArray appName = qAppName().toLatin1();
+        class_hint.res_name = appName.data(); // application name
+        class_hint.res_class = const_cast<char *>(QX11Info::appClass());   // application class
+        XSetClassHint(dpy, id, &class_hint);
     } else if (topLevel && !desktop) {        // top-level widget
         if (!X11->wm_client_leader)
             create_wm_client_leader();
@@ -661,29 +665,34 @@ void QWidgetPrivate::create_sys(WId wind
         // set mwm hints
         SetMWMHints(dpy, id, mwmhints);
 
-        q->x11SetWindowType(); // set _NET_WM_WINDOW_TYPE
-
-        // set _NET_WM_PID
-        long curr_pid = getpid();
-        XChangeProperty(dpy, id, ATOM(_NET_WM_PID), XA_CARDINAL, 32, PropModeReplace,
-                        (unsigned char *) &curr_pid, 1);
-
         // when we create a toplevel widget, the frame strut should be dirty
         data.fstrut_dirty = 1;
 
-        // declare the widget's object name as window role if not set
-        setWindowRole( !q->windowRole().isEmpty() ? q->windowRole().toUtf8() : q->objectName().toUtf8());
-
-        // set client leader property
-        XChangeProperty(dpy, id, ATOM(WM_CLIENT_LEADER),
-                        XA_WINDOW, 32, PropModeReplace,
-                        (unsigned char *)&X11->wm_client_leader, 1);
     } else {
         // non-toplevel widgets don't have a frame, so no need to
         // update the strut
         data.fstrut_dirty = 0;
     }
 
+    if (initializeWindow && (popup || (topLevel && !desktop))) { // properties set on all toplevel windows
+        q->x11SetWindowType(); // set _NET_WM_WINDOW_TYPE
+
+        // set _NET_WM_PID
+        long curr_pid = getpid(); 
+        XChangeProperty(dpy, id, ATOM(_NET_WM_PID), XA_CARDINAL, 32, PropModeReplace, 
+                        (unsigned char *) &curr_pid, 1); 
+
+        // declare the widget's object name as window role if not set
+        setWindowRole( !q->windowRole().isEmpty() ? q->windowRole().toUtf8() : q->objectName().toUtf8()); 
+
+        // set client leader property
+        if (!X11->wm_client_leader)
+            create_wm_client_leader();
+        XChangeProperty(dpy, id, ATOM(WM_CLIENT_LEADER), 
+                        XA_WINDOW, 32, PropModeReplace, 
+                        (unsigned char *)&X11->wm_client_leader, 1); 
+    }
+
     if (initializeWindow) {
         // don't erase when resizing
         wsa.bit_gravity = QApplication::isRightToLeft() ? NorthEastGravity : NorthWestGravity;
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin