[qt] apply proposed fixes for QTBUG-34614, 37380, 38585 for LibreOffice (#1105422)
Kevin Kofler
kkofler at fedoraproject.org
Fri Jun 6 22:48:03 UTC 2014
commit 0da40876de3a27158acd9411e507ce22e8a00ca5
Author: Kevin Kofler <Kevin at tigcc.ticalc.org>
Date: Sat Jun 7 00:47:52 2014 +0200
apply proposed fixes for QTBUG-34614,37380,38585 for LibreOffice (#1105422)
* Fri Jun 06 2014 Kevin Kofler <Kevin at tigcc.ticalc.org> 4.8.6-9
- apply proposed fixes for QTBUG-34614,37380,38585 for LibreOffice (#1105422)
...erywhere-opensource-src-4.8.6-QTBUG-34614.patch | 94 ++++++++++++++++++++
...erywhere-opensource-src-4.8.6-QTBUG-37380.patch | 63 +++++++++++++
...erywhere-opensource-src-4.8.6-QTBUG-38585.patch | 12 +++
qt.spec | 13 +++-
4 files changed, 181 insertions(+), 1 deletions(-)
---
diff --git a/qt-everywhere-opensource-src-4.8.6-QTBUG-34614.patch b/qt-everywhere-opensource-src-4.8.6-QTBUG-34614.patch
new file mode 100644
index 0000000..6d3bf2f
--- /dev/null
+++ b/qt-everywhere-opensource-src-4.8.6-QTBUG-34614.patch
@@ -0,0 +1,94 @@
+--- src/corelib/kernel/qeventdispatcher_glib.cpp.sav 2014-03-28 15:26:37.000000000 +0100
++++ src/corelib/kernel/qeventdispatcher_glib.cpp 2014-04-24 09:44:09.358659204 +0200
+@@ -255,22 +255,30 @@ struct GPostEventSource
+ GSource source;
+ QAtomicInt serialNumber;
+ int lastSerialNumber;
++ QEventLoop::ProcessEventsFlags processEventsFlags;
+ QEventDispatcherGlibPrivate *d;
+ };
+
+ static gboolean postEventSourcePrepare(GSource *s, gint *timeout)
+ {
++ GPostEventSource *source = reinterpret_cast<GPostEventSource *>(s);
+ QThreadData *data = QThreadData::current();
+ if (!data)
+ return false;
+
++ QEventLoop::ProcessEventsFlags excludeAllFlags
++ = QEventLoop::ExcludeUserInputEvents
++ | QEventLoop::ExcludeSocketNotifiers
++ | QEventLoop::X11ExcludeTimers;
++ if ((source->processEventsFlags & excludeAllFlags) == excludeAllFlags)
++ return false;
++
+ gint dummy;
+ if (!timeout)
+ timeout = &dummy;
+ const bool canWait = data->canWaitLocked();
+ *timeout = canWait ? -1 : 0;
+
+- GPostEventSource *source = reinterpret_cast<GPostEventSource *>(s);
+ return (!canWait
+ || (source->serialNumber != source->lastSerialNumber));
+ }
+@@ -284,8 +292,14 @@ static gboolean postEventSourceDispatch(
+ {
+ GPostEventSource *source = reinterpret_cast<GPostEventSource *>(s);
+ source->lastSerialNumber = source->serialNumber;
+- QCoreApplication::sendPostedEvents();
+- source->d->runTimersOnceWithNormalPriority();
++ QEventLoop::ProcessEventsFlags excludeAllFlags
++ = QEventLoop::ExcludeUserInputEvents
++ | QEventLoop::ExcludeSocketNotifiers
++ | QEventLoop::X11ExcludeTimers;
++ if ((source->processEventsFlags & excludeAllFlags) != excludeAllFlags) {
++ QCoreApplication::sendPostedEvents();
++ source->d->runTimersOnceWithNormalPriority();
++ }
+ return true; // i dunno, george...
+ }
+
+@@ -329,6 +343,7 @@ QEventDispatcherGlibPrivate::QEventDispa
+ postEventSource = reinterpret_cast<GPostEventSource *>(g_source_new(&postEventSourceFuncs,
+ sizeof(GPostEventSource)));
+ postEventSource->serialNumber = 1;
++ postEventSource->processEventsFlags = QEventLoop::AllEvents;
+ postEventSource->d = this;
+ g_source_set_can_recurse(&postEventSource->source, true);
+ g_source_attach(&postEventSource->source, mainContext);
+@@ -423,6 +438,7 @@ bool QEventDispatcherGlib::processEvents
+
+ // tell postEventSourcePrepare() and timerSource about any new flags
+ QEventLoop::ProcessEventsFlags savedFlags = d->timerSource->processEventsFlags;
++ d->postEventSource->processEventsFlags = flags;
+ d->timerSource->processEventsFlags = flags;
+ d->socketNotifierSource->processEventsFlags = flags;
+
+@@ -435,6 +451,7 @@ bool QEventDispatcherGlib::processEvents
+ while (!result && canWait)
+ result = g_main_context_iteration(d->mainContext, canWait);
+
++ d->postEventSource->processEventsFlags = savedFlags;
+ d->timerSource->processEventsFlags = savedFlags;
+ d->socketNotifierSource->processEventsFlags = savedFlags;
+
+--- src/corelib/kernel/qeventdispatcher_unix.cpp.sav 2013-06-07 07:16:52.000000000 +0200
++++ src/corelib/kernel/qeventdispatcher_unix.cpp 2014-04-24 09:43:06.927589535 +0200
+@@ -905,7 +905,15 @@ bool QEventDispatcherUNIX::processEvents
+
+ // we are awake, broadcast it
+ emit awake();
+- QCoreApplicationPrivate::sendPostedEvents(0, 0, d->threadData);
++
++ QEventLoop::ProcessEventsFlags excludeAllFlags
++ = QEventLoop::ExcludeUserInputEvents
++ | QEventLoop::ExcludeSocketNotifiers
++ | QEventLoop::X11ExcludeTimers;
++ if ((flags & excludeAllFlags) == excludeAllFlags)
++ return false;
++ if(( flags & excludeAllFlags ) != excludeAllFlags )
++ QCoreApplicationPrivate::sendPostedEvents(0, 0, d->threadData);
+
+ int nevents = 0;
+ const bool canWait = (d->threadData->canWaitLocked()
diff --git a/qt-everywhere-opensource-src-4.8.6-QTBUG-37380.patch b/qt-everywhere-opensource-src-4.8.6-QTBUG-37380.patch
new file mode 100644
index 0000000..6949bbf
--- /dev/null
+++ b/qt-everywhere-opensource-src-4.8.6-QTBUG-37380.patch
@@ -0,0 +1,63 @@
+Author: Jan-Marek Glogowski <glogow at fbihome.de>
+Date: Thu Mar 06 18:44:43 2014 +0100
+
+ Honor QEventLoop::ExcludeSocketNotifiers in glib event loop.
+
+ Implements QEventLoop::ExcludeSocketNotifiers in the same way
+ QEventLoop::X11ExcludeTimers is already implemented for the glib
+ event loop.
+
+--- qt4-x11-4.8.1.orig/src/corelib/kernel/qeventdispatcher_glib.cpp
++++ qt4-x11-4.8.1/src/corelib/kernel/qeventdispatcher_glib.cpp
+@@ -65,6 +65,7 @@ struct GPollFDWithQSocketNotifier
+ struct GSocketNotifierSource
+ {
+ GSource source;
++ QEventLoop::ProcessEventsFlags processEventsFlags;
+ QList<GPollFDWithQSocketNotifier *> pollfds;
+ };
+
+@@ -80,6 +81,9 @@ static gboolean socketNotifierSourceChec
+ GSocketNotifierSource *src = reinterpret_cast<GSocketNotifierSource *>(source);
+
+ bool pending = false;
++ if (src->processEventsFlags & QEventLoop::ExcludeSocketNotifiers)
++ return pending;
++
+ for (int i = 0; !pending && i < src->pollfds.count(); ++i) {
+ GPollFDWithQSocketNotifier *p = src->pollfds.at(i);
+
+@@ -103,6 +107,9 @@ static gboolean socketNotifierSourceDisp
+ QEvent event(QEvent::SockAct);
+
+ GSocketNotifierSource *src = reinterpret_cast<GSocketNotifierSource *>(source);
++ if (src->processEventsFlags & QEventLoop::ExcludeSocketNotifiers)
++ return true;
++
+ for (int i = 0; i < src->pollfds.count(); ++i) {
+ GPollFDWithQSocketNotifier *p = src->pollfds.at(i);
+
+@@ -330,6 +337,7 @@ QEventDispatcherGlibPrivate::QEventDispa
+ reinterpret_cast<GSocketNotifierSource *>(g_source_new(&socketNotifierSourceFuncs,
+ sizeof(GSocketNotifierSource)));
+ (void) new (&socketNotifierSource->pollfds) QList<GPollFDWithQSocketNotifier *>();
++ socketNotifierSource->processEventsFlags = QEventLoop::AllEvents;
+ g_source_set_can_recurse(&socketNotifierSource->source, true);
+ g_source_attach(&socketNotifierSource->source, mainContext);
+
+@@ -415,6 +423,7 @@ bool QEventDispatcherGlib::processEvents
+ // tell postEventSourcePrepare() and timerSource about any new flags
+ QEventLoop::ProcessEventsFlags savedFlags = d->timerSource->processEventsFlags;
+ d->timerSource->processEventsFlags = flags;
++ d->socketNotifierSource->processEventsFlags = flags;
+
+ if (!(flags & QEventLoop::EventLoopExec)) {
+ // force timers to be sent at normal priority
+@@ -426,6 +435,7 @@ bool QEventDispatcherGlib::processEvents
+ result = g_main_context_iteration(d->mainContext, canWait);
+
+ d->timerSource->processEventsFlags = savedFlags;
++ d->socketNotifierSource->processEventsFlags = savedFlags;
+
+ if (canWait)
+ emit awake();
diff --git a/qt-everywhere-opensource-src-4.8.6-QTBUG-38585.patch b/qt-everywhere-opensource-src-4.8.6-QTBUG-38585.patch
new file mode 100644
index 0000000..22643e8
--- /dev/null
+++ b/qt-everywhere-opensource-src-4.8.6-QTBUG-38585.patch
@@ -0,0 +1,12 @@
+--- src/gui/kernel/qclipboard_x11.cpp.sav 2014-04-25 09:52:03.855693228 +0200
++++ src/gui/kernel/qclipboard_x11.cpp 2014-04-25 09:51:58.038693777 +0200
+@@ -548,7 +548,8 @@ bool QX11Data::clipboardWaitForEvent(Win
+ return false;
+
+ XSync(X11->display, false);
+- usleep(50000);
++ if (!XPending(X11->display))
++ usleep(5000);
+
+ now.start();
+
diff --git a/qt.spec b/qt.spec
index 5742753..4f74b82 100644
--- a/qt.spec
+++ b/qt.spec
@@ -25,7 +25,7 @@ Summary: Qt toolkit
Name: qt
Epoch: 1
Version: 4.8.6
-Release: 8%{?dist}
+Release: 9%{?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
@@ -141,6 +141,11 @@ Patch84: qt-everywhere-opensource-src-4.8.5-QTBUG-35459.patch
# systemtrayicon plugin support (for appindicators)
Patch86: qt-everywhere-opensource-src-4.8.6-systemtrayicon.patch
+# fixes for LibreOffice from the upstream Qt bug tracker (#1105422):
+Patch87: qt-everywhere-opensource-src-4.8.6-QTBUG-34614.patch
+Patch88: qt-everywhere-opensource-src-4.8.6-QTBUG-37380.patch
+Patch89: qt-everywhere-opensource-src-4.8.6-QTBUG-38585.patch
+
# upstream patches
# backported from Qt5 (essentially)
# http://bugzilla.redhat.com/702493
@@ -519,6 +524,9 @@ rm -fv mkspecs/linux-g++*/qmake.conf.multilib-optflags
%patch81 -p1 -b .assistant-crash
%patch82 -p1 -b .QTBUG-4862
%patch83 -p1 -b .poll
+%patch87 -p0 -b .QTBUG-34614
+%patch88 -p1 -b .QTBUG-37380
+%patch89 -p0 -b .QTBUG-38585
# upstream patches
%patch102 -p1 -b .qgtkstyle_disable_gtk_theme_check
@@ -1229,6 +1237,9 @@ fi
%changelog
+* Fri Jun 06 2014 Kevin Kofler <Kevin at tigcc.ticalc.org> 4.8.6-9
+- apply proposed fixes for QTBUG-34614,37380,38585 for LibreOffice (#1105422)
+
* Tue Jun 03 2014 Rex Dieter <rdieter at fedoraproject.org> 4.8.6-8
- backport selected upstream commits...
- Fix visual index lookup (QTBUG-37813)
More information about the scm-commits
mailing list