From 625722cb66955b839150559665b5299edb36eb60 Mon Sep 17 00:00:00 2001 From: Johan Malm Date: Wed, 2 Sep 2020 21:00:28 +0100 Subject: [PATCH] Add view_impl .close --- include/labwc.h | 1 + src/cursor.c | 3 +++ src/xdg.c | 6 ++++++ src/xwl.c | 13 +++++++++---- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/include/labwc.h b/include/labwc.h index cbcabafd..ed8b2a07 100644 --- a/include/labwc.h +++ b/include/labwc.h @@ -106,6 +106,7 @@ enum deco_part { struct view_impl { void (*configure)(struct view *view, struct wlr_box geo); + void (*close)(struct view *view); }; struct view { diff --git a/src/cursor.c b/src/cursor.c index bde81839..5c0abc37 100644 --- a/src/cursor.c +++ b/src/cursor.c @@ -198,6 +198,9 @@ void cursor_button(struct wl_listener *listener, void *data) /* Focus that client if the button was _pressed_ */ view_focus(view); switch (view_area) { + case LAB_DECO_BUTTON_CLOSE: + view->impl->close(view); + break; case LAB_DECO_PART_TITLE: interactive_begin(view, LAB_CURSOR_MOVE, 0); break; diff --git a/src/xdg.c b/src/xdg.c index 5129c1a6..81cbe703 100644 --- a/src/xdg.c +++ b/src/xdg.c @@ -137,8 +137,14 @@ static void xdg_toplevel_view_configure(struct view *view, struct wlr_box geo) (uint32_t)geo.height); } +static void xdg_toplevel_view_close(struct view *view) +{ + wlr_xdg_toplevel_send_close(view->xdg_surface); +} + static const struct view_impl xdg_toplevel_view_impl = { .configure = xdg_toplevel_view_configure, + .close = xdg_toplevel_view_close, }; void xdg_surface_new(struct wl_listener *listener, void *data) diff --git a/src/xwl.c b/src/xwl.c index 91925446..960dc960 100644 --- a/src/xwl.c +++ b/src/xwl.c @@ -82,14 +82,19 @@ void xwl_surface_configure(struct wl_listener *listener, void *data) static void xwl_view_configure(struct view *view, struct wlr_box geo) { - return wlr_xwayland_surface_configure(view->xwayland_surface, - (int16_t)geo.x, (int16_t)geo.y, - (uint16_t)geo.width, - (uint16_t)geo.height); + wlr_xwayland_surface_configure(view->xwayland_surface, (int16_t)geo.x, + (int16_t)geo.y, (uint16_t)geo.width, + (uint16_t)geo.height); +} + +static void xwl_view_close(struct view *view) +{ + wlr_xwayland_surface_close(view->xwayland_surface); } static const struct view_impl xwl_view_impl = { .configure = xwl_view_configure, + .close = xwl_view_close, }; void xwl_surface_new(struct wl_listener *listener, void *data)