KWin
Loading...
Searching...
No Matches
server_decoration_palette.cpp
Go to the documentation of this file.
1/*
2 SPDX-FileCopyrightText: 2017 David Edmundson <kde@davidedmundson.co.uk>
3
4 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
5*/
7#include "display.h"
8#include "surface.h"
9#include "utils/common.h"
10
11#include <QtGlobal>
12
13#include <qwayland-server-server-decoration-palette.h>
14
15namespace KWin
16{
17static const quint32 s_version = 1;
18
19class ServerSideDecorationPaletteManagerInterfacePrivate : public QtWaylandServer::org_kde_kwin_server_decoration_palette_manager
20{
21public:
23
24 QList<ServerSideDecorationPaletteInterface *> palettes;
26
27protected:
28 void org_kde_kwin_server_decoration_palette_manager_create(Resource *resource, uint32_t id, struct ::wl_resource *surface) override;
29};
30
32 uint32_t id,
33 wl_resource *surface)
34{
36 if (!s) {
37 wl_resource_post_error(resource->handle, 0, "invalid surface");
38 qCWarning(KWIN_CORE) << "ServerSideDecorationPaletteInterface requested for non existing SurfaceInterface";
39 return;
40 }
41
42 wl_resource *palette_resource = wl_resource_create(resource->client(), &org_kde_kwin_server_decoration_palette_interface, resource->version(), id);
43 if (!palette_resource) {
44 wl_client_post_no_memory(resource->client());
45 return;
46 }
47 auto palette = new ServerSideDecorationPaletteInterface(s, palette_resource);
48
49 palettes.append(palette);
50 QObject::connect(palette, &QObject::destroyed, q, [this, palette]() {
51 palettes.removeOne(palette);
52 });
53 Q_EMIT q->paletteCreated(palette);
54}
55
57 Display *display)
58 : QtWaylandServer::org_kde_kwin_server_decoration_palette_manager(*display, s_version)
59 , q(_q)
60{
61}
62
68
70
72{
73 for (ServerSideDecorationPaletteInterface *menu : std::as_const(d->palettes)) {
74 if (menu->surface() == surface) {
75 return menu;
76 }
77 }
78 return nullptr;
79}
80
81class ServerSideDecorationPaletteInterfacePrivate : public QtWaylandServer::org_kde_kwin_server_decoration_palette
82{
83public:
85
87 QString palette;
89
90protected:
91 void org_kde_kwin_server_decoration_palette_destroy_resource(Resource *resource) override;
92 void org_kde_kwin_server_decoration_palette_set_palette(Resource *resource, const QString &palette) override;
93 void org_kde_kwin_server_decoration_palette_release(Resource *resource) override;
94};
95
97{
98 wl_resource_destroy(resource->handle);
99}
100
102{
103 if (this->palette == palette) {
104 return;
105 }
106 this->palette = palette;
107 Q_EMIT q->paletteChanged(this->palette);
108}
109
114
116 SurfaceInterface *surface,
117 wl_resource *resource)
118 : QtWaylandServer::org_kde_kwin_server_decoration_palette(resource)
119 , surface(surface)
120 , q(_q)
121{
122}
123
124ServerSideDecorationPaletteInterface::ServerSideDecorationPaletteInterface(SurfaceInterface *surface, wl_resource *resource)
125 : QObject()
126 , d(new ServerSideDecorationPaletteInterfacePrivate(this, surface, resource))
127{
128}
129
131
133{
134 return d->palette;
135}
136
138{
139 return d->surface;
140}
141
142} // namespace
143
144#include "moc_server_decoration_palette.cpp"
Class holding the Wayland server display loop.
Definition display.h:34
void paletteChanged(const QString &palette)
ServerSideDecorationPaletteInterfacePrivate(ServerSideDecorationPaletteInterface *_q, SurfaceInterface *surface, wl_resource *resource)
void org_kde_kwin_server_decoration_palette_release(Resource *resource) override
void org_kde_kwin_server_decoration_palette_set_palette(Resource *resource, const QString &palette) override
void org_kde_kwin_server_decoration_palette_destroy_resource(Resource *resource) override
void paletteCreated(KWin::ServerSideDecorationPaletteInterface *)
ServerSideDecorationPaletteManagerInterface(Display *display, QObject *parent=nullptr)
ServerSideDecorationPaletteInterface * paletteForSurface(SurfaceInterface *)
void org_kde_kwin_server_decoration_palette_manager_create(Resource *resource, uint32_t id, struct ::wl_resource *surface) override
ServerSideDecorationPaletteManagerInterfacePrivate(ServerSideDecorationPaletteManagerInterface *q, Display *display)
QList< ServerSideDecorationPaletteInterface * > palettes
Resource representing a wl_surface.
Definition surface.h:80
static SurfaceInterface * get(wl_resource *native)
Definition surface.cpp:819