Репозитории 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 |
Группа :: Система/Библиотеки
Пакет: 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;