Hello community, here is the log from the commit of package kwindowsystem for openSUSE:Factory checked in at 2018-04-19 15:19:08 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/kwindowsystem (Old) and /work/SRC/openSUSE:Factory/.kwindowsystem.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kwindowsystem" Thu Apr 19 15:19:08 2018 rev:56 rq:596906 version:5.45.0 Changes: -------- --- /work/SRC/openSUSE:Factory/kwindowsystem/kwindowsystem.changes 2018-03-20 21:48:17.619751226 +0100 +++ /work/SRC/openSUSE:Factory/.kwindowsystem.new/kwindowsystem.changes 2018-04-19 15:19:10.324125870 +0200 @@ -1,0 +2,15 @@ +Sat Apr 14 13:19:06 CEST 2018 - [email protected] + +- Update to 5.45.0 + * New feature release + * For more details please see: + * https://www.kde.org/announcements/kde-frameworks-5.45.0.php +- Changes since 5.44.0: + * Add "SkipSwitcher" to API + * Autogenerate debug file + * We depend against 5.8.0 + * Fix narrowing conversion warning on gcc and error on clang/FreeBSD + * [xcb] Fix implementation of _NET_WM_FULLSCREEN_MONITORS (kde#391960) + * Reduce plasmashell frozen time + +------------------------------------------------------------------- Old: ---- kwindowsystem-5.44.0.tar.xz New: ---- kwindowsystem-5.45.0.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kwindowsystem.spec ++++++ --- /var/tmp/diff_new_pack.6H85mN/_old 2018-04-19 15:19:10.908102490 +0200 +++ /var/tmp/diff_new_pack.6H85mN/_new 2018-04-19 15:19:10.908102490 +0200 @@ -18,13 +18,13 @@ %bcond_without lang %define lname libKF5WindowSystem5 -%define _tar_path 5.44 +%define _tar_path 5.45 # Full KF5 version (e.g. 5.33.0) %{!?_kf5_version: %global _kf5_version %{version}} # Last major and minor KF5 version (e.g. 5.33) %{!?_kf5_bugfix_version: %global _kf5_bugfix_version %(echo %{_kf5_version} | awk -F. '{print $1"."$2}')} Name: kwindowsystem -Version: 5.44.0 +Version: 5.45.0 Release: 0 BuildRequires: cmake >= 3.0 BuildRequires: extra-cmake-modules >= %{_kf5_bugfix_version} ++++++ kwindowsystem-5.44.0.tar.xz -> kwindowsystem-5.45.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.44.0/CMakeLists.txt new/kwindowsystem-5.45.0/CMakeLists.txt --- old/kwindowsystem-5.44.0/CMakeLists.txt 2018-03-03 11:07:44.000000000 +0100 +++ new/kwindowsystem-5.45.0/CMakeLists.txt 2018-04-07 21:40:06.000000000 +0200 @@ -1,11 +1,11 @@ cmake_minimum_required(VERSION 3.0) -set(KF5_VERSION "5.44.0") # handled by release scripts +set(KF5_VERSION "5.45.0") # handled by release scripts project(KWindowSystem VERSION ${KF5_VERSION}) # ECM setup include(FeatureSummary) -find_package(ECM 5.44.0 NO_MODULE) +find_package(ECM 5.45.0 NO_MODULE) set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake Modules." URL "https://projects.kde.org/projects/kdesupport/extra-cmake-modules") feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKAGES) @@ -17,6 +17,7 @@ include(ECMSetupVersion) include(ECMGenerateHeaders) include(CMakeFindFrameworks) +include(ECMQtDeclareLoggingCategory) include(ECMAddQch) include(ECMPoQmTools) @@ -30,7 +31,7 @@ SOVERSION 5) # Dependencies -set(REQUIRED_QT_VERSION 5.7.0) +set(REQUIRED_QT_VERSION 5.8.0) find_package(Qt5 ${REQUIRED_QT_VERSION} CONFIG REQUIRED Widgets) include(KDEInstallDirs) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.44.0/autotests/kwindowinfox11test.cpp new/kwindowsystem-5.45.0/autotests/kwindowinfox11test.cpp --- old/kwindowsystem-5.44.0/autotests/kwindowinfox11test.cpp 2018-03-03 11:07:44.000000000 +0100 +++ new/kwindowsystem-5.45.0/autotests/kwindowinfox11test.cpp 2018-04-07 21:40:06.000000000 +0200 @@ -192,14 +192,15 @@ { QTest::addColumn<NET::States>("state"); - QTest::newRow("max") << NET::States(NET::Max); - QTest::newRow("maxHoriz") << NET::States(NET::MaxHoriz); - QTest::newRow("shaded") << NET::States(NET::Shaded); - QTest::newRow("skipTaskbar") << NET::States(NET::SkipTaskbar); - QTest::newRow("skipPager") << NET::States(NET::SkipPager); - QTest::newRow("keep above") << NET::States(NET::KeepAbove); - QTest::newRow("keep below") << NET::States(NET::KeepBelow); - QTest::newRow("fullscreen") << NET::States(NET::FullScreen); + QTest::newRow("max") << NET::States(NET::Max); + QTest::newRow("maxHoriz") << NET::States(NET::MaxHoriz); + QTest::newRow("shaded") << NET::States(NET::Shaded); + QTest::newRow("skipTaskbar") << NET::States(NET::SkipTaskbar); + QTest::newRow("skipPager") << NET::States(NET::SkipPager); + QTest::newRow("skipSwitcher") << NET::States(NET::SkipSwitcher); + QTest::newRow("keep above") << NET::States(NET::KeepAbove); + QTest::newRow("keep below") << NET::States(NET::KeepBelow); + QTest::newRow("fullscreen") << NET::States(NET::FullScreen); // NOTE: modal, sticky and hidden cannot be tested with this variant // demands attention is not tested as that's already part of the first run adjustments diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.44.0/autotests/netwininfotestclient.cpp new/kwindowsystem-5.45.0/autotests/netwininfotestclient.cpp --- old/kwindowsystem-5.44.0/autotests/netwininfotestclient.cpp 2018-03-03 11:07:44.000000000 +0100 +++ new/kwindowsystem-5.45.0/autotests/netwininfotestclient.cpp 2018-04-07 21:40:06.000000000 +0200 @@ -70,7 +70,6 @@ void testStrut(); void testExtendedStrut(); void testIconGeometry(); - void testFullscreenMonitors(); void testWindowType_data(); void testWindowType(); @@ -574,49 +573,6 @@ QCOMPARE(geo.size.height, newGeo.size.height); } -void NetWinInfoTestClient::testFullscreenMonitors() -{ - QVERIFY(connection()); - ATOM(_NET_WM_FULLSCREEN_MONITORS) - INFO - - NETFullscreenMonitors topology = info.fullscreenMonitors(); - QCOMPARE(topology.bottom, 0); - QCOMPARE(topology.left, 0); - QCOMPARE(topology.right, 0); - QCOMPARE(topology.top, -1); - - NETFullscreenMonitors newTopology; - newTopology.bottom = 10; - newTopology.left = 20; - newTopology.right = 30; - newTopology.top = 40; - info.setFullscreenMonitors(newTopology); - topology = info.fullscreenMonitors(); - QCOMPARE(topology.bottom, newTopology.bottom); - QCOMPARE(topology.left, newTopology.left); - QCOMPARE(topology.right, newTopology.right); - QCOMPARE(topology.top, newTopology.top); - - // compare with the X property - QVERIFY(atom != XCB_ATOM_NONE); - GETPROP(XCB_ATOM_CARDINAL, 4, 32) - uint32_t *data = reinterpret_cast<uint32_t *>(xcb_get_property_value(reply.data())); - QCOMPARE(data[0], uint32_t(newTopology.top)); - QCOMPARE(data[1], uint32_t(newTopology.bottom)); - QCOMPARE(data[2], uint32_t(newTopology.left)); - QCOMPARE(data[3], uint32_t(newTopology.right)); - - // and wait for our event - QEXPECT_FAIL("", "FullscreenMonitors not handled in events", Continue); - waitForPropertyChange(&info, atom, NET::Property(0), NET::WM2FullscreenMonitors); - topology = info.fullscreenMonitors(); - QCOMPARE(topology.bottom, newTopology.bottom); - QCOMPARE(topology.left, newTopology.left); - QCOMPARE(topology.right, newTopology.right); - QCOMPARE(topology.top, newTopology.top); -} - Q_DECLARE_METATYPE(NET::WindowType) void NetWinInfoTestClient::testWindowType_data() { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.44.0/autotests/netwininfotestwm.cpp new/kwindowsystem-5.45.0/autotests/netwininfotestwm.cpp --- old/kwindowsystem-5.44.0/autotests/netwininfotestwm.cpp 2018-03-03 11:07:44.000000000 +0100 +++ new/kwindowsystem-5.45.0/autotests/netwininfotestwm.cpp 2018-04-07 21:40:06.000000000 +0200 @@ -75,6 +75,7 @@ void testFrameExtents(); void testFrameExtentsKDE(); void testFrameOverlap(); + void testFullscreenMonitors(); private: bool hasAtomFlag(const xcb_atom_t *atoms, int atomsLenght, const QByteArray &actionName); @@ -89,6 +90,7 @@ QScopedPointer<QProcess> m_xvfb; xcb_window_t m_rootWindow; xcb_window_t m_testWindow; + QByteArray m_displayNumber; }; void NetWinInfoTestWM::initTestCase() @@ -130,6 +132,7 @@ displayNumber.prepend(QByteArray(":")); displayNumber.remove(displayNumber.size() -1, 1); + m_displayNumber = displayNumber; // create X connection int screen = 0; @@ -426,6 +429,7 @@ const QByteArray maxHoriz = QByteArrayLiteral("_NET_WM_STATE_MAXIMIZED_HORZ"); const QByteArray shaded = QByteArrayLiteral("_NET_WM_STATE_SHADED"); const QByteArray skipTaskbar = QByteArrayLiteral("_NET_WM_STATE_SKIP_TASKBAR"); + const QByteArray skipSwitcher = QByteArrayLiteral("_KDE_NET_WM_STATE_SKIP_SWITCHER"); const QByteArray keepAbove = QByteArrayLiteral("_NET_WM_STATE_ABOVE"); const QByteArray staysOnTop = QByteArrayLiteral("_NET_WM_STATE_STAYS_ON_TOP"); const QByteArray skipPager = QByteArrayLiteral("_NET_WM_STATE_SKIP_PAGER"); @@ -447,6 +451,7 @@ QTest::newRow("fullScreen") << NET::States(NET::FullScreen) << (QVector<QByteArray>() << fullScreen); QTest::newRow("keepBelow") << NET::States(NET::KeepBelow) << (QVector<QByteArray>() << keepBelow); QTest::newRow("demandsAttention") << NET::States(NET::DemandsAttention) << (QVector<QByteArray>() << demandsAttention); + QTest::newRow("skipSwitcher") << NET::States(NET::SkipSwitcher) << (QVector<QByteArray>() << skipSwitcher); // TODO: it's possible to be keep above and below at the same time?!? QTest::newRow("all") << NET::States(NET::Modal | @@ -459,11 +464,12 @@ NET::KeepBelow | NET::Hidden | NET::FullScreen | - NET::DemandsAttention) + NET::DemandsAttention | + NET::SkipSwitcher) << (QVector<QByteArray>() << modal << sticky << maxVert << maxHoriz << shaded << skipTaskbar << keepAbove << skipPager << hidden << fullScreen - << keepBelow << demandsAttention << staysOnTop); + << keepBelow << demandsAttention << staysOnTop << skipSwitcher); } void NetWinInfoTestWM::testState() @@ -564,6 +570,88 @@ QCOMPARE(info.visibleName(), "bar"); } +class MockWinInfo : public NETWinInfo +{ +public: + MockWinInfo(xcb_connection_t *connection, xcb_window_t window, xcb_window_t rootWindow) + : NETWinInfo(connection, window, rootWindow, NET::WMAllProperties, NET::WM2AllProperties, NET::WindowManager) + { + } + +protected: + void changeFullscreenMonitors(NETFullscreenMonitors topology) override + { + setFullscreenMonitors(topology); + } +}; + +void NetWinInfoTestWM::testFullscreenMonitors() +{ + // test case for BUG 391960 + QVERIFY(connection()); + const uint32_t maskValues[] = { + XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT | + XCB_EVENT_MASK_KEY_PRESS | + XCB_EVENT_MASK_PROPERTY_CHANGE | + XCB_EVENT_MASK_COLOR_MAP_CHANGE | + XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT | + XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY | + XCB_EVENT_MASK_FOCUS_CHANGE | // For NotifyDetailNone + XCB_EVENT_MASK_EXPOSURE + }; + QScopedPointer<xcb_generic_error_t, QScopedPointerPodDeleter> redirectCheck(xcb_request_check(connection(), + xcb_change_window_attributes_checked(connection(), + m_rootWindow, + XCB_CW_EVENT_MASK, + maskValues))); + QVERIFY(redirectCheck.isNull()); + + KXUtils::Atom atom(connection(), QByteArrayLiteral("_NET_WM_FULLSCREEN_MONITORS")); + + // create client connection + auto clientConnection = xcb_connect(m_displayNumber.constData(), nullptr); + QVERIFY(clientConnection); + QVERIFY(!xcb_connection_has_error(clientConnection)); + + NETWinInfo clientInfo(clientConnection, m_testWindow, m_rootWindow, NET::WMAllProperties, NET::WM2AllProperties); + NETFullscreenMonitors topology; + topology.top = 1; + topology.bottom = 2; + topology.left = 3; + topology.right = 4; + clientInfo.setFullscreenMonitors(topology); + xcb_flush(clientConnection); + + MockWinInfo info(connection(), m_testWindow, m_rootWindow); + + while (true) { + KXUtils::ScopedCPointer<xcb_generic_event_t> event(xcb_wait_for_event(connection())); + if (event.isNull()) { + break; + } + if ((event->response_type & ~0x80) != XCB_CLIENT_MESSAGE) { + continue; + } + + NET::Properties dirtyProtocols; + NET::Properties2 dirtyProtocols2; + QCOMPARE(info.fullscreenMonitors().isSet(), false); + info.event(event.data(), &dirtyProtocols, &dirtyProtocols2); + QCOMPARE(info.fullscreenMonitors().isSet(), true); + break; + } + xcb_flush(connection()); + // now the property should be updated + waitForPropertyChange(&info, atom, NET::Property(0), NET::WM2FullscreenMonitors); + + QCOMPARE(info.fullscreenMonitors().top, 1); + QCOMPARE(info.fullscreenMonitors().bottom, 2); + QCOMPARE(info.fullscreenMonitors().left, 3); + QCOMPARE(info.fullscreenMonitors().right, 4); + + xcb_disconnect(clientConnection); +} + QTEST_GUILESS_MAIN(NetWinInfoTestWM) #include "netwininfotestwm.moc" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.44.0/po/zh_CN/kwindowsystem5_qt.po new/kwindowsystem-5.45.0/po/zh_CN/kwindowsystem5_qt.po --- old/kwindowsystem-5.44.0/po/zh_CN/kwindowsystem5_qt.po 2018-03-03 11:07:44.000000000 +0100 +++ new/kwindowsystem-5.45.0/po/zh_CN/kwindowsystem5_qt.po 2018-04-07 21:40:06.000000000 +0200 @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: kdeorg\n" -"PO-Revision-Date: 2018-02-28 02:23-0500\n" +"PO-Revision-Date: 2018-04-05 09:22-0400\n" "Last-Translator: guoyunhebrave <[email protected]>\n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.44.0/src/CMakeLists.txt new/kwindowsystem-5.45.0/src/CMakeLists.txt --- old/kwindowsystem-5.44.0/src/CMakeLists.txt 2018-03-03 11:07:44.000000000 +0100 +++ new/kwindowsystem-5.45.0/src/CMakeLists.txt 2018-04-07 21:40:06.000000000 +0200 @@ -15,9 +15,10 @@ platforms/wayland/kwindowsystem.cpp pluginwrapper.cpp kwindowsystemplugininterface.cpp - debug_p.cpp ${kwindowsystem_QM_LOADER} ) +ecm_qt_declare_logging_category(kwindowsystem_SRCS HEADER kwindowsystem_debug.h IDENTIFIER LOG_KWINDOWSYSTEM CATEGORY_NAME org.kde.kwindowsystem DEFAULT_SEVERITY Warning) +ecm_qt_declare_logging_category(kwindowsystem_SRCS HEADER kwindowsystem_xcb_debug.h IDENTIFIER LOG_KKEYSERVER_X11 CATEGORY_NAME org.kde.kwindowsystem.keyserver.x11 DEFAULT_SEVERITY Warning) if (KWINDOWSYSTEM_HAVE_X11) set(kwindowsystem_SRCS ${kwindowsystem_SRCS} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.44.0/src/debug_p.cpp new/kwindowsystem-5.45.0/src/debug_p.cpp --- old/kwindowsystem-5.44.0/src/debug_p.cpp 2018-03-03 11:07:44.000000000 +0100 +++ new/kwindowsystem-5.45.0/src/debug_p.cpp 1970-01-01 01:00:00.000000000 +0100 @@ -1,22 +0,0 @@ -/* - * Copyright 2015 Christoph Cullmann <[email protected]> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#include "debug_p.h" - -// logging category for this framework, default: log stuff >= warning -Q_LOGGING_CATEGORY(LOG_KWINDOWSYSTEM, "org.kde.kwindowsystem", QtWarningMsg) -Q_LOGGING_CATEGORY(LOG_KKEYSERVER_X11, "org.kde.kwindowsystem.keyserver.x11", QtWarningMsg) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.44.0/src/debug_p.h new/kwindowsystem-5.45.0/src/debug_p.h --- old/kwindowsystem-5.44.0/src/debug_p.h 2018-03-03 11:07:44.000000000 +0100 +++ new/kwindowsystem-5.45.0/src/debug_p.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,26 +0,0 @@ -/* - * Copyright 2015 Christoph Cullmann <[email protected]> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef KWINDOWSYSTEM_DEBUG_P_H -#define KWINDOWSYSTEM_DEBUG_P_H - -#include <QLoggingCategory> - -Q_DECLARE_LOGGING_CATEGORY(LOG_KWINDOWSYSTEM) -Q_DECLARE_LOGGING_CATEGORY(LOG_KKEYSERVER_X11) - -#endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.44.0/src/kstartupinfo.cpp new/kwindowsystem-5.45.0/src/kstartupinfo.cpp --- old/kwindowsystem-5.44.0/src/kstartupinfo.cpp 2018-03-03 11:07:44.000000000 +0100 +++ new/kwindowsystem-5.45.0/src/kstartupinfo.cpp 2018-04-07 21:40:06.000000000 +0200 @@ -36,7 +36,7 @@ #include "kstartupinfo.h" #include "netwm_def.h" -#include "debug_p.h" +#include "kwindowsystem_debug.h" #include <QWidget> #include <QDateTime> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.44.0/src/kwindowsystem.h new/kwindowsystem-5.45.0/src/kwindowsystem.h --- old/kwindowsystem-5.44.0/src/kwindowsystem.h 2018-03-03 11:07:44.000000000 +0100 +++ new/kwindowsystem-5.45.0/src/kwindowsystem.h 2018-04-07 21:40:06.000000000 +0200 @@ -345,7 +345,8 @@ * Possible values are or'ed combinations of NET::Modal, * NET::Sticky, NET::MaxVert, NET::MaxHoriz, NET::Shaded, * NET::SkipTaskbar, NET::SkipPager, NET::Hidden, - * NET::FullScreen, NET::KeepAbove, NET::KeepBelow, NET::StaysOnTop + * NET::FullScreen, NET::KeepAbove, NET::KeepBelow, NET::StaysOnTop, + * NET::SkipSwitcher * * @param win the id of the window * @param state the new flags that will be set @@ -358,7 +359,8 @@ * Possible values are or'ed combinations of NET::Modal, * NET::Sticky, NET::MaxVert, NET::MaxHoriz, NET::Shaded, * NET::SkipTaskbar, NET::SkipPager, NET::Hidden, - * NET::FullScreen, NET::KeepAbove, NET::KeepBelow, NET::StaysOnTop + * NET::FullScreen, NET::KeepAbove, NET::KeepBelow, NET::StaysOnTop, + * NET::SkipSwitcher * * @param win the id of the window * @param state the flags that will be cleared diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.44.0/src/netwm_def.h new/kwindowsystem-5.45.0/src/netwm_def.h --- old/kwindowsystem-5.44.0/src/netwm_def.h 2018-03-03 11:07:44.000000000 +0100 +++ new/kwindowsystem-5.45.0/src/netwm_def.h 2018-04-07 21:40:06.000000000 +0200 @@ -418,10 +418,10 @@ To set the state of a window, you'll typically do something like: \code - KWindowSystem::setState( winId(), NET::SkipTaskbar | NET::SkipPager ); + KWindowSystem::setState( winId(), NET::SkipTaskbar | NET::SkipPager | NET::SkipSwitcher ); \endcode - for example to not show the window on the taskbar and desktop pager. + for example to not show the window on the taskbar, desktop pager, or window switcher. winId() is a function of QWidget() Note that KeepAbove (StaysOnTop) and KeepBelow are meant as user preference and @@ -493,7 +493,13 @@ this. E.g. taskbar should mark such window specially to bring user's attention to this window. Only the window manager is allowed to change it. **/ - DemandsAttention = 1u << 11 + DemandsAttention = 1u << 11, + /** + indicates that a window should not be included on a switcher. + + @since 5.45 + **/ + SkipSwitcher = 1u << 12 }; Q_DECLARE_FLAGS(States, State) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.44.0/src/platforms/xcb/CMakeLists.txt new/kwindowsystem-5.45.0/src/platforms/xcb/CMakeLists.txt --- old/kwindowsystem-5.44.0/src/platforms/xcb/CMakeLists.txt 2018-03-03 11:07:44.000000000 +0100 +++ new/kwindowsystem-5.45.0/src/platforms/xcb/CMakeLists.txt 2018-04-07 21:40:06.000000000 +0200 @@ -6,6 +6,7 @@ kxutils.cpp plugin.cpp ) +ecm_qt_declare_logging_category(xcb_plugin_SRCS HEADER kwindowsystem_xcb_debug.h IDENTIFIER LOG_KKEYSERVER_X11 CATEGORY_NAME org.kde.kwindowsystem.keyserver.x11 DEFAULT_SEVERITY Warning) add_library(KF5WindowSystemX11Plugin MODULE ${xcb_plugin_SRCS}) target_link_libraries(KF5WindowSystemX11Plugin diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.44.0/src/platforms/xcb/atoms_p.h new/kwindowsystem-5.45.0/src/platforms/xcb/atoms_p.h --- old/kwindowsystem-5.44.0/src/platforms/xcb/atoms_p.h 2018-03-03 11:07:44.000000000 +0100 +++ new/kwindowsystem-5.45.0/src/platforms/xcb/atoms_p.h 2018-04-07 21:40:06.000000000 +0200 @@ -133,6 +133,8 @@ ENUM(_NET_WM_STATE_ABOVE), ENUM(_NET_WM_STATE_BELOW), ENUM(_NET_WM_STATE_DEMANDS_ATTENTION), + // KDE-specific atom + ENUM(_KDE_NET_WM_STATE_SKIP_SWITCHER), // allowed actions ENUM(_NET_WM_ACTION_MOVE), @@ -173,4 +175,4 @@ ENUM_COUNT(KwsAtom) ENUM_END(KwsAtom) -#endif // ATOMS_H \ No newline at end of file +#endif // ATOMS_H diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.44.0/src/platforms/xcb/kkeyserver.cpp new/kwindowsystem-5.45.0/src/platforms/xcb/kkeyserver.cpp --- old/kwindowsystem-5.44.0/src/platforms/xcb/kkeyserver.cpp 2018-03-03 11:07:44.000000000 +0100 +++ new/kwindowsystem-5.45.0/src/platforms/xcb/kkeyserver.cpp 2018-04-07 21:40:06.000000000 +0200 @@ -21,7 +21,7 @@ #include "kkeyserver_x11.h" #include "kkeyserver.h" -#include "../../debug_p.h" +#include "platforms/xcb/kwindowsystem_xcb_debug.h" #include <QDebug> #include <QX11Info> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.44.0/src/platforms/xcb/kxmessages.cpp new/kwindowsystem-5.45.0/src/platforms/xcb/kxmessages.cpp --- old/kwindowsystem-5.44.0/src/platforms/xcb/kxmessages.cpp 2018-03-03 11:07:44.000000000 +0100 +++ new/kwindowsystem-5.45.0/src/platforms/xcb/kxmessages.cpp 2018-04-07 21:40:06.000000000 +0200 @@ -138,7 +138,8 @@ bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) Q_DECL_OVERRIDE { Q_UNUSED(result); - if (eventType != "xcb_generic_event_t") { + // A faster comparison than eventType != "xcb_generic_event_t" + if (eventType[0] != 'x') { return false; } xcb_generic_event_t *event = reinterpret_cast<xcb_generic_event_t *>(message); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.44.0/src/platforms/xcb/kxutils.cpp new/kwindowsystem-5.45.0/src/platforms/xcb/kxutils.cpp --- old/kwindowsystem-5.44.0/src/platforms/xcb/kxutils.cpp 2018-03-03 11:07:44.000000000 +0100 +++ new/kwindowsystem-5.45.0/src/platforms/xcb/kxutils.cpp 2018-04-07 21:40:06.000000000 +0200 @@ -66,9 +66,7 @@ pixels[i] = qRgba(r, g, b, 0xff); } // fall through, Qt format is still Format_ARGB32_Premultiplied -#if QT_VERSION >= QT_VERSION_CHECK(5,8,0) Q_FALLTHROUGH(); -#endif } case 32: format = QImage::Format_ARGB32_Premultiplied; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.44.0/src/platforms/xcb/netwm.cpp new/kwindowsystem-5.45.0/src/platforms/xcb/netwm.cpp --- old/kwindowsystem-5.44.0/src/platforms/xcb/netwm.cpp 2018-03-03 11:07:44.000000000 +0100 +++ new/kwindowsystem-5.45.0/src/platforms/xcb/netwm.cpp 2018-04-07 21:40:06.000000000 +0200 @@ -1003,6 +1003,9 @@ if (p->states & SkipPager) { atoms[pnum++] = p->atom(_NET_WM_STATE_SKIP_PAGER); } + if (p->states & SkipSwitcher) { + atoms[pnum++] = p->atom(_KDE_NET_WM_STATE_SKIP_SWITCHER); + } if (p->states & Hidden) { atoms[pnum++] = p->atom(_NET_WM_STATE_HIDDEN); } @@ -1316,6 +1319,8 @@ p->states |= SkipTaskbar; } else if (atom == p->atom(_NET_WM_STATE_SKIP_PAGER)) { p->states |= SkipPager; + } else if (atom == p->atom(_KDE_NET_WM_STATE_SKIP_SWITCHER)) { + p->states |= SkipSwitcher; } else if (atom == p->atom(_NET_WM_STATE_HIDDEN)) { p->states |= Hidden; } else if (atom == p->atom(_NET_WM_STATE_FULLSCREEN)) { @@ -2841,20 +2846,24 @@ void NETWinInfo::setFullscreenMonitors(NETFullscreenMonitors topology) { - if (p->role != Client) { - return; - } + if (p->role == Client) { + const uint32_t data[5] = { + uint32_t(topology.top), uint32_t(topology.bottom), uint32_t(topology.left), uint32_t(topology.right), 1 + }; - p->fullscreen_monitors = topology; + send_client_message(p->conn, netwm_sendevent_mask, p->root, p->window, p->atom(_NET_WM_FULLSCREEN_MONITORS), data); + } else { + p->fullscreen_monitors = topology; - uint32_t data[4]; - data[0] = topology.top; - data[1] = topology.bottom; - data[2] = topology.left; - data[3] = topology.right; + uint32_t data[4]; + data[0] = topology.top; + data[1] = topology.bottom; + data[2] = topology.left; + data[3] = topology.right; - xcb_change_property(p->conn, XCB_PROP_MODE_REPLACE, p->window, p->atom(_NET_WM_FULLSCREEN_MONITORS), - XCB_ATOM_CARDINAL, 32, 4, (const void *) data); + xcb_change_property(p->conn, XCB_PROP_MODE_REPLACE, p->window, p->atom(_NET_WM_FULLSCREEN_MONITORS), + XCB_ATOM_CARDINAL, 32, 4, (const void *) data); + } } void NETWinInfo::setState(NET::States state, NET::States mask) @@ -2969,6 +2978,14 @@ xcb_send_event(p->conn, false, p->root, netwm_sendevent_mask, (const char *) &event); } + if ((mask & SkipSwitcher) && ((p->state & SkipSwitcher) != (state & SkipSwitcher))) { + event.data.data32[0] = (state & SkipSwitcher) ? 1 : 0; + event.data.data32[1] = p->atom(_KDE_NET_WM_STATE_SKIP_SWITCHER); + event.data.data32[2] = 0l; + + xcb_send_event(p->conn, false, p->root, netwm_sendevent_mask, (const char *) &event); + } + if ((mask & Hidden) && ((p->state & Hidden) != (state & Hidden))) { event.data.data32[0] = (state & Hidden) ? 1 : 0; event.data.data32[1] = p->atom(_NET_WM_STATE_HIDDEN); @@ -3066,6 +3083,9 @@ if (p->state & SkipPager) { data[count++] = p->atom(_NET_WM_STATE_SKIP_PAGER); } + if (p->state & SkipSwitcher) { + data[count++] = p->atom(_KDE_NET_WM_STATE_SKIP_SWITCHER); + } #ifdef NETWMDEBUG fprintf(stderr, "NETWinInfo::setState: setting state property (%d)\n", count); @@ -3629,6 +3649,8 @@ mask |= SkipTaskbar; } else if ((xcb_atom_t) message->data.data32[i] == p->atom(_NET_WM_STATE_SKIP_PAGER)) { mask |= SkipPager; + } else if ((xcb_atom_t) message->data.data32[i] == p->atom(_KDE_NET_WM_STATE_SKIP_SWITCHER)) { + mask |= SkipSwitcher; } else if ((xcb_atom_t) message->data.data32[i] == p->atom(_NET_WM_STATE_HIDDEN)) { mask |= Hidden; } else if ((xcb_atom_t) message->data.data32[i] == p->atom(_NET_WM_STATE_FULLSCREEN)) { @@ -3775,6 +3797,8 @@ dirty2 |= WM2OpaqueRegion; } else if (pe->atom == p->atom(_KDE_NET_WM_DESKTOP_FILE)) { dirty2 = WM2DesktopFileName; + } else if (pe->atom == p->atom(_NET_WM_FULLSCREEN_MONITORS)) { + dirty2 = WM2FullscreenMonitors; } do_update = true; @@ -4036,6 +4060,10 @@ p->state |= SkipPager; } + else if (state == p->atom(_KDE_NET_WM_STATE_SKIP_SWITCHER)) { + p->state |= SkipSwitcher; + } + else if (state == p->atom(_NET_WM_STATE_HIDDEN)) { p->state |= Hidden; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.44.0/src/pluginwrapper.cpp new/kwindowsystem-5.45.0/src/pluginwrapper.cpp --- old/kwindowsystem-5.44.0/src/pluginwrapper.cpp 2018-03-03 11:07:44.000000000 +0100 +++ new/kwindowsystem-5.45.0/src/pluginwrapper.cpp 2018-04-07 21:40:06.000000000 +0200 @@ -22,7 +22,7 @@ #include "kwindowsystemplugininterface_p.h" #include "kwindoweffects_dummy_p.h" #include "kwindowsystem_dummy_p.h" -#include "debug_p.h" +#include "kwindowsystem_debug.h" #include <QDebug> #include <QDir>
