Allow programmatically closing xwayland window

This commit is contained in:
John Good
2020-03-22 18:19:38 +01:00
committed by Daniel Stone
parent b46d0e3304
commit f33ddd0839
3 changed files with 24 additions and 0 deletions
+12
View File
@@ -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
+11
View File
@@ -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
+1
View File
@@ -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 {