45 :
public QWaylandShellPrivate
46 ,
public QtWaylandServer::xdg_wm_base
48 Q_DECLARE_PUBLIC(QWaylandXdgShell)
50 QWaylandXdgShellPrivate();
51 void ping(Resource *resource, uint32_t serial);
52 void registerXdgSurface(QWaylandXdgSurface *xdgSurface);
53 void unregisterXdgSurface(QWaylandXdgSurface *xdgSurface);
54 static QWaylandXdgShellPrivate *get(QWaylandXdgShell *xdgShell) {
return xdgShell->d_func(); }
56 QSet<uint32_t> m_pings;
57 QMultiMap<
struct wl_client *, QWaylandXdgSurface *> m_xdgSurfaces;
59 QWaylandXdgSurface *xdgSurfaceFromSurface(QWaylandSurface *surface);
62 void xdg_wm_base_destroy(Resource *resource) override;
63 void xdg_wm_base_create_positioner(Resource *resource, uint32_t id) override;
64 void xdg_wm_base_get_xdg_surface(Resource *resource, uint32_t id,
65 struct ::wl_resource *surface) override;
66 void xdg_wm_base_pong(Resource *resource, uint32_t serial) override;
70 :
public QWaylandShellSurfacePrivate
71 ,
public QtWaylandServer::xdg_surface
73 Q_DECLARE_PUBLIC(QWaylandXdgSurface)
75 QWaylandXdgSurfacePrivate();
76 void setWindowType(Qt::WindowType windowType);
77 void handleFocusLost();
78 void handleFocusReceived();
79 static QWaylandXdgSurfacePrivate *get(QWaylandXdgSurface *xdgSurface) {
return xdgSurface->d_func(); }
81 QRect calculateFallbackWindowGeometry()
const;
82 void updateFallbackWindowGeometry();
85 QWaylandXdgShell *m_xdgShell =
nullptr;
86 QWaylandSurface *m_surface =
nullptr;
88 QWaylandXdgToplevel *m_toplevel =
nullptr;
89 QWaylandXdgPopup *m_popup =
nullptr;
90 QRect m_windowGeometry;
91 bool m_unsetWindowGeometry =
true;
92 QMargins m_windowMargins;
93 Qt::WindowType m_windowType = Qt::WindowType::Window;
95 void xdg_surface_destroy_resource(Resource *resource) override;
96 void xdg_surface_destroy(Resource *resource) override;
97 void xdg_surface_get_toplevel(Resource *resource, uint32_t id) override;
98 void xdg_surface_get_popup(Resource *resource, uint32_t id,
struct ::wl_resource *parent,
struct ::wl_resource *positioner) override;
99 void xdg_surface_ack_configure(Resource *resource, uint32_t serial) override;
100 void xdg_surface_set_window_geometry(Resource *resource, int32_t x, int32_t y, int32_t width, int32_t height) override;
105 Q_DECLARE_PUBLIC(QWaylandXdgToplevel)
107 struct ConfigureEvent {
108 ConfigureEvent() =
default;
109 ConfigureEvent(
const QList<QWaylandXdgToplevel::State>
111 const QSize &incomingSize, uint incomingSerial)
112 : states(incomingStates), size(incomingSize), serial(incomingSerial)
114 QList<QWaylandXdgToplevel::State> states;
119 QWaylandXdgToplevelPrivate(QWaylandXdgSurface *xdgSurface,
const QWaylandResource& resource);
120 ConfigureEvent lastSentConfigure()
const {
return m_pendingConfigures.empty() ? m_lastAckedConfigure : m_pendingConfigures.last(); }
121 void handleAckConfigure(uint serial);
122 void handleFocusLost();
123 void handleFocusReceived();
125 static QWaylandXdgToplevelPrivate *get(QWaylandXdgToplevel *toplevel) {
return toplevel->d_func(); }
126 static Qt::Edges convertToEdges(resize_edge edge);
130 void xdg_toplevel_destroy_resource(Resource *resource) override;
132 void xdg_toplevel_destroy(Resource *resource) override;
133 void xdg_toplevel_set_parent(Resource *resource,
struct ::wl_resource *parent) override;
134 void xdg_toplevel_set_title(Resource *resource,
const QString &title) override;
135 void xdg_toplevel_set_app_id(Resource *resource,
const QString &app_id) override;
136 void xdg_toplevel_show_window_menu(Resource *resource,
struct ::wl_resource *seat, uint32_t serial, int32_t x, int32_t y) override;
137 void xdg_toplevel_move(Resource *resource,
struct ::wl_resource *seatResource, uint32_t serial) override;
138 void xdg_toplevel_resize(Resource *resource,
struct ::wl_resource *seat, uint32_t serial, uint32_t edges) override;
139 void xdg_toplevel_set_max_size(Resource *resource, int32_t width, int32_t height) override;
140 void xdg_toplevel_set_min_size(Resource *resource, int32_t width, int32_t height) override;
141 void xdg_toplevel_set_maximized(Resource *resource) override;
142 void xdg_toplevel_unset_maximized(Resource *resource) override;
143 void xdg_toplevel_set_fullscreen(Resource *resource,
struct ::wl_resource *output) override;
144 void xdg_toplevel_unset_fullscreen(Resource *resource) override;
145 void xdg_toplevel_set_minimized(Resource *resource) override;
148 QWaylandXdgSurface *m_xdgSurface =
nullptr;
149 QWaylandXdgToplevel *m_parentToplevel =
nullptr;
150 QList<ConfigureEvent> m_pendingConfigures;
151 ConfigureEvent m_lastAckedConfigure;
155 QSize m_minSize = {0, 0};
156 QWaylandXdgToplevelDecorationV1 *m_decoration =
nullptr;
157 bool m_modal =
false;
159 static QWaylandSurfaceRole s_role;
164 Q_DECLARE_PUBLIC(QWaylandXdgPopup)
166 struct ConfigureEvent {
171 QWaylandXdgPopupPrivate(QWaylandXdgSurface *xdgSurface, QWaylandXdgSurface *parentXdgSurface,
172 QWaylandXdgPositioner *positioner,
const QWaylandResource& resource);
174 void handleAckConfigure(uint serial);
176 static QWaylandXdgPopupPrivate *get(QWaylandXdgPopup *popup) {
return popup->d_func(); }
178 static QWaylandSurfaceRole s_role;
181 uint sendConfigure(
const QRect &geometry);
184 void xdg_popup_destroy(Resource *resource) override;
185 void xdg_popup_grab(Resource *resource,
struct ::wl_resource *seat, uint32_t serial) override;
188 QWaylandXdgSurface *m_xdgSurface =
nullptr;
189 QWaylandXdgSurface *m_parentXdgSurface =
nullptr;
190 QWaylandXdgPositionerData m_positionerData;
192 QList<ConfigureEvent> m_pendingConfigures;
198 QWaylandXdgPositioner(
const QWaylandResource& resource);
199 static QWaylandXdgPositioner *fromResource(wl_resource *resource);
200 static Qt::Edges convertToEdges(anchor anchor);
201 static Qt::Edges convertToEdges(gravity gravity);
204 void xdg_positioner_destroy_resource(Resource *resource) override;
206 void xdg_positioner_destroy(Resource *resource) override;
207 void xdg_positioner_set_size(Resource *resource, int32_t width, int32_t height) override;
208 void xdg_positioner_set_anchor_rect(Resource *resource, int32_t x, int32_t y, int32_t width, int32_t height) override;
209 void xdg_positioner_set_anchor(Resource *resource, uint32_t anchor) override;
210 void xdg_positioner_set_gravity(Resource *resource, uint32_t gravity) override;
211 void xdg_positioner_set_constraint_adjustment(Resource *resource, uint32_t constraint_adjustment) override;
212 void xdg_positioner_set_offset(Resource *resource, int32_t x, int32_t y) override;
215 QWaylandXdgPositionerData m_data;