Buttons in Qt applications not clickable when run under gnome-shell (#742658, QTBUG-21900)
This commit is contained in:
parent
d1296a4d3a
commit
95b646ad34
101
qt-everywhere-opensource-src-4.8.0-QTBUG-21900.patch
Normal file
101
qt-everywhere-opensource-src-4.8.0-QTBUG-21900.patch
Normal file
@ -0,0 +1,101 @@
|
||||
From a91e9dd202640598d8dec091c67ec94536390e7f Mon Sep 17 00:00:00 2001
|
||||
From: "Owen W. Taylor" <otaylor@fishsoup.net>
|
||||
Date: Mon, 17 Oct 2011 17:27:43 -0400
|
||||
Subject: [PATCH] Fix logic for figuring out what ConfigureNotify positions
|
||||
can be trusted
|
||||
|
||||
When reading ahead in the queue for ConfigureNotify events, it's necessary
|
||||
to look for intermediate ReparentNotify events as well, since they will
|
||||
determine whether the position in the event can be trusted or not.
|
||||
---
|
||||
src/gui/kernel/qapplication_x11.cpp | 47 ++++++++++++++++++++++++++++++----
|
||||
1 files changed, 41 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/gui/kernel/qapplication_x11.cpp b/src/gui/kernel/qapplication_x11.cpp
|
||||
index 408e9ac..3a1d3eb 100644
|
||||
--- a/src/gui/kernel/qapplication_x11.cpp
|
||||
+++ b/src/gui/kernel/qapplication_x11.cpp
|
||||
@@ -816,6 +816,27 @@ static Bool qt_sync_request_scanner(Display*, XEvent *event, XPointer arg)
|
||||
#endif
|
||||
#endif // QT_NO_XSYNC
|
||||
|
||||
+struct qt_configure_event_data
|
||||
+{
|
||||
+ WId window;
|
||||
+ WId parent;
|
||||
+};
|
||||
+
|
||||
+static Bool qt_configure_event_scanner(Display*, XEvent *event, XPointer arg)
|
||||
+{
|
||||
+ qt_configure_event_data *data =
|
||||
+ reinterpret_cast<qt_configure_event_data*>(arg);
|
||||
+ if (event->type == ConfigureNotify &&
|
||||
+ event->xconfigure.window == data->window) {
|
||||
+ return true;
|
||||
+ } else if (event->type == ReparentNotify &&
|
||||
+ event->xreparent.window == data->window) {
|
||||
+ data->parent = event->xreparent.parent;
|
||||
+ }
|
||||
+
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
static void qt_x11_create_intern_atoms()
|
||||
{
|
||||
const char *names[QX11Data::NAtoms];
|
||||
@@ -5273,8 +5294,11 @@ bool QETWidget::translateConfigEvent(const XEvent *event)
|
||||
if (d->extra->compress_events) {
|
||||
// ConfigureNotify compression for faster opaque resizing
|
||||
XEvent otherEvent;
|
||||
- while (XCheckTypedWindowEvent(X11->display, internalWinId(), ConfigureNotify,
|
||||
- &otherEvent)) {
|
||||
+ qt_configure_event_data configureData;
|
||||
+ configureData.window = internalWinId();
|
||||
+ configureData.parent = d->topData()->parentWinId;
|
||||
+ while (XCheckIfEvent(X11->display, &otherEvent,
|
||||
+ &qt_configure_event_scanner, (XPointer)&configureData)) {
|
||||
if (qt_x11EventFilter(&otherEvent))
|
||||
continue;
|
||||
|
||||
@@ -5287,13 +5311,19 @@ bool QETWidget::translateConfigEvent(const XEvent *event)
|
||||
newSize.setWidth(otherEvent.xconfigure.width);
|
||||
newSize.setHeight(otherEvent.xconfigure.height);
|
||||
|
||||
+ trust = isVisible()
|
||||
+ && (configureData.parent == XNone ||
|
||||
+ configureData.parent == QX11Info::appRootWindow());
|
||||
+
|
||||
if (otherEvent.xconfigure.send_event || trust) {
|
||||
newCPos.rx() = otherEvent.xconfigure.x +
|
||||
otherEvent.xconfigure.border_width;
|
||||
newCPos.ry() = otherEvent.xconfigure.y +
|
||||
otherEvent.xconfigure.border_width;
|
||||
isCPos = true;
|
||||
- }
|
||||
+ } else {
|
||||
+ isCPos = false;
|
||||
+ }
|
||||
}
|
||||
#ifndef QT_NO_XSYNC
|
||||
qt_sync_request_event_data sync_event;
|
||||
@@ -5306,9 +5336,14 @@ bool QETWidget::translateConfigEvent(const XEvent *event)
|
||||
}
|
||||
|
||||
if (!isCPos) {
|
||||
- // we didn't get an updated position of the toplevel.
|
||||
- // either we haven't moved or there is a bug in the window manager.
|
||||
- // anyway, let's query the position to be certain.
|
||||
+ // If the last configure event didn't have a trustable position,
|
||||
+ // it's necessary to query, see ICCCM 4.24:
|
||||
+ //
|
||||
+ // Any real ConfigureNotify event on a top-level window implies
|
||||
+ // that the window’s position on the root may have changed, even
|
||||
+ // though the event reports that the window’s position in its
|
||||
+ // parent is unchanged because the window may have been reparented.
|
||||
+
|
||||
int x, y;
|
||||
Window child;
|
||||
XTranslateCoordinates(X11->display, internalWinId(),
|
||||
--
|
||||
1.7.6.4
|
||||
|
9
qt.spec
9
qt.spec
@ -11,7 +11,7 @@ Summary: Qt toolkit
|
||||
Name: qt
|
||||
Epoch: 1
|
||||
Version: 4.8.0
|
||||
Release: 0.16.rc1%{?dist}
|
||||
Release: 0.17.rc1%{?dist}
|
||||
|
||||
# See LGPL_EXCEPTIONS.txt, LICENSE.GPL3, respectively, for exception details
|
||||
License: (LGPLv2 with exceptions or GPLv3 with exceptions) and ASL 2.0 and BSD and FTL and MIT
|
||||
@ -82,6 +82,9 @@ Patch69: qt-everywhere-opensource-src-4.8.0-QTBUG-22037.patch
|
||||
# Qt doesn't close orphaned file descriptors after printing (#746601, QTBUG-14724)
|
||||
Patch70: qt-everywhere-opensource-src-4.8.0-QTBUG-14724.patch
|
||||
|
||||
# Buttons in Qt applications not clickable when run under gnome-shell (#742658, QTBUG-21900)
|
||||
Patch71: qt-everywhere-opensource-src-4.8.0-QTBUG-21900.patch
|
||||
|
||||
# upstream patches
|
||||
|
||||
# security patches
|
||||
@ -400,6 +403,7 @@ pushd src/3rdparty/webkit
|
||||
popd
|
||||
%patch69 -p1 -b .QTBUG-22037
|
||||
%patch70 -p1 -b .QTBUG-14724
|
||||
%patch71 -p1 -b .QTBUG-21900
|
||||
|
||||
# upstream patches
|
||||
|
||||
@ -1032,6 +1036,9 @@ fi
|
||||
|
||||
|
||||
%changelog
|
||||
* Tue Oct 18 2011 Rex Dieter <rdieter@fedoraproject.org> 4.8.0-0.17.rc1
|
||||
- Buttons in Qt applications not clickable when run under gnome-shell (#742658, QTBUG-21900)
|
||||
|
||||
* Mon Oct 17 2011 Rex Dieter <rdieter@fedoraproject.org> 4.8.0-0.16.rc1
|
||||
- Qt doesn't close orphaned file descriptors after printing (#746601, QTBUG-14724)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user