]> git.mdlowis.com Git - proto/labwc.git/commitdiff
Decorations: minor refactoring, no logical changes intended
authorConsolatis <35009135+Consolatis@users.noreply.github.com>
Thu, 23 Mar 2023 19:55:14 +0000 (20:55 +0100)
committerJohan Malm <johanmalm@users.noreply.github.com>
Sat, 25 Mar 2023 07:24:40 +0000 (07:24 +0000)
include/decorations.h [new file with mode: 0644]
include/labwc.h
src/decorations/xdg-deco.c
src/server.c

diff --git a/include/decorations.h b/include/decorations.h
new file mode 100644 (file)
index 0000000..bad8569
--- /dev/null
@@ -0,0 +1,9 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+#ifndef __LAB_DECORATIONS_H
+#define __LAB_DECORATIONS_H
+
+struct server;
+
+void xdg_server_decoration_init(struct server *server);
+
+#endif /* __LAB_DECORATIONS_H */
index c3bdfd8fe68b77c3d8a8516ecc02b3149f17d869..718162bbce9013966d230dab30f70169daefd528 100644 (file)
@@ -38,7 +38,6 @@
 #include <wlr/types/wlr_subcompositor.h>
 #include <wlr/types/wlr_xcursor_manager.h>
 #include <wlr/types/wlr_xdg_activation_v1.h>
-#include <wlr/types/wlr_xdg_decoration_v1.h>
 #include <wlr/types/wlr_xdg_shell.h>
 #include <wlr/types/wlr_drm_lease_v1.h>
 #include <wlr/types/wlr_virtual_pointer_v1.h>
