KWin
Loading...
Searching...
No Matches
screenedge_v1.cpp
Go to the documentation of this file.
1/*
2 SPDX-FileCopyrightText: 2023 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
8#include "wayland/display.h"
9#include "wayland/surface.h"
10
11#include "qwayland-server-kde-screen-edge-v1.h"
12
13#include <QPointer>
14
15namespace KWin
16{
17
18static const int s_version = 1;
19
20class ScreenEdgeManagerV1InterfacePrivate : public QtWaylandServer::kde_screen_edge_manager_v1
21{
22public:
24
26
27protected:
28 void kde_screen_edge_manager_v1_destroy(Resource *resource) override;
29 void kde_screen_edge_manager_v1_get_auto_hide_screen_edge(Resource *resource, uint32_t id, uint32_t border, struct ::wl_resource *surface) override;
30};
31
33 : QtWaylandServer::kde_screen_edge_manager_v1(*display, s_version)
34 , q(q)
35{
36}
37
39{
40 wl_resource_destroy(resource->handle);
41}
42
43void ScreenEdgeManagerV1InterfacePrivate::kde_screen_edge_manager_v1_get_auto_hide_screen_edge(Resource *resource, uint32_t id, uint32_t border, struct ::wl_resource *surface_resource)
44{
45 ElectricBorder electricBorder;
46 switch (border) {
47 case border_top:
48 electricBorder = ElectricTop;
49 break;
50 case border_bottom:
51 electricBorder = ElectricBottom;
52 break;
53 case border_left:
54 electricBorder = ElectricLeft;
55 break;
56 case border_right:
57 electricBorder = ElectricRight;
58 break;
59 default:
60 wl_resource_post_error(resource->handle, error_invalid_border, "invalid border");
61 return;
62 }
63
64 SurfaceInterface *surface = SurfaceInterface::get(surface_resource);
65 const SurfaceRole *role = surface->role();
66 if (!role || role->name() != "layer_surface_v1") {
67 wl_resource_post_error(resource->handle, error_invalid_role, "surface must have layer_surface role");
68 return;
69 }
70
71 wl_resource *edgeResource = wl_resource_create(resource->client(), &kde_auto_hide_screen_edge_v1_interface, resource->version(), id);
72 auto edge = new AutoHideScreenEdgeV1Interface(surface, electricBorder, edgeResource);
73 Q_EMIT q->edgeRequested(edge);
74}
75
80
84
85class AutoHideScreenEdgeV1InterfacePrivate : public QtWaylandServer::kde_auto_hide_screen_edge_v1
86{
87public:
89
91 QPointer<SurfaceInterface> surface;
93
94protected:
95 void kde_auto_hide_screen_edge_v1_destroy_resource(Resource *resource) override;
96 void kde_auto_hide_screen_edge_v1_destroy(Resource *resource) override;
97 void kde_auto_hide_screen_edge_v1_deactivate(Resource *resource) override;
98 void kde_auto_hide_screen_edge_v1_activate(Resource *resource) override;
99};
100
102 : QtWaylandServer::kde_auto_hide_screen_edge_v1(resource)
103 , q(q)
104 , surface(surface)
105 , border(border)
106{
107}
108
113
115{
116 wl_resource_destroy(resource->handle);
117}
118
123
128
130 : d(new AutoHideScreenEdgeV1InterfacePrivate(this, surface, border, resource))
131{
132}
133
137
139{
140 return d->surface;
141}
142
144{
145 return d->border;
146}
147
148} // namespace KWin
149
150#include "moc_screenedge_v1.cpp"
AutoHideScreenEdgeV1Interface(SurfaceInterface *surface, ElectricBorder border, wl_resource *resource)
SurfaceInterface * surface() const
void kde_auto_hide_screen_edge_v1_destroy(Resource *resource) override
AutoHideScreenEdgeV1InterfacePrivate(AutoHideScreenEdgeV1Interface *q, SurfaceInterface *surface, ElectricBorder border, wl_resource *resource)
void kde_auto_hide_screen_edge_v1_destroy_resource(Resource *resource) override
void kde_auto_hide_screen_edge_v1_deactivate(Resource *resource) override
void kde_auto_hide_screen_edge_v1_activate(Resource *resource) override
AutoHideScreenEdgeV1Interface * q
Class holding the Wayland server display loop.
Definition display.h:34
ScreenEdgeManagerV1Interface(Display *display, QObject *parent=nullptr)
void edgeRequested(AutoHideScreenEdgeV1Interface *edge)
void kde_screen_edge_manager_v1_get_auto_hide_screen_edge(Resource *resource, uint32_t id, uint32_t border, struct ::wl_resource *surface) override
void kde_screen_edge_manager_v1_destroy(Resource *resource) override
ScreenEdgeManagerV1InterfacePrivate(ScreenEdgeManagerV1Interface *q, Display *display)
ScreenEdgeManagerV1Interface * q
Resource representing a wl_surface.
Definition surface.h:80
static SurfaceInterface * get(wl_resource *native)
Definition surface.cpp:819
SurfaceRole * role() const
Definition surface.cpp:429
QByteArray name() const
Definition surface.cpp:51
ElectricBorder
Definition globals.h:60
@ ElectricBottom
Definition globals.h:65
@ ElectricTop
Definition globals.h:61
@ ElectricRight
Definition globals.h:63
@ ElectricLeft
Definition globals.h:67