44 :
public QWaylandShellPrivate
45 ,
public QtWaylandServer::xdg_wm_base
47 Q_DECLARE_PUBLIC(QWaylandXdgShell)
49 QWaylandXdgShellPrivate();
50 void ping(Resource *resource, uint32_t serial);
51 void registerXdgSurface(QWaylandXdgSurface *xdgSurface);
52 void unregisterXdgSurface(QWaylandXdgSurface *xdgSurface);
53 static QWaylandXdgShellPrivate *get(QWaylandXdgShell *xdgShell) {
return xdgShell->d_func(); }
55 QSet<uint32_t> m_pings;
56 QMultiMap<
struct wl_client *, QWaylandXdgSurface *> m_xdgSurfaces;
58 QWaylandXdgSurface *xdgSurfaceFromSurface(QWaylandSurface *surface);
61 void xdg_wm_base_destroy(Resource *resource) override;
62 void xdg_wm_base_create_positioner(Resource *resource, uint32_t id) override;
63 void xdg_wm_base_get_xdg_surface(Resource *resource, uint32_t id,
64 struct ::wl_resource *surface) override;
65 void xdg_wm_base_pong(Resource *resource, uint32_t serial) override;
69 :
public QWaylandShellSurfacePrivate
70 ,
public QtWaylandServer::xdg_surface
72 Q_DECLARE_PUBLIC(QWaylandXdgSurface)
74 QWaylandXdgSurfacePrivate();
75 void setWindowType(Qt::WindowType windowType);
76 void handleFocusLost();
77 void handleFocusReceived();
78 static QWaylandXdgSurfacePrivate *get(QWaylandXdgSurface *xdgSurface) {
return xdgSurface->d_func(); }
80 QRect calculateFallbackWindowGeometry()
const;
81 void updateFallbackWindowGeometry();
84 QWaylandXdgShell *m_xdgShell =
nullptr;
85 QWaylandSurface *m_surface =
nullptr;
87 QWaylandXdgToplevel *m_toplevel =
nullptr;
88 QWaylandXdgPopup *m_popup =
nullptr;
89 QRect m_windowGeometry;
90 bool m_unsetWindowGeometry =
true;
91 QMargins m_windowMargins;
92 Qt::WindowType m_windowType = Qt::WindowType::Window;
94 void xdg_surface_destroy_resource(Resource *resource) override;
95 void xdg_surface_destroy(Resource *resource) override;
96 void xdg_surface_get_toplevel(Resource *resource, uint32_t id) override;
97 void xdg_surface_get_popup(Resource *resource, uint32_t id,
struct ::wl_resource *parent,
struct ::wl_resource *positioner) override;
98 void xdg_surface_ack_configure(Resource *resource, uint32_t serial) override;
99 void xdg_surface_set_window_geometry(Resource *resource, int32_t x, int32_t y, int32_t width, int32_t height) override;
104 Q_DECLARE_PUBLIC(QWaylandXdgToplevel)
106 struct ConfigureEvent {
107 ConfigureEvent() =
default;
108 ConfigureEvent(
const QList<QWaylandXdgToplevel::State>
110 const QSize &incomingSize, uint incomingSerial)
111 : states(incomingStates), size(incomingSize), serial(incomingSerial)
113 QList<QWaylandXdgToplevel::State> states;
118 QWaylandXdgToplevelPrivate(QWaylandXdgSurface *xdgSurface,
const QWaylandResource& resource);
119 ConfigureEvent lastSentConfigure()
const {
return m_pendingConfigures.empty() ? m_lastAckedConfigure : m_pendingConfigures.last(); }
120 void handleAckConfigure(uint serial);
121 void handleFocusLost();
122 void handleFocusReceived();
124 static QWaylandXdgToplevelPrivate *get(QWaylandXdgToplevel *toplevel) {
return toplevel->d_func(); }
125 static Qt::Edges convertToEdges(resize_edge edge);
129 void xdg_toplevel_destroy_resource(Resource *resource) override;
131 void xdg_toplevel_destroy(Resource *resource) override;
132 void xdg_toplevel_set_parent(Resource *resource,
struct ::wl_resource *parent) override;
133 void xdg_toplevel_set_title(Resource *resource,
const QString &title) override;
134 void xdg_toplevel_set_app_id(Resource *resource,
const QString &app_id) override;
135 void xdg_toplevel_show_window_menu(Resource *resource,
struct ::wl_resource *seat, uint32_t serial, int32_t x, int32_t y) override;
136 void xdg_toplevel_move(Resource *resource,
struct ::wl_resource *seatResource, uint32_t serial) override;
137 void xdg_toplevel_resize(Resource *resource,
struct ::wl_resource *seat, uint32_t serial, uint32_t edges) override;
138 void xdg_toplevel_set_max_size(Resource *resource, int32_t width, int32_t height) override;
139 void xdg_toplevel_set_min_size(Resource *resource, int32_t width, int32_t height) override;
140 void xdg_toplevel_set_maximized(Resource *resource) override;
141 void xdg_toplevel_unset_maximized(Resource *resource) override;
142 void xdg_toplevel_set_fullscreen(Resource *resource,
struct ::wl_resource *output) override;
143 void xdg_toplevel_unset_fullscreen(Resource *resource) override;
144 void xdg_toplevel_set_minimized(Resource *resource) override;
147 QWaylandXdgSurface *m_xdgSurface =
nullptr;
148 QWaylandXdgToplevel *m_parentToplevel =
nullptr;
149 QList<ConfigureEvent> m_pendingConfigures;
150 ConfigureEvent m_lastAckedConfigure;
154 QSize m_minSize = {0, 0};
155 QWaylandXdgToplevelDecorationV1 *m_decoration =
nullptr;
156 bool m_modal =
false;
158 static QWaylandSurfaceRole s_role;
163 Q_DECLARE_PUBLIC(QWaylandXdgPopup)
165 struct ConfigureEvent {
170 QWaylandXdgPopupPrivate(QWaylandXdgSurface *xdgSurface, QWaylandXdgSurface *parentXdgSurface,
171 QWaylandXdgPositioner *positioner,
const QWaylandResource& resource);
173 void handleAckConfigure(uint serial);
175 static QWaylandXdgPopupPrivate *get(QWaylandXdgPopup *popup) {
return popup->d_func(); }
177 static QWaylandSurfaceRole s_role;
180 uint sendConfigure(
const QRect &geometry);
183 void xdg_popup_destroy(Resource *resource) override;
184 void xdg_popup_grab(Resource *resource,
struct ::wl_resource *seat, uint32_t serial) override;
187 QWaylandXdgSurface *m_xdgSurface =
nullptr;
188 QWaylandXdgSurface *m_parentXdgSurface =
nullptr;
189 QWaylandXdgPositionerData m_positionerData;
191 QList<ConfigureEvent> m_pendingConfigures;
197 QWaylandXdgPositioner(
const QWaylandResource& resource);
198 static QWaylandXdgPositioner *fromResource(wl_resource *resource);
199 static Qt::Edges convertToEdges(anchor anchor);
200 static Qt::Edges convertToEdges(gravity gravity);
203 void xdg_positioner_destroy_resource(Resource *resource) override;
205 void xdg_positioner_destroy(Resource *resource) override;
206 void xdg_positioner_set_size(Resource *resource, int32_t width, int32_t height) override;
207 void xdg_positioner_set_anchor_rect(Resource *resource, int32_t x, int32_t y, int32_t width, int32_t height) override;
208 void xdg_positioner_set_anchor(Resource *resource, uint32_t anchor) override;
209 void xdg_positioner_set_gravity(Resource *resource, uint32_t gravity) override;
210 void xdg_positioner_set_constraint_adjustment(Resource *resource, uint32_t constraint_adjustment) override;
211 void xdg_positioner_set_offset(Resource *resource, int32_t x, int32_t y) override;
214 QWaylandXdgPositionerData m_data;