Change Workspace::clientRemoved to carry an AbstractClient
At the same time emit it when a ShellClient get's removed. This ensures it gets removed from e.g. the FocusChain.
This commit is contained in:
parent
8d3ee65269
commit
f55c086007
7 changed files with 17 additions and 9 deletions
|
@ -640,7 +640,11 @@ ScreenEdges::ScreenEdges(QObject *parent)
|
||||||
QWidget w;
|
QWidget w;
|
||||||
m_cornerOffset = (w.physicalDpiX() + w.physicalDpiY() + 5) / 6;
|
m_cornerOffset = (w.physicalDpiX() + w.physicalDpiY() + 5) / 6;
|
||||||
|
|
||||||
connect(workspace(), &Workspace::clientRemoved, [this](KWin::Client *client) {
|
connect(workspace(), &Workspace::clientRemoved, [this](KWin::AbstractClient *c) {
|
||||||
|
Client *client = qobject_cast<Client*>(c);
|
||||||
|
if (!client) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
deleteEdgeForClient(client);
|
deleteEdgeForClient(client);
|
||||||
QObject::disconnect(client, &Client::geometryChanged,
|
QObject::disconnect(client, &Client::geometryChanged,
|
||||||
ScreenEdges::self(), &ScreenEdges::handleClientGeometryChanged);
|
ScreenEdges::self(), &ScreenEdges::handleClientGeometryChanged);
|
||||||
|
|
|
@ -38,7 +38,7 @@ ClientLevel::ClientLevel(ClientModel *model, AbstractLevel *parent)
|
||||||
: AbstractLevel(model, parent)
|
: AbstractLevel(model, parent)
|
||||||
{
|
{
|
||||||
connect(Workspace::self(), SIGNAL(clientAdded(KWin::Client*)), SLOT(clientAdded(KWin::Client*)));
|
connect(Workspace::self(), SIGNAL(clientAdded(KWin::Client*)), SLOT(clientAdded(KWin::Client*)));
|
||||||
connect(Workspace::self(), SIGNAL(clientRemoved(KWin::Client*)), SLOT(clientRemoved(KWin::Client*)));
|
connect(Workspace::self(), &Workspace::clientRemoved, this, &ClientLevel::clientRemoved);
|
||||||
connect(model, SIGNAL(exclusionsChanged()), SLOT(reInit()));
|
connect(model, SIGNAL(exclusionsChanged()), SLOT(reInit()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,9 +52,11 @@ void ClientLevel::clientAdded(Client *client)
|
||||||
checkClient(client);
|
checkClient(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClientLevel::clientRemoved(Client *client)
|
void ClientLevel::clientRemoved(AbstractClient *client)
|
||||||
{
|
{
|
||||||
removeClient(client);
|
if (Client *c = qobject_cast<Client*>(client)) {
|
||||||
|
removeClient(c);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClientLevel::setupClientConnections(Client *client)
|
void ClientLevel::setupClientConnections(Client *client)
|
||||||
|
|
|
@ -25,6 +25,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#include <QList>
|
#include <QList>
|
||||||
|
|
||||||
namespace KWin {
|
namespace KWin {
|
||||||
|
class AbstractClient;
|
||||||
class Client;
|
class Client;
|
||||||
|
|
||||||
namespace ScriptingClientModel {
|
namespace ScriptingClientModel {
|
||||||
|
@ -228,7 +229,7 @@ public:
|
||||||
virtual AbstractLevel *parentForId(quint32 child) const;
|
virtual AbstractLevel *parentForId(quint32 child) const;
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
void clientAdded(KWin::Client *client);
|
void clientAdded(KWin::Client *client);
|
||||||
void clientRemoved(KWin::Client *client);
|
void clientRemoved(KWin::AbstractClient *client);
|
||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
// uses sender()
|
// uses sender()
|
||||||
void checkClient();
|
void checkClient();
|
||||||
|
|
|
@ -42,7 +42,7 @@ WorkspaceWrapper::WorkspaceWrapper(QObject* parent) : QObject(parent)
|
||||||
connect(ws, &Workspace::currentDesktopChanged, this, &WorkspaceWrapper::currentDesktopChanged);
|
connect(ws, &Workspace::currentDesktopChanged, this, &WorkspaceWrapper::currentDesktopChanged);
|
||||||
connect(ws, SIGNAL(clientAdded(KWin::Client*)), SIGNAL(clientAdded(KWin::Client*)));
|
connect(ws, SIGNAL(clientAdded(KWin::Client*)), SIGNAL(clientAdded(KWin::Client*)));
|
||||||
connect(ws, SIGNAL(clientAdded(KWin::Client*)), SLOT(setupClientConnections(KWin::Client*)));
|
connect(ws, SIGNAL(clientAdded(KWin::Client*)), SLOT(setupClientConnections(KWin::Client*)));
|
||||||
connect(ws, SIGNAL(clientRemoved(KWin::Client*)), SIGNAL(clientRemoved(KWin::Client*)));
|
connect(ws, &Workspace::clientRemoved, this, &WorkspaceWrapper::clientRemoved);
|
||||||
connect(ws, &Workspace::clientActivated, this, &WorkspaceWrapper::clientActivated);
|
connect(ws, &Workspace::clientActivated, this, &WorkspaceWrapper::clientActivated);
|
||||||
connect(vds, SIGNAL(countChanged(uint,uint)), SIGNAL(numberDesktopsChanged(uint)));
|
connect(vds, SIGNAL(countChanged(uint,uint)), SIGNAL(numberDesktopsChanged(uint)));
|
||||||
connect(vds, SIGNAL(layoutChanged(int,int)), SIGNAL(desktopLayoutChanged()));
|
connect(vds, SIGNAL(layoutChanged(int,int)), SIGNAL(desktopLayoutChanged()));
|
||||||
|
|
|
@ -91,7 +91,7 @@ Q_SIGNALS:
|
||||||
void desktopPresenceChanged(KWin::AbstractClient *client, int desktop);
|
void desktopPresenceChanged(KWin::AbstractClient *client, int desktop);
|
||||||
void currentDesktopChanged(int desktop, KWin::AbstractClient *client);
|
void currentDesktopChanged(int desktop, KWin::AbstractClient *client);
|
||||||
void clientAdded(KWin::Client *client);
|
void clientAdded(KWin::Client *client);
|
||||||
void clientRemoved(KWin::Client *client);
|
void clientRemoved(KWin::AbstractClient *client);
|
||||||
void clientManaging(KWin::Client *client);
|
void clientManaging(KWin::Client *client);
|
||||||
void clientMinimized(KWin::AbstractClient *client);
|
void clientMinimized(KWin::AbstractClient *client);
|
||||||
void clientUnminimized(KWin::AbstractClient *client);
|
void clientUnminimized(KWin::AbstractClient *client);
|
||||||
|
|
|
@ -387,7 +387,8 @@ void Workspace::init()
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
connect(w, &WaylandServer::shellClientRemoved, this,
|
connect(w, &WaylandServer::shellClientRemoved, this,
|
||||||
[this] {
|
[this] (ShellClient *c) {
|
||||||
|
emit clientRemoved(c);
|
||||||
x_stacking_dirty = true;
|
x_stacking_dirty = true;
|
||||||
updateStackingOrder(true);
|
updateStackingOrder(true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -444,7 +444,7 @@ Q_SIGNALS:
|
||||||
void desktopPresenceChanged(KWin::AbstractClient*, int);
|
void desktopPresenceChanged(KWin::AbstractClient*, int);
|
||||||
void currentDesktopChanged(int, KWin::AbstractClient*);
|
void currentDesktopChanged(int, KWin::AbstractClient*);
|
||||||
void clientAdded(KWin::Client*);
|
void clientAdded(KWin::Client*);
|
||||||
void clientRemoved(KWin::Client*);
|
void clientRemoved(KWin::AbstractClient*);
|
||||||
void clientActivated(KWin::AbstractClient*);
|
void clientActivated(KWin::AbstractClient*);
|
||||||
void clientDemandsAttentionChanged(KWin::AbstractClient*, bool);
|
void clientDemandsAttentionChanged(KWin::AbstractClient*, bool);
|
||||||
void groupAdded(KWin::Group*);
|
void groupAdded(KWin::Group*);
|
||||||
|
|
Loading…
Reference in a new issue