Репозитории 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
Патч: 0180-window-role.diff
Скачать
Скачать
qt-bugs@ issue : 167704
Trolltech task ID : 168283 (status: "fixed" for Qt 4.4.0, but effectively refused)
bugs.kde.org number : none
applied: no
author: Lubos Lunak <l.lunak@kde.org>
NOTE: It is suggested to apply patch #0209 as well when this patch is used.
This patch uses object name as a fallback for window role if no window role
is set explicitly using setWindowRole(). Since Qt3 always used the object
name as the window role and most Qt3/KDE3 code is ported to call setObjectName(),
this makes the window role set in many cases (which KWin uses for window identifying).
--- src/corelib/kernel/qobject.cpp.sav 2008-02-22 09:03:40.000000000 +0100
+++ src/corelib/kernel/qobject.cpp 2008-02-23 16:15:51.000000000 +0100
@@ -1016,9 +1016,18 @@ void QObject::setObjectName(const QStrin
{
Q_D(QObject);
d->objectName = name;
+#if defined(Q_WS_X11)
+ d->checkWindowRole();
+#endif
}
+#if defined(Q_WS_X11)
+void QObjectPrivate::checkWindowRole()
+{
+}
+#endif
+
#ifdef QT3_SUPPORT
/*! \internal
QObject::child is compat but needs to call itself recursively,
--- src/corelib/kernel/qobject_p.h.sav 2008-02-22 09:23:44.000000000 +0100
+++ src/corelib/kernel/qobject_p.h 2008-02-23 16:16:46.000000000 +0100
@@ -148,6 +148,9 @@ public:
mutable quint32 connectedSignals;
QString objectName;
+#if defined(Q_WS_X11)
+ virtual void checkWindowRole();
+#endif
// Note: you must hold the signalSlotLock() before accessing the lists below or calling the functions
struct Connection
--- src/gui/kernel/qwidget_p.h.sav 2008-02-22 09:04:04.000000000 +0100
+++ src/gui/kernel/qwidget_p.h 2008-02-23 16:17:07.000000000 +0100
@@ -324,6 +324,7 @@ public:
#if defined(Q_WS_X11)
void setWindowRole();
+ virtual void checkWindowRole();
void sendStartupMessage(const char *message) const;
void setNetWmWindowTypes();
#endif
--- src/gui/kernel/qwidget_x11.cpp.sav 2008-02-23 15:28:47.000000000 +0100
+++ src/gui/kernel/qwidget_x11.cpp 2008-02-23 16:31:47.000000000 +0100
@@ -710,13 +710,17 @@ void QWidgetPrivate::create_sys(WId wind
// declare the widget's window role
+ QByteArray windowRole;
if (QTLWExtra *topData = maybeTopData()) {
- if (!topData->role.isEmpty()) {
- QByteArray windowRole = topData->role.toUtf8();
- XChangeProperty(dpy, id,
- ATOM(WM_WINDOW_ROLE), XA_STRING, 8, PropModeReplace,
- (unsigned char *)windowRole.constData(), windowRole.length());
- }
+ if (!topData->role.isEmpty())
+ windowRole = topData->role.toUtf8();
+ }
+ if (windowRole.isEmpty()) // use object name as a fallback
+ windowRole = objectName.toUtf8();
+ if (!windowRole.isEmpty()) {
+ XChangeProperty(dpy, id,
+ ATOM(WM_WINDOW_ROLE), XA_STRING, 8, PropModeReplace,
+ (unsigned char *)windowRole.constData(), windowRole.length());
}
// set client leader property
@@ -2852,6 +2856,17 @@ void QWidgetPrivate::setWindowRole()
(unsigned char *)windowRole.constData(), windowRole.length());
}
+void QWidgetPrivate::checkWindowRole()
+{
+ Q_Q(QWidget);
+ if( !q->windowRole().isEmpty() || !q->internalWinId())
+ return;
+ QByteArray windowRole = objectName.toUtf8(); // use as a fallback
+ XChangeProperty(X11->display, q->internalWinId(),
+ ATOM(WM_WINDOW_ROLE), XA_STRING, 8, PropModeReplace,
+ (unsigned char *)windowRole.constData(), windowRole.length());
+}
+
Q_GLOBAL_STATIC(QX11PaintEngine, qt_widget_paintengine)
QPaintEngine *QWidget::paintEngine() const
{