mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-09-24 04:59:14 -07:00
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
This commit is contained in:
committed by
Michael Palimaka
parent
efda8b45cb
commit
fabb3f9f1d
140
kde-plasma/kwin/files/kwin-5.6.5-legacy-session-mgmt.patch
Normal file
140
kde-plasma/kwin/files/kwin-5.6.5-legacy-session-mgmt.patch
Normal file
@@ -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;
|
||||
99
kde-plasma/kwin/kwin-5.6.5-r1.ebuild
Normal file
99
kde-plasma/kwin/kwin-5.6.5-r1.ebuild
Normal file
@@ -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"
|
||||
}
|
||||
Reference in New Issue
Block a user