packages: qt4/qt4.spec, qt4/qt4-git.patch - rel 6; some fixes from git
arekm
arekm at pld-linux.org
Sun Feb 26 19:42:00 CET 2012
Author: arekm Date: Sun Feb 26 18:42:00 2012 GMT
Module: packages Tag: HEAD
---- Log message:
- rel 6; some fixes from git
---- Files affected:
packages/qt4:
qt4.spec (1.305 -> 1.306) , qt4-git.patch (1.5 -> 1.6)
---- Diffs:
================================================================
Index: packages/qt4/qt4.spec
diff -u packages/qt4/qt4.spec:1.305 packages/qt4/qt4.spec:1.306
--- packages/qt4/qt4.spec:1.305 Wed Feb 8 23:37:30 2012
+++ packages/qt4/qt4.spec Sun Feb 26 19:41:54 2012
@@ -57,7 +57,7 @@
Summary(pt_BR.UTF-8): Estrutura para rodar aplicações GUI Qt
Name: qt4
Version: 4.8.0
-Release: 5
+Release: 6
License: LGPL v2.1 or GPL v3.0
Group: X11/Libraries
Source0: http://download.qt.nokia.com/qt/source/qt-everywhere-opensource-src-%{version}.tar.gz
@@ -82,6 +82,7 @@
Patch7: %{name}-x11_fonts.patch
Patch8: %{name}-pl-update.patch
Patch9: %{name}-ibase.patch
+Patch10: %{name}-git.patch
Patch11: qt-x11-opensource-src-4.5.1-enable_ft_lcdfilter.patch
URL: http://qt.nokia.com/
%{?with_ibase:BuildRequires: Firebird-devel}
@@ -1402,6 +1403,7 @@
%patch7 -p1
#%patch8 -p1
%patch9 -p1
+%patch10 -p1
%patch11 -p1
%{__sed} -i -e 's,usr/X11R6/,usr/g,' mkspecs/linux-g++-64/qmake.conf \
@@ -2408,6 +2410,9 @@
All persons listed below can be reached at <cvs_login>@pld-linux.org
$Log$
+Revision 1.306 2012/02/26 18:41:54 arekm
+- rel 6; some fixes from git
+
Revision 1.305 2012/02/08 22:37:30 adamg
- QMAKE_* vars are in g++-base.conf
================================================================
Index: packages/qt4/qt4-git.patch
diff -u /dev/null packages/qt4/qt4-git.patch:1.6
--- /dev/null Sun Feb 26 19:42:00 2012
+++ packages/qt4/qt4-git.patch Sun Feb 26 19:41:54 2012
@@ -0,0 +1,398 @@
+commit 1095252559a937efcaaf012d8dfbb4e13c4fd6b5
+Author: John Stanley <jpsinthemix at verizon.net>
+Date: Tue Jan 17 20:04:59 2012 -0500
+
+ Pass events to installed event dispatcher event filters before passing them to x11ProcessEvent()
+
+ Change-Id: If551c732b520b0105a3d4578db1b039c1b5d49fd
+
+ Pass events to eventFilter first
+
+ Change-Id: If551c732b520b0105a3d4578db1b039c1b5d49fd
+ Reviewed-by: Bradley T. Hughes <bradley.hughes at nokia.com>
+
+diff --git a/src/gui/kernel/qclipboard_x11.cpp b/src/gui/kernel/qclipboard_x11.cpp
+index 803b1ba..72110ed 100644
+--- a/src/gui/kernel/qclipboard_x11.cpp
++++ b/src/gui/kernel/qclipboard_x11.cpp
+@@ -579,7 +579,10 @@ bool QX11Data::clipboardWaitForEvent(Window win, int type, XEvent *event, int ti
+
+ // process other clipboard events, since someone is probably requesting data from us
+ XEvent e;
+- if (XCheckIfEvent(X11->display, &e, checkForClipboardEvents, 0))
++ // Pass the event through the event dispatcher filter so that applications
++ // which install an event filter on the dispatcher get to handle it first.
++ if (XCheckIfEvent(X11->display, &e, checkForClipboardEvents, 0) &&
++ !QAbstractEventDispatcher::instance()->filterEvent(&e))
+ qApp->x11ProcessEvent(&e);
+
+ now.start();
+diff --git a/src/gui/kernel/qdnd_x11.cpp b/src/gui/kernel/qdnd_x11.cpp
+index 2b14743..d2050d1 100644
+--- a/src/gui/kernel/qdnd_x11.cpp
++++ b/src/gui/kernel/qdnd_x11.cpp
+@@ -42,6 +42,7 @@
+ #include "qplatformdefs.h"
+
+ #include "qapplication.h"
++#include "qabstracteventdispatcher.h"
+
+ #ifndef QT_NO_DRAGANDDROP
+
+@@ -1967,7 +1968,10 @@ Qt::DropAction QDragManager::drag(QDrag * o)
+ timer.start();
+ do {
+ XEvent event;
+- if (XCheckTypedEvent(X11->display, ClientMessage, &event))
++ // Pass the event through the event dispatcher filter so that applications
++ // which install an event filter on the dispatcher get to handle it first.
++ 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.
+diff --git a/src/gui/kernel/qwidget_x11.cpp b/src/gui/kernel/qwidget_x11.cpp
+index 4cdd6e7..3cff3ee 100644
+--- a/src/gui/kernel/qwidget_x11.cpp
++++ b/src/gui/kernel/qwidget_x11.cpp
+@@ -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,21 @@ void qt_x11_wait_for_window_manager(QWidget *w, bool sendPostedEvents)
+ 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;
++ // Pass the event through the event dispatcher filter so that applications
++ // which install an event filter on the dispatcher get to handle it first.
++ 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))
+commit 69ada23a75bb51b4efc90c6128cce22d5ee6a779
+Author: John Stanley <jpsinthemix at verizon.net>
+Date: Tue Jan 17 20:04:55 2012 -0500
+
+ When doing mouse move compression, pass non-MotionNotify events to installed event dispatcher event filters
+
+ Change-Id: Ia71f23458b9a6bc728f3e05592f530e317ae453c
+ Reviewed-by: Bradley T. Hughes <bradley.hughes at nokia.com>
+
+diff --git a/src/gui/kernel/qapplication_x11.cpp b/src/gui/kernel/qapplication_x11.cpp
+index 256db7d..4d642a9 100644
+--- a/src/gui/kernel/qapplication_x11.cpp
++++ b/src/gui/kernel/qapplication_x11.cpp
+@@ -4234,7 +4234,10 @@ bool QETWidget::translateMouseEvent(const XEvent *event)
+ && (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);
++ // Pass the event through the event dispatcher filter so that applications
++ // which install an event filter on the dispatcher get to handle it first.
++ if (!QAbstractEventDispatcher::instance()->filterEvent(&nextEvent))
++ qApp->x11ProcessEvent(&nextEvent);
+ continue;
+ } else if (nextEvent.type != MotionNotify ||
+ nextEvent.xmotion.window != event->xmotion.window ||
+commit 6bab6fccd2d8ee8e83e968864d729c1bbee39a66
+Author: John Stanley <jpsinthemix at verizon.net>
+Date: Mon Jan 30 07:27:49 2012 -0500
+
+ Raise loopLevel for deleteLater in event filters
+
+ Change-Id: I163f510f6e99d86a35cc78965fa383e7f4618f42
+ Reviewed-by: Bradley T. Hughes <bradley.hughes at nokia.com>
+
+diff --git a/src/corelib/kernel/qabstracteventdispatcher.cpp b/src/corelib/kernel/qabstracteventdispatcher.cpp
+index 3f73e61..3b0a258 100644
+--- a/src/corelib/kernel/qabstracteventdispatcher.cpp
++++ b/src/corelib/kernel/qabstracteventdispatcher.cpp
+@@ -532,8 +532,12 @@ QAbstractEventDispatcher::EventFilter QAbstractEventDispatcher::setEventFilter(E
+ bool QAbstractEventDispatcher::filterEvent(void *message)
+ {
+ Q_D(QAbstractEventDispatcher);
+- if (d->event_filter)
++ if (d->event_filter) {
++ // Raise the loopLevel so that deleteLater() calls in or triggered
++ // by event_filter() will be processed from the main event loop.
++ QScopedLoopLevelCounter loopLevelCounter(d->threadData);
+ return d->event_filter(message);
++ }
+ return false;
+ }
+
+diff --git a/src/corelib/thread/qthread_p.h b/src/corelib/thread/qthread_p.h
+index 9b71d02..bb90de7 100644
+--- a/src/corelib/thread/qthread_p.h
++++ b/src/corelib/thread/qthread_p.h
+@@ -238,6 +238,17 @@ public:
+ # endif
+ };
+
++class QScopedLoopLevelCounter
++{
++ QThreadData *threadData;
++public:
++ inline QScopedLoopLevelCounter(QThreadData *threadData)
++ : threadData(threadData)
++ { ++threadData->loopLevel; }
++ inline ~QScopedLoopLevelCounter()
++ { --threadData->loopLevel; }
++};
++
+ // thread wrapper for the main() thread
+ class QAdoptedThread : public QThread
+ {
+diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h
+index 9acf2c8..31d0b75 100644
+--- a/src/gui/kernel/qapplication_p.h
++++ b/src/gui/kernel/qapplication_p.h
+@@ -277,17 +277,6 @@ typedef struct tagGESTURECONFIG
+
+ #endif // Q_WS_WIN
+
+-class QScopedLoopLevelCounter
+-{
+- QThreadData *threadData;
+-public:
+- QScopedLoopLevelCounter(QThreadData *threadData)
+- : threadData(threadData)
+- { ++threadData->loopLevel; }
+- ~QScopedLoopLevelCounter()
+- { --threadData->loopLevel; }
+-};
+-
+ typedef QHash<QByteArray, QFont> FontHash;
+ FontHash *qt_app_fonts_hash();
+
+commit 26f1ca8681db995e82c0f4c0fa9363c842520700
+Author: Shane Kearns <shane.kearns at accenture.com>
+Date: Mon Dec 19 15:10:45 2011 +0000
+
+ Handle plain socket write errors in SSL
+
+ When an ssl socket is closed during connecting, and it is using a proxy
+ then it is possible for the plain socket to be in pending close state
+ when transmit() is called.
+ As errors were not handled, this caused the socket (and https request)
+ to "hang".
+ It now propagates the error from plain socket.
+
+ Change-Id: I6fb86815a2a63e197cea582f4b153e487543477c
+ Reviewed-by: Peter Hartmann <peter.hartmann at nokia.com>
+ Reviewed-by: Richard J. Moore <rich at kde.org>
+ Reviewed-by: Thiago Macieira <thiago.macieira at intel.com>
+ (cherry picked from commit 2cc78885b0b7d08f965998d156945a077e56c1d8)
+
+diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp
+index 872b19c..900bfdb 100644
+--- a/src/network/ssl/qsslsocket_openssl.cpp
++++ b/src/network/ssl/qsslsocket_openssl.cpp
+@@ -1044,10 +1044,17 @@ void QSslSocketBackendPrivate::transmit()
+ int encryptedBytesRead = q_BIO_read(writeBio, data.data(), pendingBytes);
+
+ // Write encrypted data from the buffer to the socket.
+- plainSocket->write(data.constData(), encryptedBytesRead);
++ qint64 actualWritten = plainSocket->write(data.constData(), encryptedBytesRead);
+ #ifdef QSSLSOCKET_DEBUG
+- qDebug() << "QSslSocketBackendPrivate::transmit: wrote" << encryptedBytesRead << "encrypted bytes to the socket";
++ qDebug() << "QSslSocketBackendPrivate::transmit: wrote" << encryptedBytesRead << "encrypted bytes to the socket" << actualWritten << "actual.";
+ #endif
++ if (actualWritten < 0) {
++ //plain socket write fails if it was in the pending close state.
++ q->setErrorString(plainSocket->errorString());
++ q->setSocketError(plainSocket->error());
++ emit q->error(plainSocket->error());
++ return;
++ }
+ transmitting = true;
+ }
+
+commit 33179842341fcf7d42e74f62a600470aed6b08a1
+Author: Shane Kearns <ext-shane.2.kearns at nokia.com>
+Date: Mon Jan 30 15:52:27 2012 +0000
+
+ Prevent data loss when an ssl socket is closed by remote
+
+ SSL context was destroyed on disconnect. This makes it impossible to
+ decrypt buffered encrypted data. So if there is encrypted data in the
+ receive buffers, then don't destroy the ssl context until the socket is
+ destroyed.
+
+ Task-Number: QTBUG-23607
+ Change-Id: I16a7b4fa006647ec73049c90cdbc72686696850f
+ Reviewed-by: Jonas Gastal <jgastal at profusion.mobi>
+ Reviewed-by: Richard J. Moore <rich at kde.org>
+ (cherry picked from commit c5aba0ac17ae6ed8f3847bd30325acdbd1ecaa80)
+
+diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp
+index 25d1d9e..5b1cd1b 100644
+--- a/src/network/ssl/qsslsocket_openssl.cpp
++++ b/src/network/ssl/qsslsocket_openssl.cpp
+@@ -183,6 +183,7 @@ QSslSocketBackendPrivate::QSslSocketBackendPrivate()
+
+ QSslSocketBackendPrivate::~QSslSocketBackendPrivate()
+ {
++ destroySslContext();
+ }
+
+ QSslCipher QSslSocketBackendPrivate::QSslCipher_from_SSL_CIPHER(SSL_CIPHER *cipher)
+@@ -483,6 +484,22 @@ init_context:
+ return true;
+ }
+
++void QSslSocketBackendPrivate::destroySslContext()
++{
++ if (ssl) {
++ q_SSL_free(ssl);
++ ssl = 0;
++ }
++ if (ctx) {
++ q_SSL_CTX_free(ctx);
++ ctx = 0;
++ }
++ if (pkey) {
++ q_EVP_PKEY_free(pkey);
++ pkey = 0;
++ }
++}
++
+ /*!
+ \internal
+ */
+@@ -1403,19 +1420,10 @@ void QSslSocketBackendPrivate::disconnectFromHost()
+
+ void QSslSocketBackendPrivate::disconnected()
+ {
+- if (ssl) {
+- q_SSL_free(ssl);
+- ssl = 0;
+- }
+- if (ctx) {
+- q_SSL_CTX_free(ctx);
+- ctx = 0;
+- }
+- if (pkey) {
+- q_EVP_PKEY_free(pkey);
+- pkey = 0;
+- }
+-
++ if (plainSocket->bytesAvailable() <= 0)
++ destroySslContext();
++ //if there is still buffered data in the plain socket, don't destroy the ssl context yet.
++ //it will be destroyed when the socket is deleted.
+ }
+
+ QSslCipher QSslSocketBackendPrivate::sessionCipher() const
+diff --git a/src/network/ssl/qsslsocket_openssl_p.h b/src/network/ssl/qsslsocket_openssl_p.h
+index bad2c9c..2940480 100644
+--- a/src/network/ssl/qsslsocket_openssl_p.h
++++ b/src/network/ssl/qsslsocket_openssl_p.h
+@@ -99,6 +99,7 @@ public:
+
+ // SSL context
+ bool initSslContext();
++ void destroySslContext();
+ SSL *ssl;
+ SSL_CTX *ctx;
+ EVP_PKEY *pkey;
+commit 6a91b3bcdf1b5e491aa8531579c4e62fcc794d6e
+Author: Albert Astals Cid <aacid at kde.org>
+Date: Tue Jan 10 16:00:48 2012 +0100
+
+ Check for the clipboard manager when looping due to app quiting
+
+ One can be extremely unlucky and on session logout get this:
+ * All apps are going down
+ * A Qt app checks if the clipboard manager is there to yield its clipboard contents
+ * The clipboard manager is still there
+ * Then just after that check, the clipboard manager finishes because of the session end
+ * This means the Qt app will loop for 5 seconds trying to yield its clipboard contents
+ to a clipboard manager that is not there anymore
+ This is a backport of 689c4009fb9be348f9137a9092b068e056a3d8b3 in the qtbase (Qt 5.0) repo
+
+ Change-Id: I8ab1f460aa5936c03f1afc1b6ff18824f1d6cbc1
+ Reviewed-by: Lars Knoll <lars.knoll at nokia.com>
+
+diff --git a/src/gui/kernel/qclipboard_x11.cpp b/src/gui/kernel/qclipboard_x11.cpp
+index 7990f5d..803b1ba 100644
+--- a/src/gui/kernel/qclipboard_x11.cpp
++++ b/src/gui/kernel/qclipboard_x11.cpp
+@@ -515,7 +515,7 @@ static Bool checkForClipboardEvents(Display *, XEvent *e, XPointer)
+ || e->xselectionclear.selection == ATOM(CLIPBOARD))));
+ }
+
+-bool QX11Data::clipboardWaitForEvent(Window win, int type, XEvent *event, int timeout)
++bool QX11Data::clipboardWaitForEvent(Window win, int type, XEvent *event, int timeout, bool checkManager)
+ {
+ QElapsedTimer started;
+ started.start();
+@@ -544,6 +544,9 @@ bool QX11Data::clipboardWaitForEvent(Window win, int type, XEvent *event, int ti
+ return true;
+ }
+
++ if (checkManager && XGetSelectionOwner(X11->display, ATOM(CLIPBOARD_MANAGER)) == XNone)
++ return false;
++
+ XSync(X11->display, false);
+ usleep(50000);
+
+@@ -571,6 +574,9 @@ bool QX11Data::clipboardWaitForEvent(Window win, int type, XEvent *event, int ti
+ if (XCheckTypedWindowEvent(X11->display,win,type,event))
+ return true;
+
++ if (checkManager && XGetSelectionOwner(X11->display, ATOM(CLIPBOARD_MANAGER)) == XNone)
++ return false;
++
+ // process other clipboard events, since someone is probably requesting data from us
+ XEvent e;
+ if (XCheckIfEvent(X11->display, &e, checkForClipboardEvents, 0))
+@@ -933,7 +939,7 @@ bool QClipboard::event(QEvent *e)
+
+ XEvent event;
+ // waiting until the clipboard manager fetches the content.
+- if (!X11->clipboardWaitForEvent(ownerId, SelectionNotify, &event, 10000)) {
++ if (!X11->clipboardWaitForEvent(ownerId, SelectionNotify, &event, 10000, true)) {
+ qWarning("QClipboard: Unable to receive an event from the "
+ "clipboard manager in a reasonable time");
+ }
+diff --git a/src/gui/kernel/qt_x11_p.h b/src/gui/kernel/qt_x11_p.h
+index bdca019..ed7c146 100644
+--- a/src/gui/kernel/qt_x11_p.h
++++ b/src/gui/kernel/qt_x11_p.h
+@@ -350,7 +350,7 @@ struct QX11Data
+ Window findClientWindow(Window, Atom, bool);
+
+ // from qclipboard_x11.cpp
+- bool clipboardWaitForEvent(Window win, int type, XEvent *event, int timeout);
++ bool clipboardWaitForEvent(Window win, int type, XEvent *event, int timeout, bool checkManager = false);
+ bool clipboardReadProperty(Window win, Atom property, bool deleteProperty,
+ QByteArray *buffer, int *size, Atom *type, int *format);
+ QByteArray clipboardReadIncrementalProperty(Window win, Atom property, int nbytes, bool nullterm);
================================================================
---- CVS-web:
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/qt4/qt4.spec?r1=1.305&r2=1.306&f=u
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/qt4/qt4-git.patch?r1=1.5&r2=1.6&f=u
More information about the pld-cvs-commit
mailing list