Allow programmatically closing xwayland window

dev
John Good 5 years ago committed by Daniel Stone
parent b46d0e3304
commit f33ddd0839
  1. 12
      libweston-desktop/xwayland.c
  2. 11
      xwayland/window-manager.c
  3. 1
      xwayland/xwayland-internal-interface.h

@ -193,6 +193,17 @@ weston_desktop_xwayland_surface_destroy(struct weston_desktop_surface *dsurface,
free(surface); free(surface);
} }
static void
weston_desktop_xwayland_surface_close(struct weston_desktop_surface *dsurface,
void *user_data)
{
struct weston_desktop_xwayland_surface *surface = user_data;
struct weston_surface *wsurface =
weston_desktop_surface_get_surface(surface->surface);
surface->client_interface->send_close(wsurface);
}
static bool static bool
weston_desktop_xwayland_surface_get_maximized(struct weston_desktop_surface *dsurface, weston_desktop_xwayland_surface_get_maximized(struct weston_desktop_surface *dsurface,
void *user_data) void *user_data)
@ -219,6 +230,7 @@ static const struct weston_desktop_surface_implementation weston_desktop_xwaylan
.get_fullscreen = weston_desktop_xwayland_surface_get_fullscreen, .get_fullscreen = weston_desktop_xwayland_surface_get_fullscreen,
.destroy = weston_desktop_xwayland_surface_destroy, .destroy = weston_desktop_xwayland_surface_destroy,
.close = weston_desktop_xwayland_surface_close,
}; };
static void static void

@ -2783,6 +2783,16 @@ send_configure(struct weston_surface *surface, int32_t width, int32_t height)
weston_wm_window_configure, window); weston_wm_window_configure, window);
} }
static void
send_close(struct weston_surface *surface)
{
struct weston_wm_window *window = get_wm_window(surface);
if (!window || !window->wm)
return;
weston_wm_window_close(window, XCB_CURRENT_TIME);
xcb_flush(window->wm->conn);
}
static void static void
send_position(struct weston_surface *surface, int32_t x, int32_t y) send_position(struct weston_surface *surface, int32_t x, int32_t y)
{ {
@ -2812,6 +2822,7 @@ send_position(struct weston_surface *surface, int32_t x, int32_t y)
static const struct weston_xwayland_client_interface shell_client = { static const struct weston_xwayland_client_interface shell_client = {
send_configure, send_configure,
send_close,
}; };
static int static int

@ -31,6 +31,7 @@ struct weston_desktop_xwayland_surface;
struct weston_xwayland_client_interface { struct weston_xwayland_client_interface {
void (*send_configure)(struct weston_surface *surface, int32_t width, int32_t height); void (*send_configure)(struct weston_surface *surface, int32_t width, int32_t height);
void (*send_close)(struct weston_surface *surface);
}; };
struct weston_desktop_xwayland_interface { struct weston_desktop_xwayland_interface {

Loading…
Cancel
Save