[x11] Emit clientRemoved after client was removed
Summary: Currently, there is a guarantee that a client, which is about to be removed, is no longer in the stacking order(both in constrained and unconstrained) when Workspace::removeClient is called. However, because the client gets removed from m_allClients after clientRemoved is emitted, it can be re-inserted back into the stacking order. In general, the pattern is to do some work and then notify others about what you've done by emitting a signal. In the case of Workspace::removeClient, we emit clientRemoved way before the client actually gets removed. CCBUG: 392412 CCBUG: 400854 Test Plan: * Enable the following script: ```lang=js workspace.clientAdded.connect(function (client) { if (client.skipTaskbar || client.modal || client.transient) { return; } workspace.desktops = workspace.desktops + 1; workspace.currentDesktop = workspace.desktops; client.desktop = workspace.currentDesktop; }); workspace.clientRemoved.connect(function (client) { if (client.skipTaskbar || client.modal || client.transient) { return; } workspace.desktops = workspace.desktops - 1; }); ``` * Open an app, close the app. Reviewers: #kwin, graesslin Reviewed By: #kwin, graesslin Subscribers: graesslin, kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D17069
This commit is contained in:
parent
a28410d80a
commit
8af6d4f5dc
1 changed files with 2 additions and 2 deletions
|
@ -661,8 +661,6 @@ void Workspace::addUnmanaged(Unmanaged* c)
|
|||
*/
|
||||
void Workspace::removeClient(Client* c)
|
||||
{
|
||||
emit clientRemoved(c);
|
||||
|
||||
if (c == active_popup_client)
|
||||
closeActivePopup();
|
||||
if (m_userActionsMenu->isMenuClient(c)) {
|
||||
|
@ -704,6 +702,8 @@ void Workspace::removeClient(Client* c)
|
|||
if (c == delayfocus_client)
|
||||
cancelDelayFocus();
|
||||
|
||||
emit clientRemoved(c);
|
||||
|
||||
updateStackingOrder(true);
|
||||
|
||||
#ifdef KWIN_BUILD_TABBOX
|
||||
|
|
Loading…
Reference in a new issue