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 <jpsinthe...@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.hug...@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 <jpsinthe...@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.hug...@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 <jpsinthe...@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.hug...@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.kea...@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.hartm...@nokia.com> + Reviewed-by: Richard J. Moore <r...@kde.org> + Reviewed-by: Thiago Macieira <thiago.macie...@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.kea...@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 <jgas...@profusion.mobi> + Reviewed-by: Richard J. Moore <r...@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 <aa...@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.kn...@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 _______________________________________________ pld-cvs-commit mailing list pld-cvs-commit@lists.pld-linux.org http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit