Skip to content
  • Vlad Zahorodnii's avatar
    [x11] Emit clientRemoved after client was removed · 8af6d4f5
    Vlad Zahorodnii authored
    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
    8af6d4f5