diff --git a/0197-xcb-Ignore-disabling-of-outputs-in-the-middle-of-the.patch b/0197-xcb-Ignore-disabling-of-outputs-in-the-middle-of-the.patch new file mode 100644 index 0000000..364426e --- /dev/null +++ b/0197-xcb-Ignore-disabling-of-outputs-in-the-middle-of-the.patch @@ -0,0 +1,56 @@ +From ae51e360f986698eaf41fdb38f8a878a50f69be1 Mon Sep 17 00:00:00 2001 +From: Alexander Volkov +Date: Fri, 19 Jun 2015 13:34:11 +0300 +Subject: [PATCH 197/412] xcb: Ignore disabling of outputs in the middle of the + mode switch +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +X server may send RROutputChangeNotify event with null crtc and mode, +when it switches an output mode. Request RROutputInfo to distinguish +this case from the case when the output is explicitly disabled. + +Change-Id: I4c2356ec71dbcc8013009ea8a6f46dd11f19d6bb +Task-number: QTBUG-44158 +Task-number: QTBUG-46786 +Task-number: QTBUG-46822 +Reviewed-by: Daniel Vrátil +Reviewed-by: Gatis Paeglis +Reviewed-by: Shawn Rutledge +--- + src/plugins/platforms/xcb/qxcbconnection.cpp | 18 +++++++++++++----- + 1 file changed, 13 insertions(+), 5 deletions(-) + +diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp +index 0867615..29e1fd1 100644 +--- a/src/plugins/platforms/xcb/qxcbconnection.cpp ++++ b/src/plugins/platforms/xcb/qxcbconnection.cpp +@@ -265,11 +265,19 @@ void QXcbConnection::updateScreens(const xcb_randr_notify_event_t *event) + } else if (screen) { + // Screen has been disabled -> remove + if (output.crtc == XCB_NONE && output.mode == XCB_NONE) { +- qCDebug(lcQpaScreen) << "output" << screen->name() << "has been disabled"; +- m_screens.removeOne(screen); +- foreach (QXcbScreen *otherScreen, m_screens) +- otherScreen->removeVirtualSibling((QPlatformScreen *) screen); +- QXcbIntegration::instance()->destroyScreen(screen); ++ xcb_randr_get_output_info_cookie_t outputInfoCookie = ++ xcb_randr_get_output_info(xcb_connection(), output.output, output.config_timestamp); ++ QScopedPointer outputInfo( ++ xcb_randr_get_output_info_reply(xcb_connection(), outputInfoCookie, NULL)); ++ if (outputInfo->crtc == XCB_NONE) { ++ qCDebug(lcQpaScreen) << "output" << screen->name() << "has been disabled"; ++ m_screens.removeOne(screen); ++ foreach (QXcbScreen *otherScreen, m_screens) ++ otherScreen->removeVirtualSibling((QPlatformScreen *) screen); ++ QXcbIntegration::instance()->destroyScreen(screen); ++ } else { ++ qCDebug(lcQpaScreen) << "output" << screen->name() << "has been temporarily disabled for the mode switch"; ++ } + } else { + // Just update existing screen + screen->updateGeometry(output.config_timestamp); +-- +2.5.0 + diff --git a/qt5-qtbase.spec b/qt5-qtbase.spec index 6c50fff..af00c2d 100644 --- a/qt5-qtbase.spec +++ b/qt5-qtbase.spec @@ -919,10 +919,11 @@ fi %changelog * Mon Oct 05 2015 Helio Chissini de Castro - 5.5.1-1 - Update to Qt 5.5.1 RC1 -- Patchs 13, 52, 53, 155, 223 removed due to inclusion upstream +- Patchs 13, 52, 53, 101, 155, 223, 297 removed due to inclusion upstream * Mon Oct 05 2015 Rex Dieter 5.5.0-18 - When a screen comes back online, the windows need to be told about it (QTBUG-47041) +- xcb: Ignore disabling of outputs in the middle of the mode switch * Wed Aug 19 2015 Rex Dieter 5.5.0-17 - unconditionally undo valgrind hack when done (#1255054)