From 361194b8b31afbcd0b78cf2ca4bd0ce8d16afa7e35f0a90fc11c39c2ffc7738c Mon Sep 17 00:00:00 2001 From: Hrvoje Senjan Date: Sat, 4 Oct 2014 18:42:17 +0000 Subject: [PATCH] 5.3.0 OBS-URL: https://build.opensuse.org/package/show/KDE:Frameworks5/kwindowsystem?expand=0&rev=39 --- ...onst-saves-a-few-symbols-in-the-.dat.patch | 77 ------ ...pport-for-urgency-hint-in-NETWinInfo.patch | 198 --------------- ...support-for-input-hint-in-NETWinInfo.patch | 209 ---------------- ...-support-for-protocols-to-NETWinInfo.patch | 227 ------------------ kwindowsystem-5.2.0.tar.xz | 3 - kwindowsystem-5.3.0.tar.xz | 3 + kwindowsystem.changes | 12 + kwindowsystem.spec | 16 +- 8 files changed, 17 insertions(+), 728 deletions(-) delete mode 100644 0001-Make-constants-const-saves-a-few-symbols-in-the-.dat.patch delete mode 100644 0002-Add-support-for-urgency-hint-in-NETWinInfo.patch delete mode 100644 0003-Add-support-for-input-hint-in-NETWinInfo.patch delete mode 100644 0007-Add-support-for-protocols-to-NETWinInfo.patch delete mode 100644 kwindowsystem-5.2.0.tar.xz create mode 100644 kwindowsystem-5.3.0.tar.xz diff --git a/0001-Make-constants-const-saves-a-few-symbols-in-the-.dat.patch b/0001-Make-constants-const-saves-a-few-symbols-in-the-.dat.patch deleted file mode 100644 index 0e3766c..0000000 --- a/0001-Make-constants-const-saves-a-few-symbols-in-the-.dat.patch +++ /dev/null @@ -1,77 +0,0 @@ -From b2db22fd2598fb64a89f4b2c6d30f0d5b442a86c Mon Sep 17 00:00:00 2001 -From: Volker Krause -Date: Sun, 14 Sep 2014 16:48:38 +0200 -Subject: [PATCH 01/13] Make constants const, saves a few symbols in the .data - section. - ---- - src/kwindoweffects_x11.cpp | 2 +- - src/kwindowsystem_x11.cpp | 8 ++++---- - src/netwm.cpp | 2 +- - 3 files changed, 6 insertions(+), 6 deletions(-) - -diff --git a/src/kwindoweffects_x11.cpp b/src/kwindoweffects_x11.cpp -index 66aaca3..661a0af 100644 ---- a/src/kwindoweffects_x11.cpp -+++ b/src/kwindoweffects_x11.cpp -@@ -29,7 +29,7 @@ - #include - #include - --static const char *DASHBOARD_WIN_CLASS = "dashboard\0dashboard"; -+static const char DASHBOARD_WIN_CLASS[] = "dashboard\0dashboard"; - using namespace KWindowEffects; - - KWindowEffectsPrivateX11::KWindowEffectsPrivateX11() -diff --git a/src/kwindowsystem_x11.cpp b/src/kwindowsystem_x11.cpp -index 46fbc7d..db77003 100644 ---- a/src/kwindowsystem_x11.cpp -+++ b/src/kwindowsystem_x11.cpp -@@ -50,7 +50,7 @@ - static Atom net_wm_cm; - static void create_atoms(Display *dpy = QX11Info::display()); - --static NET::Properties windowsProperties = NET::ClientList | NET::ClientListStacking | -+static const NET::Properties windowsProperties = NET::ClientList | NET::ClientListStacking | - NET::Supported | - NET::NumberOfDesktops | - NET::DesktopGeometry | -@@ -59,11 +59,11 @@ static NET::Properties windowsProperties = NET::ClientList | NET::ClientListStac - NET::DesktopNames | - NET::ActiveWindow | - NET::WorkArea; --static NET::Properties2 windowsProperties2 = NET::WM2ShowingDesktop; -+static const NET::Properties2 windowsProperties2 = NET::WM2ShowingDesktop; - - // ClientList and ClientListStacking is not per-window information, but a desktop information, - // so track it even with only INFO_BASIC --static NET::Properties desktopProperties = NET::ClientList | NET::ClientListStacking | -+static const NET::Properties desktopProperties = NET::ClientList | NET::ClientListStacking | - NET::Supported | - NET::NumberOfDesktops | - NET::DesktopGeometry | -@@ -72,7 +72,7 @@ static NET::Properties desktopProperties = NET::ClientList | NET::ClientListStac - NET::DesktopNames | - NET::ActiveWindow | - NET::WorkArea; --static NET::Properties2 desktopProperties2 = NET::WM2ShowingDesktop; -+static const NET::Properties2 desktopProperties2 = NET::WM2ShowingDesktop; - - MainThreadInstantiator::MainThreadInstantiator(KWindowSystemPrivateX11::FilterInfo _what) - : QObject(), -diff --git a/src/netwm.cpp b/src/netwm.cpp -index a0a2fae..07e5254 100644 ---- a/src/netwm.cpp -+++ b/src/netwm.cpp -@@ -4771,7 +4771,7 @@ void NETWinInfo::setActivities(const char *activities) - - if (activities == (char *) NULL || activities[0] == '\0') { - // on all activities -- static const char *nulluuid = KDE_ALL_ACTIVITIES_UUID; -+ static const char nulluuid[] = KDE_ALL_ACTIVITIES_UUID; - - p->activities = nstrdup(nulluuid); - --- -2.1.0 - diff --git a/0002-Add-support-for-urgency-hint-in-NETWinInfo.patch b/0002-Add-support-for-urgency-hint-in-NETWinInfo.patch deleted file mode 100644 index ac01a07..0000000 --- a/0002-Add-support-for-urgency-hint-in-NETWinInfo.patch +++ /dev/null @@ -1,198 +0,0 @@ -From 512b7c17dd3d02d5c49b2b34cbb155f7ad754115 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Martin=20Gr=C3=A4=C3=9Flin?= -Date: Fri, 12 Sep 2014 11:39:55 +0200 -Subject: [PATCH 02/13] Add support for urgency hint in NETWinInfo - -UrgencyHint is part of WM_HINTS property which is already processed -for WM2GroupLeader. - -REVIEW: 120158 -CHANGELOG: NETWinInfo provides convenient wrapper for urgency hint of WM_HINTS property. ---- - autotests/netwininfotestclient.cpp | 42 ++++++++++++++++++++++++++++++++++++++ - src/netwm.cpp | 13 ++++++++++-- - src/netwm.h | 8 ++++++++ - src/netwm_def.h | 2 ++ - src/netwm_p.h | 1 + - 5 files changed, 64 insertions(+), 2 deletions(-) - -diff --git a/autotests/netwininfotestclient.cpp b/autotests/netwininfotestclient.cpp -index 160f759..8a39ba5 100644 ---- a/autotests/netwininfotestclient.cpp -+++ b/autotests/netwininfotestclient.cpp -@@ -78,6 +78,8 @@ private Q_SLOTS: - void testWindowClass(); - void testClientMachine(); - void testGroupLeader(); -+ void testUrgency_data(); -+ void testUrgency(); - void testTransientFor(); - - private: -@@ -665,6 +667,46 @@ void NetWinInfoTestClient::testGroupLeader() - QCOMPARE(info.groupLeader(), m_rootWindow); - } - -+void NetWinInfoTestClient::testUrgency_data() -+{ -+ QTest::addColumn("flags"); -+ QTest::addColumn("expected"); -+ -+ QTest::newRow("urgency") << quint32(1 << 8) << true; -+ QTest::newRow("none") << quint32(0) << false; -+ QTest::newRow("group_urgency") << quint32((1 << 6) | (1 << 8)) << true; -+ QTest::newRow("input") << quint32(1) << false; -+} -+ -+void NetWinInfoTestClient::testUrgency() -+{ -+ QVERIFY(connection()); -+ INFO -+ -+ QVERIFY(!info.urgency()); -+ QFETCH(quint32, flags); -+ -+ // group leader needs to be changed through wm hints -+ uint32_t values[] = { -+ flags, -+ 1, /* Input */ -+ 1, /* Normal State */ -+ XCB_NONE, /* icon pixmap */ -+ XCB_NONE, /* icon window */ -+ XCB_NONE, /* icon x */ -+ XCB_NONE, /* icon y */ -+ XCB_NONE, /* icon mask */ -+ XCB_NONE /* group leader */ -+ }; -+ xcb_change_property(connection(), XCB_PROP_MODE_REPLACE, m_testWindow, -+ XCB_ATOM_WM_HINTS, XCB_ATOM_WM_HINTS, 32, 9, values); -+ xcb_flush(connection()); -+ -+ // only updated after event -+ waitForPropertyChange(&info, XCB_ATOM_WM_HINTS, NET::Property(0), NET::WM2Urgency); -+ QTEST(info.urgency(), "expected"); -+} -+ - void NetWinInfoTestClient::testTransientFor() - { - QVERIFY(connection()); -diff --git a/src/netwm.cpp b/src/netwm.cpp -index 07e5254..0e77a95 100644 ---- a/src/netwm.cpp -+++ b/src/netwm.cpp -@@ -2763,6 +2763,7 @@ NETWinInfo::NETWinInfo(xcb_connection_t *connection, xcb_window_t window, xcb_wi - p->icon_sizes = NULL; - p->activities = (char *) 0; - p->blockCompositing = false; -+ p->urgency = false; - - // p->strut.left = p->strut.right = p->strut.top = p->strut.bottom = 0; - // p->frame_strut.left = p->frame_strut.right = p->frame_strut.top = -@@ -2822,6 +2823,7 @@ NETWinInfo::NETWinInfo(xcb_connection_t *connection, xcb_window_t window, xcb_wi - p->icon_sizes = NULL; - p->activities = (char *) 0; - p->blockCompositing = false; -+ p->urgency = false; - - // p->strut.left = p->strut.right = p->strut.top = p->strut.bottom = 0; - // p->frame_strut.left = p->frame_strut.right = p->frame_strut.top = -@@ -3917,6 +3919,7 @@ void NETWinInfo::event(xcb_generic_event_t *event, NET::Properties *properties, - dirty2 |= WM2UserTime; - } else if (pe->atom == XCB_ATOM_WM_HINTS) { - dirty2 |= WM2GroupLeader; -+ dirty2 |= WM2Urgency; - } else if (pe->atom == XCB_ATOM_WM_TRANSIENT_FOR) { - dirty2 |= WM2TransientFor; - } else if (pe->atom == XCB_ATOM_WM_CLASS) { -@@ -4093,7 +4096,7 @@ void NETWinInfo::update(NET::Properties dirtyProperties, NET::Properties2 dirtyP - cookies[c++] = xcb_get_property(p->conn, false, p->window, XCB_ATOM_WM_TRANSIENT_FOR, XCB_ATOM_WINDOW, 0, 1); - } - -- if (dirty2 & WM2GroupLeader) { -+ if (dirty2 & (WM2GroupLeader | WM2Urgency)) { - cookies[c++] = xcb_get_property(p->conn, false, p->window, XCB_ATOM_WM_HINTS, XCB_ATOM_WM_HINTS, 0, 9); - } - -@@ -4547,7 +4550,7 @@ void NETWinInfo::update(NET::Properties dirtyProperties, NET::Properties2 dirtyP - p->transient_for = get_value_reply(p->conn, cookies[c++], XCB_ATOM_WINDOW, 0); - } - -- if (dirty2 & WM2GroupLeader) { -+ if (dirty2 & (WM2GroupLeader | WM2Urgency)) { - xcb_get_property_reply_t *reply = xcb_get_property_reply(p->conn, cookies[c++], 0); - - if (reply && reply->format == 32 && reply->value_len == 9 && reply->type == XCB_ATOM_WM_HINTS) { -@@ -4556,6 +4559,7 @@ void NETWinInfo::update(NET::Properties dirtyProperties, NET::Properties2 dirtyP - if (hints->flags & (1 << 6)/*WindowGroupHint*/) { - p->window_group = hints->window_group; - } -+ p->urgency = (hints->flags & (1 << 8)/*UrgencyHint*/); - } - - if (reply) { -@@ -4740,6 +4744,11 @@ xcb_window_t NETWinInfo::groupLeader() const - return p->window_group; - } - -+bool NETWinInfo::urgency() const -+{ -+ return p->urgency; -+} -+ - const char *NETWinInfo::windowClassClass() const - { - return p->class_class; -diff --git a/src/netwm.h b/src/netwm.h -index 0c89dc7..ba97db1 100644 ---- a/src/netwm.h -+++ b/src/netwm.h -@@ -1373,6 +1373,14 @@ public: - xcb_window_t groupLeader() const; - - /** -+ * Returns whether the UrgencyHint is set in the WM_HINTS.flags. -+ * See ICCCM 4.1.2.4. -+ * -+ * @since 5.3 -+ **/ -+ bool urgency() const; -+ -+ /** - * Returns the class component of the window class for the window - * (i.e. WM_CLASS property). - */ -diff --git a/src/netwm_def.h b/src/netwm_def.h -index 0edadc0..9e14634 100644 ---- a/src/netwm_def.h -+++ b/src/netwm_def.h -@@ -675,6 +675,7 @@ public: - @li WM2DesktopLayout _NET_DESKTOP_LAYOUT - @li WM2FullPlacement _NET_WM_FULL_PLACEMENT - @li WM2FullscreenMonitors _NET_WM_FULLSCREEN_MONITORS -+ @li WM2Urgency urgency hint in WM_HINTS (see ICCCM 4.1.2.4) - **/ - enum Property2 { - WM2UserTime = 1u << 0, -@@ -698,6 +699,7 @@ public: - WM2Activities = 1u << 18, // NOT STANDARD @since 4.6 - WM2BlockCompositing = 1u << 19, // NOT STANDARD @since 4.7 - WM2KDEShadow = 1u << 20, // NOT Standard @since 4.7 -+ WM2Urgency = 1u << 21, // @since 5.3 - WM2AllProperties = ~0u - }; - Q_DECLARE_FLAGS(Properties2, Property2) -diff --git a/src/netwm_p.h b/src/netwm_p.h -index 2e4659e..36ffb8d 100644 ---- a/src/netwm_p.h -+++ b/src/netwm_p.h -@@ -165,6 +165,7 @@ struct NETWinInfoPrivate { - - const char *activities; - bool blockCompositing; -+ bool urgency; - - int ref; - }; --- -2.1.0 - diff --git a/0003-Add-support-for-input-hint-in-NETWinInfo.patch b/0003-Add-support-for-input-hint-in-NETWinInfo.patch deleted file mode 100644 index 90fb09c..0000000 --- a/0003-Add-support-for-input-hint-in-NETWinInfo.patch +++ /dev/null @@ -1,209 +0,0 @@ -From fc189fa9ccd34ca50ef7999139d55a393054c37a Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Martin=20Gr=C3=A4=C3=9Flin?= -Date: Fri, 12 Sep 2014 13:24:29 +0200 -Subject: [PATCH 03/13] Add support for input hint in NETWinInfo - -The Input Hint is part of WM_HINTS property which is already processed -for WM2GroupLeader and WM2Urgency. - -The default for input hint is true. ICCCM suggests to assume convenient -values for all fields of WM_HINTS property if a window is mapped wihtout -one. KWin sets this value to true, so the sane convenient value for the -input field seems to be true. - -REVIEW: 120165 -CHANGELOG: NETWinInfo provides convenient wrapper for input hint of WM_HINTS property. ---- - autotests/netwininfotestclient.cpp | 46 ++++++++++++++++++++++++++++++++++++++ - src/netwm.cpp | 15 +++++++++++-- - src/netwm.h | 10 +++++++++ - src/netwm_def.h | 2 ++ - src/netwm_p.h | 1 + - 5 files changed, 72 insertions(+), 2 deletions(-) - -diff --git a/autotests/netwininfotestclient.cpp b/autotests/netwininfotestclient.cpp -index 8a39ba5..e35ab8d 100644 ---- a/autotests/netwininfotestclient.cpp -+++ b/autotests/netwininfotestclient.cpp -@@ -80,6 +80,8 @@ private Q_SLOTS: - void testGroupLeader(); - void testUrgency_data(); - void testUrgency(); -+ void testInput_data(); -+ void testInput(); - void testTransientFor(); - - private: -@@ -707,6 +709,50 @@ void NetWinInfoTestClient::testUrgency() - QTEST(info.urgency(), "expected"); - } - -+void NetWinInfoTestClient::testInput_data() -+{ -+ QTest::addColumn("flags"); -+ QTest::addColumn("input"); -+ QTest::addColumn("expected"); -+ -+ QTest::newRow("flag_input") << quint32(1) << quint32(1) << true; -+ QTest::newRow("flag_noinput") << quint32(1) << quint32(0) << false; -+ QTest::newRow("noflag_input") << quint32(0) << quint32(1) << true; -+ QTest::newRow("noflag_noinput") << quint32(0) << quint32(0) << true; -+ QTest::newRow("flag_with_other_input") << quint32(1 | 1 << 8) << quint32(1) << true; -+ QTest::newRow("flag_with_other_noinput") << quint32(1 | 1 << 8) << quint32(0) << false; -+} -+ -+void NetWinInfoTestClient::testInput() -+{ -+ QVERIFY(connection()); -+ INFO -+ -+ QVERIFY(info.input()); -+ QFETCH(quint32, flags); -+ QFETCH(quint32, input); -+ -+ // group leader needs to be changed through wm hints -+ uint32_t values[] = { -+ flags, -+ input, /* Input */ -+ 1, /* Normal State */ -+ XCB_NONE, /* icon pixmap */ -+ XCB_NONE, /* icon window */ -+ XCB_NONE, /* icon x */ -+ XCB_NONE, /* icon y */ -+ XCB_NONE, /* icon mask */ -+ XCB_NONE /* group leader */ -+ }; -+ xcb_change_property(connection(), XCB_PROP_MODE_REPLACE, m_testWindow, -+ XCB_ATOM_WM_HINTS, XCB_ATOM_WM_HINTS, 32, 9, values); -+ xcb_flush(connection()); -+ -+ // only updated after event -+ waitForPropertyChange(&info, XCB_ATOM_WM_HINTS, NET::Property(0), NET::WM2Urgency); -+ QTEST(info.input(), "expected"); -+} -+ - void NetWinInfoTestClient::testTransientFor() - { - QVERIFY(connection()); -diff --git a/src/netwm.cpp b/src/netwm.cpp -index 0e77a95..1431cf6 100644 ---- a/src/netwm.cpp -+++ b/src/netwm.cpp -@@ -2764,6 +2764,7 @@ NETWinInfo::NETWinInfo(xcb_connection_t *connection, xcb_window_t window, xcb_wi - p->activities = (char *) 0; - p->blockCompositing = false; - p->urgency = false; -+ p->input = true; - - // p->strut.left = p->strut.right = p->strut.top = p->strut.bottom = 0; - // p->frame_strut.left = p->frame_strut.right = p->frame_strut.top = -@@ -2824,6 +2825,7 @@ NETWinInfo::NETWinInfo(xcb_connection_t *connection, xcb_window_t window, xcb_wi - p->activities = (char *) 0; - p->blockCompositing = false; - p->urgency = false; -+ p->input = true; - - // p->strut.left = p->strut.right = p->strut.top = p->strut.bottom = 0; - // p->frame_strut.left = p->frame_strut.right = p->frame_strut.top = -@@ -3920,6 +3922,7 @@ void NETWinInfo::event(xcb_generic_event_t *event, NET::Properties *properties, - } else if (pe->atom == XCB_ATOM_WM_HINTS) { - dirty2 |= WM2GroupLeader; - dirty2 |= WM2Urgency; -+ dirty2 |= WM2Input; - } else if (pe->atom == XCB_ATOM_WM_TRANSIENT_FOR) { - dirty2 |= WM2TransientFor; - } else if (pe->atom == XCB_ATOM_WM_CLASS) { -@@ -4096,7 +4099,7 @@ void NETWinInfo::update(NET::Properties dirtyProperties, NET::Properties2 dirtyP - cookies[c++] = xcb_get_property(p->conn, false, p->window, XCB_ATOM_WM_TRANSIENT_FOR, XCB_ATOM_WINDOW, 0, 1); - } - -- if (dirty2 & (WM2GroupLeader | WM2Urgency)) { -+ if (dirty2 & (WM2GroupLeader | WM2Urgency | WM2Input)) { - cookies[c++] = xcb_get_property(p->conn, false, p->window, XCB_ATOM_WM_HINTS, XCB_ATOM_WM_HINTS, 0, 9); - } - -@@ -4550,12 +4553,15 @@ void NETWinInfo::update(NET::Properties dirtyProperties, NET::Properties2 dirtyP - p->transient_for = get_value_reply(p->conn, cookies[c++], XCB_ATOM_WINDOW, 0); - } - -- if (dirty2 & (WM2GroupLeader | WM2Urgency)) { -+ if (dirty2 & (WM2GroupLeader | WM2Urgency | WM2Input)) { - xcb_get_property_reply_t *reply = xcb_get_property_reply(p->conn, cookies[c++], 0); - - if (reply && reply->format == 32 && reply->value_len == 9 && reply->type == XCB_ATOM_WM_HINTS) { - kde_wm_hints *hints = reinterpret_cast(xcb_get_property_value(reply)); - -+ if (hints->flags & (1 << 0)/*Input*/) { -+ p->input = hints->input; -+ } - if (hints->flags & (1 << 6)/*WindowGroupHint*/) { - p->window_group = hints->window_group; - } -@@ -4749,6 +4755,11 @@ bool NETWinInfo::urgency() const - return p->urgency; - } - -+bool NETWinInfo::input() const -+{ -+ return p->input; -+} -+ - const char *NETWinInfo::windowClassClass() const - { - return p->class_class; -diff --git a/src/netwm.h b/src/netwm.h -index ba97db1..436ad2f 100644 ---- a/src/netwm.h -+++ b/src/netwm.h -@@ -1381,6 +1381,16 @@ public: - bool urgency() const; - - /** -+ * Returns whether the Input flag is set in WM_HINTS. -+ * See ICCCM 4.1.2.4 and 4.1.7. -+ * -+ * The default value is @c true in case the Client is mapped without a WM_HINTS property. -+ * -+ * @since 5.3 -+ **/ -+ bool input() const; -+ -+ /** - * Returns the class component of the window class for the window - * (i.e. WM_CLASS property). - */ -diff --git a/src/netwm_def.h b/src/netwm_def.h -index 9e14634..12abfff 100644 ---- a/src/netwm_def.h -+++ b/src/netwm_def.h -@@ -676,6 +676,7 @@ public: - @li WM2FullPlacement _NET_WM_FULL_PLACEMENT - @li WM2FullscreenMonitors _NET_WM_FULLSCREEN_MONITORS - @li WM2Urgency urgency hint in WM_HINTS (see ICCCM 4.1.2.4) -+ @li WM2Input input hint (input in WM_HINTS, see ICCCM 4.1.2.4) - **/ - enum Property2 { - WM2UserTime = 1u << 0, -@@ -700,6 +701,7 @@ public: - WM2BlockCompositing = 1u << 19, // NOT STANDARD @since 4.7 - WM2KDEShadow = 1u << 20, // NOT Standard @since 4.7 - WM2Urgency = 1u << 21, // @since 5.3 -+ WM2Input = 1u << 22, // @since 5.3 - WM2AllProperties = ~0u - }; - Q_DECLARE_FLAGS(Properties2, Property2) -diff --git a/src/netwm_p.h b/src/netwm_p.h -index 36ffb8d..a586450 100644 ---- a/src/netwm_p.h -+++ b/src/netwm_p.h -@@ -166,6 +166,7 @@ struct NETWinInfoPrivate { - const char *activities; - bool blockCompositing; - bool urgency; -+ bool input; - - int ref; - }; --- -2.1.0 - diff --git a/0007-Add-support-for-protocols-to-NETWinInfo.patch b/0007-Add-support-for-protocols-to-NETWinInfo.patch deleted file mode 100644 index 2157c00..0000000 --- a/0007-Add-support-for-protocols-to-NETWinInfo.patch +++ /dev/null @@ -1,227 +0,0 @@ -From 59cb063b99e6ec13c0bc3cf3fd95a01258184e86 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Martin=20Gr=C3=A4=C3=9Flin?= -Date: Fri, 12 Sep 2014 16:04:01 +0200 -Subject: [PATCH 07/13] Add support for protocols to NETWinInfo - -NETWinInfo is now able to read all known protocols set on WM_PROTOCOLS -property and provides the set protocols as flags. - -So far the following protocols are supported: -* WM_TAKE_FOCUS (ICCCM 4.1.2.7) -* WM_DELETE_WINDOW (ICCCM 4.1.2.7) -* _NET_WM_SYNC_REQUEST (EWMH) -* _NET_WM_PING (EWMH) -* _NET_WM_CONTEXT_HELP (KDE specific extension to EWMH) - -REVIEW: 120213 -CHANGELOG: NETWinInfo provides convenient wrapper for WM_PROTOCOLS. ---- - src/netwm.cpp | 46 +++++++++++++- - src/netwm.h | 13 ++++ - src/netwm_def.h | 19 ++++++ - src/netwm_p.h | 1 + - 5 files changed, 201 insertions(+), 1 deletion(-) - -diff --git a/src/netwm.cpp b/src/netwm.cpp -index 1431cf6..3107a23 100644 ---- a/src/netwm.cpp -+++ b/src/netwm.cpp -@@ -118,7 +118,11 @@ static xcb_atom_t kde_net_wm_shadow = 0; - - // application protocols - static xcb_atom_t wm_protocols = 0; -+static xcb_atom_t wm_take_focus = 0; -+static xcb_atom_t wm_delete_window = 0; - static xcb_atom_t net_wm_ping = 0; -+static xcb_atom_t net_wm_sync_request = 0; -+static xcb_atom_t net_wm_context_help = 0; - - // application window types - static xcb_atom_t net_wm_window_type_normal = 0; -@@ -382,7 +386,7 @@ static QByteArray get_atom_name(xcb_connection_t *c, xcb_atom_t atom) - } - #endif - --static const int netAtomCount = 88; -+static const int netAtomCount = 91; - - static void create_netwm_atoms(xcb_connection_t *c) - { -@@ -481,6 +485,10 @@ static void create_netwm_atoms(xcb_connection_t *c) - - { "WM_STATE", &xa_wm_state }, - { "WM_PROTOCOLS", &wm_protocols }, -+ { "WM_TAKE_FOCUS", &wm_take_focus }, -+ { "WM_DELETE_WINDOW", &wm_delete_window }, -+ { "_NET_WM_SYNC_REQUEST", &net_wm_sync_request }, -+ { "_NET_WM_CONTEXT_HELP", &net_wm_context_help }, - - { "_NET_WM_FULL_PLACEMENT", &net_wm_full_placement }, - { "_KDE_NET_WM_ACTIVITIES", &kde_net_wm_activities }, -@@ -2765,6 +2773,7 @@ NETWinInfo::NETWinInfo(xcb_connection_t *connection, xcb_window_t window, xcb_wi - p->blockCompositing = false; - p->urgency = false; - p->input = true; -+ p->protocols = NET::NoProtocol; - - // p->strut.left = p->strut.right = p->strut.top = p->strut.bottom = 0; - // p->frame_strut.left = p->frame_strut.right = p->frame_strut.top = -@@ -2826,6 +2835,7 @@ NETWinInfo::NETWinInfo(xcb_connection_t *connection, xcb_window_t window, xcb_wi - p->blockCompositing = false; - p->urgency = false; - p->input = true; -+ p->protocols = NET::NoProtocol; - - // p->strut.left = p->strut.right = p->strut.top = p->strut.bottom = 0; - // p->frame_strut.left = p->frame_strut.right = p->frame_strut.top = -@@ -3937,6 +3947,8 @@ void NETWinInfo::event(xcb_generic_event_t *event, NET::Properties *properties, - dirty2 |= WM2BlockCompositing; - } else if (pe->atom == kde_net_wm_shadow) { - dirty2 |= WM2KDEShadow; -+ } else if (pe->atom == wm_protocols) { -+ dirty2 |= WM2Protocols; - } - - do_update = true; -@@ -4115,6 +4127,10 @@ void NETWinInfo::update(NET::Properties dirtyProperties, NET::Properties2 dirtyP - cookies[c++] = xcb_get_property(p->conn, false, p->window, XCB_ATOM_WM_CLIENT_MACHINE, XCB_ATOM_STRING, 0, MAX_PROP_SIZE); - } - -+ if (dirty2 & WM2Protocols) { -+ cookies[c++] = xcb_get_property(p->conn, false, p->window, wm_protocols, XCB_ATOM_ATOM, 0, 2048); -+ } -+ - c = 0; - - if (dirty & XAWMState) { -@@ -4605,6 +4621,24 @@ void NETWinInfo::update(NET::Properties dirtyProperties, NET::Properties2 dirtyP - p->client_machine = nstrndup(value.constData(), value.length()); - } - } -+ -+ if (dirty2 & WM2Protocols) { -+ const QVector protocols = get_array_reply(p->conn, cookies[c++], XCB_ATOM_ATOM); -+ p->protocols = NET::NoProtocol; -+ for (auto it = protocols.begin(); it != protocols.end(); ++it) { -+ if ((*it) == wm_take_focus) { -+ p->protocols |= TakeFocusProtocol; -+ } else if ((*it) == wm_delete_window) { -+ p->protocols |= DeleteWindowProtocol; -+ } else if ((*it) == net_wm_ping) { -+ p->protocols |= PingProtocol; -+ } else if ((*it) == net_wm_sync_request) { -+ p->protocols |= SyncRequestProtocol; -+ } else if ((*it) == net_wm_context_help) { -+ p->protocols |= ContextHelpProtocol; -+ } -+ } -+ } - } - - NETRect NETWinInfo::iconGeometry() const -@@ -4845,6 +4879,16 @@ NET::MappingState NETWinInfo::mappingState() const - return p->mapping_state; - } - -+NET::Protocols NETWinInfo::protocols() const -+{ -+ return p->protocols; -+} -+ -+bool NETWinInfo::supportsProtocol(NET::Protocol protocol) const -+{ -+ return p->protocols.testFlag(protocol); -+} -+ - void NETRootInfo::virtual_hook(int, void *) - { - /*BASE::virtual_hook( id, data );*/ -diff --git a/src/netwm.h b/src/netwm.h -index 436ad2f..0535c39 100644 ---- a/src/netwm.h -+++ b/src/netwm.h -@@ -1519,6 +1519,19 @@ public: - NET::Properties event(xcb_generic_event_t *event); - - /** -+ * @returns The window manager protocols this Client supports. -+ * @since 5.3 -+ **/ -+ NET::Protocols protocols() const; -+ -+ /** -+ * @returns @c true if the Client supports the @p protocol. -+ * @param protocol The window manager protocol to test for -+ * @since 5.3 -+ **/ -+ bool supportsProtocol(NET::Protocol protocol) const; -+ -+ /** - Sentinel value to indicate that the client wishes to be visible on - all desktops. - -diff --git a/src/netwm_def.h b/src/netwm_def.h -index 12abfff..c8b1ba0 100644 ---- a/src/netwm_def.h -+++ b/src/netwm_def.h -@@ -677,6 +677,7 @@ public: - @li WM2FullscreenMonitors _NET_WM_FULLSCREEN_MONITORS - @li WM2Urgency urgency hint in WM_HINTS (see ICCCM 4.1.2.4) - @li WM2Input input hint (input in WM_HINTS, see ICCCM 4.1.2.4) -+ @li WM2Protocols see NET::Protocol - **/ - enum Property2 { - WM2UserTime = 1u << 0, -@@ -702,6 +703,7 @@ public: - WM2KDEShadow = 1u << 20, // NOT Standard @since 4.7 - WM2Urgency = 1u << 21, // @since 5.3 - WM2Input = 1u << 22, // @since 5.3 -+ WM2Protocols = 1u << 23, // @since 5.3 - WM2AllProperties = ~0u - }; - Q_DECLARE_FLAGS(Properties2, Property2) -@@ -750,6 +752,22 @@ public: - }; - - /** -+ * Protocols supported by the client. -+ * See ICCCM 4.1.2.7. -+ * -+ * @since 5.3 -+ **/ -+ enum Protocol { -+ NoProtocol = 0, -+ TakeFocusProtocol = 1 << 0, ///< WM_TAKE_FOCUS -+ DeleteWindowProtocol = 1 << 1, ///< WM_DELETE_WINDOW -+ PingProtocol = 1 << 2, ///< _NET_WM_PING from EWMH -+ SyncRequestProtocol = 1 << 3, ///< _NET_WM_SYNC_REQUEST from EWMH -+ ContextHelpProtocol = 1 << 4 ///< _NET_WM_CONTEXT_HELP, NON STANDARD! -+ }; -+ Q_DECLARE_FLAGS(Protocols, Protocol) -+ -+ /** - Compares two X timestamps, taking into account wrapping and 64bit architectures. - Return value is like with strcmp(), 0 for equal, -1 for time1 < time2, 1 for time1 > time2. - */ -@@ -767,5 +785,6 @@ Q_DECLARE_OPERATORS_FOR_FLAGS(NET::Properties2) - Q_DECLARE_OPERATORS_FOR_FLAGS(NET::WindowTypes) - Q_DECLARE_OPERATORS_FOR_FLAGS(NET::States) - Q_DECLARE_OPERATORS_FOR_FLAGS(NET::Actions) -+Q_DECLARE_OPERATORS_FOR_FLAGS(NET::Protocols) - - #endif // netwm_def_h -diff --git a/src/netwm_p.h b/src/netwm_p.h -index a586450..3bb8213 100644 ---- a/src/netwm_p.h -+++ b/src/netwm_p.h -@@ -167,6 +167,7 @@ struct NETWinInfoPrivate { - bool blockCompositing; - bool urgency; - bool input; -+ NET::Protocols protocols; - - int ref; - }; --- -2.1.0 - diff --git a/kwindowsystem-5.2.0.tar.xz b/kwindowsystem-5.2.0.tar.xz deleted file mode 100644 index 014329c..0000000 --- a/kwindowsystem-5.2.0.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3a6bf862574161f36377babd2ca389adf86c897232c07e34424f2f208d798f6a -size 2739036 diff --git a/kwindowsystem-5.3.0.tar.xz b/kwindowsystem-5.3.0.tar.xz new file mode 100644 index 0000000..e2747bb --- /dev/null +++ b/kwindowsystem-5.3.0.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c8670f95e87569152631977407b763e33e3d28191ab2d43e2e6072591bde5264 +size 157816 diff --git a/kwindowsystem.changes b/kwindowsystem.changes index 2e63c29..1105870 100644 --- a/kwindowsystem.changes +++ b/kwindowsystem.changes @@ -1,3 +1,15 @@ +------------------------------------------------------------------- +Sat Oct 4 17:59:57 UTC 2014 - hrvoje.senjan@gmail.com + +- Update to 5.3.0 + * For more details please see: + https://www.kde.org/announcements/kde-frameworks-5.3.0.php +- Drop patches merged upstream: + 0001-Make-constants-const-saves-a-few-symbols-in-the-.dat.patch, + 0002-Add-support-for-urgency-hint-in-NETWinInfo.patch, + 0003-Add-support-for-input-hint-in-NETWinInfo.patch and + 0007-Add-support-for-protocols-to-NETWinInfo.patch + ------------------------------------------------------------------- Wed Sep 24 19:25:07 UTC 2014 - hrvoje.senjan@gmail.com diff --git a/kwindowsystem.spec b/kwindowsystem.spec index 56034c3..9bb52f0 100644 --- a/kwindowsystem.spec +++ b/kwindowsystem.spec @@ -18,10 +18,10 @@ %define lname libKF5WindowSystem5 Name: kwindowsystem -Version: 5.2.0 +Version: 5.3.0 Release: 0 BuildRequires: cmake >= 2.8.12 -BuildRequires: extra-cmake-modules >= 1.2.0 +BuildRequires: extra-cmake-modules >= 1.3.0 BuildRequires: fdupes BuildRequires: kf5-filesystem BuildRequires: libqt5-linguist-devel >= 5.2.0 @@ -39,14 +39,6 @@ Group: System/GUI/KDE Url: http://www.kde.org Source: http://download.kde.org/stable/frameworks/%{version}/%{name}-%{version}.tar.xz Source1: baselibs.conf -# PATCH-FIX-UPSTREAM 0001-Make-constants-const-saves-a-few-symbols-in-the-.dat.patch -Patch0: 0001-Make-constants-const-saves-a-few-symbols-in-the-.dat.patch -# PATCH-FIX-UPSTREAM 0002-Add-support-for-urgency-hint-in-NETWinInfo.patch -Patch1: 0002-Add-support-for-urgency-hint-in-NETWinInfo.patch -# PATCH-FIX-UPSTREAM 0003-Add-support-for-input-hint-in-NETWinInfo.patch -Patch2: 0003-Add-support-for-input-hint-in-NETWinInfo.patch -# PATCH-FIX-UPSTREAM 0007-Add-support-for-protocols-to-NETWinInfo.patch -Patch3: 0007-Add-support-for-protocols-to-NETWinInfo.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build %description @@ -89,10 +81,6 @@ Development files. %lang_package -n %lname %prep %setup -q -%patch0 -p1 -%patch1 -p1 -%patch2 -p1 -%patch3 -p1 %build %cmake_kf5 -d build -- -Dlconvert_executable=%{_kf5_libdir}/qt5/bin/lconvert