Introduce AbstractClient::destroyClient()
Summary: The new method provides a generic way for destructing clients. Notice that we can't just delete clients because we may need to discard temporary window rules, which is usually done in destroyClient(). Test Plan: Compiles. Reviewers: #kwin, davidedmundson Reviewed By: #kwin, davidedmundson Subscribers: kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D27821
This commit is contained in:
parent
be759b7d33
commit
861883895d
5 changed files with 5 additions and 8 deletions
|
@ -787,6 +787,7 @@ public:
|
||||||
* Implementing subclasses can perform a windowing system solution for terminating.
|
* Implementing subclasses can perform a windowing system solution for terminating.
|
||||||
*/
|
*/
|
||||||
virtual void killWindow() = 0;
|
virtual void killWindow() = 0;
|
||||||
|
virtual void destroyClient() = 0;
|
||||||
|
|
||||||
enum class SameApplicationCheck {
|
enum class SameApplicationCheck {
|
||||||
RelaxedForActive = 1 << 0,
|
RelaxedForActive = 1 << 0,
|
||||||
|
|
|
@ -81,8 +81,8 @@ public:
|
||||||
void updateDecoration(bool check_workspace_pos, bool force = false) override;
|
void updateDecoration(bool check_workspace_pos, bool force = false) override;
|
||||||
void updateColorScheme() override;
|
void updateColorScheme() override;
|
||||||
void showOnScreenEdge() override;
|
void showOnScreenEdge() override;
|
||||||
|
void destroyClient() override;
|
||||||
|
|
||||||
void destroyClient();
|
|
||||||
void present(const QSharedPointer<QOpenGLFramebufferObject> fbo);
|
void present(const QSharedPointer<QOpenGLFramebufferObject> fbo);
|
||||||
void present(const QImage &image, const QRegion &damage);
|
void present(const QImage &image, const QRegion &damage);
|
||||||
QWindow *internalWindow() const;
|
QWindow *internalWindow() const;
|
||||||
|
|
|
@ -56,7 +56,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#include "unmanaged.h"
|
#include "unmanaged.h"
|
||||||
#include "useractions.h"
|
#include "useractions.h"
|
||||||
#include "virtualdesktops.h"
|
#include "virtualdesktops.h"
|
||||||
#include "xdgshellclient.h"
|
|
||||||
#include "was_user_interaction_x11_filter.h"
|
#include "was_user_interaction_x11_filter.h"
|
||||||
#include "wayland_server.h"
|
#include "wayland_server.h"
|
||||||
#include "xcbutils.h"
|
#include "xcbutils.h"
|
||||||
|
@ -473,12 +472,9 @@ Workspace::~Workspace()
|
||||||
X11Client::cleanupX11();
|
X11Client::cleanupX11();
|
||||||
|
|
||||||
if (waylandServer()) {
|
if (waylandServer()) {
|
||||||
// TODO: Introduce AbstractClient::destroy().
|
|
||||||
const QList<AbstractClient *> shellClients = waylandServer()->clients();
|
const QList<AbstractClient *> shellClients = waylandServer()->clients();
|
||||||
for (AbstractClient *client : shellClients) {
|
for (AbstractClient *client : shellClients) {
|
||||||
if (XdgShellClient *shellClient = qobject_cast<XdgShellClient *>(client)) {
|
client->destroyClient();
|
||||||
shellClient->destroyClient();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -129,7 +129,7 @@ public:
|
||||||
|
|
||||||
bool manage(xcb_window_t w, bool isMapped);
|
bool manage(xcb_window_t w, bool isMapped);
|
||||||
void releaseWindow(bool on_shutdown = false);
|
void releaseWindow(bool on_shutdown = false);
|
||||||
void destroyClient();
|
void destroyClient() override;
|
||||||
|
|
||||||
QStringList activities() const override;
|
QStringList activities() const override;
|
||||||
void setOnActivity(const QString &activity, bool enable);
|
void setOnActivity(const QString &activity, bool enable);
|
||||||
|
|
|
@ -121,6 +121,7 @@ public:
|
||||||
void killWindow() override;
|
void killWindow() override;
|
||||||
bool isLocalhost() const override;
|
bool isLocalhost() const override;
|
||||||
bool supportsWindowRules() const override;
|
bool supportsWindowRules() const override;
|
||||||
|
void destroyClient() override;
|
||||||
|
|
||||||
void installPlasmaShellSurface(KWayland::Server::PlasmaShellSurfaceInterface *surface);
|
void installPlasmaShellSurface(KWayland::Server::PlasmaShellSurfaceInterface *surface);
|
||||||
void installServerSideDecoration(KWayland::Server::ServerSideDecorationInterface *decoration);
|
void installServerSideDecoration(KWayland::Server::ServerSideDecorationInterface *decoration);
|
||||||
|
@ -170,7 +171,6 @@ private:
|
||||||
*/
|
*/
|
||||||
void finishInit();
|
void finishInit();
|
||||||
void createDecoration(const QRect &oldgeom);
|
void createDecoration(const QRect &oldgeom);
|
||||||
void destroyClient();
|
|
||||||
void createWindowId();
|
void createWindowId();
|
||||||
void updateIcon();
|
void updateIcon();
|
||||||
bool shouldExposeToWindowManagement();
|
bool shouldExposeToWindowManagement();
|
||||||
|
|
Loading…
Reference in a new issue