From d583030f2ca29dacce1805ad75855353f678f9d5 Mon Sep 17 00:00:00 2001 From: Jani Heikkinen Date: Thu, 2 Nov 2017 13:36:38 +0200 Subject: [PATCH 01/50] Add changes file for Qt 5.9.3 Task-number: QTBUG-64203 Change-Id: I1dd9ba9e96672a1e6d81ecbbd62f837bc0e34155 Reviewed-by: Thiago Macieira Reviewed-by: Lars Knoll --- dist/changes-5.9.3 | 144 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 dist/changes-5.9.3 diff --git a/dist/changes-5.9.3 b/dist/changes-5.9.3 new file mode 100644 index 00000000000..521833dba0b --- /dev/null +++ b/dist/changes-5.9.3 @@ -0,0 +1,144 @@ +Qt 5.9.3 is a bug-fix release. It maintains both forward and backward +compatibility (source and binary) with Qt 5.9.0 through 5.9.2. + +For more details, refer to the online documentation included in this +distribution. The documentation is also available online: + +http://doc.qt.io/qt-5/index.html + +The Qt version 5.9 series is binary compatible with the 5.8.x series. +Applications compiled for 5.8 will continue to run with 5.9. + +Some of the changes listed in this file include issue tracking numbers +corresponding to tasks in the Qt Bug Tracker: + +https://bugreports.qt.io/ + +Each of these identifiers can be entered in the bug tracker to obtain more +information about a particular change. + +**************************************************************************** +* Qt 5.9.3 Changes * +**************************************************************************** + +QtCore +------ + + - QFileSystemWatcher: + * [QTBUG-64171] Fixed a bug that would cause the application to crash if + QFileSystemWatcher was created in an auxiliary thread on Windows. + + - QStorageInfo: + * [QTBUG-61420] Fixed decoding of volume labels containing certain + uncommon characters on Linux. + + - QThreadPool: + * Improved performance with large amount of QRunnable items. + +QtGui +------ + + - [QTBUG-64239] Fixed memory corruption on scaled emojis. + - [QTBUG-63846] Fixed dragging inside a modal window when a + QShapedPixmapWindow is used. + - [QTBUG-61777] Fixed painting of zero-length lines with scaling. + - [QTBUG-61244] Fixed centering of some items in layouts. + - [QTBUG-63168] Fixed a crash when reparenting QWindowContainer. + + +QtNetwork +--------- + + - QHostAddress: + * [QTBUG-63764] Fixed a problem in QHostAddress not detaching in its + setters and thus spoiling shared data. + + - QNetworkAccessManager: + * [QTBUG-63075] Added support for HTTP status 308. + * [QTBUG-61300] Fixed a problem with mixing headers from different + responses. + * [QTBUG-63471] Fixed redirects support in HTTP/2 protocol handler. + * [QTBUG-63313] Fixed cookies received during a redirect not being + applied in the redirect. + * [QTBUG-63142] Fixed HTTP method always being changed to GET when + redirected with 307 and 308. + + - QNetworkCookieJar: + * Fixed cookies with a root path ("/") not matching an empty path (""). + +QtSql +------ + + - PostgreSQL: + * Fixed handling of binary data for PostgreSQL 9.x and later + * Fixed detection of PostgreSQL 9.x and later + + - OCI: + * [QTBUG-57765] Fixed a bug that would see some cached results returned + when issuing a forward only query + +QtWidgets +--------- + + - QAction: + * [QTBUG-62006] Ensured setData() does not emit changed() if no change + happened. + + - QDockWidget: + * [QTBUG-63526] Fixed an issue in QDockWidgets where the widget would + not resize despite showing a resize cursor. + + - QHeaderView: + * [QTBUG-54601] Fixed resizing when hidden sections were involved. + * [QTBUG-64036] Ensured maximumSectionSize property is honored during + resizeSections(). + + - QListView: + * [QTBUG-45427] Fixed the laying out of a QListView in a grid layout + after the dataChanged() signal is emitted. + + - QMenuBar + * [QTBUG-34160] Fixed a problem with adding the same QAction to more than + one menu. + + - QWidget + * [QTBUG-56860] Fixed widget losing focus after showing menu second time. + + - QWizard: + * [QTBUG-46894] Fixed the shortcut for the Next button on Windows. + + +Platform-specific changes +------------------------- + + - Cocoa: + * optimize backingstore flush on 10-bit displays + * [QTBUG-57076] [QTBUG-63712] Attach menu items when updating the menubar + * [QTBUG-63444] Toggle titlebar transparency to support unified toolbar + + - iOS: + * [QTBUG-57428][QTBUG-63660] add support for adding mimetypes other than text + on the clipboard + + - Windows: + * [QTBUG-63654] Windows font database: Remove clamping of default font size + + - X11: + * [QTBUG-48034] Don't misdetect certain trackballs as tablets + * [QTBUG-62840] Fix crash on X servers with BGR888 display + +Third-Party Code +---------------- + + - Improved documentation about Freetype 2 licenses. + - Updated Sqlite to fix CVE-2017-10989. + - Updated bundled libpng to version 1.6.34. + +Tools +----- + + * qmake: + - [QTBUG-63409] Fixed a build error with MSVC when concrt.h was included + while exceptions are disabled. + - [QTBUG-62985] Fixed a bug that caused the accidental creation of files + called "NUL" when using MinGW. From 4870282117b43242d9c2cd6fbde8175b2a907b08 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 9 Nov 2017 15:49:26 -0800 Subject: [PATCH 02/50] QSemaphore: fix regression when the timeout < 0 The issue was introduced by eaee1209f0ead5be786e81db8aee604ccfea85b0, so it affected only 5.9.2. [ChangeLog][QtCore][QSemaphore] Fixed a regression that would make tryAcquire() not to wait forever if the timeout was a negative value. Note: new code is advised to only use -1 to indicate "forever", as some other functions taking timeout periods do not accept other values. Task-number: QTBUG-64413 Change-Id: I57a1bd6e0c194530b732fffd14f58fce60d5dfc9 Reviewed-by: Lars Knoll --- src/corelib/thread/qsemaphore.cpp | 8 ++- .../thread/qsemaphore/tst_qsemaphore.cpp | 63 +++++++++++++++++++ 2 files changed, 68 insertions(+), 3 deletions(-) diff --git a/src/corelib/thread/qsemaphore.cpp b/src/corelib/thread/qsemaphore.cpp index ce0c1c91df4..f63a08774c3 100644 --- a/src/corelib/thread/qsemaphore.cpp +++ b/src/corelib/thread/qsemaphore.cpp @@ -214,13 +214,15 @@ bool QSemaphore::tryAcquire(int n) bool QSemaphore::tryAcquire(int n, int timeout) { Q_ASSERT_X(n >= 0, "QSemaphore::tryAcquire", "parameter 'n' must be non-negative"); - if (timeout < 0) - return tryAcquire(n); + + // We're documented to accept any negative value as "forever" + // but QDeadlineTimer only accepts -1. + timeout = qMax(timeout, -1); QDeadlineTimer timer(timeout); QMutexLocker locker(&d->mutex); qint64 remainingTime = timer.remainingTime(); - while (n > d->avail && remainingTime > 0) { + while (n > d->avail && remainingTime != 0) { if (!d->cond.wait(locker.mutex(), remainingTime)) return false; remainingTime = timer.remainingTime(); diff --git a/tests/auto/corelib/thread/qsemaphore/tst_qsemaphore.cpp b/tests/auto/corelib/thread/qsemaphore/tst_qsemaphore.cpp index 2970b2e118d..ce093f769c6 100644 --- a/tests/auto/corelib/thread/qsemaphore/tst_qsemaphore.cpp +++ b/tests/auto/corelib/thread/qsemaphore/tst_qsemaphore.cpp @@ -41,6 +41,8 @@ private slots: void tryAcquireWithTimeout_data(); void tryAcquireWithTimeout(); void tryAcquireWithTimeoutStarvation(); + void tryAcquireWithTimeoutForever_data(); + void tryAcquireWithTimeoutForever(); void producerConsumer(); }; @@ -155,21 +157,25 @@ void tst_QSemaphore::tryAcquire() semaphore.release(); QCOMPARE(semaphore.available(), 1); QVERIFY(!semaphore.tryAcquire(2)); + QVERIFY(!semaphore.tryAcquire(2, 0)); QCOMPARE(semaphore.available(), 1); semaphore.release(); QCOMPARE(semaphore.available(), 2); QVERIFY(!semaphore.tryAcquire(3)); + QVERIFY(!semaphore.tryAcquire(3, 0)); QCOMPARE(semaphore.available(), 2); semaphore.release(10); QCOMPARE(semaphore.available(), 12); QVERIFY(!semaphore.tryAcquire(100)); + QVERIFY(!semaphore.tryAcquire(100, 0)); QCOMPARE(semaphore.available(), 12); semaphore.release(10); QCOMPARE(semaphore.available(), 22); QVERIFY(!semaphore.tryAcquire(100)); + QVERIFY(!semaphore.tryAcquire(100, 0)); QCOMPARE(semaphore.available(), 22); QVERIFY(semaphore.tryAcquire()); @@ -178,23 +184,38 @@ void tst_QSemaphore::tryAcquire() QVERIFY(semaphore.tryAcquire()); QCOMPARE(semaphore.available(), 20); + semaphore.release(2); + QVERIFY(semaphore.tryAcquire(1, 0)); + QCOMPARE(semaphore.available(), 21); + + QVERIFY(semaphore.tryAcquire(1, 0)); + QCOMPARE(semaphore.available(), 20); + QVERIFY(semaphore.tryAcquire(10)); QCOMPARE(semaphore.available(), 10); + semaphore.release(10); + QVERIFY(semaphore.tryAcquire(10, 0)); + QCOMPARE(semaphore.available(), 10); + QVERIFY(semaphore.tryAcquire(10)); QCOMPARE(semaphore.available(), 0); // should not be able to acquire more QVERIFY(!semaphore.tryAcquire()); + QVERIFY(!semaphore.tryAcquire(1, 0)); QCOMPARE(semaphore.available(), 0); QVERIFY(!semaphore.tryAcquire()); + QVERIFY(!semaphore.tryAcquire(1, 0)); QCOMPARE(semaphore.available(), 0); QVERIFY(!semaphore.tryAcquire(10)); + QVERIFY(!semaphore.tryAcquire(10, 0)); QCOMPARE(semaphore.available(), 0); QVERIFY(!semaphore.tryAcquire(10)); + QVERIFY(!semaphore.tryAcquire(10, 0)); QCOMPARE(semaphore.available(), 0); } @@ -344,6 +365,48 @@ void tst_QSemaphore::tryAcquireWithTimeoutStarvation() QVERIFY(consumer.wait()); } +void tst_QSemaphore::tryAcquireWithTimeoutForever_data() +{ + QTest::addColumn("timeout"); + QTest::newRow("-1") << -1; + + // tryAcquire is documented to take any negative value as "forever" + QTest::newRow("INT_MIN") << INT_MIN; +} + +void tst_QSemaphore::tryAcquireWithTimeoutForever() +{ + enum { WaitTime = 1000 }; + struct Thread : public QThread { + QSemaphore sem; + + void run() override + { + QTest::qWait(WaitTime); + sem.release(2); + } + }; + + QFETCH(int, timeout); + Thread t; + + // sanity check it works if we can immediately acquire + t.sem.release(11); + QVERIFY(t.sem.tryAcquire(1, timeout)); + QVERIFY(t.sem.tryAcquire(10, timeout)); + + // verify that we do wait for at least WaitTime if we can't acquire immediately + QElapsedTimer timer; + timer.start(); + t.start(); + QVERIFY(t.sem.tryAcquire(1, timeout)); + QVERIFY(timer.elapsed() >= WaitTime); + + QVERIFY(t.wait()); + + QCOMPARE(t.sem.available(), 1); +} + const char alphabet[] = "ACGTH"; const int AlphabetSize = sizeof(alphabet) - 1; From 4d8ae444c2b15ec7da5ef133aa5ad5a548180e21 Mon Sep 17 00:00:00 2001 From: BogDan Vatra Date: Wed, 15 Nov 2017 19:19:12 +0200 Subject: [PATCH 03/50] No debugging and extra env & params processing on sealed packages A "sealed" package is a *release build and signed* Qt for Android package with no debugging capabilities. By default sealed packages have no debugging capabilities, but the user can force debugging capabilities also on a sealed package. This is useful in corner cases when the user really needs to debug a sealed package. Change-Id: I840526092556067f2659facf1525861bbabe0edd Reviewed-by: Eskil Abrahamsen Blomfeldt --- .../qt5/android/QtActivityDelegate.java | 305 +++++++++--------- 1 file changed, 155 insertions(+), 150 deletions(-) diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java index 32d4abf43af..0f02304f9e5 100644 --- a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java +++ b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java @@ -720,184 +720,189 @@ public class QtActivityDelegate Bundle extras = m_activity.getIntent().getExtras(); if (extras != null) { - if ( /*(ai.flags&ApplicationInfo.FLAG_DEBUGGABLE) != 0 - &&*/ extras.containsKey("debug_ping") - && extras.getString("debug_ping").equals("true")) { - try { - final String dc = "--Added-by-androiddeployqt--/debugger.command"; - String debuggerCommand = - new BufferedReader(new InputStreamReader(m_activity.getAssets().open(dc))).readLine(); - String packagePath = - m_activity.getPackageManager().getApplicationInfo(m_activity.getPackageName(), - PackageManager.GET_CONFIGURATIONS).dataDir + "/"; + try { + final String dc = "--Added-by-androiddeployqt--/debugger.command"; + String debuggerCommand = + new BufferedReader(new InputStreamReader(m_activity.getAssets().open(dc))).readLine(); + if ( /*(ai.flags&ApplicationInfo.FLAG_DEBUGGABLE) != 0 + &&*/ extras.containsKey("debug_ping") + && extras.getString("debug_ping").equals("true")) { + try { + String packagePath = + m_activity.getPackageManager().getApplicationInfo(m_activity.getPackageName(), + PackageManager.GET_CONFIGURATIONS).dataDir + "/"; - debugLog("extra parameters: " + extras); - String packageName = m_activity.getPackageName(); - String pingFile = extras.getString("ping_file"); - String pongFile = extras.getString("pong_file"); - String gdbserverSocket = extras.getString("gdbserver_socket"); - String gdbserverCommand = packagePath + debuggerCommand + gdbserverSocket; - String pingSocket = extras.getString("ping_socket"); - boolean usePing = pingFile != null; - boolean usePong = pongFile != null; - boolean useSocket = gdbserverSocket != null; - boolean usePingSocket = pingSocket != null; - int napTime = 200; // milliseconds between file accesses - int timeOut = 30000; // ms until we give up on ping and pong - int maxAttempts = timeOut / napTime; + debugLog("extra parameters: " + extras); + String packageName = m_activity.getPackageName(); + String pingFile = extras.getString("ping_file"); + String pongFile = extras.getString("pong_file"); + String gdbserverSocket = extras.getString("gdbserver_socket"); + String gdbserverCommand = packagePath + debuggerCommand + gdbserverSocket; + String pingSocket = extras.getString("ping_socket"); + boolean usePing = pingFile != null; + boolean usePong = pongFile != null; + boolean useSocket = gdbserverSocket != null; + boolean usePingSocket = pingSocket != null; + int napTime = 200; // milliseconds between file accesses + int timeOut = 30000; // ms until we give up on ping and pong + int maxAttempts = timeOut / napTime; - if (gdbserverSocket != null) { - debugLog("removing gdb socket " + gdbserverSocket); - new File(gdbserverSocket).delete(); - } - - if (usePing) { - debugLog("removing ping file " + pingFile); - File ping = new File(pingFile); - if (ping.exists()) { - if (!ping.delete()) - debugLog("ping file cannot be deleted"); + if (gdbserverSocket != null) { + debugLog("removing gdb socket " + gdbserverSocket); + new File(gdbserverSocket).delete(); } - } - if (usePong) { - debugLog("removing pong file " + pongFile); - File pong = new File(pongFile); - if (pong.exists()) { - if (!pong.delete()) - debugLog("pong file cannot be deleted"); - } - } - - debugLog("starting " + gdbserverCommand); - m_debuggerProcess = Runtime.getRuntime().exec(gdbserverCommand); - debugLog("gdbserver started"); - - if (useSocket) { - int i; - for (i = 0; i < maxAttempts; ++i) { - debugLog("waiting for socket at " + gdbserverSocket + ", attempt " + i); - File file = new File(gdbserverSocket); - if (file.exists()) { - file.setReadable(true, false); - file.setWritable(true, false); - file.setExecutable(true, false); - break; + if (usePing) { + debugLog("removing ping file " + pingFile); + File ping = new File(pingFile); + if (ping.exists()) { + if (!ping.delete()) + debugLog("ping file cannot be deleted"); } - Thread.sleep(napTime); } - if (i == maxAttempts) { - debugLog("time out when waiting for debug socket"); - return false; + if (usePong) { + debugLog("removing pong file " + pongFile); + File pong = new File(pongFile); + if (pong.exists()) { + if (!pong.delete()) + debugLog("pong file cannot be deleted"); + } } - debugLog("socket ok"); - } else { - debugLog("socket not used"); - } + debugLog("starting " + gdbserverCommand); + m_debuggerProcess = Runtime.getRuntime().exec(gdbserverCommand); + debugLog("gdbserver started"); - if (usePingSocket) { - DebugWaitRunnable runnable = new DebugWaitRunnable(pingSocket); - Thread waitThread = new Thread(runnable); - waitThread.start(); + if (useSocket) { + int i; + for (i = 0; i < maxAttempts; ++i) { + debugLog("waiting for socket at " + gdbserverSocket + ", attempt " + i); + File file = new File(gdbserverSocket); + if (file.exists()) { + file.setReadable(true, false); + file.setWritable(true, false); + file.setExecutable(true, false); + break; + } + Thread.sleep(napTime); + } - int i; - for (i = 0; i < maxAttempts && waitThread.isAlive(); ++i) { - debugLog("Waiting for debug socket connect"); - debugLog("go to sleep"); - Thread.sleep(napTime); - } + if (i == maxAttempts) { + debugLog("time out when waiting for debug socket"); + return false; + } - if (i == maxAttempts) { - debugLog("time out when waiting for ping socket"); - runnable.shutdown(); - return false; - } - - if (runnable.wasFailure) { - debugLog("Could not connect to debug client"); - return false; + debugLog("socket ok"); } else { - debugLog("Got pid acknowledgment"); + debugLog("socket not used"); } - } - if (usePing) { - // Tell we are ready. - debugLog("writing ping at " + pingFile); - FileWriter writer = new FileWriter(pingFile); - writer.write("" + android.os.Process.myPid()); - writer.close(); - File file = new File(pingFile); - file.setReadable(true, false); - file.setWritable(true, false); - file.setExecutable(true, false); - debugLog("wrote ping"); - } else { - debugLog("ping not requested"); - } + if (usePingSocket) { + DebugWaitRunnable runnable = new DebugWaitRunnable(pingSocket); + Thread waitThread = new Thread(runnable); + waitThread.start(); - // Wait until other side is ready. - if (usePong) { - int i; - for (i = 0; i < maxAttempts; ++i) { - debugLog("waiting for pong at " + pongFile + ", attempt " + i); - File file = new File(pongFile); - if (file.exists()) { - file.delete(); - break; + int i; + for (i = 0; i < maxAttempts && waitThread.isAlive(); ++i) { + debugLog("Waiting for debug socket connect"); + debugLog("go to sleep"); + Thread.sleep(napTime); } - debugLog("go to sleep"); - Thread.sleep(napTime); - } - debugLog("Removing pingFile " + pingFile); - new File(pingFile).delete(); - if (i == maxAttempts) { - debugLog("time out when waiting for pong file"); - return false; + if (i == maxAttempts) { + debugLog("time out when waiting for ping socket"); + runnable.shutdown(); + return false; + } + + if (runnable.wasFailure) { + debugLog("Could not connect to debug client"); + return false; + } else { + debugLog("Got pid acknowledgment"); + } } - debugLog("got pong " + pongFile); - } else { - debugLog("pong not requested"); + if (usePing) { + // Tell we are ready. + debugLog("writing ping at " + pingFile); + FileWriter writer = new FileWriter(pingFile); + writer.write("" + android.os.Process.myPid()); + writer.close(); + File file = new File(pingFile); + file.setReadable(true, false); + file.setWritable(true, false); + file.setExecutable(true, false); + debugLog("wrote ping"); + } else { + debugLog("ping not requested"); + } + + // Wait until other side is ready. + if (usePong) { + int i; + for (i = 0; i < maxAttempts; ++i) { + debugLog("waiting for pong at " + pongFile + ", attempt " + i); + File file = new File(pongFile); + if (file.exists()) { + file.delete(); + break; + } + debugLog("go to sleep"); + Thread.sleep(napTime); + } + debugLog("Removing pingFile " + pingFile); + new File(pingFile).delete(); + + if (i == maxAttempts) { + debugLog("time out when waiting for pong file"); + return false; + } + + debugLog("got pong " + pongFile); + } else { + debugLog("pong not requested"); + } + + } catch (IOException ioe) { + ioe.printStackTrace(); + } catch (SecurityException se) { + se.printStackTrace(); } - - } catch (IOException ioe) { - ioe.printStackTrace(); - } catch (SecurityException se) { - se.printStackTrace(); } - } - if (/*(ai.flags&ApplicationInfo.FLAG_DEBUGGABLE) != 0 - &&*/ extras.containsKey("qml_debug") - && extras.getString("qml_debug").equals("true")) { - String qmljsdebugger; - if (extras.containsKey("qmljsdebugger")) { - qmljsdebugger = extras.getString("qmljsdebugger"); - qmljsdebugger.replaceAll("\\s", ""); // remove whitespace for security - } else { - qmljsdebugger = "port:3768"; + if (/*(ai.flags&ApplicationInfo.FLAG_DEBUGGABLE) != 0 + &&*/ extras.containsKey("qml_debug") + && extras.getString("qml_debug").equals("true")) { + String qmljsdebugger; + if (extras.containsKey("qmljsdebugger")) { + qmljsdebugger = extras.getString("qmljsdebugger"); + qmljsdebugger.replaceAll("\\s", ""); // remove whitespace for security + } else { + qmljsdebugger = "port:3768"; + } + m_applicationParameters += "\t-qmljsdebugger=" + qmljsdebugger; } - m_applicationParameters += "\t-qmljsdebugger=" + qmljsdebugger; - } - if (extras.containsKey("extraenvvars")) { - try { - m_environmentVariables += "\t" + new String(Base64.decode(extras.getString("extraenvvars"), Base64.DEFAULT), "UTF-8"); - } catch (Exception e) { - e.printStackTrace(); + if (extras.containsKey("extraenvvars")) { + try { + m_environmentVariables += "\t" + new String(Base64.decode(extras.getString("extraenvvars"), Base64.DEFAULT), "UTF-8"); + } catch (Exception e) { + e.printStackTrace(); + } } - } - if (extras.containsKey("extraappparams")) { - try { - m_applicationParameters += "\t" + new String(Base64.decode(extras.getString("extraappparams"), Base64.DEFAULT), "UTF-8"); - } catch (Exception e) { - e.printStackTrace(); + if (extras.containsKey("extraappparams")) { + try { + m_applicationParameters += "\t" + new String(Base64.decode(extras.getString("extraappparams"), Base64.DEFAULT), "UTF-8"); + } catch (Exception e) { + e.printStackTrace(); + } } + } catch (Exception e) { + // This is not an error, so keep it silent + // e.printStackTrace(); } } // extras != null From ce08318a46164172eaa72f4436cddf7f69ce9e1c Mon Sep 17 00:00:00 2001 From: Svenn-Arne Dragly Date: Wed, 20 Sep 2017 09:28:27 +0200 Subject: [PATCH 04/50] Add QThreadPool autotest to detect stale threads after tryTake This test makes sure that we do not introduce a regression where the threads exited the inner loop over the queue before the queue was empty. This was triggered by calling tryTake at least maxThreadCount times, which left the same number of null pointers in the queue and caused the inner loop to exit too soon for all the threads. Change-Id: I3a9d800149b88d09510ddc424667670b60f06a33 Reviewed-by: Lars Knoll --- .../thread/qthreadpool/tst_qthreadpool.cpp | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/tests/auto/corelib/thread/qthreadpool/tst_qthreadpool.cpp b/tests/auto/corelib/thread/qthreadpool/tst_qthreadpool.cpp index 66853a88d87..0eaf8a4b771 100644 --- a/tests/auto/corelib/thread/qthreadpool/tst_qthreadpool.cpp +++ b/tests/auto/corelib/thread/qthreadpool/tst_qthreadpool.cpp @@ -94,6 +94,7 @@ private slots: void destroyingWaitsForTasksToFinish(); void stressTest(); void takeAllAndIncreaseMaxThreadCount(); + void waitForDoneAfterTake(); private: QMutex m_functionTestMutex; @@ -1263,5 +1264,72 @@ void tst_QThreadPool::takeAllAndIncreaseMaxThreadCount() { delete task3; } +void tst_QThreadPool::waitForDoneAfterTake() +{ + class Task : public QRunnable + { + public: + Task(QSemaphore *mainBarrier, QSemaphore *threadBarrier) + : m_mainBarrier(mainBarrier) + , m_threadBarrier(threadBarrier) + {} + + void run() + { + m_mainBarrier->release(); + m_threadBarrier->acquire(); + } + + private: + QSemaphore *m_mainBarrier = nullptr; + QSemaphore *m_threadBarrier = nullptr; + }; + + int threadCount = 4; + + // Blocks the main thread from releasing the threadBarrier before all run() functions have started + QSemaphore mainBarrier; + // Blocks the tasks from completing their run function + QSemaphore threadBarrier; + + QThreadPool manager; + manager.setMaxThreadCount(threadCount); + + // Fill all the threads with runnables that wait for the threadBarrier + for (int i = 0; i < threadCount; i++) { + auto *task = new Task(&mainBarrier, &threadBarrier); + manager.start(task); + } + + QVERIFY(manager.activeThreadCount() == manager.maxThreadCount()); + + // Add runnables that are immediately removed from the pool queue. + // This sets the queue elements to nullptr in QThreadPool and we want to test that + // the threads keep going through the queue after encountering a nullptr. + for (int i = 0; i < threadCount; i++) { + QRunnable *runnable = createTask(emptyFunct); + manager.start(runnable); + QVERIFY(manager.tryTake(runnable)); + } + + // Add another runnable that will not be removed + manager.start(createTask(emptyFunct)); + + // Wait for the first runnables to start + mainBarrier.acquire(threadCount); + + QVERIFY(mainBarrier.available() == 0); + QVERIFY(threadBarrier.available() == 0); + + // Release runnables that are waiting and expect all runnables to complete + threadBarrier.release(threadCount); + + // Using qFatal instead of QVERIFY to force exit if threads are still running after timeout. + // Otherwise, QCoreApplication will still wait for the stale threads and never exit the test. + if (!manager.waitForDone(5 * 60 * 1000)) + qFatal("waitForDone returned false. Aborting to stop background threads."); + +} + QTEST_MAIN(tst_QThreadPool); #include "tst_qthreadpool.moc" From 77ee9bd1d3917b2bb1e442433ef0189e9e281e51 Mon Sep 17 00:00:00 2001 From: Eirik Aavitsland Date: Tue, 31 Oct 2017 13:46:32 +0100 Subject: [PATCH 05/50] QPixmap without QGuiApplication: do not crash, terminate gracefully Any attempt to create a non-null QPixmap in a QCoreApplication-based app would give a hard crash without a warning. This commit adds a check and instead calls qFatal with an explanatory message. This was originally fixed in Qt 4 (ref. QTBUG-17873) but that was lost in the migration to Qt 5. Note that this fix still allows null QPixmaps to be created under QCoreApplication, since that has worked in all Qt 5 versions. Task-number: QTBUG-53572 Task-number: QTBUG-64125 Change-Id: I60ae29b90f1bd3663aeed2ce88dc1690fe66552c Reviewed-by: Lars Knoll --- src/gui/image/qplatformpixmap.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/gui/image/qplatformpixmap.cpp b/src/gui/image/qplatformpixmap.cpp index 00c21a5f54f..b3b9f79fb14 100644 --- a/src/gui/image/qplatformpixmap.cpp +++ b/src/gui/image/qplatformpixmap.cpp @@ -58,6 +58,9 @@ QT_BEGIN_NAMESPACE */ QPlatformPixmap *QPlatformPixmap::create(int w, int h, PixelType type) { + if (Q_UNLIKELY(!QGuiApplicationPrivate::platformIntegration())) + qFatal("QPlatformPixmap: QGuiApplication required"); + QPlatformPixmap *data = QGuiApplicationPrivate::platformIntegration()->createPlatformPixmap(static_cast(type)); data->resize(w, h); return data; From 4532a9590b0859c7504a15f679df2bfaee726874 Mon Sep 17 00:00:00 2001 From: Gabriel de Dietrich Date: Tue, 14 Nov 2017 09:28:06 -0700 Subject: [PATCH 06/50] QToolBar: Don't crash on macOS with 'minimal' QPA plugin 'minimal' doesn't provide any native interface. Change-Id: I116c9905977ccc6ededf0c6c41b92b6f785f2875 Reviewed-by: Jake Petroules --- src/widgets/widgets/qtoolbar.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/widgets/widgets/qtoolbar.cpp b/src/widgets/widgets/qtoolbar.cpp index 663e8214c0c..243fb6d5554 100644 --- a/src/widgets/widgets/qtoolbar.cpp +++ b/src/widgets/widgets/qtoolbar.cpp @@ -1120,6 +1120,8 @@ static bool waitForPopup(QToolBar *tb, QWidget *popup) static void enableMacToolBar(QToolBar *toolbar, bool enable) { QPlatformNativeInterface *nativeInterface = QApplication::platformNativeInterface(); + if (!nativeInterface) + return; QPlatformNativeInterface::NativeResourceForIntegrationFunction function = nativeInterface->nativeResourceFunctionForIntegration("setContentBorderAreaEnabled"); if (!function) From f55a40ac039ee1734ddf06c0ddb33cf760b6ebb9 Mon Sep 17 00:00:00 2001 From: Gabriel de Dietrich Date: Tue, 14 Nov 2017 09:23:49 -0700 Subject: [PATCH 07/50] Menurama: Fix custom application class constructor signature Change-Id: I989b9205dde9280f97dedbaad47ef4a8d75004ac Reviewed-by: Jake Petroules --- tests/manual/cocoa/menurama/menuramaapplication.cpp | 2 +- tests/manual/cocoa/menurama/menuramaapplication.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/manual/cocoa/menurama/menuramaapplication.cpp b/tests/manual/cocoa/menurama/menuramaapplication.cpp index acd44565ebe..4cd741000e5 100644 --- a/tests/manual/cocoa/menurama/menuramaapplication.cpp +++ b/tests/manual/cocoa/menurama/menuramaapplication.cpp @@ -28,7 +28,7 @@ #include "menuramaapplication.h" -MenuramaApplication::MenuramaApplication(int argc, char **argv) +MenuramaApplication::MenuramaApplication(int &argc, char **argv) : QApplication (argc, argv) { #if 0 diff --git a/tests/manual/cocoa/menurama/menuramaapplication.h b/tests/manual/cocoa/menurama/menuramaapplication.h index 1a5a55e0ff2..2d836832fae 100644 --- a/tests/manual/cocoa/menurama/menuramaapplication.h +++ b/tests/manual/cocoa/menurama/menuramaapplication.h @@ -36,7 +36,7 @@ class MenuramaApplication : public QApplication { public: - MenuramaApplication(int argc, char **argv); + MenuramaApplication(int &argc, char **argv); void addDynMenu(QLatin1String title, QMenu *parentMenu); QAction *findAction(QLatin1String title, QMenu *parentMenu); From 5c0a9fc532d70ae784cca3e16b5fe59862902815 Mon Sep 17 00:00:00 2001 From: Christian Ehrlicher Date: Wed, 15 Nov 2017 14:55:48 +0100 Subject: [PATCH 08/50] QTableView: do not draw grid behind last section QTableView::paintEvent() drawed the grid lines behind the last section when the region to repaint contained rects which were completely behind the last section. This also lead to unnecessary repaints for cells inside rect.top() to rect.bottom() Task-number: QTBUG-60219 Change-Id: I42bb42bea504dfd3c92352ac5c65a43c246a05af Reviewed-by: Richard Moe Gustavsen --- src/widgets/itemviews/qtableview.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/widgets/itemviews/qtableview.cpp b/src/widgets/itemviews/qtableview.cpp index 2d5813198c2..8ab811e9f77 100644 --- a/src/widgets/itemviews/qtableview.cpp +++ b/src/widgets/itemviews/qtableview.cpp @@ -1397,6 +1397,9 @@ void QTableView::paintEvent(QPaintEvent *event) } else { dirtyArea.setRight(qMin(dirtyArea.right(), int(x))); } + // dirtyArea may be invalid when the horizontal header is not stretched + if (!dirtyArea.isValid()) + continue; // get the horizontal start and end visual sections int left = horizontalHeader->visualIndexAt(dirtyArea.left()); From ba2f3a156ebc9ce3e6b6e59e231a5c2847163671 Mon Sep 17 00:00:00 2001 From: Christian Ehrlicher Date: Sun, 12 Nov 2017 13:33:25 +0100 Subject: [PATCH 09/50] QTreeView: recalculate row heights in hide/showColumn() When calling QTreeView::hideColumn() the row heights are not recalculated. This can lead to rows which are unnecessarily high due to hidden columns may contain large (e.g. multiline) content. The same applies to showColumn() - there the row might be to small. Hiding columns directly via QTreeView::header()->hideSection() is not covered by this patch since QHeaderView has no way to inform about newly shown/hidden sections. Task-number: QTBUG-8376 Change-Id: I20b1198e56e403ab8cf649af76e5e2280821dd68 Reviewed-by: Richard Moe Gustavsen --- src/widgets/itemviews/qtreeview.cpp | 6 +++ .../itemviews/qtreeview/tst_qtreeview.cpp | 47 +++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/src/widgets/itemviews/qtreeview.cpp b/src/widgets/itemviews/qtreeview.cpp index 2abb1a9c14f..805b855b9d2 100644 --- a/src/widgets/itemviews/qtreeview.cpp +++ b/src/widgets/itemviews/qtreeview.cpp @@ -736,7 +736,10 @@ void QTreeView::dataChanged(const QModelIndex &topLeft, const QModelIndex &botto void QTreeView::hideColumn(int column) { Q_D(QTreeView); + if (d->header->isSectionHidden(column)) + return; d->header->hideSection(column); + doItemsLayout(); } /*! @@ -747,7 +750,10 @@ void QTreeView::hideColumn(int column) void QTreeView::showColumn(int column) { Q_D(QTreeView); + if (!d->header->isSectionHidden(column)) + return; d->header->showSection(column); + doItemsLayout(); } /*! diff --git a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp index 6ee0e50cced..3260d7c9689 100644 --- a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp +++ b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp @@ -193,6 +193,7 @@ private slots: void taskQTBUG_37813_crash(); void taskQTBUG_45697_crash(); void taskQTBUG_7232_AllowUserToControlSingleStep(); + void taskQTBUG_8376(); void testInitialFocus(); }; @@ -4399,5 +4400,51 @@ void tst_QTreeView::taskQTBUG_7232_AllowUserToControlSingleStep() QCOMPARE(hStep1, t.horizontalScrollBar()->singleStep()); } +static void fillModeltaskQTBUG_8376(QAbstractItemModel &model) +{ + model.insertRow(0); + model.insertColumn(0); + model.insertColumn(1); + QModelIndex index = model.index(0, 0); + model.setData(index, "Level0"); + { + model.insertRow(0, index); + model.insertRow(1, index); + model.insertColumn(0, index); + model.insertColumn(1, index); + + QModelIndex idx; + idx = model.index(0, 0, index); + model.setData(idx, "Level1"); + + idx = model.index(0, 1, index); + model.setData(idx, "very\nvery\nhigh\ncell"); + } +} + +void tst_QTreeView::taskQTBUG_8376() +{ + QTreeView tv; + QStandardItemModel model; + fillModeltaskQTBUG_8376(model); + tv.setModel(&model); + tv.expandAll(); // init layout + + QModelIndex idxLvl0 = model.index(0, 0); + QModelIndex idxLvl1 = model.index(0, 1, idxLvl0); + const int rowHeightLvl0 = tv.rowHeight(idxLvl0); + const int rowHeightLvl1Visible = tv.rowHeight(idxLvl1); + QVERIFY(rowHeightLvl0 < rowHeightLvl1Visible); + + tv.hideColumn(1); + const int rowHeightLvl1Hidden = tv.rowHeight(idxLvl1); + QCOMPARE(rowHeightLvl0, rowHeightLvl1Hidden); + + tv.showColumn(1); + const int rowHeightLvl1Visible2 = tv.rowHeight(idxLvl1); + QCOMPARE(rowHeightLvl1Visible, rowHeightLvl1Visible2); +} + + QTEST_MAIN(tst_QTreeView) #include "tst_qtreeview.moc" From 8e387e7fa758ded3f0d096dcf5fe13a22521dad7 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 16 Nov 2017 10:58:54 -0800 Subject: [PATCH 10/50] qsimd.cpp: Remove workaround for GCC 4.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit That's long fallen out of support in Qt. Change-Id: I938b024e38bf4aac9154fffd14f7a603baa24e04 Reviewed-by: Tor Arne Vestbø --- src/corelib/tools/qsimd.cpp | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/src/corelib/tools/qsimd.cpp b/src/corelib/tools/qsimd.cpp index 4c6f08c7746..25340f2d029 100644 --- a/src/corelib/tools/qsimd.cpp +++ b/src/corelib/tools/qsimd.cpp @@ -652,32 +652,6 @@ Q_CORE_EXPORT QBasicAtomicInteger qt_cpu_features[2] = { Q_BASIC_ATOMI void qDetectCpuFeatures() { -#if defined(Q_CC_GNU) && !defined(Q_CC_CLANG) && !defined(Q_CC_INTEL) -# if Q_CC_GNU < 403 - // GCC 4.2 (at least the one that comes with Apple's XCode, on Mac) is - // known to be broken beyond repair in dealing with the inline assembly - // above. It will generate bad code that could corrupt important registers - // like the PIC register. The behaviour of code after this function would - // be totally unpredictable. - // - // For that reason, simply forego the CPUID check at all and return the set - // of features that we found at compile time, through the #defines from the - // compiler. This should at least allow code to execute, even if none of - // the specialized code found in Qt GUI and elsewhere will ever be enabled - // (it's the user's fault for using a broken compiler). - // - // This also disables the runtime checking that the processor actually - // contains all the features that the code required. Qt 4 ran for years - // like that, so it shouldn't be a problem. - - qt_cpu_features[0].store(minFeature | quint32(QSimdInitialized)); -#ifndef Q_ATOMIC_INT64_IS_SUPPORTED - qt_cpu_features[1].store(minFeature >> 32); -#endif - - return; -# endif -#endif quint64 f = detectProcessorFeatures(); QByteArray disable = qgetenv("QT_NO_CPU_FEATURE"); if (!disable.isEmpty()) { From a78cae73b185a045f402c82a00e8c39111380775 Mon Sep 17 00:00:00 2001 From: Nico Vertriest Date: Mon, 18 Sep 2017 13:47:37 +0200 Subject: [PATCH 11/50] Doc: review Star Delegate Example - update screenshot - minor corrections description example Task-number: QTBUG-60635 Change-Id: I2351160ee9ec0a926fddb122e720c887f851dba5 Reviewed-by: Venugopal Shivashankar --- examples/widgets/doc/src/stardelegate.qdoc | 16 ++++++++-------- src/widgets/doc/images/stardelegate.png | Bin 12230 -> 21528 bytes 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/examples/widgets/doc/src/stardelegate.qdoc b/examples/widgets/doc/src/stardelegate.qdoc index dcc70804564..44d17662ca9 100644 --- a/examples/widgets/doc/src/stardelegate.qdoc +++ b/examples/widgets/doc/src/stardelegate.qdoc @@ -37,7 +37,7 @@ When displaying data in a QListView, QTableView, or QTreeView, the individual items are drawn by a \l{Delegate Classes}{delegate}. Also, when the user starts - editing an item (e.g., by double-clicking the item), the delegate + editing an item (for example, by double-clicking the item), the delegate provides an editor widget that is placed on top of the item while editing takes place. @@ -96,9 +96,9 @@ QItemDelegate paint it for us. This ensures that the \c StarDelegate can handle the most common data types. - In the case where the item is a \c StarRating, we draw the - background if the item is selected, and we draw the item using \c - StarRating::paint(), which we will review later. + If the item is a \c StarRating, we draw the background if the + item is selected, and we draw the item using \c StarRating::paint(), + which we will review later. \c{StartRating}s can be stored in a QVariant thanks to the Q_DECLARE_METATYPE() macro appearing in \c starrating.h. More on @@ -133,8 +133,8 @@ We simply call \c setStarRating() on the editor. The \l{QAbstractItemDelegate::}{setModelData()} function is - called when editing is finished, to commit data from the editor - to the model: + called to commit data from the editor to the model when editing + is finished: \snippet itemviews/stardelegate/stardelegate.cpp 4 @@ -210,7 +210,7 @@ current rating, and \c myMaxStarCount stores the highest possible rating (typically 5). - The Q_DECLARE_METATYPE() macro makes the type \c StarRating known + The \c Q_DECLARE_METATYPE() macro makes the type \c StarRating known to QVariant, making it possible to store \c StarRating values in QVariant. @@ -283,7 +283,7 @@ \list \li It is possible to open editors programmatically by calling QAbstractItemView::edit(), instead of relying on edit - triggers. This could be use to support other edit triggers + triggers. This could be used to support other edit triggers than those offered by the QAbstractItemView::EditTrigger enum. For example, in the Star Delegate example, hovering over an item with the mouse might make sense as a way to pop up an diff --git a/src/widgets/doc/images/stardelegate.png b/src/widgets/doc/images/stardelegate.png index 24fa9fb0d77cb003bb6a509e567b54a197faa1a9..66f55c5fc74681ce527b4b0ec967e785f8aaa4ca 100644 GIT binary patch literal 21528 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 literal 12230 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 GLjDgJs Date: Thu, 14 Sep 2017 17:10:12 +0200 Subject: [PATCH 12/50] Doc: add doc to Style Sheet example Task-number: QTBUG-60635 Change-Id: I6c80427bce1efc67bbf4ec67b0afeafc27088d79 Reviewed-by: Martin Smith --- examples/widgets/doc/src/stylesheet.qdoc | 51 ++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/examples/widgets/doc/src/stylesheet.qdoc b/examples/widgets/doc/src/stylesheet.qdoc index 0016836f0dd..a86b697059b 100644 --- a/examples/widgets/doc/src/stylesheet.qdoc +++ b/examples/widgets/doc/src/stylesheet.qdoc @@ -33,5 +33,56 @@ \borderedimage stylesheet-pagefold.png \caption Screen Shot of the Pagefold style sheet + + The Style Sheet example shows how widgets can be styled using Qt Style Sheets. + You can open the style editor by selecting \uicontrol File > \uicontrol Edit Style Sheet, + to select an existing style sheet or design your own style and load it. + + The Style Sheet example consists of 2 classes: + \list + \li \c MainWindow + \li \c StyleSheetEditor + \endlist + + + \section1 MainWindow Class + + \c MainWindow inherits QWidget, and is the application's main window defined in + \c mainwindow.ui. The style of \c MainWindow can be modified with \l StyleSheetEditor. + + + \section1 StyleSheetEditor Class + + \c StyleSheetEditor enables you to open an editor where you can load an existing style sheet. + It is also possible to define a new stylesheet and load it. Its layout is defined in + \c stylesheeteditor.ui. + + \quotefromfile widgets/stylesheet/stylesheeteditor.cpp + \skipto on_styleCombo_activated + \printline on_styleCombo_activated + + Sets the specified \a styleName and grays the \c applyButton. + + \skipto on_styleSheetCombo_activated + \printline on_styleSheetCombo_activated + + Loads the stylesheet from \c styleSheetName. + + \skipto on_styleTextEdit_textChanged() + \printline on_styleTextEdit_textChanged() + + Enables the \c applyButton when the text in the buffer has changed. + + \skipto on_applyButton_clicked() + \printline on_applyButton_clicked() + + Sets the stylesheet properties in \l qApp and disables the \c applyButton. + + \skipto loadStyleSheet(const QString &sheetName) + \printline loadStyleSheet(const QString &sheetName) + + Loads the specified \a sheetName, and sets its properties in + \l qApp. + */ From f39f813113d71ec7acb0ae99f6ee1ee64e76935c Mon Sep 17 00:00:00 2001 From: Nico Vertriest Date: Tue, 24 Oct 2017 15:22:23 +0200 Subject: [PATCH 13/50] Doc: drop Lighting Effect Example Task-number: QTBUG-60635 Change-Id: If455a778ff6ebd53d8110b3dc25d8b9e27255bac Reviewed-by: Frederik Gladhorn Reviewed-by: Nico Vertriest --- doc/src/images/lightingeffect-example.png | Bin 41132 -> 0 bytes examples/widgets/doc/src/lighting.qdoc | 35 ----- examples/widgets/effects/effects.pro | 1 - .../widgets/effects/lighting/lighting.cpp | 145 ------------------ examples/widgets/effects/lighting/lighting.h | 80 ---------- .../widgets/effects/lighting/lighting.pro | 8 - examples/widgets/effects/lighting/main.cpp | 65 -------- 7 files changed, 334 deletions(-) delete mode 100644 doc/src/images/lightingeffect-example.png delete mode 100644 examples/widgets/doc/src/lighting.qdoc delete mode 100644 examples/widgets/effects/lighting/lighting.cpp delete mode 100644 examples/widgets/effects/lighting/lighting.h delete mode 100644 examples/widgets/effects/lighting/lighting.pro delete mode 100644 examples/widgets/effects/lighting/main.cpp diff --git a/doc/src/images/lightingeffect-example.png b/doc/src/images/lightingeffect-example.png deleted file mode 100644 index d9dc990481741cf11208fe4921b7306d7eb8334c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41132 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 diff --git a/examples/widgets/doc/src/lighting.qdoc b/examples/widgets/doc/src/lighting.qdoc deleted file mode 100644 index 994172cf5d8..00000000000 --- a/examples/widgets/doc/src/lighting.qdoc +++ /dev/null @@ -1,35 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \example effects/lighting - \title Lighting Effect Example - \ingroup examples-graphicsview-graphicseffects - \brief Demonstrates how to apply effects on items in the view - - \image lightingeffect-example.png -*/ diff --git a/examples/widgets/effects/effects.pro b/examples/widgets/effects/effects.pro index 795e0508ac0..05911979b95 100644 --- a/examples/widgets/effects/effects.pro +++ b/examples/widgets/effects/effects.pro @@ -2,5 +2,4 @@ TEMPLATE = \ subdirs SUBDIRS = \ blurpicker \ - lighting \ fademessage diff --git a/examples/widgets/effects/lighting/lighting.cpp b/examples/widgets/effects/lighting/lighting.cpp deleted file mode 100644 index 1ba7dd9ce78..00000000000 --- a/examples/widgets/effects/lighting/lighting.cpp +++ /dev/null @@ -1,145 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** BSD License Usage -** Alternatively, you may use this file under the terms of the BSD license -** as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of The Qt Company Ltd nor the names of its -** contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "lighting.h" -#include -#include - -Lighting::Lighting(QWidget *parent): QGraphicsView(parent), angle(0.0) -{ - setScene(&m_scene); - - setupScene(); - - QTimer *timer = new QTimer(this); - connect(timer, SIGNAL(timeout()), SLOT(animate())); - timer->setInterval(30); - timer->start(); - - setRenderHint(QPainter::Antialiasing, true); - setFrameStyle(QFrame::NoFrame); -} - -void Lighting::setupScene() -{ - m_scene.setSceneRect(-300, -200, 600, 460); - - QLinearGradient linearGrad(QPointF(-100, -100), QPointF(100, 100)); - linearGrad.setColorAt(0, QColor(255, 255, 255)); - linearGrad.setColorAt(1, QColor(192, 192, 255)); - setBackgroundBrush(linearGrad); - - QRadialGradient radialGrad(30, 30, 30); - radialGrad.setColorAt(0, Qt::yellow); - radialGrad.setColorAt(0.2, Qt::yellow); - radialGrad.setColorAt(1, Qt::transparent); - QPixmap pixmap(60, 60); - pixmap.fill(Qt::transparent); - QPainter painter(&pixmap); - painter.setPen(Qt::NoPen); - painter.setBrush(radialGrad); - painter.drawEllipse(0, 0, 60, 60); - painter.end(); - - m_lightSource = m_scene.addPixmap(pixmap); - m_lightSource->setZValue(2); - - for (int i = -2; i < 3; ++i) - for (int j = -2; j < 3; ++j) { - QAbstractGraphicsShapeItem *item; - if ((i + j) & 1) - item = new QGraphicsEllipseItem(0, 0, 50, 50); - else - item = new QGraphicsRectItem(0, 0, 50, 50); - - item->setPen(QPen(Qt::black, 1)); - item->setBrush(QBrush(Qt::white)); - QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect; - effect->setBlurRadius(8); - item->setGraphicsEffect(effect); - item->setZValue(1); - item->setPos(i * 80, j * 80); - m_scene.addItem(item); - m_items << item; - } - - -} - -void Lighting::animate() -{ - angle += qDegreesToRadians(qreal(6)); - qreal xs = 200 * qSin(angle) - 40 + 25; - qreal ys = 200 * qCos(angle) - 40 + 25; - m_lightSource->setPos(xs, ys); - - for (int i = 0; i < m_items.size(); ++i) { - QGraphicsItem *item = m_items.at(i); - Q_ASSERT(item); - QGraphicsDropShadowEffect *effect = static_cast(item->graphicsEffect()); - Q_ASSERT(effect); - - QPointF delta(item->x() - xs, item->y() - ys); - effect->setOffset(delta.toPoint() / 30); - - qreal dx = delta.x(); - qreal dy = delta.y(); - qreal dd = qSqrt(dx * dx + dy * dy); - QColor color = effect->color(); - color.setAlphaF(qBound(0.4, 1 - dd / 200.0, 0.7)); - effect->setColor(color); - } - - m_scene.update(); -} - -void Lighting::resizeEvent(QResizeEvent * /* event */) -{ -} diff --git a/examples/widgets/effects/lighting/lighting.h b/examples/widgets/effects/lighting/lighting.h deleted file mode 100644 index 615824d46fc..00000000000 --- a/examples/widgets/effects/lighting/lighting.h +++ /dev/null @@ -1,80 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** BSD License Usage -** Alternatively, you may use this file under the terms of the BSD license -** as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of The Qt Company Ltd nor the names of its -** contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef LIGHTING_H -#define LIGHTING_H - -#include -#include - -class Lighting: public QGraphicsView -{ - Q_OBJECT - -public: - Lighting(QWidget *parent = 0); - -private slots: - void animate(); - -private: - void setupScene(); - -protected: - void resizeEvent(QResizeEvent *event) override; - -private: - qreal angle; - QGraphicsScene m_scene; - QGraphicsItem *m_lightSource; - QList m_items; -}; - -#endif // LIGHTING_H diff --git a/examples/widgets/effects/lighting/lighting.pro b/examples/widgets/effects/lighting/lighting.pro deleted file mode 100644 index 0a3b397de57..00000000000 --- a/examples/widgets/effects/lighting/lighting.pro +++ /dev/null @@ -1,8 +0,0 @@ -QT += widgets - -SOURCES += main.cpp lighting.cpp -HEADERS += lighting.h - -# install -target.path = $$[QT_INSTALL_EXAMPLES]/widgets/effects/lighting -INSTALLS += target diff --git a/examples/widgets/effects/lighting/main.cpp b/examples/widgets/effects/lighting/main.cpp deleted file mode 100644 index 22e55c09851..00000000000 --- a/examples/widgets/effects/lighting/main.cpp +++ /dev/null @@ -1,65 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** BSD License Usage -** Alternatively, you may use this file under the terms of the BSD license -** as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of The Qt Company Ltd nor the names of its -** contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "lighting.h" -#include - -int main(int argc, char **argv) -{ - QApplication app(argc, argv); - - Lighting lighting; - lighting.setWindowTitle(QT_TRANSLATE_NOOP(QGraphicsView, "Lighting and Shadows")); - - lighting.resize(640, 480); - lighting.show(); - - return app.exec(); -} From 6e7cf8b918b05d093d80af3943dc32f7680b4c00 Mon Sep 17 00:00:00 2001 From: Nico Vertriest Date: Tue, 12 Sep 2017 13:53:42 +0200 Subject: [PATCH 14/50] Doc: update screenshots in Addressbook Example doc Task-number: QTBUG-60635 Change-Id: I5b098120f0e47687ac90d7f05b91a2a60f1eab32 Reviewed-by: Venugopal Shivashankar --- .../doc/images/addressbook-editdialog.png | Bin 8669 -> 11374 bytes .../doc/images/addressbook-example.png | Bin 12388 -> 20047 bytes .../doc/images/addressbook-newaddresstab.png | Bin 12556 -> 17413 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/widgets/doc/images/addressbook-editdialog.png b/examples/widgets/doc/images/addressbook-editdialog.png index fd41ee63f7861529c3fb2d73d11ddb93f1b5d5b2..7434aa44efb0e046c7aedf617cb93e3efc433c14 100644 GIT binary patch literal 11374 zcmd6tWl&pPxbFjn5(>rLp)D>gUMTLxEx0?u-9l+`cPQ>|#a)UQcMlYIC%D|a@7#0l z%sq3?r~Bcq*_mWz?Y*-0%+B-t*8lm3Dk(_4eM9mF006v|krr1001!a%mjnN4HCvl!vk`$R6d=(7ef| zU!bR*;yr?d{#_%zrvMa&oMK6B=MdWc4{zoF-P9@#S~I zyMRI8S6weGVY#NAW|pbu)tbx%Wfzp}HN*=w_iSZn#??*P*;E1o0(5jm`T64SasJQ< zUy}x+ol(9))cR0lmD;mT&&YUj=L3O2)Ya9w(?*S}fz+JxxT5qqO7vxqG_my5)YL32 zqy7Do1_lNqA|l)5hACZzUE>Bns|xmuey-UWfjZ;n))KwGN50ot>qrnZZGH?i;3q zmrjE$`(F}H#jf7t)$z2uJ3B+qqr>A_A6>N%uQLr|5p5E7FtexaR?622R~dy%II9_T^%}TKq%BZ__0LSBk#s7Ev@g*lt=RYy5zz0N_bqK z9VB&q+Cr<(HR_NT)U}b721ePs+fIWZXCb^y2WNBS13jA@z1A(MW`O~gI6)uLRk7GR z1~x3iLkE1pgaQTQ8v_AYPF&f;>Y~!|ix%A87fhvtQeOp3J@wYKyh@tswU@;UiHn?r&6Ebv^w}~ z*&k9ksVdYgq2yoBq#>6|5EFB2tRhS$p?r=S>ebQ$)~LJ<3yT1CMW5aOjZr`ue)&Yv zetILqC*zH1ek2R3yQa8`FEAdUeX|_yKy)Gk<$2fbjF|%ur`U$+I60K@m_QlSit4=`X&0Ge` z6*qm@7uTaI1LJ9eQ!PVTAazQkeGwnu!>to8n?W08ofG&{AWu-A67=>^iJ+5*%J5V+ zs>D01`kJqNWlKCaXXJT>Kt%pn`n%zDOMMLv8#v z8RfXmD>O5Z(M(owd}zx}?pqGBL|ta_sx;FFmbcX(MIvvB>I*v*lo*s@ZD)! z%i+}7ETSmz6KR`MK@~#ypLz%s;&?SZ;EDKRJy*2ksuaECzV|^Hc58OHLU54C*gRy> z0JQEka`yPL+A81=4>nB(jb!3om?UUFKbKEw`fb6|8qESY>$pIVJXzo4%9kJJ>;>>+ z)s%eu8^!6LvyG$~h!*$ae&+v8D{246UC}Zw9j4#O@-E*<)nrlXlawJ;I>7jD?x`agV#UFs?lbreO>1#6{#7AeyAQ+ROQ)PdCK)eex`j(S zHPztJQ+(B3e%+g%5~nx3f#{NoX)eeqj&R=__OXw(~Vm4__rEUGcSNSSFO#iJRiO1WA2E>IdXty z%9++kFj`sNyw5K|u8LO``9;I;-hbH8%G}DsuW}5}mi%73GkEaQUth*ksb_0!^T_`B zv*FGW+Y097n_FdeQD2=q$qd+u5OR1H?G4dY{Q0ra_!Exwy@%$n>F!fP92LFHS}qbx ztT<2a<@@8~$i+Id=nfX7)1)5hK2cQa0?*G{_Bbk8Yu^@-0=@lxMe#G0WT^g%f=la+fT8qDT=Waid5sLq(Dy>B4CUEi1vlTff(A z0&8?)FpfT=q(GNEozE8n1^9WU^Dg6X3QppK`HPja7HEo<;V~w#`7YHUd06loepBSU zU&lsM0`%{hKiR=;##N2AqzK`#@`7V^dQcOD8SyaI) zyOqL%8iJ6=^X!9l(I7ty4OgYF*b|q_HF)@8n9;N~YNOCrZ|&-fnu{8h&CLzfOREf8 zyVa9XTjndZIvZ$e$u_O{Dmn&6G~1Nx36Jgb0{myE2zP&oa&V?UxY(9|#a3Q|^=POx z%?Uy>kV`4cqZ@Qyp0E36D_&{zG}t=(`hJx&-Gk|1f3l)ssihsemK?gGgZ~LQUCy#8 zpe-QX9WiC)YN^IbF%-=5a}~Z%_c@vfTT)6&O7Nb#x}zw) zpN|+4fC>>HtiO(A1gL|f5HjM+E*E84=e4 z4B8_F1PA9a1Gab&Tij1VY5*~mA_I!U&t2FEfaV||Ko|)Cpn(Gv0>BRl0EokR=|86~ zPCmGN+t;A${e0yrB5wS8)jS4w%$$$={=fvvf`wo@T)$g@4z`;w6s;EjQ6=i{!@2KC zcKzJS)~Fv%dTPgTihXwF`ujlSrx~ zmm9_xxgurXn(^UI4aqdnP7glewbW&Zeuhq~sk@xxEJY^0qYetB%#jD}7h#XP4RYJU z$Gd1cvzO*kQ}Fe&JJZF(an4XV!9cvNncjHK-=VZ(Yf@?f*xMaNkCj?HwWA1mz(GYE_1f}w3VJ1Lz5{GQuWReD8!`|Wi~6|z zn9LooGEwhlc~UM7wA!5fBfqblSN}lC=Hv)^RA4*UnQcZk+iZgEg)4KALh|DB>e~q@ zuew>$*J|;*rcUd<^r!a>nZnwVz?FM`hlIkDmSwrzU3W_ZQV zw?f_(=6c-nnk=%d#xcTz!?`0W@$l!;YKHOLv}nHm*&08ivy*`?Ea8%H4eY+aP}SUZYnomSMTNZbdR>DUnz-3QI?W z?x`OOTI*lSmo%;=-TqPZ(3a8rE>TM_8p8R|-@RH<0rSA?o3)+--@!&M`aAa)=Q>8w z@fZl!$`fCbLej$=5tL_W?7;}Z8*j>&qF)XjvBiK!H9uDHB3|WvMXS74P&Ojs@#8xLI*h!oNVUV^vv@9uDBT2+L6R%;2%deZx28fRSa7)&(;YvgQ3qhj z>^wQ-JhYh@{cdeFKc!fPT-WY6W4vB_@}}S2O1GjjkPYG7JPN1`*Kc7HdOCY9k%+XH zBWXGjf!0|PJId_TGNsXugsWZdEo#Ol2x@MvdnIdmI-0_HTS0GUtals0pvxF1afAr}b1WuJ;RI@f!Wh82jek z)Bzwa`(47O{a&aPcG0dDH2si==TWaHV1pl14|4Ea8{&`q)}OB7O8Zjn){eO41h-K? z3_{Xk0=PLdv{-{MB+_UW99Q-Rlagz;^su#!40=4cWQ60m*%X%nsRHIbj)Fct*47dP zZ$WOgM(5lv_D}YW?QQ3;ce`X7KHS(B48DH5a8KSJab{&_2X(CL~T4I(U9_{ul8N-8Ur&dc8y28XBg*Ax(MR|i|`!x^h1ws-OzJ>Ao0EWm~+ z*q7Qc#}6DohB#s_m!C3!yx@;qdREnNP;?HA|yODrJPWr30hr#y*yvc#7i3}Bualo7h*>Q=5Prl zv)(vlVx39dxVO*N^vcdVrB-QjRTt4x%PE8zSF{qnd7HYQNZyk1=XAGF0Wxm8d%$Ho z_zcrVZ}06n^7sAHw^0)!{@xszW1T6ld&tfWTVwZjuI(b;ZKc?w%?>w-TFr0GTKKrA z8i=JVN?)}UNl+lwN3dVts8XdJ^&zw|URsP&HIQVEC_8EZaflS=1x;pgQ{eUZq7K4e z_#yfBr&Q}p+x7dC-**)p1S=&lYzO_k?|Edk80eQeM0hyyST|H#S+dohQ>VX<6B_16 z5VYOtyfJkljF0D+!8sPudh+-T|{nBU_n# zuFzvGLfO!SNO&{Ty$Zh^&Zljc>Xg;h`{n}x6L1Xr4{GtVeHD`i?N|ljT5yn4BxmSp zhCvXwq|AM*5u-P43RNG9W|r*}7WT^Qn{N$&xYs79-0`LnY;9c{d>>eJp&l9&CdU@; zZ_%-7r{IAzN>dKeASQe!{#UTcV+XNMqCo2U&LSK@KgNH+*Z+p6gH|tZ@xNnGU|TCy zqjnSTus0HxXdAzKPbI)q|DEQLdLm{9f#k zq}Lvyva;Fs96}^q#KO-s!l}egx0wksb>9?(*u?e`2DOl+Ywal`l+NDlQA>aJW)un8 zcokCyG_0|w#IUF*<1@@g5xVQ$@4Yz&DECLgdZ1~km#!6L-puXq%5RLalzEFP^#cRs2EpdPI8m>(7-d&0T71ktZ!#|n^ex-@eaA5v*p0b*xQ9W z9*gT#EOUW}z2k+yT*p}~$3krHld1b+!=HA7QWWntyX%>Xcp^^cbi1f$6(0!$LPeO8 zC_>5}$nNaekd%0^yS7#ZuxOq3mPNxsu1ANZF%BD9$u#hUyV)I=k+MqKFnV-gX*HLh zXi@gMhSV@54ue@x1aqaqwoQY>xwg>uOFGi2qL?Ai-j}hp<@!KxItzphN6%TAlfhAE zZypYA%Ne7CqXvmxj4$*wak=F*4VhxCZY(yo+V@v5+fvE+13F*H#hzw!wfZG81zDhW z#}N~_aPMx2RyR%EvA)GwMQdZeL+KAR^!2GmN|F6^!+4z@_Tsj?KK=*0!)$x56Z791 zC$9=7(K1{z2nBipY&3tTQDX@2Zbns>eJkp%M6Gyl9JhN>^rW$|Rj%2YL8f!n#GMB< zUvcevC*|A9)dh7v$Jq<9d|lmIjA5JDMZ1zm(Pd>F9Kpp-B=}ytTsUI2{g=ykcza7l z>oj*MH0yVLx&t>O`#)`CgN+-n^Coj*@Za{}%?DX~Ao6`8HEZ2+5;rw9y{+#F|JLAD z?;H?5+#8;vA__Dr(Q0XMcc0jvyIOg?)Jsr}$B3Jg)ZOdus=cE@-Xo68`GdJP8MCk%KmIL~C*fN&O+k`J?>z!rMcoq3& zBJ@M%-RrH;%G0%9zQc;FC=YhLO^f3RWopn~#ZEv$@mjA)7M5tfJw;iKN6Q?>Xj*5h zyW{WSmtN976%O!HTeBZcz9-s^zW+lb`QI-dgKb$^_U@_$|3dTqy@YebeWlP0p({d# z-}w8kC;xf0QM!{(-%abi$g&)s%JfvQY$jQAI_(ZI-%pkE-FG#mtLBQo7fQZwP2TN2 zju!ytyDGn5^+ghfNz&35{(I0$A|fB?9dlU;IX&&Su3zFsv91#6sa*Dc%i%l`7ADj| zh|W!rYyXBi<}=@$WV)t3J3pxuYkbMlUYI3aYD=n5)aYH;m{-Clq0A^*G4OoXW{s

}Mtt>KXSR=XM%V8GK5B{Bz3Kn1 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 diff --git a/examples/widgets/doc/images/addressbook-example.png b/examples/widgets/doc/images/addressbook-example.png index b743c166da134a3715511cd278a32597c12f0b8e..eebe97a71815de05f9fb1ddcedc208b596f81969 100644 GIT binary patch literal 20047 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 literal 12388 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 diff --git a/examples/widgets/doc/images/addressbook-newaddresstab.png b/examples/widgets/doc/images/addressbook-newaddresstab.png index ff215a4b201926919d3c4b0e68e0c04372525cbd..6b60ee08e98c5a4756ef4e0d7e071633ee94e908 100644 GIT binary patch literal 17413 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 V*_%xQo*BWw;OXk;vd$@?2>`YF)D-{# literal 12556 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 Date: Wed, 18 Oct 2017 13:32:57 +0200 Subject: [PATCH 15/50] Doc: Add screenshot to Validators example Task-number: QTBUG-60635 Change-Id: Ie68e611b57900847a00587fdf8558be4be38f23d Reviewed-by: Venugopal Shivashankar --- doc/src/images/validators.png | Bin 0 -> 11503 bytes examples/widgets/doc/src/validators.qdoc | 2 ++ 2 files changed, 2 insertions(+) create mode 100644 doc/src/images/validators.png diff --git a/doc/src/images/validators.png b/doc/src/images/validators.png new file mode 100644 index 0000000000000000000000000000000000000000..1940c6da3f32c84cfde751ee73dc33a19a4558ce GIT binary patch literal 11503 zcmaKSbySpJw?8$+05ZTsgQPM;h)78H&@l`WN=bJL(%nN#E6tE1NTY;wNS8==NJ*pQ z<@>((uHWyjd)NKvoPG8=&)(;p9iL~NwWAQ~3dCSqFa`z&v67-35(5JZz`(%V#>c+r zJf;taVqjonAXHz#_qNx6?{3}Q-F+-6Iz0S+es*?naBzHlyuGn9JvnxIdU|tnb9wpq z;^N}yVDI<-&h^#R+39gZL&MtI+SJrkMn=Zb(b4JgVPjqO%*;$)UY@6?Cng5w>GA&F z_VVER`k?<~O3?F-?Tyx^FZ){~sOktDSRj>29nK>!83Fp-}ONh z@7M8Rp&01%-1_{ zA8xEK7y{TNS`~GAq-&pbdVh8vcG+?B@mH!6)(ur-W3k+S>eID+w%gIaxy8pX0>#4J z9ZOn7E8>#Cvs&LjU=n;x2BLTD=fv_|$uAd$K)c8sC`D7HvJexx1XZ{oU+fW0P$ybaZzokoI$8eB^p9lS?ZD z#1r*7=2eA{{M&(JGJY@JuLq5t9m&b>p6Pf@=UF_$g&`SM*Iuv0lmD#$r#+nMy?`6!{@i$21Rx<>|bpkR&M=~i2JS;j*ie1RT1UyFd@&Z zAMEb!DR1pk4rmztRzRm2Rcg%Xls9M`|81ou%GWmlc!Ds|d>;07wl%})TZnELl8x6W zwmLsxBbZ*fpSnJ*iq#P*M`_Hk$}m*lFf$R{Gm(t#yq$AENiqn@$F zxeE8bFxi&x?)_LH2z^QvzJgF9vG1Uu7`vKd772-di*MyzVpmAvv3-F9 zzPTflDRLPVo`3`grcs79{Z-A?m#{NTD1}FsJ#$mhE_`dU?I^S78unDWSEiAY(}Uv0 zyU|C3t3+-?{q&R+#`%XGy++>yhod}xEng#N$eVhFF*7b-yah$|D1B#~xG{eQr+CMk zMTE$*0agX{a7*mA>*7gKpK9n`+ACAN_3ZEIjxQ;!v`gSY*A#xQXj>`Km z!k+hciZ3THXArp^I=hHWGQ$*^+?3lFnaRdE zth(NAlVx+`Q&c?&{&w+Bw<28=I^X2f!EkMq>YQ_x_EtMDz|Mpfp7@rbyQjle0-i{z zkZ24CW(sR-KUPO}7!1oC`_LXfH+@bf`f})G!FJS5y0(8-KjHDflMiIw$W_TNW*iTE z`t4?Tfk#fS??OyBMD5x#9j_&?f0K;5leZZZAC=1G^`~HQ7}?>u#&0)$q6YUt(&J^K zy=$%B!)HVEUgbHi$J1QA=%ubk@+$fMwFcvd zQ!g*3f3p&jQIlm zoIn`jR6stc_j1P0pE1)#5q9PfW}3G6h%D??0@T&@+Vh(Ld?hnHnel5vxn)EAtpOkx zeQ4i{t@^$EuL-p>Q2!MP36kM9hk%$}4Kj>i_?tx7^z0v5f+0^UH0thmiV(YseRlIo z$g0)w?9bxHUPeAs_M^$*DwU?JmWG`SnfwweN%#D&JSp8`ZzEosB0P z=2nSLqQ=yBAqw*lC&re~4y7QotI(q;ai1#)lxS^Dqvy#3L)nO0nZ)z77EyT##JL!2WXWa)7E_JDUWm&az`N)$w(VsRLoqEJGP}K?z}= z?blXb)HT}+^=WpLU;dx(x5VLOAjY@DqD4_qqGh9XgCi!5SgNxfwr8{seWe@0|CyW}DZN5E7hc}g6h~uXA?J+7NeCV@?%(3#@#dB6AI>Zt zEYS%me3=4&%2MGN=N&`;kDT0TolKm;7!rIH-h)mu+_gvDI9JOKvL;Pw03_;Fy_#t= z25kE%Rk(ptoMynYP+3+yBLu<}=J8}XWPg*Y5_v^$Y916*=&VOWkPkSPspJVsjB%u3 z{V4-3q0F1?g`@GI&ZU6FOp)BvYN>4GD1U5W?$NU{w&~=zv&x+HoBGeFL~TO=etr_~ z)Pa}h>@&$cu3rXE&a7vPxXSU6ZBO)2njXehENh})j1AowoO!s;q{^b!qQ-wv zgfFKhp-d#9+i<7w0!*Qj%UhpJO`E2Sjr#bvsQ=A7`EKdMuF%7wY}!>M}oy9yY+E*S5IgW0u)oHB_e$(TeG#`E`nWPQNlCv;RY1jN2Ttw99mgr%{@}~Cq zprtk%)GOkn5y=tUP9-!r$VdV7*eSE+tmMpioE2e(gxY`>I21AnLuCzfWJ%bjQp_O1 zh6_bMb#3e!6c&C~4kP(~0?P45ZxU z<9LSyJJpS|$RIj0%Bzwg5aVPriwDXI{yu&(rVlPLaR?*VNQ3XeI~-Nbx%##LPq89xM=FL_5`@ z{xPN$#&ADtcW&~RnPEp}5ls}nf$Uuxmiu<#e4iFL)xvOAj)8DlcDRGNVIyX=YSeBT z3#MoNkdj*OD=FG~Fc<=+=Fs~gWRGcoz^L<+dN#sh0onHOG7&rVbKAjodJh*r`v6~= z8*2`VI8=45MW&nV&m$u4L)>rpgt~wt>4PtA(M{p8GcQDOBB9sYzd|w#+une!jLJRx zu$QC5%H~!cEVy-6z($`C{I1UWNPOf7GkAp`l0|euC&snQm+r0-r0?9kGNrW87Nf@Q zJ;~o2$2;%Q!9P}aDgE}tg~`pJZ<*zKHhIGZ?dm_u_1X(*Udyg?mW*koN1XqJQ03Ra zIMpRUFfoCy8zN5Zbr^`Sv6jAQ^i7|c6W8W5K6;Uq@oLEXuXjO0LQa!G0Hz-5wj)B) z%boK17c@H|67WPTruVAtmNur_y}!=qi~HORjduPN;U&FE%EyT=+jPmuQU2Gt^@s*V zv3~|Vey}~gA)i{f{wh+vO2F>eL|XtBI?Ubno3UK15dRNuJ$=N%E^PD--nD$NcO~E5 zQ)`1$EKlt}H?l=Y9RCm(6W*WzJhNXv8N+bg8LQb45AMwbU)EK$e&ufYdo(*JAmV%$ zJVYY%0v2Hh`i>dKRfvC0o8-EpJERa45PeK8Y3p*X95@(9GAUonJjhDCQ9nPN<(g2j5Z@@r?mL$kj@@B|LFLc$SX(r>u8&%7Wu~=-&+6%^DY{sfDJ44BjO(I)&gA_9r0f4Elg^1d zVCu+cRbf6--@YM3w%@%GU%rHR0BeQWiekII_jTJS&Zh!N`<4eWD^#^N>oQ zsemdn=L$m11D{>n;~dlau(Yc)R-zP35st+nj3*y|T-5E+A4|a=J>_Rhibd}T>R>GU9g!AkAG<#EwdsonzLME@~{&xhA}MJ zaMfbDBU{G?9S-xXOu`Vj>!R-e)iGiY#T!YSaJwB&>G0mlPo^GF=K zEBAK&l6CgKE(X?Lp`dwBnRKm^zfEA^5V=hMr=KHH#!+z#IP}tG+?(L_7Jifx{N6F( zfdh%_p4ZHBt{f`ESvN@k`72VGdEEM5!6OM8;>8Cw$~>@HLS#&|KfQQJ2a6P10fn;> zd5;L^e$v!G!;_YGi9CbaLx~ux*X)+G#QOXj(`t0RmGT}6ufL#>;HzuH-PRbUG$tTa zdu~Zz+7YbUFc>6kv8uXKfd!fbcXC=$nf17f(e2Bi6X?ibCFg%|-5!mM)TvcI0SS~2 zRtu8!ki_Mv8*!}_EfA?iJlxpRPmu9*=k@p{m5;lmy=-QK*}bG4DETNWNr4o$9{vJM zdiDTym?Pu==+S>UZWQOeCnOqoa?6 zlHg}PuL=ApW>3hwCwm>R^Qf!eU`m!oVpLveEm&pi&n>s1eKG0dc`FV#8miVq} z6rn&4WEgV?A!5`rj(#cjCeZ>A_!rl?wZi%|&SLtoPU|-!uCDazAI3<%f#=A+qK;92 zxl=jb!viymlfJt5+BcMEqq%|5X06B$#~NX=8T)fYfl#gFcU3{4*z7SXwoa`Nq5ACE z394l7TlZd=so}UzHKFhaG5rv%Jm{|!8Q@%AJ%@HiHiqRHpH0+?oMA5yaQ3*R(!Zeq z9^hr!NQDX->N}Fl=+BC`Mc^ZTrpv^3__OSojL%m%0{cQ0a}{~j3%z;{8pr;|ITW-2 zKDM$WOZ|P%GCm_SG*qO~9b{yG}^bB}wmZkU7J?0!z09h1! z`2DYR`$MgmPF^@ZLdZ4N-CSVEJ(L>cXMy-5ew7|l6W<0c^U_u#09!d$XzDmtXn~;H zK}CBa-Pc_7$ZMMJtxMz_MLzY+qz0>YU~u-kRg|Ss10YZu^?piG8Nq)Xkx%M>p@~n( zDgDau+pX12auS#C3xa#R+3I?>QL;PyF*S-dxnV&e3~ZJx zez6i0d*T)CUbgpEOpKZGlD%t>bxo}M-5u+`t!$9Y9arfB%~r}pMLnH|W}oJ$s~BB$ zqVP`B2fDC_pilfQl1YojFJFZ<{9%n@k&+7X#Rhlb{HNzGqc%rgc)+#JpifW0e3gg# z$ie208vub|pUjw2!gFFGBO`S$)pX(N%CESn z!6qVJTRYa6;Hj>`X7Jam1jMKw;QtLm1fNdVqMt5ZB+EspwObmUy-Hd%*~E!!dMjq) z>%DN;GwbomGh2i1Rg(u9R>v(cpGgwF+8$V&b_PYI z43RL-3)yRuj6lknCq8N9{O*bTz{FR%EzQ*XMP5(cO>iPs9Da0?9-MFeBlY^}m8x^B zb%#r-n@YP19Vr3aiLcm6d{~b1&C7_d9*iC966EW4{6s&cNJI^0AAd*0L>7HOOjAl83b;T15(19tRM7&wL2 zgsx5pZJIs@cP^Ww^6hjY7o$?hI=3lu`mf#n0rXeQ#E{R5Fl>hYQt z*N?g~753Lz@5EoL=0p8sTVAEr&hX*b?L{W7+s#lXQkpkw+SZUnMMV+12gr=IHiUN6 zTqWc!6UAE=8d5Ak*X`I;D2Tucs_6bgLqVn)HiN;)pNhB}7V;w#b+eEsu`I7O#jM30 zK84#e&w9zv)#gq(pf#vYf^+-mA7@ce5DqLZcw9D!p2@c#2r zc%OtKGs-#b+~?d{RJvUWk7@y)7j{s`~Ht!|{l0X1$5$qXom5H$kf-e3fpW z#?_rZ1jJ>E4i0*H%E`2IH$0>_JC+#}*mUkm7x*CstuP!(&zYLplV>(AaEp==8PP`N z>z-&baO0v(M=}Zte9?;LhbMAzsS(`WukB&MvCntDKF(rvmj;YRRuvZJS@JyJb!$|6 z<}IJoYbff|Lb`Wf5?sgXXVQiF#=4c`cT>SQ;OzoN-pXjG$k~UN1>S=2F_bjvpLA3D zI2hP_Gi6{lbinwOtidg{fEpB=pX+)im+{%)YK->v#ftFNc1_3q?HjtuX8HlkgPffN z)i!;)r(#nqlLrn@gn$esz8-sJ<`eSWq22dG53P47jrOMfRzB9Pi@)uG-<1X>PAy_IX z5bK`%Zy08JoGYa&6_g%`#fu3ty%+mmS?>RyV3rTs>W@|-<-Vf@-L6_!!KyZv^4ntG zuWEJO_xvAMwW$9=`+rp3L-zlaEcsKEyac)<6gN^mRuf|V@uJ>Ls-n>_wUg-!P8SHE z(wCa#?@lQ&fAlbdC66iB%bd*ma9jHoCDIEgIm`xbi)U+TX==Hmnc?Nm`1|Z?q;dqa(=XpNKA=Gxswj>)Yt6afy!DwO&^I~*p^;;Q8KmsS1iqmj`EG-L%X zKbcI$>>+s6tU^2V(lAIe)_ueJ-$mJTbmIzy5Wy$u234xgpPW54-_C2b`{V_iw0k}u zNF**;uC0Y+!dDK;1^%l!#r$tOk%1y{t~E=uF5{>&SZ5x!NZqjvvCD-Tu#O@yU zJ+)$VVKyGu$oWntJL{#=VurTePbAkR=dd0)J}Q@(<#kMhpxKeyg_cXWtc)ne%gWV9A`TSiX5s3!U%Z zY)!WUD4)FdU8T}iO2;RK^dOs)y6SG7om*stVT#gyX%=a2$)BdVcoR%7ik$St358%N zLs7DZp_qh`qbJKhG!}J@>NTfIl4KTNj+5S4m_(M`9H=c_dUK1@e7T8hN~hg8&=925 z2~*c$5cd}|2*t-|h2=hBbJp^*PgO_dqi6Hc@=%zDIro%`^!HxBvR4UMo4Pg@-^bRY zZIP?qh3~6tbx|xi@_v66vzLW4lS%Xl9=;Q`l2?70!Xy(4nnDh~!ir}fId_1$%8M6> z=Y}KOg8WI*fdqt5*d_4bResv?gREHt8Y7bqV1HrJm@e{i3!l4#i9Ij}Me{lVFm-wPLJ z>MkE~bTa<+GJ)48K-V+**m}Cv6~a1{_GrpXbNslPGDX)~&A0buf{Y;hZSs}8wqp3w zt(x(rCskjK)!Qs9TmGhk=ahmd1b9W-cr2O02KmDN%VDWi&^c-|LplGux6mVTBB%P2 zWU3}5l_O^17T{5i7P_k)2Ge(`mBMj|d=^?OXq>{);N}xn^cR+c1#3*wK!|B z5ROIskWq+guPg$LQz&)6$mIWzX6o8`;n7?`muM*z54(j{yGUL%u=<;hvQ$v_zE6bkYd&c}NiOtKP836XeqHm7F zgV6_ea~D1h_KppC$;Jc{zu=wzwW-rsUwD{aV$Y_vMPQ#o7i#)G$@JidcfI$!tkkV0 z3JRZ`$&qyimhP?gwyoK_P+<587xTb=fXWI+On;oD`&{L>O-;dshrFaG4m~;R>7l zQW_*K9#r~e2Qwk~EH2O{kwg(QFMSj3sakhEodsib9?6NGAFHZ5{8f6H;fo#N_~vP^ zB_7@c(mb`PsVT?evK#x|%a}sXQIBS9X#{c|w{UZ#zHVc)5O-tN2qnv5&9P3d>{~WJ zm`ZZkwhL<7vI@bMgG?*EeLjU2vwNCk+%x7~WD}=X;FKy#fe-Nr0Xwbv#CnZge&S z27Oz_kI@O|s{jc3CtR^G$*@?3s@D~%D2*E3I~72(gsGee!MLQ*3ChuHvZImkE;V0Cb^`5=9#G+p7QKEU-n3*9ot&Cvqznh{=jOzqo0)TIx2ZTy_>-Jnw9N<#tt*Q{&B z#OVogb2$x-Yz#D$A8)}f;Le$Mad@~}nXn6Ntc!&CKVAw1zMY-#-|2(5-q4bfFZCgi zr{TWxeKj6#S;pU%jdt(4@mJP3!noti5;5^S+ncsIo+8ZJINz zmSI?HNeB~}-cAPFTyP5Z!b*_wQC2n{^VO@HJ=f*$&zm^kFARJM!*K8}rsD<`5dV#N zt=MNZw-K9U)JsUI#5 zW=r1+D)a4w*{Sr8kC)?x_;R3ucHuO+4l3%(>CKgsT7Rx3yrPsUiP($_wUv`be9&uqg~3YbJeKi-6Q zn=9NMv8Nhi~(UlaFU2 z36Ywi5*q(xTU9ckcV7-Xl^W-C-Pd=Q7BMi~eUT#brs#SAT~_#6FV6PDVaabWhP%A= z)NmJ@xF=_uUVxm4Ii6CPG)L;(lx;2tFt)NA{u2ziEl$l_92GBf20w07X}ublwlf-2 zFh5H70wMRl?GH;X=}K7GgG#&ZR8U{C^uObpqow<$m}C&!=CjR+&EOuD)D-YS=w05ff%P z!NNSrUD^%t4Z%9%hG~)20`4u$w3KK>YanxQax$s(*a`id$>JOK>IFhAUuX5VPtvwB zuTCU*7Ee4JFhs&Y&G#yCOWy+Epi zY^pIOTvT+a>(djYYbz20e%Uhhg0zwyfwLhPjId^)!H3tg-yC5D1=9~n7W~je>GG1Q zQ&Ip&pFX377hAK5vfftf_!m^mTZl!1^)MH4&7NX`K6<#{>^zO}>OXTjT?}rp`hhFL zk+zhj(}g%AcJK=B*c&K`}3XQB|j-ZUEd8Xv@Q&;k7kGT1Scbsg_X2(>*gGhP$?cW3ZNpG(@sVjHT6Ln z`p0UWYseG7D;Jvga|?NWWYqMUJ*NGAmX<5-Np)~_PekxkQ<-&7`9!uxE<&l~SDi0J`c(&bmCy7}ls+2+b#Wp{AWwh3iJ3i>5>m`2$dHQ^E z_YbCuq(OMUKZ3|MPC3pxx0W2bDR%6tg%40KfNeWvFxyGjUPHjQG@3d%E74l=gkfA& zg1K_g>f^HWgCiE8=MeGPTem|P#E?P{9)vmS+p|IpscLZY8e5jGEiSdlq=E|G&}jo-fuV@rWCnj-i5G^XgiA}+I>OZuvA1v zf~sCidGskGHz(bhXKvu}dyYHnMd7^ow&Ew{_m5{CKPm&$-!tdltBXZLmjd12W zFymHFN0{U8LIQaTJrT|&cN zO^Ug(y@!K1kN7ey$tWuS2zQ&rH*Y&xF7|+E@?24PeawG&jjM@puvcy)K#X7Z99!4)R_Xc~6CX zcEBIvEX|w`W-0G(-As{FcYF&qU9mYB-B_ggsPU%K)ip_S=q5f(vZTM#d6A*!#@idYwhYiM3vRhSWehQx?iN6r5IJcGNE*QT--rq(F#GM$ z)kV~ufS>HZOErZWX?3d*+#bCw)_?R0G5_n7Op(FPW6)IBPRbMuanxUg<4m?|`g8&G z#I^UF>rE8&KkI?y+IjNtm;U=^{#SxgV2Ol=U9)ysXrJT#V@>|o^V$Nae9VQ`GIf9$ z0?M1apoq#R$Y*l%)6Tb+o+kNdBq4cVyp$8+ch6Lz6Cs*;fynuqL{ZXLtDd;1A|1(FLL9ic|FuUrW?jv9(=ZYxMHn81{w>NC`K zp>M>J9HM1D&_6u=WRw*M6@q+a8}!NPc=`U)moBV1+BBcGS%M9u`B_S#idQEInME1G z4$9x=l0m+`wMgM2{#_Zm1gPr+acs=s2ca)QcOrGQb`}!87`hQo#DVkwAfcjDiP8$1 z5D=joz#&%LIGp~m?)1ahr|z}iCcpus({H3KkVydlK%~KccaWN8tiZTA?9mCGygREL zfWxH#di+B1EkAW1m|S}>q6(iGOerTqna7{MEY-ylcE4R-R+-3PkQ`?G&+st@n$9+! zTl#fQ`A`loxprx^U5HmXF&1SErY1%{h8!jdGuRVH6N7mbTF#aqC>VvNkW1XbZA=5_ z_x&yHn$`X| Date: Tue, 24 Oct 2017 15:44:30 +0200 Subject: [PATCH 16/50] Doc: drop Application Chooser Example There are plenty of other examples showing how to use QStateMachine Task-number: QTBUG-60635 Change-Id: I82300b2a0f4e7733f08579a2aa9b548cb7d87efa Reviewed-by: Venugopal Shivashankar Reviewed-by: Richard Moe Gustavsen --- doc/src/images/appchooser-example.png | Bin 29447 -> 0 bytes examples/widgets/animation/animation.pro | 1 - .../appchooser/accessories-dictionary.png | Bin 5396 -> 0 bytes .../animation/appchooser/akregator.png | Bin 4873 -> 0 bytes .../animation/appchooser/appchooser.pro | 8 - .../animation/appchooser/appchooser.qrc | 8 - .../widgets/animation/appchooser/digikam.png | Bin 3334 -> 0 bytes examples/widgets/animation/appchooser/k3b.png | Bin 8220 -> 0 bytes .../widgets/animation/appchooser/main.cpp | 183 ------------------ examples/widgets/doc/src/appchooser.qdoc | 38 ---- 10 files changed, 238 deletions(-) delete mode 100644 doc/src/images/appchooser-example.png delete mode 100644 examples/widgets/animation/appchooser/accessories-dictionary.png delete mode 100644 examples/widgets/animation/appchooser/akregator.png delete mode 100644 examples/widgets/animation/appchooser/appchooser.pro delete mode 100644 examples/widgets/animation/appchooser/appchooser.qrc delete mode 100644 examples/widgets/animation/appchooser/digikam.png delete mode 100644 examples/widgets/animation/appchooser/k3b.png delete mode 100644 examples/widgets/animation/appchooser/main.cpp delete mode 100644 examples/widgets/doc/src/appchooser.qdoc diff --git a/doc/src/images/appchooser-example.png b/doc/src/images/appchooser-example.png deleted file mode 100644 index 885476e8b9713a26c8f34dbbc5459918a12ed52f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29447 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 m`g4K_CYa#65bm`<68}GQY3Z~52Dt+O0000Go#; diff --git a/examples/widgets/animation/animation.pro b/examples/widgets/animation/animation.pro index a13f8bb65a7..19b79caf15d 100644 --- a/examples/widgets/animation/animation.pro +++ b/examples/widgets/animation/animation.pro @@ -2,7 +2,6 @@ TEMPLATE = \ subdirs SUBDIRS += \ animatedtiles \ - appchooser \ easing \ moveblocks \ states \ diff --git a/examples/widgets/animation/appchooser/accessories-dictionary.png b/examples/widgets/animation/appchooser/accessories-dictionary.png deleted file mode 100644 index e9bd55d918166d85d986bf19b1cda78a1ac5e05d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5396 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%0D6n<2k3-2LA6Av9Zn+fdKaQ6H6wi9tjL}3 z_BFHK-rk$dSR!wAnl=RB+k`d(yl%O7*@-pxwqN<^bv093+EgVir85b)rlws=aulQey_sR~0 zKkslD`o}#H$%wxy^LPXSx6C|DfN=pu6=L5o)T0SDdMN7N_~D@6HS5Ht)l|`%_wL<$ zH-KLq>yD7HykOjF8wm{p2pkEIhXJgRW%-|cKHv6KDz(t#^}gJ3`ql5xKIQDM2`&Z< zLsR0BaQEIF8+UK~&6A_5n)X3geTESX2;EyHxK>4>6J$cKmzmz+mW=5 zcbd!XHM8yeUAyWqltY&qPx>24DM?q8GG%XBqn2k=?lCRx z860B^-ObA$-P!dzB!&k&red1_9cqxcOzFg>-aahYTTiYZn|0x`S2%_aH{RGi$(DwI1=E-ioWtNkH|R*^hME!Ew(Y2fw|ec~y`RkM?CjhQ z;7o%4j{w#!21|{DMPrbA6YMOy^Le-1-R$*xRce{b<#LmO$Qto@e7~Y7YXSUP2+>_Y zyqpJ=2nmf4At;0zx_&(^Prq~M z&>{b(O`FE)+Ft?4651wwr#8V0lZ4%bPC|;1u_i??N4j(f9RGbXA>i?NzD*vmoWfw` zsi&U0o|2=RT$53PEgs - - accessories-dictionary.png - akregator.png - digikam.png - k3b.png - - diff --git a/examples/widgets/animation/appchooser/digikam.png b/examples/widgets/animation/appchooser/digikam.png deleted file mode 100644 index 9de9fb2f8034a9bae6f4c40ab2d1f713fcfaa08b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3334 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 -#include - - -class Pixmap : public QGraphicsWidget -{ - Q_OBJECT - -public: - Pixmap(const QPixmap &pix, QGraphicsItem *parent = 0) - : QGraphicsWidget(parent), orig(pix), p(pix) - { - } - - void paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) override - { - painter->drawPixmap(QPointF(), p); - } - - void mousePressEvent(QGraphicsSceneMouseEvent *) override - { - emit clicked(); - } - - void setGeometry(const QRectF &rect) override - { - QGraphicsWidget::setGeometry(rect); - - if (rect.size().width() > orig.size().width()) - p = orig.scaled(rect.size().toSize()); - else - p = orig; - } - -Q_SIGNALS: - void clicked(); - -private: - QPixmap orig; - QPixmap p; -}; - -class GraphicsView : public QGraphicsView -{ - Q_OBJECT -public: - GraphicsView(QGraphicsScene *scene, QWidget *parent = 0) : QGraphicsView(scene, parent) - { - } - - void resizeEvent(QResizeEvent *) override - { - fitInView(sceneRect(), Qt::KeepAspectRatio); - } -}; - - -void createStates(const QObjectList &objects, - const QRect &selectedRect, QState *parent) -{ - for (int i = 0; i < objects.size(); ++i) { - QState *state = new QState(parent); - state->assignProperty(objects.at(i), "geometry", selectedRect); - parent->addTransition(objects.at(i), SIGNAL(clicked()), state); - } -} - -void createAnimations(const QObjectList &objects, QStateMachine *machine) -{ - for (int i=0; iaddDefaultAnimation(new QPropertyAnimation(objects.at(i), "geometry")); -} - -int main(int argc, char **argv) -{ - Q_INIT_RESOURCE(appchooser); - - QApplication app(argc, argv); - - Pixmap *p1 = new Pixmap(QPixmap(":/digikam.png")); - Pixmap *p2 = new Pixmap(QPixmap(":/akregator.png")); - Pixmap *p3 = new Pixmap(QPixmap(":/accessories-dictionary.png")); - Pixmap *p4 = new Pixmap(QPixmap(":/k3b.png")); - - p1->setObjectName("p1"); - p2->setObjectName("p2"); - p3->setObjectName("p3"); - p4->setObjectName("p4"); - - p1->setGeometry(QRectF( 0.0, 0.0, 64.0, 64.0)); - p2->setGeometry(QRectF(236.0, 0.0, 64.0, 64.0)); - p3->setGeometry(QRectF(236.0, 236.0, 64.0, 64.0)); - p4->setGeometry(QRectF( 0.0, 236.0, 64.0, 64.0)); - - QGraphicsScene scene(0, 0, 300, 300); - scene.setBackgroundBrush(Qt::white); - scene.addItem(p1); - scene.addItem(p2); - scene.addItem(p3); - scene.addItem(p4); - - GraphicsView window(&scene); - window.setFrameStyle(0); - window.setAlignment(Qt::AlignLeft | Qt::AlignTop); - window.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - window.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - - QStateMachine machine; - machine.setGlobalRestorePolicy(QState::RestoreProperties); - - QState *group = new QState(&machine); - group->setObjectName("group"); - - QRect selectedRect(86, 86, 128, 128); - - QState *idleState = new QState(group); - group->setInitialState(idleState); - - QObjectList objects; - objects << p1 << p2 << p3 << p4; - createStates(objects, selectedRect, group); - createAnimations(objects, &machine); - - machine.setInitialState(group); - machine.start(); - - window.resize(300, 300); - window.show(); - - return app.exec(); -} - -#include "main.moc" diff --git a/examples/widgets/doc/src/appchooser.qdoc b/examples/widgets/doc/src/appchooser.qdoc deleted file mode 100644 index e74860214a0..00000000000 --- a/examples/widgets/doc/src/appchooser.qdoc +++ /dev/null @@ -1,38 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \example animation/appchooser - \title Application Chooser Example - - \brief The Application Chooser example shows how to use the Qt state - machine and the animation framework to select between - applications. - - \image appchooser-example.png - -*/ From 53f7c20cb5b5d5b25a70e072db82921ef2a449d1 Mon Sep 17 00:00:00 2001 From: Gabriel de Dietrich Date: Fri, 17 Nov 2017 16:33:19 -0800 Subject: [PATCH 17/50] Generic Unix Theme: Don't crash if D-Bus is not running Change-Id: I215ef25fe943730ba8b1976695a04a4aa86638f1 Reviewed-by: Shawn Rutledge Reviewed-by: Dmitry Shachnev --- .../themes/genericunix/qgenericunixthemes.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp b/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp index 323e8fd13bf..4e7421e98f7 100644 --- a/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp +++ b/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp @@ -120,9 +120,11 @@ static bool isDBusTrayAvailable() { #ifndef QT_NO_DBUS static bool checkDBusGlobalMenuAvailable() { - QDBusConnection connection = QDBusConnection::sessionBus(); - QString registrarService = QStringLiteral("com.canonical.AppMenu.Registrar"); - return connection.interface()->isServiceRegistered(registrarService); + const QDBusConnection connection = QDBusConnection::sessionBus(); + static const QString registrarService = QStringLiteral("com.canonical.AppMenu.Registrar"); + if (const auto iface = connection.interface()) + return iface->isServiceRegistered(registrarService); + return false; } static bool isDBusGlobalMenuAvailable() From 68733e307f209487e89b9261256ec0c0bc2352e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Wed, 15 Nov 2017 15:30:55 +0100 Subject: [PATCH 18/50] qpa: Teach handleApplicationStateChanged about sync/async delivery MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Using QWindowSystemInterface::SynchronousDelivery reduces the chance that we are flushing other events before delivering the application state change. Those other events may conclude that the application is still active, while in reality it is not, and do bad things. Change-Id: I738c162fac22d2cd18de1e080bcd2cda78ec3f77 Reviewed-by: Tor Arne Vestbø --- src/gui/kernel/qwindowsysteminterface.cpp | 4 ++-- src/gui/kernel/qwindowsysteminterface.h | 1 + src/plugins/platforms/ios/qiosapplicationstate.mm | 6 ++++-- src/plugins/platforms/ios/qiosglobal.h | 1 + src/plugins/platforms/ios/qiosglobal.mm | 1 + 5 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/gui/kernel/qwindowsysteminterface.cpp b/src/gui/kernel/qwindowsysteminterface.cpp index 34519cd91b4..3f27094845c 100644 --- a/src/gui/kernel/qwindowsysteminterface.cpp +++ b/src/gui/kernel/qwindowsysteminterface.cpp @@ -265,12 +265,12 @@ void QWindowSystemInterface::handleWindowScreenChanged(QWindow *window, QScreen QWindowSystemInterfacePrivate::handleWindowSystemEvent(e); } -void QWindowSystemInterface::handleApplicationStateChanged(Qt::ApplicationState newState, bool forcePropagate) +QT_DEFINE_QPA_EVENT_HANDLER(void, handleApplicationStateChanged, Qt::ApplicationState newState, bool forcePropagate) { Q_ASSERT(QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::ApplicationState)); QWindowSystemInterfacePrivate::ApplicationStateChangedEvent *e = new QWindowSystemInterfacePrivate::ApplicationStateChangedEvent(newState, forcePropagate); - QWindowSystemInterfacePrivate::handleWindowSystemEvent(e); + QWindowSystemInterfacePrivate::handleWindowSystemEvent(e); } /*! diff --git a/src/gui/kernel/qwindowsysteminterface.h b/src/gui/kernel/qwindowsysteminterface.h index e582787dd9e..e91c79749d1 100644 --- a/src/gui/kernel/qwindowsysteminterface.h +++ b/src/gui/kernel/qwindowsysteminterface.h @@ -179,6 +179,7 @@ public: static void handleWindowStateChanged(QWindow *window, Qt::WindowState newState, int oldState = -1); static void handleWindowScreenChanged(QWindow *window, QScreen *newScreen); + template static void handleApplicationStateChanged(Qt::ApplicationState newState, bool forcePropagate = false); #ifndef QT_NO_DRAGANDDROP diff --git a/src/plugins/platforms/ios/qiosapplicationstate.mm b/src/plugins/platforms/ios/qiosapplicationstate.mm index 7b923e4692e..13e7e1150fb 100644 --- a/src/plugins/platforms/ios/qiosapplicationstate.mm +++ b/src/plugins/platforms/ios/qiosapplicationstate.mm @@ -39,6 +39,8 @@ #include "qiosapplicationstate.h" +#include "qiosglobal.h" + #include #include @@ -72,8 +74,8 @@ static Qt::ApplicationState qtApplicationState(UIApplicationState uiApplicationS static void handleApplicationStateChanged(UIApplicationState uiApplicationState) { Qt::ApplicationState state = qtApplicationState(uiApplicationState); - QWindowSystemInterface::handleApplicationStateChanged(state); - QWindowSystemInterface::flushWindowSystemEvents(); + qCDebug(lcQpaApplication) << "moved to" << state; + QWindowSystemInterface::handleApplicationStateChanged(state); } QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/ios/qiosglobal.h b/src/plugins/platforms/ios/qiosglobal.h index f74e3004cc5..14e06aa37cd 100644 --- a/src/plugins/platforms/ios/qiosglobal.h +++ b/src/plugins/platforms/ios/qiosglobal.h @@ -47,6 +47,7 @@ QT_BEGIN_NAMESPACE +Q_DECLARE_LOGGING_CATEGORY(lcQpaApplication); Q_DECLARE_LOGGING_CATEGORY(lcQpaInputMethods); #if !defined(QT_NO_DEBUG) diff --git a/src/plugins/platforms/ios/qiosglobal.mm b/src/plugins/platforms/ios/qiosglobal.mm index 1482ffc7af2..8de64814447 100644 --- a/src/plugins/platforms/ios/qiosglobal.mm +++ b/src/plugins/platforms/ios/qiosglobal.mm @@ -44,6 +44,7 @@ QT_BEGIN_NAMESPACE +Q_LOGGING_CATEGORY(lcQpaApplication, "qt.qpa.application"); Q_LOGGING_CATEGORY(lcQpaInputMethods, "qt.qpa.input.methods"); bool isQtApplication() From d3e9b8c728f508fac56a48d63c4a393f2859a2aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Fri, 17 Nov 2017 18:29:49 +0100 Subject: [PATCH 19/50] iOS: Remove forced Qt::AA_ShareOpenGLContexts Commit 8e70241dccaf removed the need for having a global sharecontext to be able to composit GL and raster content in the backingstore, but forgot to remove this part of the iOS platform. Change-Id: I46ffd766729369aff2f8c54799bd033905c9f3dc Reviewed-by: Simon Hausmann --- src/plugins/platforms/ios/qiosintegration.mm | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/plugins/platforms/ios/qiosintegration.mm b/src/plugins/platforms/ios/qiosintegration.mm index 5f114d47621..3ee584b6bf8 100644 --- a/src/plugins/platforms/ios/qiosintegration.mm +++ b/src/plugins/platforms/ios/qiosintegration.mm @@ -94,10 +94,6 @@ QIOSIntegration::QIOSIntegration() "'applicationDidFinishLaunching' inside your UIApplication delegate.\n"); } - // The backingstore needs a global share context in order to support composition in - // QPlatformBackingStore. - qApp->setAttribute(Qt::AA_ShareOpenGLContexts, true); - // Set current directory to app bundle folder QDir::setCurrent(QString::fromUtf8([[[NSBundle mainBundle] bundlePath] UTF8String])); From d8288d2b65f748e986c06dfb117b04a0b73db182 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Tue, 21 Nov 2017 14:32:50 +0100 Subject: [PATCH 20/50] iOS: Make sure FBOs are cleaned up in the right QIOSContext 655687d84d6a591422 shuffled things around, moving the logic to connect to the window's destroyed signal from backingFramebufferObjectFor into makeCurrent. Unfortunately backingFramebufferObjectFor was the one taking care of recursing into the root context (when shared contexts were in play), so the end result was that the root context were keeping track of the FBO, but the leaf context was trying to clean up the FBO. Task-number: QTBUG-56653 Change-Id: I80ed71a3dedeb7611b2aa7548d94b9fbe0e20763 Reviewed-by: Richard Moe Gustavsen --- src/plugins/platforms/ios/qioscontext.mm | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/plugins/platforms/ios/qioscontext.mm b/src/plugins/platforms/ios/qioscontext.mm index 2d5286e9713..6a6cbb43247 100644 --- a/src/plugins/platforms/ios/qioscontext.mm +++ b/src/plugins/platforms/ios/qioscontext.mm @@ -165,8 +165,6 @@ bool QIOSContext::makeCurrent(QPlatformSurface *surface) glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, framebufferObject.depthRenderbuffer); } - - connect(static_cast(surface), SIGNAL(destroyed(QObject*)), this, SLOT(windowDestroyed(QObject*))); } else { glBindFramebuffer(GL_FRAMEBUFFER, framebufferObject.handle); } @@ -249,8 +247,13 @@ QIOSContext::FramebufferObject &QIOSContext::backingFramebufferObjectFor(QPlatfo // should probably use QOpenGLMultiGroupSharedResource to track the shared default-FBOs. if (m_sharedContext) return m_sharedContext->backingFramebufferObjectFor(surface); - else - return m_framebufferObjects[surface]; + + if (!m_framebufferObjects.contains(surface)) { + // We're about to create a new FBO, make sure it's cleaned up as well + connect(static_cast(surface), SIGNAL(destroyed(QObject*)), this, SLOT(windowDestroyed(QObject*))); + } + + return m_framebufferObjects[surface]; } GLuint QIOSContext::defaultFramebufferObject(QPlatformSurface *surface) const From f92aa8e931491efb208753fa079599c4c3a4e0e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Wed, 15 Nov 2017 17:10:16 +0100 Subject: [PATCH 21/50] iOS: Add logging of window geometry/exposure Change-Id: I6ffc7cd1dde4fadd3e952deabe9c3a1dbce7884d Reviewed-by: Richard Moe Gustavsen --- src/plugins/platforms/ios/qiosglobal.h | 1 + src/plugins/platforms/ios/qiosglobal.mm | 1 + src/plugins/platforms/ios/quiview.mm | 2 ++ 3 files changed, 4 insertions(+) diff --git a/src/plugins/platforms/ios/qiosglobal.h b/src/plugins/platforms/ios/qiosglobal.h index 14e06aa37cd..8b39aded06d 100644 --- a/src/plugins/platforms/ios/qiosglobal.h +++ b/src/plugins/platforms/ios/qiosglobal.h @@ -49,6 +49,7 @@ QT_BEGIN_NAMESPACE Q_DECLARE_LOGGING_CATEGORY(lcQpaApplication); Q_DECLARE_LOGGING_CATEGORY(lcQpaInputMethods); +Q_DECLARE_LOGGING_CATEGORY(lcQpaWindow); #if !defined(QT_NO_DEBUG) #define qImDebug \ diff --git a/src/plugins/platforms/ios/qiosglobal.mm b/src/plugins/platforms/ios/qiosglobal.mm index 8de64814447..f27b2242dfb 100644 --- a/src/plugins/platforms/ios/qiosglobal.mm +++ b/src/plugins/platforms/ios/qiosglobal.mm @@ -46,6 +46,7 @@ QT_BEGIN_NAMESPACE Q_LOGGING_CATEGORY(lcQpaApplication, "qt.qpa.application"); Q_LOGGING_CATEGORY(lcQpaInputMethods, "qt.qpa.input.methods"); +Q_LOGGING_CATEGORY(lcQpaWindow, "qt.qpa.window"); bool isQtApplication() { diff --git a/src/plugins/platforms/ios/quiview.mm b/src/plugins/platforms/ios/quiview.mm index 9966bd50a3b..bf26feac9f3 100644 --- a/src/plugins/platforms/ios/quiview.mm +++ b/src/plugins/platforms/ios/quiview.mm @@ -165,6 +165,7 @@ requestedGeometry : qt_window_private(m_qioswindow->window())->geometry; QWindow *window = m_qioswindow->window(); + qCDebug(lcQpaWindow) << m_qioswindow->window() << "new geometry is" << actualGeometry; QWindowSystemInterface::handleGeometryChange(window, actualGeometry, previousGeometry); if (actualGeometry.size() != previousGeometry.size()) { @@ -197,6 +198,7 @@ region = QRect(QPoint(), bounds); } + qCDebug(lcQpaWindow) << m_qioswindow->window() << region << "isExposed" << m_qioswindow->isExposed(); QWindowSystemInterface::handleExposeEvent(m_qioswindow->window(), region); } From 7ce71f00911d3a8e139c6d4b4a3655863a413c4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Tue, 21 Nov 2017 20:42:51 +0100 Subject: [PATCH 22/50] Disable -optimize-debug for Clang It results in Xcode outputting a warning when debugging: [app name] was compiled with optimization - stepping may behave oddly; variables may not be available. And the warning is correct, debugging is broken in this situation. Likely caused by Clang treating -Og as -O1: https://reviews.llvm.org/D24998 Change-Id: I25d6bf1e65c81cc5be92b9847f7d5dd6754a0177 Reviewed-by: Allan Sandfeld Jensen --- config_help.txt | 2 +- configure.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config_help.txt b/config_help.txt index f06584a480d..6b1401c6188 100644 --- a/config_help.txt +++ b/config_help.txt @@ -82,7 +82,7 @@ Build options: -debug-and-release ... Build two versions of Qt, with and without debugging turned on [yes] (Apple and Windows only) -optimize-debug ...... Enable debug-friendly optimizations in debug builds - [auto] (Not supported with MSVC) + [auto] (Not supported with MSVC or Clang toolchains) -optimize-size ....... Optimize release builds for size instead of speed [no] -optimized-tools ..... Build optimized host tools even in debug build [no] -force-debug-info .... Create symbol files for release builds [no] diff --git a/configure.json b/configure.json index a91456aaf34..ce20aa3dc11 100644 --- a/configure.json +++ b/configure.json @@ -689,7 +689,7 @@ }, "optimize_debug": { "label": "Optimize debug build", - "condition": "!config.msvc && (features.debug || features.debug_and_release) && tests.optimize_debug", + "condition": "!config.msvc && !config.clang && (features.debug || features.debug_and_release) && tests.optimize_debug", "output": [ "privateConfig" ] }, "optimize_size": { @@ -1312,7 +1312,7 @@ Configure with '-qreal float' to create a build that is binary-compatible with 5 { "type": "feature", "args": "optimize_debug", - "condition": "!config.msvc && (features.debug || features.debug_and_release)" + "condition": "!config.msvc && !config.clang && (features.debug || features.debug_and_release)" }, { "type": "feature", From 1ea0b47c2eaf81ba4a13b89343719dcefdb90ce3 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Mon, 20 Nov 2017 21:50:19 -0800 Subject: [PATCH 23/50] QImage: Add the replacement function to byteCount's deprecation msg Change-Id: I938b024e38bf4aac9154fffd14f903e22b364c0d Reviewed-by: Allan Sandfeld Jensen --- src/gui/image/qimage.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/image/qimage.h b/src/gui/image/qimage.h index eccff480bb2..398424f75ff 100644 --- a/src/gui/image/qimage.h +++ b/src/gui/image/qimage.h @@ -215,7 +215,7 @@ public: const uchar *constBits() const; #if QT_DEPRECATED_SINCE(5, 10) - QT_DEPRECATED int byteCount() const; + QT_DEPRECATED_X("Use sizeInBytes") int byteCount() const; #endif qssize_t sizeInBytes() const; From bdf1045b715e43eaedd1d9c4de78c4d7ce0e28ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= Date: Mon, 20 Nov 2017 13:26:31 +0100 Subject: [PATCH 24/50] Cocoa: Update layer contentsScale on screen change MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Failure to do so will result in displaying the layer contents on a quarter of the window when moving the window from a 2x screen to a 1x screen. Task-number: QTBUG-64494 Change-Id: I57ce98025e841549f62d132d4985e727898e6207 Reviewed-by: Tor Arne Vestbø --- src/plugins/platforms/cocoa/qnsview.mm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm index 28ffcf87180..c8885517298 100644 --- a/src/plugins/platforms/cocoa/qnsview.mm +++ b/src/plugins/platforms/cocoa/qnsview.mm @@ -353,6 +353,12 @@ Q_LOGGING_CATEGORY(lcQpaTablet, "qt.qpa.input.tablet") m_platformWindow->handleExposeEvent(QRectF::fromCGRect(self.bounds).toRect()); } +- (void)viewDidChangeBackingProperties +{ + if (self.layer) + self.layer.contentsScale = self.window.backingScaleFactor; +} + - (BOOL)isFlipped { return YES; From 0f3c9782e6e2459f3fea361962492f52fa9c4fd9 Mon Sep 17 00:00:00 2001 From: Timur Pocheptsov Date: Mon, 20 Nov 2017 16:50:12 +0100 Subject: [PATCH 25/50] tst_QNetworkReply::ioHttpRedirectErrors - fix a flaky test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This test became a real pain recently. A close look at the test shows several problems (strangely enough, the failure can never be reproduced on real machines, only on VM - Ubuntu and RHEL 6.6). There are several asserts that are firing from time to time here and there. They show that the logic in test is broken/incorrect. QNAM can open several connections to a host, our test then incorrectly resets its 'client' data-member and bad things can later happen after 'bytesWrittenSlot' executed (and deleted a socket). For example, I can reproduce this scenario in every second run: 1. incoming connection -> client = socket(descriptor), connect to client's readyRead (s1) 2. incoming connection -> client = socket(descriptor), connect to client's readyRead (s2) QNAM sends a request on s1. We reply on s2 (which is already wrong) and call client->deleteLater(), which resets client to nullptr. If QNAM sends something else on s1, we hit assert(!client.isNull()). To avoid this, whenever 'sender' in any slot is different from the 'client', we use the actual 'sender' to reply. Another problem is this weird and rather cryptic waitForFinish which is not needed in this particular test since we wait for reply error, not 'finished'. As it happened before - it's not clear if these two problems were the cause of guaranteed fails on CI - an integration failed ~10 times in a row in the same test (not happening anymore though). Task-number: QTBUG-64569 Change-Id: Id9aa091290350c61fadf1c3c001e7c2e1b5ac8f4 Reviewed-by: Edward Welbourne Reviewed-by: Mårten Nordheim --- .../qnetworkreply/tst_qnetworkreply.cpp | 38 +++++++++++++------ 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp index 3a752c0748b..9fa54597f14 100644 --- a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp @@ -622,7 +622,7 @@ protected: Q_ASSERT(!client.isNull()); // we need to emulate the bytesWrittenSlot call if the data is empty. if (dataToTransmit.size() == 0) { - QMetaObject::invokeMethod(this, "bytesWrittenSlot", Qt::QueuedConnection); + emit client->bytesWritten(0); } else { client->write(dataToTransmit); // FIXME: For SSL connections, if we don't flush the socket, the @@ -659,22 +659,26 @@ private slots: #ifndef QT_NO_SSL void slotSslErrors(const QList& errors) { - Q_ASSERT(!client.isNull()); - qDebug() << "slotSslErrors" << client->errorString() << errors; + QTcpSocket *currentClient = qobject_cast(sender()); + Q_ASSERT(currentClient); + qDebug() << "slotSslErrors" << currentClient->errorString() << errors; } #endif void slotError(QAbstractSocket::SocketError err) { - if (client.isNull()) - qDebug() << "slotError" << err; - else - qDebug() << "slotError" << err << client->errorString(); + QTcpSocket *currentClient = qobject_cast(sender()); + Q_ASSERT(currentClient); + qDebug() << "slotError" << err << currentClient->errorString(); } public slots: void readyReadSlot() { - Q_ASSERT(!client.isNull()); + QTcpSocket *currentClient = qobject_cast(sender()); + Q_ASSERT(currentClient); + if (currentClient != client) + client = currentClient; + receivedData += client->readAll(); const int doubleEndlPos = receivedData.indexOf("\r\n\r\n"); @@ -8290,11 +8294,23 @@ void tst_QNetworkReply::ioHttpRedirectErrors() QNetworkReplyPtr reply(manager.get(request)); if (localhost.scheme() == "https") reply.data()->ignoreSslErrors(); - QSignalSpy spy(reply.data(), SIGNAL(error(QNetworkReply::NetworkError))); - QCOMPARE(waitForFinish(reply), int(Failure)); + QEventLoop eventLoop; + QTimer watchDog; + watchDog.setSingleShot(true); - QCOMPARE(spy.count(), 1); + reply->connect(reply.data(), QOverload().of(&QNetworkReply::error), + [&eventLoop](QNetworkReply::NetworkError){ + eventLoop.exit(Failure); + }); + + watchDog.connect(&watchDog, &QTimer::timeout, [&eventLoop](){ + eventLoop.exit(Timeout); + }); + + watchDog.start(5000); + + QCOMPARE(eventLoop.exec(), int(Failure)); QCOMPARE(reply->error(), error); } From 048c380629e91231b3327949c98a49142eacbeba Mon Sep 17 00:00:00 2001 From: Filipe Azevedo Date: Wed, 22 Nov 2017 11:49:56 +0100 Subject: [PATCH 26/50] Code cleanup in QNAM The private class already store a QNetworkConfigurationManager and networkSessionRequired so it's not need to compute them again nor to instantiate temporary classes. Change-Id: I1bbd9439afa70c950ed6ec3e4fc63ddae4a5b259 Reviewed-by: Timur Pocheptsov --- src/network/access/qnetworkaccessmanager.cpp | 24 +++++++++----------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src/network/access/qnetworkaccessmanager.cpp b/src/network/access/qnetworkaccessmanager.cpp index 848761c4a70..fba5755b77a 100644 --- a/src/network/access/qnetworkaccessmanager.cpp +++ b/src/network/access/qnetworkaccessmanager.cpp @@ -985,8 +985,7 @@ QNetworkConfiguration QNetworkAccessManager::configuration() const if (session) { return session->configuration(); } else { - QNetworkConfigurationManager manager; - return manager.defaultConfiguration(); + return d->networkConfigurationManager.defaultConfiguration(); } } @@ -1010,12 +1009,11 @@ QNetworkConfiguration QNetworkAccessManager::activeConfiguration() const Q_D(const QNetworkAccessManager); QSharedPointer networkSession(d->getNetworkSession()); - QNetworkConfigurationManager manager; if (networkSession) { - return manager.configurationFromIdentifier( + return d->networkConfigurationManager.configurationFromIdentifier( networkSession->sessionProperty(QLatin1String("ActiveConfiguration")).toString()); } else { - return manager.defaultConfiguration(); + return d->networkConfigurationManager.defaultConfiguration(); } } @@ -1342,17 +1340,16 @@ QNetworkReply *QNetworkAccessManager::createRequest(QNetworkAccessManager::Opera } if (!d->networkSessionStrongRef && (d->initializeSession || !d->networkConfiguration.identifier().isEmpty())) { - QNetworkConfigurationManager manager; if (!d->networkConfiguration.identifier().isEmpty()) { if ((d->networkConfiguration.state() & QNetworkConfiguration::Defined) - && d->networkConfiguration != manager.defaultConfiguration()) - d->createSession(manager.defaultConfiguration()); + && d->networkConfiguration != d->networkConfigurationManager.defaultConfiguration()) + d->createSession(d->networkConfigurationManager.defaultConfiguration()); else d->createSession(d->networkConfiguration); } else { - if (manager.capabilities() & QNetworkConfigurationManager::NetworkSessionRequired) - d->createSession(manager.defaultConfiguration()); + if (d->networkSessionRequired) + d->createSession(d->networkConfigurationManager.defaultConfiguration()); else d->initializeSession = false; } @@ -1884,8 +1881,8 @@ void QNetworkAccessManagerPrivate::_q_onlineStateChanged(bool isOnline) online = (networkConfiguration.state() & QNetworkConfiguration::Active); } else { if (online != isOnline) { - _q_networkSessionClosed(); - createSession(q->configuration()); + _q_networkSessionClosed(); + createSession(q->configuration()); online = isOnline; } } @@ -1909,13 +1906,13 @@ void QNetworkAccessManagerPrivate::_q_configurationChanged(const QNetworkConfigu const QString id = configuration.identifier(); if (configuration.state().testFlag(QNetworkConfiguration::Active)) { if (!onlineConfigurations.contains(id)) { - QSharedPointer session(getNetworkSession()); if (session) { if (online && session->configuration().identifier() != networkConfigurationManager.defaultConfiguration().identifier()) { onlineConfigurations.insert(id); + // CHECK: If it's having Active flag - why would it be disconnected ??? //this one disconnected but another one is online, // close and create new session _q_networkSessionClosed(); @@ -1926,6 +1923,7 @@ void QNetworkAccessManagerPrivate::_q_configurationChanged(const QNetworkConfigu } else if (onlineConfigurations.contains(id)) { //this one is disconnecting + // CHECK: If it disconnected while we create a session over a down configuration ??? onlineConfigurations.remove(id); if (!onlineConfigurations.isEmpty()) { _q_networkSessionClosed(); From 53f48fceeec7af4439ee45111e327dd4e7a226e8 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Wed, 1 Nov 2017 12:11:33 +0100 Subject: [PATCH 27/50] Start from the first visible item when doing a search MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since the first item in a treeview might be hidden, start from the first visible item in the view when starting or wrapping round during a keyboard search. Task-number: QTBUG-63869 Change-Id: I202bea567c6d4484c3ffaf8a5f9af8ea2e13708d Reviewed-by: Thorbjørn Lund Martsum --- src/widgets/itemviews/qtreeview.cpp | 18 +++- .../itemviews/qtreeview/tst_qtreeview.cpp | 97 +++++++++++++++++++ 2 files changed, 110 insertions(+), 5 deletions(-) diff --git a/src/widgets/itemviews/qtreeview.cpp b/src/widgets/itemviews/qtreeview.cpp index 805b855b9d2..bbbadecff82 100644 --- a/src/widgets/itemviews/qtreeview.cpp +++ b/src/widgets/itemviews/qtreeview.cpp @@ -1014,11 +1014,16 @@ void QTreeView::keyboardSearch(const QString &search) if (!d->model->rowCount(d->root) || !d->model->columnCount(d->root)) return; + // Do a relayout nows, so that we can utilize viewItems + d->executePostedLayout(); + if (d->viewItems.isEmpty()) + return; + QModelIndex start; if (currentIndex().isValid()) start = currentIndex(); else - start = d->model->index(0, 0, d->root); + start = d->viewItems.at(0).index; bool skipRow = false; bool keyboardTimeWasValid = d->keyboardInputTime.isValid(); @@ -1046,13 +1051,16 @@ void QTreeView::keyboardSearch(const QString &search) // skip if we are searching for the same key or a new search started if (skipRow) { - if (indexBelow(start).isValid()) + if (indexBelow(start).isValid()) { start = indexBelow(start); - else - start = d->model->index(0, start.column(), d->root); + } else { + const int origCol = start.column(); + start = d->viewItems.at(0).index; + if (origCol != start.column()) + start = start.sibling(start.row(), origCol); + } } - d->executePostedLayout(); int startIndex = d->viewIndex(start); if (startIndex <= -1) return; diff --git a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp index 3260d7c9689..dfcaa9b5b91 100644 --- a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp +++ b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp @@ -1067,6 +1067,103 @@ void tst_QTreeView::keyboardSearch() // The item that starts with B is selected. view.keyboardSearch(QLatin1String("B")); QVERIFY(view.selectionModel()->isSelected(model.index(1, 0))); + + // Test that it wraps round + model.appendRow(new QStandardItem("Andy")); + QTest::qWait(QApplication::keyboardInputInterval() * 2); + view.keyboardSearch(QLatin1String("A")); + QVERIFY(view.selectionModel()->isSelected(model.index(3, 0))); + QTest::qWait(QApplication::keyboardInputInterval() * 2); + view.keyboardSearch(QLatin1String("A")); + QVERIFY(view.selectionModel()->isSelected(model.index(0, 0))); + QTest::qWait(QApplication::keyboardInputInterval() * 2); + view.keyboardSearch(QLatin1String("A")); + QVERIFY(view.selectionModel()->isSelected(model.index(3, 0))); + + // Test that it handles the case where the first item is hidden correctly + model.insertRow(0, new QStandardItem("Hidden item")); + view.setRowHidden(0, QModelIndex(), true); + + QTest::qWait(QApplication::keyboardInputInterval() * 2); + view.keyboardSearch(QLatin1String("A")); + QVERIFY(view.selectionModel()->isSelected(model.index(1, 0))); + QTest::qWait(QApplication::keyboardInputInterval() * 2); + view.keyboardSearch(QLatin1String("A")); + QVERIFY(view.selectionModel()->isSelected(model.index(4, 0))); + QTest::qWait(QApplication::keyboardInputInterval() * 2); + view.keyboardSearch(QLatin1String("A")); + QVERIFY(view.selectionModel()->isSelected(model.index(1, 0))); + + QTest::qWait(QApplication::keyboardInputInterval() * 2); + model.clear(); + view.setCurrentIndex(QModelIndex()); + QList items = { new QStandardItem("Andreas"), new QStandardItem("Alicia") }; + model.appendRow(items); + items = { new QStandardItem("Baldrian"), new QStandardItem("Belinda") }; + model.appendRow(items); + items = { new QStandardItem("Cecilie"), new QStandardItem("Claire") }; + model.appendRow(items); + QVERIFY(!view.selectionModel()->hasSelection()); + QVERIFY(!view.selectionModel()->isSelected(model.index(0, 0))); + + // We want to search on the 2nd column so we have to force it to have + // an index in that column as a starting point + view.setCurrentIndex(QModelIndex(model.index(0, 1))); + // Second item in first row is selected + view.keyboardSearch(QLatin1String("A")); + QTRY_VERIFY(view.selectionModel()->isSelected(model.index(0, 1))); + QVERIFY(view.currentIndex() == model.index(0, 1)); + + // Second item in first row is still selected + view.keyboardSearch(QLatin1String("l")); + QVERIFY(view.selectionModel()->isSelected(model.index(0, 1))); + QCOMPARE(view.currentIndex(), model.index(0, 1)); + + // No "AnB" item - keep the same selection. + view.keyboardSearch(QLatin1String("B")); + QVERIFY(view.selectionModel()->isSelected(model.index(0, 1))); + QCOMPARE(view.currentIndex(), model.index(0, 1)); + + // Wait a bit. + QTest::qWait(QApplication::keyboardInputInterval() * 2); + + // The item that starts with B is selected. + view.keyboardSearch(QLatin1String("B")); + QVERIFY(view.selectionModel()->isSelected(model.index(1, 1))); + QCOMPARE(view.currentIndex(), model.index(1, 1)); + + // Test that it wraps round + items = { new QStandardItem("Andy"), new QStandardItem("Adele") }; + model.appendRow(items); + QTest::qWait(QApplication::keyboardInputInterval() * 2); + view.keyboardSearch(QLatin1String("A")); + QVERIFY(view.selectionModel()->isSelected(model.index(3, 1))); + QCOMPARE(view.currentIndex(), model.index(3, 1)); + QTest::qWait(QApplication::keyboardInputInterval() * 2); + view.keyboardSearch(QLatin1String("A")); + QVERIFY(view.selectionModel()->isSelected(model.index(0, 1))); + QCOMPARE(view.currentIndex(), model.index(0, 1)); + QTest::qWait(QApplication::keyboardInputInterval() * 2); + view.keyboardSearch(QLatin1String("A")); + QVERIFY(view.selectionModel()->isSelected(model.index(3, 1))); + QCOMPARE(view.currentIndex(), model.index(3, 1)); + + // Test that it handles the case where the first item is hidden correctly + model.insertRow(0, new QStandardItem("Hidden item")); + view.setRowHidden(0, QModelIndex(), true); + + QTest::qWait(QApplication::keyboardInputInterval() * 2); + view.keyboardSearch(QLatin1String("A")); + QVERIFY(view.selectionModel()->isSelected(model.index(1, 1))); + QCOMPARE(view.currentIndex(), model.index(1, 1)); + QTest::qWait(QApplication::keyboardInputInterval() * 2); + view.keyboardSearch(QLatin1String("A")); + QVERIFY(view.selectionModel()->isSelected(model.index(4, 1))); + QCOMPARE(view.currentIndex(), model.index(4, 1)); + QTest::qWait(QApplication::keyboardInputInterval() * 2); + view.keyboardSearch(QLatin1String("A")); + QVERIFY(view.selectionModel()->isSelected(model.index(1, 1))); + QCOMPARE(view.currentIndex(), model.index(1, 1)); } void tst_QTreeView::keyboardSearchMultiColumn() From c3a5c482efcac794033721e4e32b01b012704096 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5rten=20Nordheim?= Date: Fri, 17 Nov 2017 14:44:36 +0100 Subject: [PATCH 28/50] Fix tst_QSslSocket::waitForConnectedEncryptedReadyRead ... and unblacklist it. It was blacklisted some years ago because it was failing too often. It was failing because the ssl socket had already received and decrypted all the data it was going to get, meaning the waitForReadyRead call was just going to block forever. Change-Id: Ia540735177d4e1be8696f2d752f1d7813faecfe5 Reviewed-by: Timur Pocheptsov Reviewed-by: Edward Welbourne --- tests/auto/network/ssl/qsslsocket/BLACKLIST | 2 -- tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp | 7 ++++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/tests/auto/network/ssl/qsslsocket/BLACKLIST b/tests/auto/network/ssl/qsslsocket/BLACKLIST index 52c023b78fe..a9ecc69f508 100644 --- a/tests/auto/network/ssl/qsslsocket/BLACKLIST +++ b/tests/auto/network/ssl/qsslsocket/BLACKLIST @@ -1,6 +1,4 @@ windows -[waitForConnectedEncryptedReadyRead:WithSocks5ProxyAuth] -* [protocolServerSide:ssl3-any] rhel-7.2 [protocolServerSide:tls1.0-any] diff --git a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp index c74d3b5375d..f97627cb428 100644 --- a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp +++ b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp @@ -1587,7 +1587,12 @@ void tst_QSslSocket::waitForConnectedEncryptedReadyRead() QFETCH_GLOBAL(bool, setProxy); if (setProxy && !socket->waitForEncrypted(10000)) QSKIP("Skipping flaky test - See QTBUG-29941"); - QVERIFY(socket->waitForReadyRead(10000)); + + // We only do this if we have no bytes available to read already because readyRead will + // not be emitted again. + if (socket->bytesAvailable() == 0) + QVERIFY(socket->waitForReadyRead(10000)); + QVERIFY(!socket->peerCertificate().isNull()); QVERIFY(!socket->peerCertificateChain().isEmpty()); } From b71b7461b0b95bbf02c215019381b19e4070e07c Mon Sep 17 00:00:00 2001 From: Kevin Funk Date: Fri, 29 Sep 2017 22:17:10 +0200 Subject: [PATCH 29/50] CMake: Set SKIP_AUTOMOC/AUTOUIC where needed Make sure we don't run into warnings for CMake 3.10 Task-number: QTBUG-63442 Change-Id: Ida004705646f0c32fb4bf6006036d80b1f279fd7 Reviewed-by: David Faure Reviewed-by: Sebastian Holtermann Reviewed-by: Rolf Eike Beer --- src/corelib/Qt5CoreMacros.cmake | 9 +++- src/widgets/Qt5WidgetsMacros.cmake | 3 ++ tests/auto/cmake/CMakeLists.txt | 12 +++-- .../cmake/test_QTBUG-63422/CMakeLists.txt | 30 +++++++++++ .../auto/cmake/test_QTBUG-63422/mywidget.cpp | 43 +++++++++++++++ tests/auto/cmake/test_QTBUG-63422/mywidget.h | 52 +++++++++++++++++++ tests/auto/cmake/test_QTBUG-63422/mywidget.ui | 34 ++++++++++++ tests/auto/cmake/test_QTBUG-63422/res.qrc | 4 ++ 8 files changed, 182 insertions(+), 5 deletions(-) create mode 100644 tests/auto/cmake/test_QTBUG-63422/CMakeLists.txt create mode 100644 tests/auto/cmake/test_QTBUG-63422/mywidget.cpp create mode 100644 tests/auto/cmake/test_QTBUG-63422/mywidget.h create mode 100644 tests/auto/cmake/test_QTBUG-63422/mywidget.ui create mode 100644 tests/auto/cmake/test_QTBUG-63422/res.qrc diff --git a/src/corelib/Qt5CoreMacros.cmake b/src/corelib/Qt5CoreMacros.cmake index 489bc755117..8b65db95cb2 100644 --- a/src/corelib/Qt5CoreMacros.cmake +++ b/src/corelib/Qt5CoreMacros.cmake @@ -137,6 +137,9 @@ function(QT5_CREATE_MOC_COMMAND infile outfile moc_flags moc_options moc_target DEPENDS ${infile} ${moc_depends} ${_moc_working_dir} VERBATIM) + set_source_files_properties(${infile} PROPERTIES SKIP_AUTOMOC ON) + set_source_files_properties(${outfile} PROPERTIES SKIP_AUTOMOC ON) + set_source_files_properties(${outfile} PROPERTIES SKIP_AUTOUIC ON) endfunction() @@ -155,7 +158,6 @@ function(QT5_GENERATE_MOC infile outfile ) set(moc_target ${ARGV3}) endif() qt5_create_moc_command(${abs_infile} ${_outfile} "${moc_flags}" "" "${moc_target}" "") - set_source_files_properties(${outfile} PROPERTIES SKIP_AUTOMOC TRUE) # dont run automoc on this file endfunction() @@ -246,6 +248,7 @@ function(QT5_ADD_BINARY_RESOURCES target ) get_filename_component(infile ${it} ABSOLUTE) _QT5_PARSE_QRC_FILE(${infile} _out_depends _rc_depends) + set_source_files_properties(${infile} PROPERTIES SKIP_AUTORCC ON) set(infiles ${infiles} ${infile}) set(out_depends ${out_depends} ${_out_depends}) set(rc_depends ${rc_depends} ${_rc_depends}) @@ -255,7 +258,6 @@ function(QT5_ADD_BINARY_RESOURCES target ) COMMAND ${Qt5Core_RCC_EXECUTABLE} ARGS ${rcc_options} --binary --name ${target} --output ${rcc_destination} ${infiles} DEPENDS ${rc_depends} ${out_depends} VERBATIM) - add_custom_target(${target} ALL DEPENDS ${rcc_destination}) endfunction() @@ -283,12 +285,15 @@ function(QT5_ADD_RESOURCES outfiles ) set(outfile ${CMAKE_CURRENT_BINARY_DIR}/qrc_${outfilename}.cpp) _QT5_PARSE_QRC_FILE(${infile} _out_depends _rc_depends) + set_source_files_properties(${infile} PROPERTIES SKIP_AUTORCC ON) add_custom_command(OUTPUT ${outfile} COMMAND ${Qt5Core_RCC_EXECUTABLE} ARGS ${rcc_options} --name ${outfilename} --output ${outfile} ${infile} MAIN_DEPENDENCY ${infile} DEPENDS ${_rc_depends} "${out_depends}" VERBATIM) + set_source_files_properties(${outfile} PROPERTIES SKIP_AUTOMOC ON) + set_source_files_properties(${outfile} PROPERTIES SKIP_AUTOUIC ON) list(APPEND ${outfiles} ${outfile}) endforeach() set(${outfiles} ${${outfiles}} PARENT_SCOPE) diff --git a/src/widgets/Qt5WidgetsMacros.cmake b/src/widgets/Qt5WidgetsMacros.cmake index f5e7b7f0500..737371a5ade 100644 --- a/src/widgets/Qt5WidgetsMacros.cmake +++ b/src/widgets/Qt5WidgetsMacros.cmake @@ -59,6 +59,9 @@ function(QT5_WRAP_UI outfiles ) COMMAND ${Qt5Widgets_UIC_EXECUTABLE} ARGS ${ui_options} -o ${outfile} ${infile} MAIN_DEPENDENCY ${infile} VERBATIM) + set_source_files_properties(${infile} PROPERTIES SKIP_AUTOUIC ON) + set_source_files_properties(${outfile} PROPERTIES SKIP_AUTOMOC ON) + set_source_files_properties(${outfile} PROPERTIES SKIP_AUTOUIC ON) list(APPEND ${outfiles} ${outfile}) endforeach() set(${outfiles} ${${outfiles}} PARENT_SCOPE) diff --git a/tests/auto/cmake/CMakeLists.txt b/tests/auto/cmake/CMakeLists.txt index 0e6da23c091..40c86132e95 100644 --- a/tests/auto/cmake/CMakeLists.txt +++ b/tests/auto/cmake/CMakeLists.txt @@ -157,7 +157,13 @@ if (NOT CMAKE_VERSION VERSION_LESS 2.8.11 AND NOT NO_WIDGETS) expect_pass(test_interface) endif() -if (NOT CMAKE_VERSION VERSION_LESS 2.8.12) - expect_pass(test_interface_link_libraries) - expect_pass(test_moc_macro_target) +expect_pass(test_interface_link_libraries) +expect_pass(test_moc_macro_target) + +if (NOT CMAKE_VERSION VERSION_LESS 3.8) + # With earlier CMake versions, this test would simply run moc multiple times and lead to: + # /usr/bin/ld: error: CMakeFiles/mywidget.dir/mywidget_automoc.cpp.o: multiple definition of 'MyWidget::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)' + # /usr/bin/ld: CMakeFiles/mywidget.dir/moc_mywidget.cpp.o: previous definition here + # Reason: SKIP_* properties were added in CMake 3.8 only + expect_pass(test_QTBUG-63422) endif() diff --git a/tests/auto/cmake/test_QTBUG-63422/CMakeLists.txt b/tests/auto/cmake/test_QTBUG-63422/CMakeLists.txt new file mode 100644 index 00000000000..a0b82caee40 --- /dev/null +++ b/tests/auto/cmake/test_QTBUG-63422/CMakeLists.txt @@ -0,0 +1,30 @@ +cmake_minimum_required(VERSION 2.8) +project(test_dependent_modules) + +find_package(Qt5Widgets REQUIRED) + +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTOUIC ON) +set(CMAKE_AUTORCC ON) +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +# make sure CMP0071 warnings cause a test failure +set(CMAKE_SUPPRESS_DEVELOPER_ERRORS FALSE CACHE INTERNAL "" FORCE) + +qt5_wrap_cpp(moc_files mywidget.h) +qt5_wrap_ui(ui_files mywidget.ui) +qt5_add_resources(qrc_files res.qrc) + +add_executable(mywidget + # source files + mywidget.cpp + mywidget.h + mywidget.ui + res.qrc + + # generated files + ${moc_files} + ${ui_files} + ${qrc_files} +) +target_link_libraries(mywidget ${Qt5Widgets_LIBRARIES}) diff --git a/tests/auto/cmake/test_QTBUG-63422/mywidget.cpp b/tests/auto/cmake/test_QTBUG-63422/mywidget.cpp new file mode 100644 index 00000000000..7bc42537d51 --- /dev/null +++ b/tests/auto/cmake/test_QTBUG-63422/mywidget.cpp @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Kevin Funk +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "mywidget.h" +#include "ui_mywidget.h" + +MyWidget::MyWidget(QWidget *parent) + : QWidget(parent) +{ + emit someSignal(); +} + +int main(int argc, char **argv) +{ + QApplication app(argc, argv); + MyWidget myWidget; + return 0; +} diff --git a/tests/auto/cmake/test_QTBUG-63422/mywidget.h b/tests/auto/cmake/test_QTBUG-63422/mywidget.h new file mode 100644 index 00000000000..d0c79c05389 --- /dev/null +++ b/tests/auto/cmake/test_QTBUG-63422/mywidget.h @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Kevin Funk +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MYWIDGET_H +#define MYWIDGET_H + +#include + +namespace Ui +{ +class MyWidget; +} + +class MyWidget : public QWidget +{ + Q_OBJECT +public: + MyWidget(QWidget *parent = nullptr); + +signals: + void someSignal(); + +private: + Ui::MyWidget *ui = nullptr; +}; + +#endif diff --git a/tests/auto/cmake/test_QTBUG-63422/mywidget.ui b/tests/auto/cmake/test_QTBUG-63422/mywidget.ui new file mode 100644 index 00000000000..ac42ac4dc28 --- /dev/null +++ b/tests/auto/cmake/test_QTBUG-63422/mywidget.ui @@ -0,0 +1,34 @@ + + + Form + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + + PushButton + + + + + + + + + + + + + + diff --git a/tests/auto/cmake/test_QTBUG-63422/res.qrc b/tests/auto/cmake/test_QTBUG-63422/res.qrc new file mode 100644 index 00000000000..4ca9cd58370 --- /dev/null +++ b/tests/auto/cmake/test_QTBUG-63422/res.qrc @@ -0,0 +1,4 @@ + + + + From d813c66bfcfac1837814ec4d174d0389172f0d4c Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Tue, 25 Apr 2017 12:02:09 -0300 Subject: [PATCH 30/50] Fix the build when AVX2 is enabled but __F16C__ isn't defined If -mavx2 is used, __AVX2__ is defined, which enables the F16C code after commit 280e321e52fd4e86545f3f0d4bd4e047786a897e, but that was wrong since we aren't allowed to use the F16C intrinsics with either Clang or GCC (we can only do that with GCC 4.9 and Clang 4.8, and only with an __attribute__ decoration). With ICC and MSVC, we are allowed to use the intrinsics, but the #include was missing. [ChangeLog][QtCore] Fixed a compilation issue with qfloat16 if AVX2 support is enabled in the compiler. Since all processors that support AVX2 also support F16C, for GCC and Clang it is recommended to either add -mf16c to your build or to use the corresponding -march= switch. Task-number: QTBUG-64529 Change-Id: I84e363d735b443cb9beefffd14b8ac1fd4baa978 Reviewed-by: Allan Sandfeld Jensen --- src/corelib/global/qfloat16.h | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/corelib/global/qfloat16.h b/src/corelib/global/qfloat16.h index 89a62a93db7..a0aa9496b47 100644 --- a/src/corelib/global/qfloat16.h +++ b/src/corelib/global/qfloat16.h @@ -44,7 +44,16 @@ #include #include -#if defined __F16C__ +#if defined(QT_COMPILER_SUPPORTS_F16C) && defined(__AVX2__) && !defined(__F16C__) +// All processors that support AVX2 do support F16C too. That doesn't mean +// we're allowed to use the intrinsics directly, so we'll do it only for +// the Intel and Microsoft's compilers. +# if defined(Q_CC_INTEL) || defined(Q_CC_MSVC) +# define __F16C__ 1 +# endif +#endif + +#if defined(QT_COMPILER_SUPPORTS_F16C) && defined(__F16C__) #include #endif @@ -116,7 +125,7 @@ QT_WARNING_DISABLE_CLANG("-Wc99-extensions") QT_WARNING_DISABLE_GCC("-Wold-style-cast") inline qfloat16::qfloat16(float f) Q_DECL_NOTHROW { -#if defined(QT_COMPILER_SUPPORTS_F16C) && (defined(__F16C__) || defined(__AVX2__)) +#if defined(QT_COMPILER_SUPPORTS_F16C) && defined(__F16C__) __m128 packsingle = _mm_set_ss(f); __m128i packhalf = _mm_cvtps_ph(packsingle, 0); b16 = _mm_extract_epi16(packhalf, 0); @@ -134,7 +143,7 @@ QT_WARNING_POP inline qfloat16::operator float() const Q_DECL_NOTHROW { -#if defined(QT_COMPILER_SUPPORTS_F16C) && (defined(__F16C__) || defined(__AVX2__)) +#if defined(QT_COMPILER_SUPPORTS_F16C) && defined(__F16C__) __m128i packhalf = _mm_cvtsi32_si128(b16); __m128 packsingle = _mm_cvtph_ps(packhalf); return _mm_cvtss_f32(packsingle); From 45a5f28aa4d6bc090a5fa094d3b2eb68306714a2 Mon Sep 17 00:00:00 2001 From: Christian Ehrlicher Date: Sun, 19 Nov 2017 13:03:45 +0100 Subject: [PATCH 31/50] QTreeView/Fusion style : Draw child indicator correct in RTL-mode Fusion style did not honor direction option when drawing the child indicator. This lead to a wrong rendering of QTreeView in right-to-left mode. Task-number: QTBUG-63396 Change-Id: I2d5de03d7c831e3caabcc9269617eecb9338f163 Reviewed-by: Richard Moe Gustavsen --- src/widgets/styles/qfusionstyle.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/widgets/styles/qfusionstyle.cpp b/src/widgets/styles/qfusionstyle.cpp index 016a5e2ad7f..774eca10189 100644 --- a/src/widgets/styles/qfusionstyle.cpp +++ b/src/widgets/styles/qfusionstyle.cpp @@ -472,8 +472,10 @@ void QFusionStyle::drawPrimitive(PrimitiveElement elem, break; if (option->state & State_Open) drawPrimitive(PE_IndicatorArrowDown, option, painter, widget); - else - drawPrimitive(PE_IndicatorArrowRight, option, painter, widget); + else { + const bool reverse = (option->direction == Qt::RightToLeft); + drawPrimitive(reverse ? PE_IndicatorArrowLeft : PE_IndicatorArrowRight, option, painter, widget); + } break; } #if QT_CONFIG(tabbar) From a6d7f38791bd4627314be2c93d0989116413830e Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Sun, 18 Dec 2016 14:35:11 +0000 Subject: [PATCH 32/50] QHeaderView: Simplify and fix layoutChange handling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A layoutChange indicates that anything can have moved to anywhere else, including as a result purely of new items being added. It can also indicate that items are removed. The old code here incorrectly assumed that the section count remained constant over this operation by setting the size of the oldSectionHidden QBitArray - whose size is the size before the layoutChange operation - and then calling setBit with model rows numbered after the layoutChange operation. As the two are not necessarily the same dimensions, this can result in asserts from the setBit call. Simplify the handling of layoutChanged entirely by clearing section information, and using the QPersistentIndexes which indicate hidden state to restore that state after re-population. Task-number: QTBUG-53221 Change-Id: I3cda13e86b51b3029b37b647a48748fb604db252 Reviewed-by: Thorbjørn Lund Martsum --- src/widgets/itemviews/qheaderview.cpp | 34 ++++--------- .../itemviews/qheaderview/tst_qheaderview.cpp | 49 +++++++++++++++++++ 2 files changed, 59 insertions(+), 24 deletions(-) diff --git a/src/widgets/itemviews/qheaderview.cpp b/src/widgets/itemviews/qheaderview.cpp index 298270a7852..4e4c9572a32 100644 --- a/src/widgets/itemviews/qheaderview.cpp +++ b/src/widgets/itemviews/qheaderview.cpp @@ -2086,40 +2086,26 @@ void QHeaderViewPrivate::_q_layoutChanged() { Q_Q(QHeaderView); viewport->update(); - if (persistentHiddenSections.isEmpty() || modelIsEmpty()) { - if (modelSectionCount() != sectionCount()) - q->initializeSections(); - persistentHiddenSections.clear(); + + const auto hiddenSections = persistentHiddenSections; + persistentHiddenSections.clear(); + + clear(); + q->initializeSections(); + invalidateCachedSizeHint(); + + if (modelIsEmpty()) { return; } - QBitArray oldSectionHidden = sectionsHiddenToBitVector(); - oldSectionHidden.resize(sectionItems.size()); - bool sectionCountChanged = false; - - for (int i = 0; i < persistentHiddenSections.count(); ++i) { - QModelIndex index = persistentHiddenSections.at(i); + for (const auto &index : hiddenSections) { if (index.isValid()) { const int logical = (orientation == Qt::Horizontal ? index.column() : index.row()); q->setSectionHidden(logical, true); - oldSectionHidden.setBit(logical, false); - } else if (!sectionCountChanged && (modelSectionCount() != sectionCount())) { - sectionCountChanged = true; - break; } } - persistentHiddenSections.clear(); - - for (int i = 0; i < oldSectionHidden.count(); ++i) { - if (oldSectionHidden.testBit(i)) - q->setSectionHidden(i, false); - } - - // the number of sections changed; we need to reread the state of the model - if (sectionCountChanged) - q->initializeSections(); } /*! diff --git a/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp b/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp index fa543ae2c32..90019a17981 100644 --- a/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp +++ b/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp @@ -210,6 +210,7 @@ private slots: void QTBUG12268_hiddenMovedSectionSorting(); void QTBUG14242_hideSectionAutoSize(); void QTBUG50171_visualRegionForSwappedItems(); + void QTBUG53221_assertShiftHiddenRow(); void ensureNoIndexAtLength(); void offsetConsistent(); @@ -2384,6 +2385,54 @@ void tst_QHeaderView::QTBUG50171_visualRegionForSwappedItems() headerView.testVisualRegionForSelection(); } +class QTBUG53221_Model : public QAbstractItemModel +{ +public: + void insertRowAtBeginning() + { + Q_EMIT layoutAboutToBeChanged(); + m_displayNames.insert(0, QStringLiteral("Item %1").arg(m_displayNames.count())); + // Rows are always inserted at the beginning, so move all others. + foreach (const QModelIndex &persIndex, persistentIndexList()) + { + // The vertical header view will have a persistent index stored here on the second call to insertRowAtBeginning. + changePersistentIndex(persIndex, index(persIndex.row() + 1, persIndex.column(), persIndex.parent())); + } + Q_EMIT layoutChanged(); + } + + QVariant data(const QModelIndex &index, int role) const override + { + return (role == Qt::DisplayRole) ? m_displayNames.at(index.row()) : QVariant(); + } + + QModelIndex index(int row, int column, const QModelIndex &) const override { return createIndex(row, column); } + QModelIndex parent(const QModelIndex &) const override { return QModelIndex(); } + int rowCount(const QModelIndex &) const override { return m_displayNames.count(); } + int columnCount(const QModelIndex &) const override { return 1; } + +private: + QStringList m_displayNames; +}; + +void tst_QHeaderView::QTBUG53221_assertShiftHiddenRow() +{ + QTableView tableView; + QTBUG53221_Model modelTableView; + tableView.setModel(&modelTableView); + + modelTableView.insertRowAtBeginning(); + tableView.setRowHidden(0, true); + QCOMPARE(tableView.verticalHeader()->isSectionHidden(0), true); + modelTableView.insertRowAtBeginning(); + QCOMPARE(tableView.verticalHeader()->isSectionHidden(0), false); + QCOMPARE(tableView.verticalHeader()->isSectionHidden(1), true); + modelTableView.insertRowAtBeginning(); + QCOMPARE(tableView.verticalHeader()->isSectionHidden(0), false); + QCOMPARE(tableView.verticalHeader()->isSectionHidden(1), false); + QCOMPARE(tableView.verticalHeader()->isSectionHidden(2), true); +} + void protected_QHeaderView::testVisualRegionForSelection() { QRegion r = visualRegionForSelection(QItemSelection(model()->index(1, 0), model()->index(1, 2))); From fb2e795c6e61b3c5fb699aefdb2662769c12f76b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Tue, 21 Nov 2017 16:06:02 +0100 Subject: [PATCH 33/50] iOS: Take UIWindow bounds into account when making window fullscreen When an app is in split-view mode, the app can't use the full bounds of the screen, but should limit its area to that of its UIWindow. Task-number: QTBUG-48225 Change-Id: Ia66ad6bba24d9d73a8263ad3f65b9dee9b8a1b37 Reviewed-by: Richard Moe Gustavsen --- src/plugins/platforms/ios/qioswindow.mm | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/plugins/platforms/ios/qioswindow.mm b/src/plugins/platforms/ios/qioswindow.mm index 8ff0dfbd5f0..fb161febda2 100644 --- a/src/plugins/platforms/ios/qioswindow.mm +++ b/src/plugins/platforms/ios/qioswindow.mm @@ -244,12 +244,25 @@ void QIOSWindow::setWindowState(Qt::WindowState state) applyGeometry(m_normalGeometry); break; case Qt::WindowMaximized: - applyGeometry(window()->flags() & Qt::MaximizeUsingFullscreenGeometryHint ? - screen()->geometry() : screen()->availableGeometry()); - break; - case Qt::WindowFullScreen: - applyGeometry(screen()->geometry()); + case Qt::WindowFullScreen: { + // When an application is in split-view mode, the UIScreen still has the + // same geometry, but the UIWindow is resized to the area reserved for the + // application. We use this to constrain the geometry used when applying the + // fullscreen or maximized window states. Note that we do not do this + // in applyGeometry(), as we don't want to artificially limit window + // placement "outside" of the screen bounds if that's what the user wants. + + QRect uiWindowBounds = QRectF::fromCGRect(m_view.window.bounds).toRect(); + QRect fullscreenGeometry = screen()->geometry().intersected(uiWindowBounds); + QRect maximizedGeometry = window()->flags() & Qt::MaximizeUsingFullscreenGeometryHint ? + fullscreenGeometry : screen()->availableGeometry().intersected(uiWindowBounds); + + if (state & Qt::WindowFullScreen) + applyGeometry(fullscreenGeometry); + else + applyGeometry(maximizedGeometry); break; + } case Qt::WindowMinimized: applyGeometry(QRect()); break; From eade2255ea7cd8200569080e9b295479b1f51bed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Wed, 15 Nov 2017 14:50:58 +0100 Subject: [PATCH 34/50] Windows: Resolve QStandardPaths config location without qApp instance MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Calling QCoreApplication::applicationDirPath() requires an app instance, but on Windows the implementation just relies on qAppFileName(), which does not require any instance. As resolving the standard paths could be needed before QCoreApplication instantiation, e.g. for categorized logging, we use qAppFileName() directly. Change-Id: Id882cebd528bcb8e945e73a83f1dc3d599b74d1d Reviewed-by: Jan Arve Sæther --- src/corelib/io/qstandardpaths_win.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/corelib/io/qstandardpaths_win.cpp b/src/corelib/io/qstandardpaths_win.cpp index a64bde6fb4d..a06b204da70 100644 --- a/src/corelib/io/qstandardpaths_win.cpp +++ b/src/corelib/io/qstandardpaths_win.cpp @@ -201,6 +201,10 @@ QString QStandardPaths::writableLocation(StandardLocation type) return result; } +#ifndef QT_BOOTSTRAPPED +extern QString qAppFileName(); +#endif + QStringList QStandardPaths::standardLocations(StandardLocation type) { QStringList dirs; @@ -217,8 +221,13 @@ QStringList QStandardPaths::standardLocations(StandardLocation type) dirs.append(programData); } #ifndef QT_BOOTSTRAPPED - dirs.append(QCoreApplication::applicationDirPath()); - dirs.append(QCoreApplication::applicationDirPath() + QLatin1String("/data")); + // Note: QCoreApplication::applicationDirPath(), while static, requires + // an application instance. But we might need to resolve the standard + // locations earlier than that, so we fall back to qAppFileName(). + QString applicationDirPath = qApp ? QCoreApplication::applicationDirPath() + : QFileInfo(qAppFileName()).path(); + dirs.append(applicationDirPath); + dirs.append(applicationDirPath + QLatin1String("/data")); #endif // !QT_BOOTSTRAPPED } // isConfigLocation() From 110e49c9cecca34dfacad33d19e04612cc2671b2 Mon Sep 17 00:00:00 2001 From: Peter Wu Date: Sat, 28 Oct 2017 23:01:58 -0700 Subject: [PATCH 35/50] QTimeZonePrivate: prefer /etc/localtime over /etc/timezone On modern distros (e.g. those using systemd), /etc/localtime is always a symlink. As that file is actually used by libraries (see tzset(3)), prefer it over /etc/timezone (which is no longer needed since https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=803144). This fixes a wrongly reported local timezone when a stale /etc/timezone file exists. While at it, improve sanity check for localtime symlink. Change-Id: I8557a58acf21afaeca0d585066304c79a92b5ddb Reviewed-by: Edward Welbourne --- src/corelib/tools/qtimezoneprivate_tz.cpp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/corelib/tools/qtimezoneprivate_tz.cpp b/src/corelib/tools/qtimezoneprivate_tz.cpp index bcc12854728..6a5df6272a5 100644 --- a/src/corelib/tools/qtimezoneprivate_tz.cpp +++ b/src/corelib/tools/qtimezoneprivate_tz.cpp @@ -1050,7 +1050,18 @@ QByteArray QTzTimeZonePrivate::systemTimeZoneId() const if (ianaId == "/etc/localtime") ianaId.clear(); - // On Debian Etch and later /etc/localtime is real file with name held in /etc/timezone + // On most distros /etc/localtime is a symlink to a real file so extract name from the path + if (ianaId.isEmpty()) { + const QString path = QFile::symLinkTarget(QStringLiteral("/etc/localtime")); + if (!path.isEmpty()) { + // /etc/localtime is a symlink to the current TZ file, so extract from path + int index = path.indexOf(QLatin1String("/zoneinfo/")); + if (index != -1) + ianaId = path.mid(index + 10).toUtf8(); + } + } + + // On Debian Etch up to Jessie, /etc/localtime is a regular file while the actual name is in /etc/timezone if (ianaId.isEmpty()) { QFile tzif(QStringLiteral("/etc/timezone")); if (tzif.open(QIODevice::ReadOnly)) { @@ -1061,16 +1072,6 @@ QByteArray QTzTimeZonePrivate::systemTimeZoneId() const } } - // On other distros /etc/localtime is symlink to real file so can extract name from the path - if (ianaId.isEmpty()) { - const QString path = QFile::symLinkTarget(QStringLiteral("/etc/localtime")); - if (!path.isEmpty()) { - // /etc/localtime is a symlink to the current TZ file, so extract from path - int index = path.indexOf(QLatin1String("/zoneinfo/")) + 10; - ianaId = path.mid(index).toUtf8(); - } - } - // On some Red Hat distros /etc/localtime is real file with name held in /etc/sysconfig/clock // in a line like ZONE="Europe/Oslo" or TIMEZONE="Europe/Oslo" if (ianaId.isEmpty()) { From dfa172034e19b6011cc4e7c784b1a5b82996d630 Mon Sep 17 00:00:00 2001 From: Jake Petroules Date: Mon, 20 Nov 2017 23:50:00 -0800 Subject: [PATCH 36/50] gitignore: don't ignore Info.plist templates for libraries Change-Id: Ifa17c9b1d1b5572d8256e2729a1cb2a749f58635 Reviewed-by: Oswald Buddenhagen --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index f98f90d2923..f133a2124e2 100644 --- a/.gitignore +++ b/.gitignore @@ -245,6 +245,7 @@ tags *.gcda *.gcno *.lib +!Info.plist.lib *.o *.obj *.orig From 5a235da270a4ea65b7ef1edf31a761c41dbfcc88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5rten=20Nordheim?= Date: Wed, 22 Nov 2017 14:16:42 +0100 Subject: [PATCH 37/50] tst_QTcpSocket: fix disconnectWhileLookingUp ... and unblacklist it on Windows. From what I can tell there is no particular reason why this test fails other than that it is a little too slow sometimes (these things happen). So, to fix the test I bumped the timeout, but to avoid the test running for longer on every test-run it now also ends when the socket enters the "Unconnected" state. Previously it failed 171/500 times, and after this patch it failed 0/1000 times. Change-Id: I4266bff6b91aaaf502ee66265d01c3a177706402 Reviewed-by: Edward Welbourne Reviewed-by: Thiago Macieira Reviewed-by: Jesus Fernandez --- tests/auto/network/socket/qtcpsocket/BLACKLIST | 2 -- tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp | 9 ++++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/tests/auto/network/socket/qtcpsocket/BLACKLIST b/tests/auto/network/socket/qtcpsocket/BLACKLIST index 5fc2589323c..96e59e5678d 100644 --- a/tests/auto/network/socket/qtcpsocket/BLACKLIST +++ b/tests/auto/network/socket/qtcpsocket/BLACKLIST @@ -6,8 +6,6 @@ windows windows [invalidProxy:socks5-on-http] windows -[disconnectWhileLookingUp] -windows [timeoutConnect:ip] windows ] diff --git a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp index 7340817ade1..f64a88cc05a 100644 --- a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp +++ b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp @@ -1447,8 +1447,15 @@ void tst_QTcpSocket::disconnectWhileLookingUp() } // let anything queued happen + QEventLoop loop; - QTimer::singleShot(50, &loop, SLOT(quit())); + // If 'doClose' is false then we called '::waitForDisconnected' earlier, meaning + // we are already 'Unconnected'. So we don't need to wait for any potentially slow host lookups. + QTimer::singleShot(doClose ? 4000 : 50, &loop, SLOT(quit())); + connect(socket, &QTcpSocket::stateChanged, [&loop](QAbstractSocket::SocketState state) { + if (state == QAbstractSocket::UnconnectedState) + loop.exit(); // we don't need to wait for the timer to expire; we're done. + }); loop.exec(); // recheck From b19036ad56896496cad4d679d44032c031c4010b Mon Sep 17 00:00:00 2001 From: Shawn Rutledge Date: Mon, 28 Aug 2017 17:06:04 +0200 Subject: [PATCH 38/50] improve QLocale::formattedDataSize docs slightly Change-Id: I42aaec6d54299d906bf8e2ef1fd696f121b7c2d0 Reviewed-by: Edward Welbourne Reviewed-by: Shawn Rutledge --- src/corelib/tools/qlocale.cpp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp index 723e63114d2..07bc1f82750 100644 --- a/src/corelib/tools/qlocale.cpp +++ b/src/corelib/tools/qlocale.cpp @@ -3805,17 +3805,18 @@ QString QLocale::toCurrencyString(double value, const QString &symbol, int preci /*! \since 5.10 - Converts a size in bytes to a human-readable localized string, expressed in - a unit for which the numeric portion is at least 1 but as low as - possible. For example if \a bytes is 16384, \a precision is 2, and \a format - is \c DataSizeIecFormat (the default), this function returns "16.00 KiB"; - for 1330409069609 bytes it returns "1.21 GiB"; and so on. If \a format is \c - DataSizeIecFormat or \c DataSizeTraditionalFormat, the given number of bytes - is divided by a power of 1024, with result less than 1024; for \c - DataSizeSIFormat, it is divided by a power of 1000, with result less than - 1000. DataSizeIecFormat uses the new IEC standard quantifiers Ki, Mi and so - on, whereas DataSizeSIFormat uses and DataSizeTraditionalFormat abuses the - older SI quantifiers k, M, etc. + Converts a size in bytes to a human-readable localized string, comprising a + number and a quantified unit. The quantifier is chosen such that the number + is at least one, and as small as possible. For example if \a bytes is + 16384, \a precision is 2, and \a format is \l DataSizeIecFormat (the + default), this function returns "16.00 KiB"; for 1330409069609 bytes it + returns "1.21 GiB"; and so on. If \a format is \l DataSizeIecFormat or + \l DataSizeTraditionalFormat, the given number of bytes is divided by a + power of 1024, with result less than 1024; for \l DataSizeSIFormat, it is + divided by a power of 1000, with result less than 1000. + \c DataSizeIecFormat uses the new IEC standard quantifiers Ki, Mi and so on, + whereas \c DataSizeSIFormat uses the older SI quantifiers k, M, etc., and + \c DataSizeTraditionalFormat abuses them. */ QString QLocale::formattedDataSize(qint64 bytes, int precision, DataSizeFormats format) { From cfccd44b9db066e996759515297b42865064c806 Mon Sep 17 00:00:00 2001 From: Shawn Rutledge Date: Tue, 25 Apr 2017 10:18:08 +0200 Subject: [PATCH 39/50] Demonstrate the new AA_CompressTabletEvents in the tablet example MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I1972da2ead51274771ff24b4c506c2b581ee6abe Reviewed-by: Gabriel de Dietrich Reviewed-by: Jan Arve Sæther --- examples/widgets/widgets/tablet/mainwindow.cpp | 10 ++++++++++ examples/widgets/widgets/tablet/mainwindow.h | 1 + 2 files changed, 11 insertions(+) diff --git a/examples/widgets/widgets/tablet/mainwindow.cpp b/examples/widgets/widgets/tablet/mainwindow.cpp index 0d63ac316ba..feae16dd83f 100644 --- a/examples/widgets/widgets/tablet/mainwindow.cpp +++ b/examples/widgets/widgets/tablet/mainwindow.cpp @@ -60,6 +60,7 @@ MainWindow::MainWindow(TabletCanvas *canvas) createMenus(); setWindowTitle(tr("Tablet Example")); setCentralWidget(m_canvas); + QCoreApplication::setAttribute(Qt::AA_CompressHighFrequencyEvents); } //! [0] @@ -97,6 +98,11 @@ void MainWindow::setSaturationValuator(QAction *action) } //! [4] +void MainWindow::setEventCompression(bool compress) +{ + QCoreApplication::setAttribute(Qt::AA_CompressTabletEvents, compress); +} + //! [5] void MainWindow::save() { @@ -220,6 +226,10 @@ void MainWindow::createMenus() connect(colorSaturationGroup, &QActionGroup::triggered, this, &MainWindow::setSaturationValuator); + QAction *compressAction = tabletMenu->addAction(tr("Co&mpress events")); + compressAction->setCheckable(true); + connect(compressAction, &QAction::toggled, this, &MainWindow::setEventCompression); + QMenu *helpMenu = menuBar()->addMenu("&Help"); helpMenu->addAction(tr("A&bout"), this, &MainWindow::about); helpMenu->addAction(tr("About &Qt"), qApp, &QApplication::aboutQt); diff --git a/examples/widgets/widgets/tablet/mainwindow.h b/examples/widgets/widgets/tablet/mainwindow.h index 68af1f1687b..4b99324f049 100644 --- a/examples/widgets/widgets/tablet/mainwindow.h +++ b/examples/widgets/widgets/tablet/mainwindow.h @@ -71,6 +71,7 @@ private slots: void setAlphaValuator(QAction *action); void setLineWidthValuator(QAction *action); void setSaturationValuator(QAction *action); + void setEventCompression(bool compress); void save(); void load(); void about(); From 6615f1d16b442bbf476d86ab90af1107617945c9 Mon Sep 17 00:00:00 2001 From: BogDan Vatra Date: Wed, 22 Nov 2017 12:42:31 +0200 Subject: [PATCH 40/50] [android] Fix compile with -warnings-are-errors Remove unused variable Change-Id: I64da66da0c17131de6280660576f2789696e86b3 Reviewed-by: Christian Stromme --- src/plugins/platforms/android/androidjniclipboard.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/plugins/platforms/android/androidjniclipboard.cpp b/src/plugins/platforms/android/androidjniclipboard.cpp index 833996403cc..d1690353398 100644 --- a/src/plugins/platforms/android/androidjniclipboard.cpp +++ b/src/plugins/platforms/android/androidjniclipboard.cpp @@ -47,7 +47,6 @@ namespace QtAndroidClipboard { QAndroidPlatformClipboard *m_manager = nullptr; - static char const *const QtNativeClassName = "org/qtproject/qt5/android/QtNative"; static JNINativeMethod methods[] = { {"onClipboardDataChanged", "()V", (void *)onClipboardDataChanged} }; From 655cbb00a0a50588dcf527d2e7fdfeb172ba60ae Mon Sep 17 00:00:00 2001 From: Timur Pocheptsov Date: Fri, 24 Nov 2017 10:31:34 +0100 Subject: [PATCH 41/50] Handle HostNotFoundError correctly for HTTP/2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When processing host lookup error if-statement only checks the connection type SPDY, which is not right - it could also be HTTP/2. As a bonus: QT_NO_SSL conditional inclusion is not needed - HTTP2 can be 'clear text' and SPDY enumerator is defined even in no-tls build (and is just a noop here). Also, improve our somewhat cryptic message in 'Should not happen' else branch - 'cannot dequeu' says nothing about HostNotFoundError. Task-number: QTBUG-64721 Change-Id: Ib0346b8717c2dbddaffab690298f3cae01e338ea Reviewed-by: Mårten Nordheim Reviewed-by: Edward Welbourne --- src/network/access/qhttpnetworkconnection.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index da055de2da5..5bc5f22feff 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -1204,20 +1204,20 @@ void QHttpNetworkConnectionPrivate::_q_hostLookupFinished(const QHostInfo &info) if (dequeueRequest(channels[0].socket)) { emitReplyError(channels[0].socket, channels[0].reply, QNetworkReply::HostNotFoundError); networkLayerState = QHttpNetworkConnectionPrivate::Unknown; - } -#ifndef QT_NO_SSL - else if (connectionType == QHttpNetworkConnection::ConnectionTypeSPDY) { + } else if (connectionType == QHttpNetworkConnection::ConnectionTypeSPDY + || connectionType == QHttpNetworkConnection::ConnectionTypeHTTP2) { for (const HttpMessagePair &spdyPair : qAsConst(channels[0].spdyRequestsToSend)) { // emit error for all replies QHttpNetworkReply *currentReply = spdyPair.second; Q_ASSERT(currentReply); emitReplyError(channels[0].socket, currentReply, QNetworkReply::HostNotFoundError); } - } -#endif // QT_NO_SSL - else { - // Should not happen - qWarning("QHttpNetworkConnectionPrivate::_q_hostLookupFinished could not de-queue request"); + } else { + // Should not happen: we start a host lookup before sending a request, + // so it's natural to have requests either in SPDY/HTTP/2 queue, + // or in low/high priority queues. + qWarning("QHttpNetworkConnectionPrivate::_q_hostLookupFinished" + " could not de-queue request, failed to report HostNotFoundError"); networkLayerState = QHttpNetworkConnectionPrivate::Unknown; } } From 3587a25238b5c0a53285f96383ed0af1c05b3153 Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Sat, 18 Nov 2017 18:21:13 +0100 Subject: [PATCH 42/50] QFlags: support enum classes in setFlag() Unary ~ is not defined for enum classes, so we need a cast. Change-Id: I79d495ebcc24ab960da8dae3be08eb307a9de448 Reviewed-by: Thiago Macieira --- src/corelib/global/qflags.h | 2 +- tests/auto/corelib/global/qflags/tst_qflags.cpp | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/corelib/global/qflags.h b/src/corelib/global/qflags.h index feeb488acd1..72b0a689ff0 100644 --- a/src/corelib/global/qflags.h +++ b/src/corelib/global/qflags.h @@ -150,7 +150,7 @@ public: Q_DECL_CONSTEXPR inline bool testFlag(Enum f) const Q_DECL_NOTHROW { return (i & Int(f)) == Int(f) && (Int(f) != 0 || i == Int(f) ); } Q_DECL_RELAXED_CONSTEXPR inline QFlags &setFlag(Enum f, bool on = true) Q_DECL_NOTHROW { - return on ? (*this |= f) : (*this &= ~f); + return on ? (*this |= f) : (*this &= ~Int(f)); } private: diff --git a/tests/auto/corelib/global/qflags/tst_qflags.cpp b/tests/auto/corelib/global/qflags/tst_qflags.cpp index 7dd1a1be01e..2f1b56629af 100644 --- a/tests/auto/corelib/global/qflags/tst_qflags.cpp +++ b/tests/auto/corelib/global/qflags/tst_qflags.cpp @@ -290,6 +290,18 @@ void tst_QFlags::testSetFlags() btn.setFlag(Qt::LeftButton, false); QVERIFY(!btn.testFlag(Qt::LeftButton)); QVERIFY(!btn.testFlag(Qt::MidButton)); + + MyStrictFlags flags; + flags.setFlag(MyStrictEnum::StrictOne); + flags.setFlag(MyStrictEnum::StrictTwo, true); + QVERIFY(flags.testFlag(MyStrictEnum::StrictOne)); + QVERIFY(flags.testFlag(MyStrictEnum::StrictTwo)); + QVERIFY(!flags.testFlag(MyStrictEnum::StrictFour)); + + flags.setFlag(MyStrictEnum::StrictTwo, false); + QVERIFY(flags.testFlag(MyStrictEnum::StrictOne)); + QVERIFY(!flags.testFlag(MyStrictEnum::StrictTwo)); + QVERIFY(!flags.testFlag(MyStrictEnum::StrictFour)); } // (statically) check QTypeInfo for QFlags instantiations: From fa2a653b3b934783065bb3ea264788e9f8bbdc27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Fri, 14 Apr 2017 15:13:28 +0200 Subject: [PATCH 43/50] Initialize QLoggingRegistry rules on first use MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Allows categorized logging before QCoreApplication has been created, which otherwise would silently fail to output anything because the category would never be enabled, despite QT_LOGGING_RULES being set. Change-Id: I1861e5366ea980dff2ffa753b137276c77278eee Reviewed-by: Kai Koehne Reviewed-by: Morten Johan Sørvig --- src/corelib/io/qloggingregistry.cpp | 3 ++- src/corelib/io/qloggingregistry_p.h | 2 +- src/corelib/kernel/qcoreapplication.cpp | 2 -- .../qloggingregistry/tst_qloggingregistry.cpp | 24 ++++++++++++++----- 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/corelib/io/qloggingregistry.cpp b/src/corelib/io/qloggingregistry.cpp index 0e7eaeea76d..1bf61017f67 100644 --- a/src/corelib/io/qloggingregistry.cpp +++ b/src/corelib/io/qloggingregistry.cpp @@ -255,6 +255,7 @@ void QLoggingSettingsParser::parseNextLine(QStringRef line) QLoggingRegistry::QLoggingRegistry() : categoryFilter(defaultCategoryFilter) { + initalizeRules(); // Init on first use } static bool qtLoggingDebug() @@ -283,7 +284,7 @@ static QVector loadRulesFromFile(const QString &filePath) Initializes the rules database by loading $QT_LOGGING_CONF, $QT_LOGGING_RULES, and .config/QtProject/qtlogging.ini. */ -void QLoggingRegistry::init() +void QLoggingRegistry::initalizeRules() { QVector er, qr, cr; // get rules from environment diff --git a/src/corelib/io/qloggingregistry_p.h b/src/corelib/io/qloggingregistry_p.h index a68b993cca8..a3857d35880 100644 --- a/src/corelib/io/qloggingregistry_p.h +++ b/src/corelib/io/qloggingregistry_p.h @@ -113,7 +113,7 @@ class Q_AUTOTEST_EXPORT QLoggingRegistry public: QLoggingRegistry(); - void init(); + void initalizeRules(); void registerCategory(QLoggingCategory *category, QtMsgType enableForLevel); void unregisterCategory(QLoggingCategory *category); diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp index cba279c184b..bf423cef21d 100644 --- a/src/corelib/kernel/qcoreapplication.cpp +++ b/src/corelib/kernel/qcoreapplication.cpp @@ -776,8 +776,6 @@ void QCoreApplicationPrivate::init() if (!coreappdata()->applicationVersionSet) coreappdata()->applicationVersion = appVersion(); - QLoggingRegistry::instance()->init(); - #if QT_CONFIG(library) // Reset the lib paths, so that they will be recomputed, taking the availability of argv[0] // into account. If necessary, recompute right away and replay the manual changes on top of the diff --git a/tests/auto/corelib/io/qloggingregistry/tst_qloggingregistry.cpp b/tests/auto/corelib/io/qloggingregistry/tst_qloggingregistry.cpp index 1643eed3d2b..15c63d4acd1 100644 --- a/tests/auto/corelib/io/qloggingregistry/tst_qloggingregistry.cpp +++ b/tests/auto/corelib/io/qloggingregistry/tst_qloggingregistry.cpp @@ -197,10 +197,22 @@ private slots: // Check whether QT_LOGGING_CONF is picked up from environment // - qputenv("QT_LOGGING_CONF", QFINDTESTDATA("qtlogging.ini").toLocal8Bit()); + Q_ASSERT(!qApp); // Rules should not require an app to resolve - QLoggingRegistry registry; - registry.init(); + qputenv("QT_LOGGING_RULES", "qt.foo.bar=true"); + QLoggingCategory qtEnabledByLoggingRule("qt.foo.bar"); + QCOMPARE(qtEnabledByLoggingRule.isDebugEnabled(), true); + QLoggingCategory qtDisabledByDefault("qt.foo.baz"); + QCOMPARE(qtDisabledByDefault.isDebugEnabled(), false); + + QLoggingRegistry ®istry = *QLoggingRegistry::instance(); + QCOMPARE(registry.ruleSets[QLoggingRegistry::ApiRules].size(), 0); + QCOMPARE(registry.ruleSets[QLoggingRegistry::ConfigRules].size(), 0); + QCOMPARE(registry.ruleSets[QLoggingRegistry::EnvironmentRules].size(), 1); + + qunsetenv("QT_LOGGING_RULES"); + qputenv("QT_LOGGING_CONF", QFINDTESTDATA("qtlogging.ini").toLocal8Bit()); + registry.initalizeRules(); QCOMPARE(registry.ruleSets[QLoggingRegistry::ApiRules].size(), 0); QCOMPARE(registry.ruleSets[QLoggingRegistry::ConfigRules].size(), 0); @@ -208,7 +220,7 @@ private slots: // check that QT_LOGGING_RULES take precedence qputenv("QT_LOGGING_RULES", "Digia.*=true"); - registry.init(); + registry.initalizeRules(); QCOMPARE(registry.ruleSets[QLoggingRegistry::EnvironmentRules].size(), 2); QCOMPARE(registry.ruleSets[QLoggingRegistry::EnvironmentRules].at(1).enabled, true); } @@ -234,7 +246,7 @@ private slots: file.close(); QLoggingRegistry registry; - registry.init(); + registry.initalizeRules(); QCOMPARE(registry.ruleSets[QLoggingRegistry::ConfigRules].size(), 1); // remove file again @@ -300,6 +312,6 @@ private slots: } }; -QTEST_MAIN(tst_QLoggingRegistry) +QTEST_APPLESS_MAIN(tst_QLoggingRegistry) #include "tst_qloggingregistry.moc" From 6a9d076e87f0c8aa4fb49bbcc2f56eefd85af2e3 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 23 Nov 2017 14:42:54 -0800 Subject: [PATCH 44/50] QUdpSocket: Work around WSARecvMsg quirk relating to no control block WSARecvMsg does not return the sender in WSAMSG::name if WSAMSG::Control isn't set. This makes no sense, so I'm assuming it's an API quirk we need to work around. [ChangeLog][QtNetwork][QUdpSocket] Fixed a regression from Qt 5.9.3 caused by an apparent Win32 API quirk we triggered when using readDatagram(), resulting in an invalid QHostAddress sender address. receiveDatagram() was not affected. Task-number: QTBUG-64718 Change-Id: I71488efd29b645f7b228fffd14f9d84cc205c4b3 Reviewed-by: Timur Pocheptsov --- src/network/socket/qnativesocketengine_win.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/network/socket/qnativesocketengine_win.cpp b/src/network/socket/qnativesocketengine_win.cpp index 3ecfb06411d..a1f7f367001 100644 --- a/src/network/socket/qnativesocketengine_win.cpp +++ b/src/network/socket/qnativesocketengine_win.cpp @@ -1215,10 +1215,8 @@ qint64 QNativeSocketEnginePrivate::nativeReceiveDatagram(char *data, qint64 maxL msg.dwBufferCount = 1; msg.name = reinterpret_cast(&aa); msg.namelen = sizeof(aa); - if (options & (QAbstractSocketEngine::WantDatagramHopLimit | QAbstractSocketEngine::WantDatagramDestination)) { - msg.Control.buf = cbuf; - msg.Control.len = sizeof(cbuf); - } + msg.Control.buf = cbuf; + msg.Control.len = sizeof(cbuf); DWORD flags = 0; DWORD bytesRead = 0; From 5f66f871816d083da9795d71f746413d6f6118f7 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Sun, 26 Nov 2017 23:01:57 -0800 Subject: [PATCH 45/50] Stop depending on test.macieira.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We have had test.qt-project.org for close to 3 years now. Change-Id: I71488efd29b645f7b228fffd14fadf4627288243 Reviewed-by: Jędrzej Nowacki --- .../kernel/qdnslookup_appless/tst_qdnslookup_appless.cpp | 4 ++-- tests/auto/network/kernel/qhostinfo/tst_qhostinfo.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/auto/network/kernel/qdnslookup_appless/tst_qdnslookup_appless.cpp b/tests/auto/network/kernel/qdnslookup_appless/tst_qdnslookup_appless.cpp index 7874221da98..e302fe8c74c 100644 --- a/tests/auto/network/kernel/qdnslookup_appless/tst_qdnslookup_appless.cpp +++ b/tests/auto/network/kernel/qdnslookup_appless/tst_qdnslookup_appless.cpp @@ -43,7 +43,7 @@ private slots: void tst_QDnsLookup_Appless::noApplication() { QTest::ignoreMessage(QtWarningMsg, "QDnsLookup requires a QCoreApplication"); - QDnsLookup dns(QDnsLookup::A, "a-single.test.macieira.org"); + QDnsLookup dns(QDnsLookup::A, "a-single.test.qt-project.org"); dns.lookup(); } @@ -53,7 +53,7 @@ void tst_QDnsLookup_Appless::recreateApplication() char **argv = 0; for (int i = 0; i < 10; ++i) { QCoreApplication app(argc, argv); - QDnsLookup dns(QDnsLookup::A, "a-single.test.macieira.org"); + QDnsLookup dns(QDnsLookup::A, "a-single.test.qt-project.org"); dns.lookup(); if (!dns.isFinished()) { QObject::connect(&dns, SIGNAL(finished()), diff --git a/tests/auto/network/kernel/qhostinfo/tst_qhostinfo.cpp b/tests/auto/network/kernel/qhostinfo/tst_qhostinfo.cpp index 2671c253cb3..14bffaf7ca0 100644 --- a/tests/auto/network/kernel/qhostinfo/tst_qhostinfo.cpp +++ b/tests/auto/network/kernel/qhostinfo/tst_qhostinfo.cpp @@ -76,7 +76,7 @@ #include "../../../network-settings.h" -#define TEST_DOMAIN ".test.macieira.org" +#define TEST_DOMAIN ".test.qt-project.org" class tst_QHostInfo : public QObject From 10b5954e229693c06b44714fcf7a4edf5517c67c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Tue, 28 Nov 2017 20:01:32 +0100 Subject: [PATCH 46/50] iOS: Use environment variables for debug flags instead of QObject properties The former is more idiomatic in Qt, and doesn't require as much boilerplate to set up. Change-Id: Idf03af4018611c8eb3b31af90da72f9d85617b2c Reviewed-by: Jake Petroules --- src/plugins/platforms/ios/qiosintegration.h | 7 ------- src/plugins/platforms/ios/qiosintegration.mm | 11 ----------- src/plugins/platforms/ios/qiosviewcontroller.mm | 3 +-- src/plugins/platforms/ios/quiview.mm | 2 +- 4 files changed, 2 insertions(+), 21 deletions(-) diff --git a/src/plugins/platforms/ios/qiosintegration.h b/src/plugins/platforms/ios/qiosintegration.h index 54c1a1dcb71..6f3f18af481 100644 --- a/src/plugins/platforms/ios/qiosintegration.h +++ b/src/plugins/platforms/ios/qiosintegration.h @@ -58,8 +58,6 @@ class QIOSServices; class QIOSIntegration : public QPlatformNativeInterface, public QPlatformIntegration { Q_OBJECT - Q_PROPERTY(bool debugWindowManagement READ debugWindowManagement WRITE setDebugWindowManagement); - public: QIOSIntegration(); ~QIOSIntegration(); @@ -104,9 +102,6 @@ public: void *nativeResourceForWindow(const QByteArray &resource, QWindow *window) Q_DECL_OVERRIDE; - void setDebugWindowManagement(bool); - bool debugWindowManagement() const; - QFactoryLoader *optionalPlugins() { return m_optionalPlugins; } private: @@ -123,8 +118,6 @@ private: #ifndef Q_OS_TVOS QIOSTextInputOverlay m_textInputOverlay; #endif - - bool m_debugWindowManagement; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/ios/qiosintegration.mm b/src/plugins/platforms/ios/qiosintegration.mm index 3ee584b6bf8..94a30eb9317 100644 --- a/src/plugins/platforms/ios/qiosintegration.mm +++ b/src/plugins/platforms/ios/qiosintegration.mm @@ -85,7 +85,6 @@ QIOSIntegration::QIOSIntegration() , m_platformServices(new QIOSServices) , m_accessibility(0) , m_optionalPlugins(new QFactoryLoader(QIosOptionalPluginInterface_iid, QLatin1String("/platforms/darwin"))) - , m_debugWindowManagement(false) { if (Q_UNLIKELY(![UIApplication sharedApplication])) { qFatal("Error: You are creating QApplication before calling UIApplicationMain.\n" \ @@ -318,16 +317,6 @@ void *QIOSIntegration::nativeResourceForWindow(const QByteArray &resource, QWind return 0; } -void QIOSIntegration::setDebugWindowManagement(bool enabled) -{ - m_debugWindowManagement = enabled; -} - -bool QIOSIntegration::debugWindowManagement() const -{ - return m_debugWindowManagement; -} - // --------------------------------------------------------- #include "moc_qiosintegration.cpp" diff --git a/src/plugins/platforms/ios/qiosviewcontroller.mm b/src/plugins/platforms/ios/qiosviewcontroller.mm index a4c151ed8b7..a7f12540645 100644 --- a/src/plugins/platforms/ios/qiosviewcontroller.mm +++ b/src/plugins/platforms/ios/qiosviewcontroller.mm @@ -77,8 +77,7 @@ if (!(self = [super init])) return nil; - QIOSIntegration *iosIntegration = QIOSIntegration::instance(); - if (iosIntegration && iosIntegration->debugWindowManagement()) { + if (qEnvironmentVariableIntValue("QT_IOS_DEBUG_WINDOW_MANAGEMENT")) { static UIImage *gridPattern = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ diff --git a/src/plugins/platforms/ios/quiview.mm b/src/plugins/platforms/ios/quiview.mm index 849e61c4093..1faf253d2d4 100644 --- a/src/plugins/platforms/ios/quiview.mm +++ b/src/plugins/platforms/ios/quiview.mm @@ -86,7 +86,7 @@ self.multipleTouchEnabled = YES; #endif - if (QIOSIntegration::instance()->debugWindowManagement()) { + if (qEnvironmentVariableIntValue("QT_IOS_DEBUG_WINDOW_MANAGEMENT")) { static CGFloat hue = 0.0; CGFloat lastHue = hue; for (CGFloat diff = 0; diff < 0.1 || diff > 0.9; diff = fabs(hue - lastHue)) From e434add2de7c5c52a4873735e8db0895026eb7fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Tue, 28 Nov 2017 19:43:33 +0100 Subject: [PATCH 47/50] iOS: Don't set background color when debugging window management It will fill the view in some cases, obscuring what Qt draws. Change-Id: I9ca00dddd829a28fb2cb3b009bfd3223f85ef7cb Reviewed-by: Jake Petroules --- src/plugins/platforms/ios/quiview.mm | 1 - 1 file changed, 1 deletion(-) diff --git a/src/plugins/platforms/ios/quiview.mm b/src/plugins/platforms/ios/quiview.mm index 1faf253d2d4..a56530e1d92 100644 --- a/src/plugins/platforms/ios/quiview.mm +++ b/src/plugins/platforms/ios/quiview.mm @@ -95,7 +95,6 @@ #define colorWithBrightness(br) \ [UIColor colorWithHue:hue saturation:0.5 brightness:br alpha:1.0].CGColor - self.layer.backgroundColor = colorWithBrightness(0.5); self.layer.borderColor = colorWithBrightness(1.0); self.layer.borderWidth = 1.0; } From a17f892bc5b03d0459e4380b86ebf79b0dd5869a Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Wed, 22 Nov 2017 13:39:30 +0100 Subject: [PATCH 48/50] Correct \since value for QIODevice::skip Change-Id: I9a2f18263a8bc0a0de8978792dbb1f285acc0ccd Reviewed-by: Alex Trotsenko Reviewed-by: Edward Welbourne --- src/corelib/io/qiodevice.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/io/qiodevice.cpp b/src/corelib/io/qiodevice.cpp index 0a3e83206b4..7d468989112 100644 --- a/src/corelib/io/qiodevice.cpp +++ b/src/corelib/io/qiodevice.cpp @@ -1879,7 +1879,7 @@ QByteArray QIODevice::peek(qint64 maxSize) } /*! - \since 5.11 + \since 5.10 Skips up to \a maxSize bytes from the device. Returns the number of bytes actually skipped, or -1 on error. From 1fe6a75fecfad98c907bf8961b163a0f65f62c72 Mon Sep 17 00:00:00 2001 From: Nico Vertriest Date: Fri, 24 Nov 2017 15:33:00 +0100 Subject: [PATCH 49/50] Doc: Minor corrections custom sort filter example Task-number: QTBUG-60635 Change-Id: I17a69f85663eaa92e92b4e97385c21a729405e1f Reviewed-by: Venugopal Shivashankar --- .../images/customsortfiltermodel-example.png | Bin 74359 -> 22010 bytes .../doc/src/customsortfiltermodel.qdoc | 6 +++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/src/images/customsortfiltermodel-example.png b/doc/src/images/customsortfiltermodel-example.png index d7ee8bd7e74e475602e7fcf27070dc87e6074a0a..7c0750eb57ea66979d5717851fd43eb70c0572e4 100644 GIT binary patch literal 22010 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�vWkDp!$vvx}`< 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 #n(bf+&U2( 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 NXsJDcSE*Qq{vVgQBzOP- diff --git a/examples/widgets/doc/src/customsortfiltermodel.qdoc b/examples/widgets/doc/src/customsortfiltermodel.qdoc index 0eb6560e105..6eab846e89f 100644 --- a/examples/widgets/doc/src/customsortfiltermodel.qdoc +++ b/examples/widgets/doc/src/customsortfiltermodel.qdoc @@ -75,7 +75,7 @@ QSortFilterProxyModel's default implementations of functions are written so that they call the equivalent functions in the relevant source model. This simple proxying mechanism may need to be - overridden for source models with more complex behavior; in this + overridden for source models with more complex behavior. In this example we derive from the QSortFilterProxyModel class to ensure that our filter can recognize a valid range of dates, and to control the sorting behavior. @@ -170,7 +170,7 @@ We implement two private slots, \c textFilterChanged() and \c dateFilterChanged(), to respond to the user changing the filter - pattern, case sensitivity or any of the dates. In addition, we + pattern, case sensitivity, or any of the dates. In addition, we implement a public \c setSourceModel() convenience function to set up the model/ view relation. @@ -197,7 +197,7 @@ \snippet itemviews/customsortfiltermodel/window.cpp 1 The QTreeView class provides a default model/view implementation - of a tree view; our view implements a tree representation of items + of a tree view. Our view implements a tree representation of items in the application's source model. \snippet itemviews/customsortfiltermodel/window.cpp 2 From d0812cbdabcff4d388334c499c23992cce98d4da Mon Sep 17 00:00:00 2001 From: Nico Vertriest Date: Fri, 10 Nov 2017 12:14:02 +0100 Subject: [PATCH 50/50] Doc: modify connect statement to new syntax MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Task-number: QTBUG-60635 Change-Id: I776bdc49ae42e2d0c11dc33d58d9ce91b9f5e753 Reviewed-by: Mårten Nordheim Reviewed-by: Edward Welbourne --- examples/widgets/painting/affine/xform.cpp | 42 +++++++++++----------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/examples/widgets/painting/affine/xform.cpp b/examples/widgets/painting/affine/xform.cpp index e47bc9d2517..20f6eb3c6d6 100644 --- a/examples/widgets/painting/affine/xform.cpp +++ b/examples/widgets/painting/affine/xform.cpp @@ -77,8 +77,8 @@ XFormView::XFormView(QWidget *parent) pts->setBoundingRect(QRectF(0, 0, 500, 500)); ctrlPoints << QPointF(250, 250) << QPointF(350, 250); pts->setPoints(ctrlPoints); - connect(pts, SIGNAL(pointsChanged(QPolygonF)), - this, SLOT(updateCtrlPoints(QPolygonF))); + connect(pts, &HoverPoints::pointsChanged, + this,&XFormView::updateCtrlPoints); setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); } @@ -876,29 +876,29 @@ XFormWidget::XFormWidget(QWidget *parent) #endif mainGroupLayout->addWidget(whatsThisButton); - connect(rotateSlider, SIGNAL(valueChanged(int)), view, SLOT(changeRotation(int))); - connect(shearSlider, SIGNAL(valueChanged(int)), view, SLOT(changeShear(int))); - connect(scaleSlider, SIGNAL(valueChanged(int)), view, SLOT(changeScale(int))); + connect(rotateSlider, &QSlider::valueChanged, view, &XFormView::changeRotation); + connect(shearSlider, &QSlider::valueChanged, view, &XFormView::changeShear); + connect(scaleSlider, &QSlider::valueChanged, view, &XFormView::changeScale); - connect(vectorType, SIGNAL(clicked()), view, SLOT(setVectorType())); - connect(pixmapType, SIGNAL(clicked()), view, SLOT(setPixmapType())); - connect(textType, SIGNAL(clicked()), view, SLOT(setTextType())); - connect(textType, SIGNAL(toggled(bool)), textEditor, SLOT(setEnabled(bool))); - connect(textEditor, SIGNAL(textChanged(QString)), view, SLOT(setText(QString))); + connect(vectorType, &QRadioButton::clicked, view, &XFormView::setVectorType); + connect(pixmapType, &QRadioButton::clicked, view, &XFormView::setPixmapType); + connect(textType, &QRadioButton::clicked, view, &XFormView::setTextType); + connect(textType, &QRadioButton::toggled, textEditor, &XFormView::setEnabled); + connect(textEditor, &QLineEdit::textChanged, view, &XFormView::setText); - connect(view, SIGNAL(rotationChanged(int)), rotateSlider, SLOT(setValue(int))); - connect(view, SIGNAL(scaleChanged(int)), scaleSlider, SLOT(setValue(int))); - connect(view, SIGNAL(shearChanged(int)), shearSlider, SLOT(setValue(int))); + connect(view, &XFormView::rotationChanged, rotateSlider, &QSlider::setValue); + connect(view, &XFormView::scaleChanged, scaleSlider, &QAbstractSlider::setValue); + connect(view, &XFormView::shearChanged, shearSlider, &QAbstractSlider::setValue); - connect(resetButton, SIGNAL(clicked()), view, SLOT(reset())); - connect(animateButton, SIGNAL(clicked(bool)), view, SLOT(setAnimation(bool))); - connect(whatsThisButton, SIGNAL(clicked(bool)), view, SLOT(setDescriptionEnabled(bool))); - connect(whatsThisButton, SIGNAL(clicked(bool)), view->hoverPoints(), SLOT(setDisabled(bool))); - connect(view, SIGNAL(descriptionEnabledChanged(bool)), view->hoverPoints(), SLOT(setDisabled(bool))); - connect(view, SIGNAL(descriptionEnabledChanged(bool)), whatsThisButton, SLOT(setChecked(bool))); - connect(showSourceButton, SIGNAL(clicked()), view, SLOT(showSource())); + connect(resetButton, &QPushButton::clicked, view, &XFormView::reset); + connect(animateButton, &QPushButton::clicked, view, &XFormView::setAnimation); + connect(whatsThisButton, &QPushButton::clicked, view, &ArthurFrame::setDescriptionEnabled); + connect(whatsThisButton, &QPushButton::clicked, view->hoverPoints(), &HoverPoints::setDisabled); + connect(view, &XFormView::descriptionEnabledChanged, view->hoverPoints(), &HoverPoints::setDisabled); + connect(view, &XFormView::descriptionEnabledChanged, whatsThisButton, &QPushButton::setChecked); + connect(showSourceButton, &QPushButton::clicked, view, &XFormView::showSource); #ifdef QT_OPENGL_SUPPORT - connect(enableOpenGLButton, SIGNAL(clicked(bool)), view, SLOT(enableOpenGL(bool))); + connect(enableOpenGLButton, &QPushButton::clicked, view, &XFormView::enableOpenGL); #endif view->loadSourceFile(":res/affine/xform.cpp"); view->loadDescription(":res/affine/xform.html");