From 1962c47da983a035022517b3b79b33f1c7ae23fc Mon Sep 17 00:00:00 2001 From: Kevin Mihelich <kevin@plugapps.com> Date: Thu, 1 Mar 2012 08:40:09 -0500 Subject: [PATCH] extra/qt to 4.8.0-5 --- extra/qt/PKGBUILD | 15 ++- extra/qt/fix-qgraphicsscene-regression.patch | 54 ++++++++++ extra/qt/improved-filter-event.patch | 98 +++++++++++++++++++ ...atch => qurl-backward-compatibility.patch} | 0 4 files changed, 163 insertions(+), 4 deletions(-) create mode 100644 extra/qt/fix-qgraphicsscene-regression.patch create mode 100644 extra/qt/improved-filter-event.patch rename extra/qt/{fix-qurl.patch => qurl-backward-compatibility.patch} (100%) diff --git a/extra/qt/PKGBUILD b/extra/qt/PKGBUILD index 897668f2d..21037f1d0 100644 --- a/extra/qt/PKGBUILD +++ b/extra/qt/PKGBUILD @@ -14,7 +14,7 @@ plugrel=1 pkgbase=qt pkgname=('qt' 'qt-private-headers') pkgver=4.8.0 -pkgrel=4 +pkgrel=5 arch=('i686' 'x86_64') url='http://qt-project.org/' license=('GPL3' 'LGPL') @@ -27,19 +27,26 @@ _pkgfqn="${pkgbase}-everywhere-opensource-src-${pkgver}" source=("http://get.qt.nokia.com/qt/source/${_pkgfqn}.tar.gz" 'assistant.desktop' 'designer.desktop' 'linguist.desktop' 'qtconfig.desktop' - 'fix-qurl.patch') + 'fix-qgraphicsscene-regression.patch' + 'improved-filter-event.patch' + 'qurl-backward-compatibility.patch') md5sums=('e8a5fdbeba2927c948d9f477a6abe904' 'fc211414130ab2764132e7370f8e5caa' '85179f5e0437514f8639957e1d8baf62' 'f11852b97583610f3dbb669ebc3e21bc' '6b771c8a81dd90b45e8a79afa0e5bbfd' + 'c2e91fc028250a590e76effe234468e2' + '444ebeb716d7c7379835efb8aa88e6c8' '7bc255a36733d0fbc80c1902ade4beca') build() { cd "${srcdir}"/${_pkgfqn} - # (FS#27757) - patch -p1 -i "${srcdir}"/fix-qurl.patch + # (FS#28707) + patch -p1 -i "${srcdir}"/fix-qgraphicsscene-regression.patch + # (FS#27757) (KDEBUG#275469) + patch -p1 -i "${srcdir}"/improved-filter-event.patch + patch -p1 -i "${srcdir}"/qurl-backward-compatibility.patch export QT4DIR="${srcdir}"/${_pkgfqn} export LD_LIBRARY_PATH=${QT4DIR}/lib:${LD_LIBRARY_PATH} diff --git a/extra/qt/fix-qgraphicsscene-regression.patch b/extra/qt/fix-qgraphicsscene-regression.patch new file mode 100644 index 000000000..3e653ff40 --- /dev/null +++ b/extra/qt/fix-qgraphicsscene-regression.patch @@ -0,0 +1,54 @@ +From 15c14584199dc43e4a309fc331f3144009008128 Mon Sep 17 00:00:00 2001 +From: Jonathan Liu <net147@gmail.com> +Date: Fri, 24 Feb 2012 00:42:34 +1100 +Subject: [PATCH] Revert "Don't rely on mapFromGlobal in + QGraphicsScenePrivate::itemsAtPosition." + +This reverts commit 7c0d15a22266a425c9e9ac0120d6774e120fe01e. +The commit caused a regression whereby tooltips may be shown even if the +mouse is not over the item if it has the Qt::ItemIgnoresTransformations +flag and the QGraphicsView had been scaled. + +Task-number: QTBUG-17517 +Task-number: QTBUG-22663 +Change-Id: Ib7fd788d9712c5e659fe07182f9505a4eb135ab2 +Reviewed-by: Andy Shaw <andy.shaw@digia.com> +Reviewed-by: Robin Burchell <robin+qt@viroteck.net> +--- + src/gui/graphicsview/qgraphicsscene.cpp | 10 +++++++--- + 1 files changed, 7 insertions(+), 3 deletions(-) + +diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp +index 14c0f3c..d1cdd4f 100644 +--- a/src/gui/graphicsview/qgraphicsscene.cpp ++++ b/src/gui/graphicsview/qgraphicsscene.cpp +@@ -1084,7 +1084,7 @@ void QGraphicsScenePrivate::enableMouseTrackingOnViews() + /*! + Returns all items for the screen position in \a event. + */ +-QList<QGraphicsItem *> QGraphicsScenePrivate::itemsAtPosition(const QPoint &/*screenPos*/, ++QList<QGraphicsItem *> QGraphicsScenePrivate::itemsAtPosition(const QPoint &screenPos, + const QPointF &scenePos, + QWidget *widget) const + { +@@ -1093,12 +1093,16 @@ QList<QGraphicsItem *> QGraphicsScenePrivate::itemsAtPosition(const QPoint &/*sc + if (!view) + return q->items(scenePos, Qt::IntersectsItemShape, Qt::DescendingOrder, QTransform()); + +- const QRectF pointRect(scenePos, QSizeF(1, 1)); ++ const QRectF pointRect(QPointF(widget->mapFromGlobal(screenPos)), QSizeF(1, 1)); + if (!view->isTransformed()) + return q->items(pointRect, Qt::IntersectsItemShape, Qt::DescendingOrder); + + const QTransform viewTransform = view->viewportTransform(); +- return q->items(pointRect, Qt::IntersectsItemShape, ++ if (viewTransform.type() <= QTransform::TxScale) { ++ return q->items(viewTransform.inverted().mapRect(pointRect), Qt::IntersectsItemShape, ++ Qt::DescendingOrder, viewTransform); ++ } ++ return q->items(viewTransform.inverted().map(pointRect), Qt::IntersectsItemShape, + Qt::DescendingOrder, viewTransform); + } + +-- +1.7.6 diff --git a/extra/qt/improved-filter-event.patch b/extra/qt/improved-filter-event.patch new file mode 100644 index 000000000..d272a16cb --- /dev/null +++ b/extra/qt/improved-filter-event.patch @@ -0,0 +1,98 @@ +--- qt-opensource-4.8.0.old/src/gui/kernel/qapplication_x11.cpp 2011-12-16 03:22:33.918428374 -0500 ++++ qt-opensource-4.8.0.new/src/gui/kernel/qapplication_x11.cpp 2012-01-07 18:18:40.258246384 -0500 +@@ -4244,7 +4205,12 @@ bool QETWidget::translateMouseEvent(cons + && (nextEvent.xclient.message_type == ATOM(_QT_SCROLL_DONE) || + (nextEvent.xclient.message_type == ATOM(WM_PROTOCOLS) && + (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 ++ // events here, without returning to the event loop, first pass nextEvent to ++ // QAbstractEventDispatcher::filterEvent() to allow applications which override ++ // QAbstractEventDispatcher::filterEvent() to handle the event first. ++ if (!QAbstractEventDispatcher::instance()->filterEvent(&nextEvent)) ++ qApp->x11ProcessEvent(&nextEvent); + continue; + } else if (nextEvent.type != MotionNotify || + nextEvent.xmotion.window != event->xmotion.window || +--- qt-opensource-4.8.0.old/src/gui/kernel/qclipboard_x11.cpp 2011-12-08 00:06:02.000000000 -0500 ++++ qt-opensource-4.8.0.new/src/gui/kernel/qclipboard_x11.cpp 2012-01-07 18:30:35.298287639 -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.8.0.old/src/gui/kernel/qdnd_x11.cpp 2011-12-08 00:06:02.000000000 -0500 ++++ qt-opensource-4.8.0.new/src/gui/kernel/qdnd_x11.cpp 2012-01-07 18:28:13.841279478 -0500 +@@ -42,6 +42,7 @@ + #include "qplatformdefs.h" + + #include "qapplication.h" ++#include "qabstracteventdispatcher.h" + + #ifndef QT_NO_DRAGANDDROP + +@@ -1941,7 +1942,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.8.0.old/src/gui/kernel/qwidget_x11.cpp 2011-12-08 00:06:02.000000000 -0500 ++++ qt-opensource-4.8.0.new/src/gui/kernel/qwidget_x11.cpp 2012-01-07 18:29:26.286283657 -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" +@@ -376,17 +377,22 @@ void qt_x11_wait_for_window_manager(QWid + 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)) diff --git a/extra/qt/fix-qurl.patch b/extra/qt/qurl-backward-compatibility.patch similarity index 100% rename from extra/qt/fix-qurl.patch rename to extra/qt/qurl-backward-compatibility.patch