@@ -349,8 +348,6 @@ struct idle_inhibitor {
 
 void xdg_popup_create(struct view *view, struct wlr_xdg_popup *wlr_popup);
 
-void xdg_toplevel_decoration(struct wl_listener *listener, void *data);
-
 void xdg_activation_handle_request(struct wl_listener *listener, void *data);
 
 void xdg_surface_new(struct wl_listener *listener, void *data);
index 3e0a5abfb764172d5fa0c562401a9effc544db1d..38181eb332167eaf78301d3e8ead9a2f5408b0d8 100644 (file)
@@ -1,11 +1,12 @@
 // SPDX-License-Identifier: GPL-2.0-only
+#include <wlr/types/wlr_xdg_decoration_v1.h>
 #include "common/mem.h"
+#include "decorations.h"
 #include "labwc.h"
 #include "view.h"
 
 struct xdg_deco {
-       struct wlr_xdg_toplevel_decoration_v1 *wlr_decoration;
-       struct server *server;
+       struct wlr_xdg_toplevel_decoration_v1 *wlr_xdg_decoration;
        struct view *view;
        struct wl_listener destroy;
        struct wl_listener request_mode;
@@ -14,8 +15,7 @@ struct xdg_deco {
 static void
 xdg_deco_destroy(struct wl_listener *listener, void *data)
 {
-       struct xdg_deco *xdg_deco =
-               wl_container_of(listener, xdg_deco, destroy);
+       struct xdg_deco *xdg_deco = wl_container_of(listener, xdg_deco, destroy);
        wl_list_remove(&xdg_deco->destroy.link);
        wl_list_remove(&xdg_deco->request_mode.link);
        free(xdg_deco);
@@ -26,7 +26,7 @@ xdg_deco_request_mode(struct wl_listener *listener, void *data)
 {
        struct xdg_deco *xdg_deco = wl_container_of(listener, xdg_deco, request_mode);
        enum wlr_xdg_toplevel_decoration_v1_mode client_mode =
-               xdg_deco->wlr_decoration->requested_mode;
+               xdg_deco->wlr_xdg_decoration->requested_mode;
 
        switch (client_mode) {
        case WLR_XDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE:
@@ -42,30 +42,52 @@ xdg_deco_request_mode(struct wl_listener *listener, void *data)
                        : WLR_XDG_TOPLEVEL_DECORATION_V1_MODE_CLIENT_SIDE;
                break;
        default:
-               wlr_log(WLR_ERROR, "Unspecified decoration variant requested: %u",
-                       client_mode);
+               wlr_log(WLR_ERROR, "Unspecified xdg decoration variant "
+                       "requested: %u", client_mode);
        }
 
-       wlr_xdg_toplevel_decoration_v1_set_mode(xdg_deco->wlr_decoration, client_mode);
+       wlr_xdg_toplevel_decoration_v1_set_mode(xdg_deco->wlr_xdg_decoration,
+               client_mode);
        view_set_decorations(xdg_deco->view,
                client_mode == WLR_XDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE);
 }
 
-void
+static void
 xdg_toplevel_decoration(struct wl_listener *listener, void *data)
 {
-       struct server *server =
-               wl_container_of(listener, server, xdg_toplevel_decoration);
-       struct wlr_xdg_toplevel_decoration_v1 *wlr_decoration = data;
+       struct wlr_xdg_toplevel_decoration_v1 *wlr_xdg_decoration = data;
+       struct wlr_xdg_surface *xdg_surface = wlr_xdg_decoration->surface;
+       if (!xdg_surface || !xdg_surface->data) {
+               wlr_log(WLR_ERROR,
+                       "Invalid surface supplied for xdg decorations");
+               return;
+       }
+
        struct xdg_deco *xdg_deco = znew(*xdg_deco);
-       xdg_deco->wlr_decoration = wlr_decoration;
-       xdg_deco->server = server;
-       xdg_deco->view = wlr_decoration->surface->data;
+       xdg_deco->wlr_xdg_decoration = wlr_xdg_decoration;
+       xdg_deco->view = (struct view *)xdg_surface->data;
+
+       wl_signal_add(&wlr_xdg_decoration->events.destroy, &xdg_deco->destroy);
        xdg_deco->destroy.notify = xdg_deco_destroy;
-       wl_signal_add(&wlr_decoration->events.destroy, &xdg_deco->destroy);
-       xdg_deco->request_mode.notify = xdg_deco_request_mode;
-       wl_signal_add(&wlr_decoration->events.request_mode,
+
+       wl_signal_add(&wlr_xdg_decoration->events.request_mode,
                &xdg_deco->request_mode);
+       xdg_deco->request_mode.notify = xdg_deco_request_mode;
+
+       xdg_deco_request_mode(&xdg_deco->request_mode, wlr_xdg_decoration);
+}
+
+void
+xdg_server_decoration_init(struct server *server)
+{
+       struct wlr_xdg_decoration_manager_v1 *xdg_deco_mgr = NULL;
+       xdg_deco_mgr = wlr_xdg_decoration_manager_v1_create(server->wl_display);
+       if (!xdg_deco_mgr) {
+               wlr_log(WLR_ERROR, "unable to create the XDG deco manager");
+               exit(EXIT_FAILURE);
+       }
 
-       xdg_deco_request_mode(&xdg_deco->request_mode, wlr_decoration);
+       wl_signal_add(&xdg_deco_mgr->events.new_toplevel_decoration,
+               &server->xdg_toplevel_decoration);
+       server->xdg_toplevel_decoration.notify = xdg_toplevel_decoration;
 }
index bf74b871389a915fdf8bf6914193421376742f3b..ffae132e11c9af4411d18b93ad57e5c9895819e8 100644 (file)
@@ -18,6 +18,7 @@
 #include "drm-lease-v1-protocol.h"
 #include "config/rcxml.h"
 #include "config/session.h"
+#include "decorations.h"
 #include "labwc.h"
 #include "layers.h"
 #include "menu/menu.h"
@@ -310,16 +311,7 @@ server_init(struct server *server)
                &server->new_xdg_surface);
 
        /* Disable CSD */
-       struct wlr_xdg_decoration_manager_v1 *xdg_deco_mgr = NULL;
-       xdg_deco_mgr = wlr_xdg_decoration_manager_v1_create(server->wl_display);
-       if (!xdg_deco_mgr) {
-               wlr_log(WLR_ERROR, "unable to create the XDG deco manager");
-               exit(EXIT_FAILURE);
-       }
-       wl_signal_add(&xdg_deco_mgr->events.new_toplevel_decoration,
-               &server->xdg_toplevel_decoration);
-       server->xdg_toplevel_decoration.notify = xdg_toplevel_decoration;
-
+       xdg_server_decoration_init(server);
        struct wlr_server_decoration_manager *deco_mgr = NULL;
        deco_mgr = wlr_server_decoration_manager_create(server->wl_display);
        if (!deco_mgr) {