]> git.mdlowis.com Git - proto/labwc.git/commitdiff
common: add and use CONNECT_SIGNAL macro
authorJohn Lindgren <john@jlindgren.net>
Mon, 16 Oct 2023 06:01:35 +0000 (02:01 -0400)
committerJohan Malm <johanmalm@users.noreply.github.com>
Sat, 21 Oct 2023 11:37:42 +0000 (12:37 +0100)
This makes the code a bit more readable IMHO (and forces us to be
consistent with event handler function names).

Adjust scripts/checkpatch.pl to not complain.

include/common/macros.h
include/xwayland.h
scripts/checkpatch.pl
src/xdg.c
src/xwayland-unmanaged.c
src/xwayland.c

index 0fb62ca6c93e23aa07d4ccd07abc95de0e94751a..dc0eb65dce12e3cf8381138ceb05b6fea0bdb477 100644 (file)
  */
 #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
 
+/**
+ * CONNECT_SIGNAL() - Connect a signal handler function to a wl_signal.
+ *
+ * @param src Signal emitter (struct containing wl_signal)
+ * @param dest Signal receiver (struct containing wl_listener)
+ * @param name Signal name
+ *
+ * This assumes that the common pattern is followed where:
+ *   - the wl_signal is (*src).events.<name>
+ *   - the wl_listener is (*dest).<name>
+ *   - the signal handler function is named handle_<name>
+ */
+#define CONNECT_SIGNAL(src, dest, name) \
+       (dest)->name.notify = handle_##name; \
+       wl_signal_add(&(src)->events.name, &(dest)->name)
+
 #endif /* LABWC_MACROS_H */
