summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Sturmlechner <andreas.sturmlechner@gmail.com>2016-06-26 22:09:20 +0200
committerMichael Palimaka <kensington@gentoo.org>2016-06-27 06:36:30 +1000
commitfabb3f9f1de7d866981f7be223b254f4040f7015 (patch)
tree4919096b45ea8515a6d271372384cb7388b4abd0 /kde-plasma
parentkde-plasma/plasma-workspace: Add back legacy (gtk2) session mgmt (diff)
downloadgentoo-fabb3f9f1de7d866981f7be223b254f4040f7015.tar.gz
gentoo-fabb3f9f1de7d866981f7be223b254f4040f7015.tar.bz2
gentoo-fabb3f9f1de7d866981f7be223b254f4040f7015.zip
kde-plasma/kwin: Add back saving/loading/client matching by WM_COMMAND
Upstream dropped it in 5.6 but later found out it was still in use by Mozilla applications et al., thus reverted in Plasma/5.6 branch but only after 5.6.5 release. Package-Manager: portage-2.2.28
Diffstat (limited to 'kde-plasma')
-rw-r--r--kde-plasma/kwin/files/kwin-5.6.5-legacy-session-mgmt.patch140
-rw-r--r--kde-plasma/kwin/kwin-5.6.5-r1.ebuild99
2 files changed, 239 insertions, 0 deletions
diff --git a/kde-plasma/kwin/files/kwin-5.6.5-legacy-session-mgmt.patch b/kde-plasma/kwin/files/kwin-5.6.5-legacy-session-mgmt.patch
new file mode 100644
index 000000000000..067124a55640
--- /dev/null
+++ b/kde-plasma/kwin/files/kwin-5.6.5-legacy-session-mgmt.patch
@@ -0,0 +1,140 @@
+commit 59740e7416bb2b3a9852212fa4b213e5ba76deb7
+Author: Andreas Hartmetz <ahartmetz@gmail.com>
+Date: Thu Jun 23 19:40:40 2016 +0200
+
+ Revert "Remove saving and loading (and client matching by) WM_COMMAND."
+
+ This reverts commit 2eac7634cc524bf5e425cf081a639a6b6407e380.
+
+ CCBUG: 362671
+
+diff --git a/activities.cpp b/activities.cpp
+index 25eb1c1..42c5db8 100644
+--- a/activities.cpp
++++ b/activities.cpp
+@@ -169,7 +169,7 @@ void Activities::reallyStop(const QString &id)
+ const Client* c = (*it);
+ const QByteArray sessionId = c->sessionId();
+ if (sessionId.isEmpty()) {
+- continue;
++ continue; //TODO support old wm_command apps too?
+ }
+
+ //qDebug() << sessionId;
+diff --git a/sm.cpp b/sm.cpp
+index 08810a4..ca1edea 100644
+--- a/sm.cpp
++++ b/sm.cpp
+@@ -109,8 +109,12 @@ void Workspace::storeSession(KConfig* config, SMSavePhase phase)
+ for (ClientList::Iterator it = clients.begin(); it != clients.end(); ++it) {
+ Client* c = (*it);
+ QByteArray sessionId = c->sessionId();
++ QByteArray wmCommand = c->wmCommand();
+ if (sessionId.isEmpty())
+- continue;
++ // remember also applications that are not XSMP capable
++ // and use the obsolete WM_COMMAND / WM_SAVE_YOURSELF
++ if (wmCommand.isEmpty())
++ continue;
+ count++;
+ if (c->isActive())
+ active_client = count;
+@@ -140,6 +144,7 @@ void Workspace::storeClient(KConfigGroup &cg, int num, Client *c)
+ QString n = QString::number(num);
+ cg.writeEntry(QLatin1String("sessionId") + n, c->sessionId().constData());
+ cg.writeEntry(QLatin1String("windowRole") + n, c->windowRole().constData());
++ cg.writeEntry(QLatin1String("wmCommand") + n, c->wmCommand().constData());
+ cg.writeEntry(QLatin1String("resourceName") + n, c->resourceName().constData());
+ cg.writeEntry(QLatin1String("resourceClass") + n, c->resourceClass().constData());
+ cg.writeEntry(QLatin1String("geometry") + n, QRect(c->calculateGravitation(true), c->clientSize())); // FRAME
+@@ -180,8 +185,12 @@ void Workspace::storeSubSession(const QString &name, QSet<QByteArray> sessionIds
+ for (ClientList::Iterator it = clients.begin(); it != clients.end(); ++it) {
+ Client* c = (*it);
+ QByteArray sessionId = c->sessionId();
++ QByteArray wmCommand = c->wmCommand();
+ if (sessionId.isEmpty())
+- continue;
++ // remember also applications that are not XSMP capable
++ // and use the obsolete WM_COMMAND / WM_SAVE_YOURSELF
++ if (wmCommand.isEmpty())
++ continue;
+ if (!sessionIds.contains(sessionId))
+ continue;
+
+@@ -221,6 +230,7 @@ void Workspace::addSessionInfo(KConfigGroup &cg)
+ session.append(info);
+ info->sessionId = cg.readEntry(QLatin1String("sessionId") + n, QString()).toLatin1();
+ info->windowRole = cg.readEntry(QLatin1String("windowRole") + n, QString()).toLatin1();
++ info->wmCommand = cg.readEntry(QLatin1String("wmCommand") + n, QString()).toLatin1();
+ info->resourceName = cg.readEntry(QLatin1String("resourceName") + n, QString()).toLatin1();
+ info->resourceClass = cg.readEntry(QLatin1String("resourceClass") + n, QString()).toLower().toLatin1();
+ info->geometry = cg.readEntry(QLatin1String("geometry") + n, QRect());
+@@ -269,6 +279,7 @@ SessionInfo* Workspace::takeSessionInfo(Client* c)
+ SessionInfo *realInfo = 0;
+ QByteArray sessionId = c->sessionId();
+ QByteArray windowRole = c->windowRole();
++ QByteArray wmCommand = c->wmCommand();
+ QByteArray resourceName = c->resourceName();
+ QByteArray resourceClass = c->resourceClass();
+
+@@ -302,8 +313,10 @@ SessionInfo* Workspace::takeSessionInfo(Client* c)
+ if (info->resourceName == resourceName
+ && info->resourceClass == resourceClass
+ && sessionInfoWindowTypeMatch(c, info)) {
+- realInfo = info;
+- session.removeAll(info);
++ if (wmCommand.isEmpty() || info->wmCommand == wmCommand) {
++ realInfo = info;
++ session.removeAll(info);
++ }
+ }
+ }
+ }
+diff --git a/sm.h b/sm.h
+index 4c5fda6..529187d 100644
+--- a/sm.h
++++ b/sm.h
+@@ -41,6 +41,7 @@ class Client;
+ struct SessionInfo {
+ QByteArray sessionId;
+ QByteArray windowRole;
++ QByteArray wmCommand;
+ QByteArray wmClientMachine;
+ QByteArray resourceName;
+ QByteArray resourceClass;
+diff --git a/toplevel.cpp b/toplevel.cpp
+index af368b5..4a7ec6d 100644
+--- a/toplevel.cpp
++++ b/toplevel.cpp
+@@ -177,6 +177,19 @@ QByteArray Toplevel::sessionId() const
+ return result;
+ }
+
++/*!
++ Returns command property for this client,
++ taken either from its window or from the leader window.
++ */
++QByteArray Toplevel::wmCommand()
++{
++ QByteArray result = Xcb::StringProperty(window(), XCB_ATOM_WM_COMMAND);
++ if (result.isEmpty() && wmClientLeaderWin && wmClientLeaderWin != window())
++ result = Xcb::StringProperty(wmClientLeaderWin, XCB_ATOM_WM_COMMAND);
++ result.replace(0, ' ');
++ return result;
++}
++
+ void Toplevel::getWmClientMachine()
+ {
+ m_clientMachine->resolve(window(), wmClientLeader());
+diff --git a/toplevel.h b/toplevel.h
+index 3133851..91eee5f 100644
+--- a/toplevel.h
++++ b/toplevel.h
+@@ -274,6 +274,7 @@ public:
+ QByteArray sessionId() const;
+ QByteArray resourceName() const;
+ QByteArray resourceClass() const;
++ QByteArray wmCommand();
+ QByteArray wmClientMachine(bool use_localhost) const;
+ const ClientMachine *clientMachine() const;
+ Window wmClientLeader() const;
diff --git a/kde-plasma/kwin/kwin-5.6.5-r1.ebuild b/kde-plasma/kwin/kwin-5.6.5-r1.ebuild
new file mode 100644
index 000000000000..2f12148b15a3
--- /dev/null
+++ b/kde-plasma/kwin/kwin-5.6.5-r1.ebuild
@@ -0,0 +1,99 @@
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=6
+
+KDE_HANDBOOK="optional"
+KDE_TEST="optional"
+VIRTUALX_REQUIRED="test"
+inherit kde5
+
+DESCRIPTION="KDE window manager"
+LICENSE="GPL-2+"
+KEYWORDS="~amd64 ~arm ~x86"
+IUSE="gles2 multimedia"
+
+# drop qtcore subslot operator when QT_MINIMAL >= 5.7.0
+COMMON_DEPEND="
+ $(add_frameworks_dep kactivities)
+ $(add_frameworks_dep kauth)
+ $(add_frameworks_dep kcmutils)
+ $(add_frameworks_dep kcompletion)
+ $(add_frameworks_dep kconfig)
+ $(add_frameworks_dep kconfigwidgets)
+ $(add_frameworks_dep kcoreaddons)
+ $(add_frameworks_dep kcrash)
+ $(add_frameworks_dep kdeclarative)
+ $(add_frameworks_dep kglobalaccel)
+ $(add_frameworks_dep ki18n)
+ $(add_frameworks_dep kiconthemes)
+ $(add_frameworks_dep kidletime)
+ $(add_frameworks_dep kinit)
+ $(add_frameworks_dep kio)
+ $(add_frameworks_dep knewstuff)
+ $(add_frameworks_dep knotifications)
+ $(add_frameworks_dep kpackage)
+ $(add_frameworks_dep kservice)
+ $(add_frameworks_dep kwayland)
+ $(add_frameworks_dep kwidgetsaddons)
+ $(add_frameworks_dep kwindowsystem X)
+ $(add_frameworks_dep kxmlgui)
+ $(add_frameworks_dep plasma)
+ $(add_plasma_dep kdecoration)
+ $(add_plasma_dep kscreenlocker)
+ $(add_qt_dep qtcore '' '' '5=')
+ $(add_qt_dep qtdbus)
+ $(add_qt_dep qtdeclarative)
+ $(add_qt_dep qtgui 'gles2=,opengl(+)')
+ $(add_qt_dep qtscript)
+ $(add_qt_dep qtwidgets)
+ $(add_qt_dep qtx11extras)
+ >=dev-libs/libinput-0.10
+ >=dev-libs/wayland-1.2
+ media-libs/fontconfig
+ media-libs/freetype
+ media-libs/libepoxy
+ media-libs/mesa[egl,gbm,gles2?,wayland]
+ virtual/libudev:=
+ x11-libs/libICE
+ x11-libs/libSM
+ x11-libs/libX11
+ x11-libs/libXi
+ x11-libs/libdrm
+ >=x11-libs/libxcb-1.10
+ >=x11-libs/libxkbcommon-0.4.1
+ x11-libs/xcb-util-cursor
+ x11-libs/xcb-util-image
+ x11-libs/xcb-util-keysyms
+"
+RDEPEND="${COMMON_DEPEND}
+ $(add_plasma_dep kde-cli-tools)
+ multimedia? (
+ || (
+ $(add_qt_dep qtmultimedia 'gstreamer,qml')
+ $(add_qt_dep qtmultimedia 'gstreamer010,qml')
+ )
+ )
+ !<kde-apps/kdeartwork-meta-15.08.3-r1:4
+ !kde-base/kwin:4
+ !kde-base/systemsettings:4
+"
+DEPEND="${COMMON_DEPEND}
+ $(add_qt_dep designer)
+ $(add_qt_dep qtconcurrent)
+ x11-proto/xproto
+ test? ( x11-libs/xcb-util-wm )
+"
+
+RESTRICT="test"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-5.6.3-glibc-sysmacros.patch"
+ "${FILESDIR}/${PN}-5.6.5-legacy-session-mgmt.patch" # backport in 5.6 after release
+)
+
+src_prepare() {
+ kde5_src_prepare
+ use multimedia || eapply "${FILESDIR}/${PN}-gstreamer-optional.patch"
+}