improved filter_event patch (kde#275469)
This commit is contained in:
parent
5d38d7b042
commit
06c0842112
@ -1,15 +1,98 @@
|
|||||||
--- qt-opensource-4.7.4.old/src/gui/kernel/qapplication_x11.cpp 2011-08-23 08:02:27.000000000 -0400
|
--- qt-opensource-4.7.4.old/src/gui/kernel/qapplication_x11.cpp 2011-08-23 08:02:27.000000000 -0400
|
||||||
+++ qt-opensource-4.7.4.new/src/gui/kernel/qapplication_x11.cpp 2011-12-27 07:16:23.631320047 -0500
|
+++ qt-opensource-4.7.4.new/src/gui/kernel/qapplication_x11.cpp 2012-01-07 18:19:21.978248791 -0500
|
||||||
@@ -4190,6 +4190,12 @@ bool QETWidget::translateMouseEvent(cons
|
@@ -4190,7 +4151,12 @@ bool QETWidget::translateMouseEvent(cons
|
||||||
&& (nextEvent.xclient.message_type == ATOM(_QT_SCROLL_DONE) ||
|
&& (nextEvent.xclient.message_type == ATOM(_QT_SCROLL_DONE) ||
|
||||||
(nextEvent.xclient.message_type == ATOM(WM_PROTOCOLS) &&
|
(nextEvent.xclient.message_type == ATOM(WM_PROTOCOLS) &&
|
||||||
(Atom)nextEvent.xclient.data.l[0] == ATOM(_NET_WM_SYNC_REQUEST))))) {
|
(Atom)nextEvent.xclient.data.l[0] == ATOM(_NET_WM_SYNC_REQUEST))))) {
|
||||||
|
- qApp->x11ProcessEvent(&nextEvent);
|
||||||
+ // As we may run through a significant number of a large class of non-MotionNotify
|
+ // As we may run through a significant number of a large class of non-MotionNotify
|
||||||
+ // events here, without returning to the event loop, just before processing nextEvent,
|
+ // events here, without returning to the event loop, first pass nextEvent to
|
||||||
+ // pass it through QAbstractEventDispatcher::filterEvent(). Note that this issue may
|
+ // QAbstractEventDispatcher::filterEvent() to allow applications which override
|
||||||
+ // exist elsewhere, wherever events are compressed in a similar manner.
|
+ // QAbstractEventDispatcher::filterEvent() to handle the event first.
|
||||||
+ if (QAbstractEventDispatcher::instance()->filterEvent(&nextEvent))
|
+ if (!QAbstractEventDispatcher::instance()->filterEvent(&nextEvent))
|
||||||
+ continue;
|
+ qApp->x11ProcessEvent(&nextEvent);
|
||||||
qApp->x11ProcessEvent(&nextEvent);
|
|
||||||
continue;
|
continue;
|
||||||
} else if (nextEvent.type != MotionNotify ||
|
} else if (nextEvent.type != MotionNotify ||
|
||||||
|
nextEvent.xmotion.window != event->xmotion.window ||
|
||||||
|
--- qt-opensource-4.7.4.old/src/gui/kernel/qclipboard_x11.cpp 2011-08-23 08:02:27.000000000 -0400
|
||||||
|
+++ qt-opensource-4.7.4.new/src/gui/kernel/qclipboard_x11.cpp 2012-01-07 18:30:51.266288560 -0500
|
||||||
|
@@ -573,7 +573,11 @@ bool QX11Data::clipboardWaitForEvent(Win
|
||||||
|
|
||||||
|
// process other clipboard events, since someone is probably requesting data from us
|
||||||
|
XEvent e;
|
||||||
|
- if (XCheckIfEvent(X11->display, &e, checkForClipboardEvents, 0))
|
||||||
|
+ // Some applications may override QAbstractEventDispatcher::filterEvent(), so
|
||||||
|
+ // pass event to QAbstractEventDispatcher::filterEvent() before processing in
|
||||||
|
+ // x11ProcessEvent().
|
||||||
|
+ if (XCheckIfEvent(X11->display, &e, checkForClipboardEvents, 0) &&
|
||||||
|
+ !QAbstractEventDispatcher::instance()->filterEvent(&e))
|
||||||
|
qApp->x11ProcessEvent(&e);
|
||||||
|
|
||||||
|
now.start();
|
||||||
|
--- qt-opensource-4.7.4.old/src/gui/kernel/qdnd_x11.cpp 2011-08-23 08:02:27.000000000 -0400
|
||||||
|
+++ qt-opensource-4.7.4.new/src/gui/kernel/qdnd_x11.cpp 2012-01-07 18:28:56.115281917 -0500
|
||||||
|
@@ -42,6 +42,7 @@
|
||||||
|
#include "qplatformdefs.h"
|
||||||
|
|
||||||
|
#include "qapplication.h"
|
||||||
|
+#include "qabstracteventdispatcher.h"
|
||||||
|
|
||||||
|
#ifndef QT_NO_DRAGANDDROP
|
||||||
|
|
||||||
|
@@ -1940,7 +1941,11 @@ Qt::DropAction QDragManager::drag(QDrag
|
||||||
|
timer.start();
|
||||||
|
do {
|
||||||
|
XEvent event;
|
||||||
|
- if (XCheckTypedEvent(X11->display, ClientMessage, &event))
|
||||||
|
+ // Some applications may override QAbstractEventDispatcher::filterEvent(), so
|
||||||
|
+ // pass event to QAbstractEventDispatcher::filterEvent() before processing in
|
||||||
|
+ // x11ProcessEvent().
|
||||||
|
+ if (XCheckTypedEvent(X11->display, ClientMessage, &event) &&
|
||||||
|
+ !QAbstractEventDispatcher::instance()->filterEvent(&event))
|
||||||
|
qApp->x11ProcessEvent(&event);
|
||||||
|
|
||||||
|
// sleep 50 ms, so we don't use up CPU cycles all the time.
|
||||||
|
--- qt-opensource-4.7.4.old/src/gui/kernel/qwidget_x11.cpp 2011-08-23 08:02:27.000000000 -0400
|
||||||
|
+++ qt-opensource-4.7.4.new/src/gui/kernel/qwidget_x11.cpp 2012-01-07 18:29:41.915284562 -0500
|
||||||
|
@@ -44,6 +44,7 @@
|
||||||
|
#include "qdesktopwidget.h"
|
||||||
|
#include "qapplication.h"
|
||||||
|
#include "qapplication_p.h"
|
||||||
|
+#include "qabstracteventdispatcher.h"
|
||||||
|
#include "qnamespace.h"
|
||||||
|
#include "qpainter.h"
|
||||||
|
#include "qbitmap.h"
|
||||||
|
@@ -375,17 +376,22 @@ Q_GUI_EXPORT void qt_x11_wait_for_window
|
||||||
|
do {
|
||||||
|
if (XEventsQueued(X11->display, QueuedAlready)) {
|
||||||
|
XNextEvent(X11->display, &ev);
|
||||||
|
- qApp->x11ProcessEvent(&ev);
|
||||||
|
-
|
||||||
|
- switch (state) {
|
||||||
|
- case Initial:
|
||||||
|
- if (ev.type == MapNotify && ev.xany.window == winid)
|
||||||
|
- state = Mapped;
|
||||||
|
- break;
|
||||||
|
- case Mapped:
|
||||||
|
- if (ev.type == Expose && ev.xany.window == winid)
|
||||||
|
- return;
|
||||||
|
- break;
|
||||||
|
+ // Some applications may override QAbstractEventDispatcher::filterEvent(), so
|
||||||
|
+ // pass event to QAbstractEventDispatcher::filterEvent() before processing in
|
||||||
|
+ // x11ProcessEvent().
|
||||||
|
+ if (!QAbstractEventDispatcher::instance()->filterEvent(&ev)) {
|
||||||
|
+ qApp->x11ProcessEvent(&ev);
|
||||||
|
+
|
||||||
|
+ switch (state) {
|
||||||
|
+ case Initial:
|
||||||
|
+ if (ev.type == MapNotify && ev.xany.window == winid)
|
||||||
|
+ state = Mapped;
|
||||||
|
+ break;
|
||||||
|
+ case Mapped:
|
||||||
|
+ if (ev.type == Expose && ev.xany.window == winid)
|
||||||
|
+ return;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!XEventsQueued(X11->display, QueuedAfterFlush))
|
||||||
|
8
qt.spec
8
qt.spec
@ -18,7 +18,7 @@ Summary: Qt toolkit
|
|||||||
Name: qt
|
Name: qt
|
||||||
Epoch: 1
|
Epoch: 1
|
||||||
Version: 4.7.4
|
Version: 4.7.4
|
||||||
Release: 9%{?dist}
|
Release: 10%{?dist}
|
||||||
|
|
||||||
# See LGPL_EXCEPTIONS.txt, LICENSE.GPL3, respectively, for exception details
|
# 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
|
License: (LGPLv2 with exceptions or GPLv3 with exceptions) and ASL 2.0 and BSD and FTL and MIT
|
||||||
@ -96,6 +96,7 @@ Patch73: qt-everywhere-opensource-src-4.7.4-qml_no_strict_aliasing.patch
|
|||||||
Patch74: qt-everywhere-opensource-src-4.7.4-tds_no_strict_aliasing.patch
|
Patch74: qt-everywhere-opensource-src-4.7.4-tds_no_strict_aliasing.patch
|
||||||
|
|
||||||
# avoid dropping events, which lead to "ghost entries in kde task manager" problem
|
# avoid dropping events, which lead to "ghost entries in kde task manager" problem
|
||||||
|
# https://bugs.kde.org/275469
|
||||||
Patch75: qt-everywhere-opensource-src-4.7.4-filter_event.patch
|
Patch75: qt-everywhere-opensource-src-4.7.4-filter_event.patch
|
||||||
|
|
||||||
# upstream patches
|
# upstream patches
|
||||||
@ -1309,11 +1310,14 @@ fi
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Jan 10 2012 Rex Dieter <rdieter@fedoraproject.org> 1:4.7.4-10
|
||||||
|
- improved filter_event patch (kde#275469)
|
||||||
|
|
||||||
* Mon Jan 09 2012 Than Ngo <than@redhat.com> - 1:4.7.4-9
|
* Mon Jan 09 2012 Than Ngo <than@redhat.com> - 1:4.7.4-9
|
||||||
- bz#772128, CVE-2011-3922, Stack-based buffer overflow in embedded harfbuzz code
|
- bz#772128, CVE-2011-3922, Stack-based buffer overflow in embedded harfbuzz code
|
||||||
|
|
||||||
* Tue Dec 27 2011 Rex Dieter <rdieter@fedoraproject.org> 1:4.7.4-8
|
* Tue Dec 27 2011 Rex Dieter <rdieter@fedoraproject.org> 1:4.7.4-8
|
||||||
- filter event patch, an attempt to avoid "ghost entries in kde taskbar" problem
|
- filter event patch, an attempt to avoid "ghost entries in kde taskbar" (kde#275469)
|
||||||
|
|
||||||
* Wed Nov 16 2011 Rex Dieter <rdieter@fedoraproject.org> 1:4.7.4-7
|
* Wed Nov 16 2011 Rex Dieter <rdieter@fedoraproject.org> 1:4.7.4-7
|
||||||
- drop kde-qt 0012 patch, it's broken if not upstream (#704882)
|
- drop kde-qt 0012 patch, it's broken if not upstream (#704882)
|
||||||
|
Loading…
Reference in New Issue
Block a user