diff options
author | 2016-06-26 22:09:20 +0200 | |
---|---|---|
committer | 2016-06-27 06:36:30 +1000 | |
commit | fabb3f9f1de7d866981f7be223b254f4040f7015 (patch) | |
tree | 4919096b45ea8515a6d271372384cb7388b4abd0 /kde-plasma | |
parent | kde-plasma/plasma-workspace: Add back legacy (gtk2) session mgmt (diff) | |
download | gentoo-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.patch | 140 | ||||
-rw-r--r-- | kde-plasma/kwin/kwin-5.6.5-r1.ebuild | 99 |
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" +} |