Revert "Remove saving and loading (and client matching by) WM_COMMAND."
This reverts commit 2eac7634cc
.
Cherry-picked from 5.6.
CCBUG: 362671
This commit is contained in:
parent
02ba1e7c0a
commit
bdf555bbcb
5 changed files with 33 additions and 5 deletions
|
@ -169,7 +169,7 @@ void Activities::reallyStop(const QString &id)
|
||||||
const Client* c = (*it);
|
const Client* c = (*it);
|
||||||
const QByteArray sessionId = c->sessionId();
|
const QByteArray sessionId = c->sessionId();
|
||||||
if (sessionId.isEmpty()) {
|
if (sessionId.isEmpty()) {
|
||||||
continue;
|
continue; //TODO support old wm_command apps too?
|
||||||
}
|
}
|
||||||
|
|
||||||
//qDebug() << sessionId;
|
//qDebug() << sessionId;
|
||||||
|
|
21
sm.cpp
21
sm.cpp
|
@ -109,8 +109,12 @@ void Workspace::storeSession(KConfig* config, SMSavePhase phase)
|
||||||
for (ClientList::Iterator it = clients.begin(); it != clients.end(); ++it) {
|
for (ClientList::Iterator it = clients.begin(); it != clients.end(); ++it) {
|
||||||
Client* c = (*it);
|
Client* c = (*it);
|
||||||
QByteArray sessionId = c->sessionId();
|
QByteArray sessionId = c->sessionId();
|
||||||
|
QByteArray wmCommand = c->wmCommand();
|
||||||
if (sessionId.isEmpty())
|
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++;
|
count++;
|
||||||
if (c->isActive())
|
if (c->isActive())
|
||||||
active_client = count;
|
active_client = count;
|
||||||
|
@ -140,6 +144,7 @@ void Workspace::storeClient(KConfigGroup &cg, int num, Client *c)
|
||||||
QString n = QString::number(num);
|
QString n = QString::number(num);
|
||||||
cg.writeEntry(QLatin1String("sessionId") + n, c->sessionId().constData());
|
cg.writeEntry(QLatin1String("sessionId") + n, c->sessionId().constData());
|
||||||
cg.writeEntry(QLatin1String("windowRole") + n, c->windowRole().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("resourceName") + n, c->resourceName().constData());
|
||||||
cg.writeEntry(QLatin1String("resourceClass") + n, c->resourceClass().constData());
|
cg.writeEntry(QLatin1String("resourceClass") + n, c->resourceClass().constData());
|
||||||
cg.writeEntry(QLatin1String("geometry") + n, QRect(c->calculateGravitation(true), c->clientSize())); // FRAME
|
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) {
|
for (ClientList::Iterator it = clients.begin(); it != clients.end(); ++it) {
|
||||||
Client* c = (*it);
|
Client* c = (*it);
|
||||||
QByteArray sessionId = c->sessionId();
|
QByteArray sessionId = c->sessionId();
|
||||||
|
QByteArray wmCommand = c->wmCommand();
|
||||||
if (sessionId.isEmpty())
|
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))
|
if (!sessionIds.contains(sessionId))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -221,6 +230,7 @@ void Workspace::addSessionInfo(KConfigGroup &cg)
|
||||||
session.append(info);
|
session.append(info);
|
||||||
info->sessionId = cg.readEntry(QLatin1String("sessionId") + n, QString()).toLatin1();
|
info->sessionId = cg.readEntry(QLatin1String("sessionId") + n, QString()).toLatin1();
|
||||||
info->windowRole = cg.readEntry(QLatin1String("windowRole") + 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->resourceName = cg.readEntry(QLatin1String("resourceName") + n, QString()).toLatin1();
|
||||||
info->resourceClass = cg.readEntry(QLatin1String("resourceClass") + n, QString()).toLower().toLatin1();
|
info->resourceClass = cg.readEntry(QLatin1String("resourceClass") + n, QString()).toLower().toLatin1();
|
||||||
info->geometry = cg.readEntry(QLatin1String("geometry") + n, QRect());
|
info->geometry = cg.readEntry(QLatin1String("geometry") + n, QRect());
|
||||||
|
@ -269,6 +279,7 @@ SessionInfo* Workspace::takeSessionInfo(Client* c)
|
||||||
SessionInfo *realInfo = 0;
|
SessionInfo *realInfo = 0;
|
||||||
QByteArray sessionId = c->sessionId();
|
QByteArray sessionId = c->sessionId();
|
||||||
QByteArray windowRole = c->windowRole();
|
QByteArray windowRole = c->windowRole();
|
||||||
|
QByteArray wmCommand = c->wmCommand();
|
||||||
QByteArray resourceName = c->resourceName();
|
QByteArray resourceName = c->resourceName();
|
||||||
QByteArray resourceClass = c->resourceClass();
|
QByteArray resourceClass = c->resourceClass();
|
||||||
|
|
||||||
|
@ -302,8 +313,10 @@ SessionInfo* Workspace::takeSessionInfo(Client* c)
|
||||||
if (info->resourceName == resourceName
|
if (info->resourceName == resourceName
|
||||||
&& info->resourceClass == resourceClass
|
&& info->resourceClass == resourceClass
|
||||||
&& sessionInfoWindowTypeMatch(c, info)) {
|
&& sessionInfoWindowTypeMatch(c, info)) {
|
||||||
realInfo = info;
|
if (wmCommand.isEmpty() || info->wmCommand == wmCommand) {
|
||||||
session.removeAll(info);
|
realInfo = info;
|
||||||
|
session.removeAll(info);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
1
sm.h
1
sm.h
|
@ -41,6 +41,7 @@ class Client;
|
||||||
struct SessionInfo {
|
struct SessionInfo {
|
||||||
QByteArray sessionId;
|
QByteArray sessionId;
|
||||||
QByteArray windowRole;
|
QByteArray windowRole;
|
||||||
|
QByteArray wmCommand;
|
||||||
QByteArray wmClientMachine;
|
QByteArray wmClientMachine;
|
||||||
QByteArray resourceName;
|
QByteArray resourceName;
|
||||||
QByteArray resourceClass;
|
QByteArray resourceClass;
|
||||||
|
|
13
toplevel.cpp
13
toplevel.cpp
|
@ -177,6 +177,19 @@ QByteArray Toplevel::sessionId() const
|
||||||
return result;
|
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()
|
void Toplevel::getWmClientMachine()
|
||||||
{
|
{
|
||||||
m_clientMachine->resolve(window(), wmClientLeader());
|
m_clientMachine->resolve(window(), wmClientLeader());
|
||||||
|
|
|
@ -278,6 +278,7 @@ public:
|
||||||
QByteArray sessionId() const;
|
QByteArray sessionId() const;
|
||||||
QByteArray resourceName() const;
|
QByteArray resourceName() const;
|
||||||
QByteArray resourceClass() const;
|
QByteArray resourceClass() const;
|
||||||
|
QByteArray wmCommand();
|
||||||
QByteArray wmClientMachine(bool use_localhost) const;
|
QByteArray wmClientMachine(bool use_localhost) const;
|
||||||
const ClientMachine *clientMachine() const;
|
const ClientMachine *clientMachine() const;
|
||||||
Window wmClientLeader() const;
|
Window wmClientLeader() const;
|
||||||
|
|
Loading…
Reference in a new issue