index 29c7da0c17e8c2a71c84e6bb956c8b70a9df3974..40b831c8bcb5d1968687908d3edbd12e4baa5226 100644 (file)
@@ -20,7 +20,7 @@ struct xwayland_unmanaged {
        struct wl_listener map;
        struct wl_listener unmap;
        struct wl_listener destroy;
-       struct wl_listener override_redirect;
+       struct wl_listener set_override_redirect;
 };
 
 struct xwayland_view {
@@ -30,9 +30,9 @@ struct xwayland_view {
        /* Events unique to XWayland views */
        struct wl_listener request_activate;
        struct wl_listener request_configure;
-       struct wl_listener set_app_id;          /* TODO: s/set_app_id/class/ */
+       struct wl_listener set_class;
        struct wl_listener set_decorations;
-       struct wl_listener override_redirect;
+       struct wl_listener set_override_redirect;
 
        /* Not (yet) implemented */
 /*     struct wl_listener set_role; */
index e6b701f1145146cd849fcdd2a764898e9ad1ff89..53d6d268b44babaec66a43220adcedc61ed74485 100755 (executable)
@@ -64,6 +64,7 @@ my @ignore = (
        "PREFER_FALLTHROUGH",
        "INITIALISED_STATIC",
        "UNNECESSARY_ELSE",
+       "MACRO_ARG_PRECEDENCE",
 );
 my $help = 0;
 my $configuration_file = ".checkpatch.conf";
index 887761980f469f0a8e3899fe635b499482fcc2b3..6c4a87e827074813149f06fe4d190f7585fbacd2 100644 (file)
--- a/src/xdg.c
+++ b/src/xdg.c
@@ -1,5 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0-only
 #include <assert.h>
+#include "common/macros.h"
 #include "common/mem.h"
 #include "decorations.h"
 #include "labwc.h"
@@ -39,7 +40,7 @@ xdg_toplevel_from_view(struct view *view)
 }
 
 static void
-handle_new_xdg_popup(struct wl_listener *listener, void *data)
+handle_new_popup(struct wl_listener *listener, void *data)
 {
        struct xdg_toplevel_view *xdg_toplevel_view =
                wl_container_of(listener, xdg_toplevel_view, new_popup);
@@ -695,34 +696,21 @@ xdg_surface_new(struct wl_listener *listener, void *data)
        /* In support of xdg popups */
        xdg_surface->surface->data = tree;
 
-       view->map.notify = handle_map;
-       wl_signal_add(&xdg_surface->events.map, &view->map);
-       view->unmap.notify = handle_unmap;
-       wl_signal_add(&xdg_surface->events.unmap, &view->unmap);
-       view->destroy.notify = handle_destroy;
-       wl_signal_add(&xdg_surface->events.destroy, &view->destroy);
+       CONNECT_SIGNAL(xdg_surface, view, map);
+       CONNECT_SIGNAL(xdg_surface, view, unmap);
+       CONNECT_SIGNAL(xdg_surface, view, destroy);
 
        struct wlr_xdg_toplevel *toplevel = xdg_surface->toplevel;
-       view->request_move.notify = handle_request_move;
-       wl_signal_add(&toplevel->events.request_move, &view->request_move);
-       view->request_resize.notify = handle_request_resize;
-       wl_signal_add(&toplevel->events.request_resize, &view->request_resize);
-       view->request_minimize.notify = handle_request_minimize;
-       wl_signal_add(&toplevel->events.request_minimize, &view->request_minimize);
-       view->request_maximize.notify = handle_request_maximize;
-       wl_signal_add(&toplevel->events.request_maximize, &view->request_maximize);
-       view->request_fullscreen.notify = handle_request_fullscreen;
-       wl_signal_add(&toplevel->events.request_fullscreen, &view->request_fullscreen);
-
-       view->set_title.notify = handle_set_title;
-       wl_signal_add(&toplevel->events.set_title, &view->set_title);
+       CONNECT_SIGNAL(toplevel, view, request_move);
+       CONNECT_SIGNAL(toplevel, view, request_resize);
+       CONNECT_SIGNAL(toplevel, view, request_minimize);
+       CONNECT_SIGNAL(toplevel, view, request_maximize);
+       CONNECT_SIGNAL(toplevel, view, request_fullscreen);
+       CONNECT_SIGNAL(toplevel, view, set_title);
 
        /* Events specific to XDG toplevel views */
-       xdg_toplevel_view->set_app_id.notify = handle_set_app_id;
-       wl_signal_add(&toplevel->events.set_app_id, &xdg_toplevel_view->set_app_id);
-
-       xdg_toplevel_view->new_popup.notify = handle_new_xdg_popup;
-       wl_signal_add(&xdg_surface->events.new_popup, &xdg_toplevel_view->new_popup);
+       CONNECT_SIGNAL(toplevel, xdg_toplevel_view, set_app_id);
+       CONNECT_SIGNAL(xdg_surface, xdg_toplevel_view, new_popup);
 
        wl_list_insert(&server->views, &view->link);
 }
index 8c0067bdf46bc9fb21e1c32cd797d221969f0894..95e17086364fa8805e64bc2073adf6ab1889d906 100644 (file)
@@ -2,12 +2,13 @@
 #include <assert.h>
 #include <wlr/xwayland.h>
 #include "common/list.h"
+#include "common/macros.h"
 #include "common/mem.h"
 #include "labwc.h"
 #include "xwayland.h"
 
 static void
-unmanaged_handle_request_configure(struct wl_listener *listener, void *data)
+handle_request_configure(struct wl_listener *listener, void *data)
 {
        struct xwayland_unmanaged *unmanaged =
                wl_container_of(listener, unmanaged, request_configure);
@@ -21,7 +22,7 @@ unmanaged_handle_request_configure(struct wl_listener *listener, void *data)
 }
 
 static void
-unmanaged_handle_set_geometry(struct wl_listener *listener, void *data)
+handle_set_geometry(struct wl_listener *listener, void *data)
 {
        struct xwayland_unmanaged *unmanaged =
                wl_container_of(listener, unmanaged, set_geometry);
@@ -33,7 +34,7 @@ unmanaged_handle_set_geometry(struct wl_listener *listener, void *data)
 }
 
 static void
-unmanaged_handle_map(struct wl_listener *listener, void *data)
+handle_map(struct wl_listener *listener, void *data)
 {
        struct xwayland_unmanaged *unmanaged =
                wl_container_of(listener, unmanaged, map);
@@ -44,8 +45,7 @@ unmanaged_handle_map(struct wl_listener *listener, void *data)
        wlr_xwayland_surface_restack(xsurface, NULL, XCB_STACK_MODE_ABOVE);
        wl_list_append(&unmanaged->server->unmanaged_surfaces, &unmanaged->link);
 
-       wl_signal_add(&xsurface->events.set_geometry, &unmanaged->set_geometry);
-       unmanaged->set_geometry.notify = unmanaged_handle_set_geometry;
+       CONNECT_SIGNAL(xsurface, unmanaged, set_geometry);
 
        if (wlr_xwayland_or_surface_wants_focus(xsurface)) {
                seat_focus_surface(&unmanaged->server->seat, xsurface->surface);
@@ -92,7 +92,7 @@ focus_next_surface(struct server *server, struct wlr_xwayland_surface *xsurface)
 }
 
 static void
-unmanaged_handle_unmap(struct wl_listener *listener, void *data)
+handle_unmap(struct wl_listener *listener, void *data)
 {
        struct xwayland_unmanaged *unmanaged =
                wl_container_of(listener, unmanaged, unmap);
@@ -117,12 +117,12 @@ unmanaged_handle_unmap(struct wl_listener *listener, void *data)
 }
 
 static void
-unmanaged_handle_destroy(struct wl_listener *listener, void *data)
+handle_destroy(struct wl_listener *listener, void *data)
 {
        struct xwayland_unmanaged *unmanaged =
                wl_container_of(listener, unmanaged, destroy);
        wl_list_remove(&unmanaged->request_configure.link);
-       wl_list_remove(&unmanaged->override_redirect.link);
+       wl_list_remove(&unmanaged->set_override_redirect.link);
        wl_list_remove(&unmanaged->request_activate.link);
        wl_list_remove(&unmanaged->map.link);
        wl_list_remove(&unmanaged->unmap.link);
@@ -131,25 +131,25 @@ unmanaged_handle_destroy(struct wl_listener *listener, void *data)
 }
 
 static void
-unmanaged_handle_override_redirect(struct wl_listener *listener, void *data)
+handle_set_override_redirect(struct wl_listener *listener, void *data)
 {
        wlr_log(WLR_DEBUG, "handle unmanaged override_redirect");
        struct xwayland_unmanaged *unmanaged =
-               wl_container_of(listener, unmanaged, override_redirect);
+               wl_container_of(listener, unmanaged, set_override_redirect);
        struct wlr_xwayland_surface *xsurface = unmanaged->xwayland_surface;
        struct server *server = unmanaged->server;
 
        bool mapped = xsurface->mapped;
        if (mapped) {
-               unmanaged_handle_unmap(&unmanaged->unmap, NULL);
+               handle_unmap(&unmanaged->unmap, NULL);
        }
-       unmanaged_handle_destroy(&unmanaged->destroy, NULL);
+       handle_destroy(&unmanaged->destroy, NULL);
 
        xwayland_view_create(server, xsurface, mapped);
 }
 
 static void
-unmanaged_handle_request_activate(struct wl_listener *listener, void *data)
+handle_request_activate(struct wl_listener *listener, void *data)
 {
        wlr_log(WLR_DEBUG, "handle unmanaged request_activate");
        struct xwayland_unmanaged *unmanaged =
@@ -191,29 +191,14 @@ xwayland_unmanaged_create(struct server *server,
         */
        assert(!xsurface->data);
 
-       wl_signal_add(&xsurface->events.request_configure,
-               &unmanaged->request_configure);
-       unmanaged->request_configure.notify =
-               unmanaged_handle_request_configure;
-
-       wl_signal_add(&xsurface->events.map, &unmanaged->map);
-       unmanaged->map.notify = unmanaged_handle_map;
-
-       wl_signal_add(&xsurface->events.unmap, &unmanaged->unmap);
-       unmanaged->unmap.notify = unmanaged_handle_unmap;
-
-       wl_signal_add(&xsurface->events.destroy, &unmanaged->destroy);
-       unmanaged->destroy.notify = unmanaged_handle_destroy;
-
-       wl_signal_add(&xsurface->events.set_override_redirect,
-               &unmanaged->override_redirect);
-       unmanaged->override_redirect.notify = unmanaged_handle_override_redirect;
-
-       wl_signal_add(&xsurface->events.request_activate,
-               &unmanaged->request_activate);
-       unmanaged->request_activate.notify = unmanaged_handle_request_activate;
+       CONNECT_SIGNAL(xsurface, unmanaged, map);
+       CONNECT_SIGNAL(xsurface, unmanaged, unmap);
+       CONNECT_SIGNAL(xsurface, unmanaged, destroy);
+       CONNECT_SIGNAL(xsurface, unmanaged, request_activate);
+       CONNECT_SIGNAL(xsurface, unmanaged, request_configure);
+       CONNECT_SIGNAL(xsurface, unmanaged, set_override_redirect);
 
        if (mapped) {
-               unmanaged_handle_map(&unmanaged->map, xsurface);
+               handle_map(&unmanaged->map, xsurface);
        }
 }
index 74f466c08d07287e0f1dd2035611375723589146..e6dfe5ed9742a348422fee82195729444abdc8f4 100644 (file)
@@ -3,6 +3,7 @@
 #include <assert.h>
 #include <stdlib.h>
 #include <wlr/xwayland.h>
+#include "common/macros.h"
 #include "common/mem.h"
 #include "labwc.h"
 #include "node.h"
@@ -275,9 +276,9 @@ handle_destroy(struct wl_listener *listener, void *data)
        /* Remove XWayland view specific listeners */
        wl_list_remove(&xwayland_view->request_activate.link);
        wl_list_remove(&xwayland_view->request_configure.link);
-       wl_list_remove(&xwayland_view->set_app_id.link);
+       wl_list_remove(&xwayland_view->set_class.link);
        wl_list_remove(&xwayland_view->set_decorations.link);
-       wl_list_remove(&xwayland_view->override_redirect.link);
+       wl_list_remove(&xwayland_view->set_override_redirect.link);
 
        view_destroy(view);
 }
@@ -375,7 +376,7 @@ static void
 handle_set_class(struct wl_listener *listener, void *data)
 {
        struct xwayland_view *xwayland_view =
-               wl_container_of(listener, xwayland_view, set_app_id);
+               wl_container_of(listener, xwayland_view, set_class);
        struct view *view = &xwayland_view->base;
        view_update_app_id(view);
 }
@@ -424,10 +425,10 @@ handle_set_decorations(struct wl_listener *listener, void *data)
 }
 
 static void
-handle_override_redirect(struct wl_listener *listener, void *data)
+handle_set_override_redirect(struct wl_listener *listener, void *data)
 {
        struct xwayland_view *xwayland_view =
-               wl_container_of(listener, xwayland_view, override_redirect);
+               wl_container_of(listener, xwayland_view, set_override_redirect);
        struct view *view = &xwayland_view->base;
        struct wlr_xwayland_surface *xsurface = xwayland_view->xwayland_surface;
 
@@ -782,41 +783,22 @@ xwayland_view_create(struct server *server,
        view->scene_tree = wlr_scene_tree_create(view->workspace->tree);
        node_descriptor_create(&view->scene_tree->node, LAB_NODE_DESC_VIEW, view);
 
-       view->map.notify = handle_map;
-       wl_signal_add(&xsurface->events.map, &view->map);
-       view->unmap.notify = handle_unmap;
-       wl_signal_add(&xsurface->events.unmap, &view->unmap);
-       view->destroy.notify = handle_destroy;
-       wl_signal_add(&xsurface->events.destroy, &view->destroy);
-       view->request_minimize.notify = handle_request_minimize;
-       wl_signal_add(&xsurface->events.request_minimize, &view->request_minimize);
-       view->request_maximize.notify = handle_request_maximize;
-       wl_signal_add(&xsurface->events.request_maximize, &view->request_maximize);
-       view->request_fullscreen.notify = handle_request_fullscreen;
-       wl_signal_add(&xsurface->events.request_fullscreen, &view->request_fullscreen);
-       view->request_move.notify = handle_request_move;
-       wl_signal_add(&xsurface->events.request_move, &view->request_move);
-       view->request_resize.notify = handle_request_resize;
-       wl_signal_add(&xsurface->events.request_resize, &view->request_resize);
-
-       view->set_title.notify = handle_set_title;
-       wl_signal_add(&xsurface->events.set_title, &view->set_title);
+       CONNECT_SIGNAL(xsurface, view, map);
+       CONNECT_SIGNAL(xsurface, view, unmap);
+       CONNECT_SIGNAL(xsurface, view, destroy);
+       CONNECT_SIGNAL(xsurface, view, request_minimize);
+       CONNECT_SIGNAL(xsurface, view, request_maximize);
+       CONNECT_SIGNAL(xsurface, view, request_fullscreen);
+       CONNECT_SIGNAL(xsurface, view, request_move);
+       CONNECT_SIGNAL(xsurface, view, request_resize);
+       CONNECT_SIGNAL(xsurface, view, set_title);
 
        /* Events specific to XWayland views */
-       xwayland_view->request_activate.notify = handle_request_activate;
-       wl_signal_add(&xsurface->events.request_activate, &xwayland_view->request_activate);
-
-       xwayland_view->request_configure.notify = handle_request_configure;
-       wl_signal_add(&xsurface->events.request_configure, &xwayland_view->request_configure);
-
-       xwayland_view->set_app_id.notify = handle_set_class;
-       wl_signal_add(&xsurface->events.set_class, &xwayland_view->set_app_id);
-
-       xwayland_view->set_decorations.notify = handle_set_decorations;
-       wl_signal_add(&xsurface->events.set_decorations, &xwayland_view->set_decorations);
-
-       xwayland_view->override_redirect.notify = handle_override_redirect;
-       wl_signal_add(&xsurface->events.set_override_redirect, &xwayland_view->override_redirect);
+       CONNECT_SIGNAL(xsurface, xwayland_view, request_activate);
+       CONNECT_SIGNAL(xsurface, xwayland_view, request_configure);
+       CONNECT_SIGNAL(xsurface, xwayland_view, set_class);
+       CONNECT_SIGNAL(xsurface, xwayland_view, set_decorations);
+       CONNECT_SIGNAL(xsurface, xwayland_view, set_override_redirect);
 
        wl_list_insert(&view->server->views, &view->link);