From 3c0e010c58e92d4d584b5bba5a837010fadafb5a Mon Sep 17 00:00:00 2001 From: tokyo4j Date: Sun, 23 Nov 2025 14:24:42 +0900 Subject: [PATCH] Remove view_impl->map and view_impl->unmap jlindgren: data parameter to handle_unmap() is NULL --- include/view.h | 3 --- src/view.c | 21 --------------------- src/xdg.c | 11 ++++++----- src/xwayland.c | 20 +++++++++++--------- 4 files changed, 17 insertions(+), 38 deletions(-) diff --git a/include/view.h b/include/view.h index 2d894265..a555a44f 100644 --- a/include/view.h +++ b/include/view.h @@ -106,11 +106,9 @@ struct view_size_hints { struct view_impl { void (*configure)(struct view *view, struct wlr_box geo); void (*close)(struct view *view); - void (*map)(struct view *view); void (*set_activated)(struct view *view, bool activated); void (*set_fullscreen)(struct view *view, bool fullscreen); void (*notify_tiled)(struct view *view); - void (*unmap)(struct view *view); void (*maximize)(struct view *view, enum view_axis maximized); void (*minimize)(struct view *view, bool minimize); struct view *(*get_parent)(struct view *self); @@ -584,7 +582,6 @@ void view_adjust_size(struct view *view, int *w, int *h); void view_evacuate_region(struct view *view); void view_on_output_destroy(struct view *view); -void view_connect_map(struct view *view, struct wlr_surface *surface); void view_update_visibility(struct view *view); void view_init(struct view *view); diff --git a/src/view.c b/src/view.c index f0472289..d2297147 100644 --- a/src/view.c +++ b/src/view.c @@ -2444,27 +2444,6 @@ mappable_disconnect(struct mappable *mappable) mappable->connected = false; } -static void -handle_map(struct wl_listener *listener, void *data) -{ - struct view *view = wl_container_of(listener, view, mappable.map); - view->impl->map(view); -} - -static void -handle_unmap(struct wl_listener *listener, void *data) -{ - struct view *view = wl_container_of(listener, view, mappable.unmap); - view->impl->unmap(view); -} - -void -view_connect_map(struct view *view, struct wlr_surface *surface) -{ - assert(view); - mappable_connect(&view->mappable, surface, handle_map, handle_unmap); -} - /* Used in both (un)map and (un)minimize */ void view_update_visibility(struct view *view) diff --git a/src/xdg.c b/src/xdg.c index 48179a6d..b763c03b 100644 --- a/src/xdg.c +++ b/src/xdg.c @@ -743,8 +743,9 @@ set_initial_position(struct view *view) } static void -xdg_toplevel_view_map(struct view *view) +handle_map(struct wl_listener *listener, void *data) { + struct view *view = wl_container_of(listener, view, mappable.map); if (view->mapped) { return; } @@ -807,8 +808,9 @@ xdg_toplevel_view_map(struct view *view) } static void -xdg_toplevel_view_unmap(struct view *view) +handle_unmap(struct wl_listener *listener, void *data) { + struct view *view = wl_container_of(listener, view, mappable.unmap); if (view->mapped) { view->mapped = false; view_impl_unmap(view); @@ -832,11 +834,9 @@ xdg_view_get_pid(struct view *view) static const struct view_impl xdg_toplevel_view_impl = { .configure = xdg_toplevel_view_configure, .close = xdg_toplevel_view_close, - .map = xdg_toplevel_view_map, .set_activated = xdg_toplevel_view_set_activated, .set_fullscreen = xdg_toplevel_view_set_fullscreen, .notify_tiled = xdg_toplevel_view_notify_tiled, - .unmap = xdg_toplevel_view_unmap, .maximize = xdg_toplevel_view_maximize, .minimize = xdg_toplevel_view_minimize, .get_parent = xdg_toplevel_view_get_parent, @@ -1006,7 +1006,8 @@ handle_new_xdg_toplevel(struct wl_listener *listener, void *data) view->surface = xdg_surface->surface; view->surface->data = tree; - view_connect_map(view, xdg_surface->surface); + mappable_connect(&view->mappable, xdg_surface->surface, + handle_map, handle_unmap); struct wlr_xdg_toplevel *toplevel = xdg_surface->toplevel; CONNECT_SIGNAL(toplevel, view, destroy); diff --git a/src/xwayland.c b/src/xwayland.c index ed974a33..528ee85d 100644 --- a/src/xwayland.c +++ b/src/xwayland.c @@ -39,7 +39,8 @@ static_assert(ARRAY_SIZE(atom_names) == ATOM_COUNT, "atom names out of sync"); static xcb_atom_t atoms[ATOM_COUNT] = {0}; static void set_surface(struct view *view, struct wlr_surface *surface); -static void xwayland_view_unmap(struct view *view); +static void handle_map(struct wl_listener *listener, void *data); +static void handle_unmap(struct wl_listener *listener, void *data); static struct xwayland_view * xwayland_view_from_view(struct view *view) @@ -319,8 +320,9 @@ handle_associate(struct wl_listener *listener, void *data) assert(xwayland_view->xwayland_surface && xwayland_view->xwayland_surface->surface); - view_connect_map(&xwayland_view->base, - xwayland_view->xwayland_surface->surface); + mappable_connect(&xwayland_view->base.mappable, + xwayland_view->xwayland_surface->surface, + handle_map, handle_unmap); } static void @@ -557,7 +559,7 @@ handle_set_override_redirect(struct wl_listener *listener, void *data) struct server *server = view->server; bool mapped = xsurface->surface && xsurface->surface->mapped; if (mapped) { - xwayland_view_unmap(view); + handle_unmap(&view->mappable.unmap, NULL); } handle_destroy(&view->destroy, xsurface); /* view is invalid after this point */ @@ -793,8 +795,9 @@ set_surface(struct view *view, struct wlr_surface *surface) } static void -xwayland_view_map(struct view *view) +handle_map(struct wl_listener *listener, void *data) { + struct view *view = wl_container_of(listener, view, mappable.map); struct xwayland_view *xwayland_view = xwayland_view_from_view(view); struct wlr_xwayland_surface *xwayland_surface = xwayland_view->xwayland_surface; @@ -872,8 +875,9 @@ xwayland_view_map(struct view *view) } static void -xwayland_view_unmap(struct view *view) +handle_unmap(struct wl_listener *listener, void *data) { + struct view *view = wl_container_of(listener, view, mappable.unmap); if (!view->mapped) { return; } @@ -982,10 +986,8 @@ xwayland_view_get_pid(struct view *view) static const struct view_impl xwayland_view_impl = { .configure = xwayland_view_configure, .close = xwayland_view_close, - .map = xwayland_view_map, .set_activated = xwayland_view_set_activated, .set_fullscreen = xwayland_view_set_fullscreen, - .unmap = xwayland_view_unmap, .maximize = xwayland_view_maximize, .minimize = xwayland_view_minimize, .get_parent = xwayland_view_get_parent, @@ -1054,7 +1056,7 @@ xwayland_view_create(struct server *server, handle_associate(&xwayland_view->associate, NULL); } if (mapped) { - xwayland_view_map(view); + handle_map(&xwayland_view->base.mappable.map, NULL); } }