KWin
Loading...
Searching...
No Matches
xdgdecoration_v1.cpp
Go to the documentation of this file.
1/*
2 SPDX-FileCopyrightText: 2020 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
3
4 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
5*/
6
7#include "xdgdecoration_v1.h"
8#include "display.h"
10#include "xdgshell_p.h"
11
12namespace KWin
13{
14// TODO: We need to wait for an ack_configure either here or in xdgshellclient.cpp.
15
20
22{
23 wl_resource_destroy(resource->handle);
24}
25
27 uint32_t id,
28 ::wl_resource *toplevelResource)
29{
30 XdgToplevelInterfacePrivate *toplevelPrivate = XdgToplevelInterfacePrivate::get(toplevelResource);
31 if (!toplevelPrivate) {
32 wl_resource_post_error(resource->handle, QtWaylandServer::zxdg_toplevel_decoration_v1::error_orphaned, "no xdg-toplevel object");
33 return;
34 }
35
36 if (toplevelPrivate->decoration) {
37 wl_resource_post_error(resource->handle,
38 QtWaylandServer::zxdg_toplevel_decoration_v1::error_already_constructed,
39 "decoration has been already constructed");
40 return;
41 }
42
43 wl_resource *decorationResource = wl_resource_create(resource->client(), &zxdg_toplevel_decoration_v1_interface, resource->version(), id);
44
45 auto decoration = new XdgToplevelDecorationV1Interface(toplevelPrivate->q, decorationResource);
46 toplevelPrivate->decoration = decoration;
47
48 Q_EMIT q->decorationCreated(decoration);
49}
50
52 : QObject(parent)
54{
55 d->init(*display, 1);
56}
57
61
66
71
73{
74 wl_resource_destroy(resource->handle);
75}
76
78{
79 switch (mode) {
80 case mode_client_side:
82 break;
83 case mode_server_side:
85 break;
86 default:
88 break;
89 }
90
92}
93
99
102{
103 d->toplevel = toplevel;
104 d->init(resource);
105}
106
110
112{
113 return d->toplevel;
114}
115
120
122{
123 switch (mode) {
124 case Mode::Client:
125 d->send_configure(QtWaylandServer::zxdg_toplevel_decoration_v1::mode_client_side);
126 break;
127 case Mode::None: // Faked as server_side mode.
128 case Mode::Server:
129 d->send_configure(QtWaylandServer::zxdg_toplevel_decoration_v1::mode_server_side);
130 break;
131 case Mode::Undefined:
132 break;
133 }
134}
135
141
142} // namespace KWin
143
144#include "moc_xdgdecoration_v1.cpp"
Class holding the Wayland server display loop.
Definition display.h:34
XdgDecorationManagerV1Interface(Display *display, QObject *parent=nullptr)
void decorationCreated(XdgToplevelDecorationV1Interface *decoration)
XdgDecorationManagerV1InterfacePrivate(XdgDecorationManagerV1Interface *manager)
void zxdg_decoration_manager_v1_get_toplevel_decoration(Resource *resource, uint32_t id, ::wl_resource *toplevel) override
void zxdg_decoration_manager_v1_destroy(Resource *resource) override
XdgToplevelInterface * toplevel() const
void preferredModeChanged(KWin::XdgToplevelDecorationV1Interface::Mode mode)
static XdgToplevelDecorationV1Interface * get(XdgToplevelInterface *toplevel)
XdgToplevelDecorationV1Interface(XdgToplevelInterface *toplevel, ::wl_resource *resource)
void zxdg_toplevel_decoration_v1_set_mode(Resource *resource, uint32_t mode) override
XdgToplevelDecorationV1Interface::Mode preferredMode
XdgToplevelDecorationV1InterfacePrivate(XdgToplevelDecorationV1Interface *decoration)
void zxdg_toplevel_decoration_v1_destroy(Resource *resource) override
void zxdg_toplevel_decoration_v1_unset_mode(Resource *resource) override
void zxdg_toplevel_decoration_v1_destroy_resource(Resource *resource) override
static XdgToplevelInterfacePrivate * get(XdgToplevelInterface *toplevel)
Definition xdgshell.cpp:507
XdgToplevelInterface * q
Definition xdgshell_p.h:145
QPointer< XdgToplevelDecorationV1Interface > decoration
Definition xdgshell_p.h:147