From 7a517f3967f64fa9b3214b4099f4aa3454baf1a6 Mon Sep 17 00:00:00 2001 From: Olivier Fourdan <ofourdan@redhat.com> Date: Thu, 28 Apr 2022 15:51:55 +0200 Subject: [PATCH] xwayland: set the surface title when running rootful Set a meaningful title for the xdg_surface, it's nicer when running rootful. Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> Reviewed-by: Adam Jackson <ajax@redhat.com> --- hw/xwayland/xwayland-input.c | 5 +++++ hw/xwayland/xwayland-window.c | 22 ++++++++++++++++++++++ hw/xwayland/xwayland-window.h | 2 ++ 3 files changed, 29 insertions(+) diff --git a/hw/xwayland/xwayland-input.c b/hw/xwayland/xwayland-input.c index 0cf6fb65fb..a5181356de 100644 --- a/hw/xwayland/xwayland-input.c +++ b/hw/xwayland/xwayland-input.c @@ -987,6 +987,7 @@ static void maybe_toggle_fake_grab(struct xwl_seat *xwl_seat, uint32_t key) { struct xwl_screen *xwl_screen = xwl_seat->xwl_screen; + struct xwl_window *xwl_window; XkbStateRec state_rec; uint32_t xkb_state; @@ -1008,6 +1009,10 @@ maybe_toggle_fake_grab(struct xwl_seat *xwl_seat, uint32_t key) maybe_fake_grab_devices(xwl_seat); else maybe_fake_ungrab_devices(xwl_seat); + + xwl_window = xwl_window_get(xwl_screen->screen->root); + if (xwl_window) + xwl_window_rootful_update_title(xwl_window); } } diff --git a/hw/xwayland/xwayland-window.c b/hw/xwayland/xwayland-window.c index dc520a0c64..6a56ac4240 100644 --- a/hw/xwayland/xwayland-window.c +++ b/hw/xwayland/xwayland-window.c @@ -469,6 +469,26 @@ xwl_window_set_fullscreen(struct xwl_window *xwl_window) return TRUE; } +void +xwl_window_rootful_update_title(struct xwl_window *xwl_window) +{ + struct xwl_screen *xwl_screen = xwl_window->xwl_screen; + char title[128]; + const char *grab_message = ""; + + if (xwl_screen->host_grab) { + if (xwl_screen->has_grab) + grab_message = " - ([ctrl]+[shift] releases mouse and keyboard)"; + else + grab_message = " - ([ctrl]+[shift] grabs mouse and keyboard)"; + } + + snprintf(title, sizeof(title), "Xwayland on :%s%s", display, grab_message); + + if (xwl_window->xdg_toplevel) + xdg_toplevel_set_title(xwl_window->xdg_toplevel, title); +} + static void xdg_surface_handle_configure(void *data, struct xdg_surface *xdg_surface, @@ -547,6 +567,8 @@ xwl_create_root_surface(struct xwl_window *xwl_window) xdg_surface_add_listener(xwl_window->xdg_surface, &xdg_surface_listener, xwl_window); + xwl_window_rootful_update_title(xwl_window); + wl_surface_commit(xwl_window->surface); region = wl_compositor_create_region(xwl_screen->compositor); diff --git a/hw/xwayland/xwayland-window.h b/hw/xwayland/xwayland-window.h index 24147e3fc7..52edb1d588 100644 --- a/hw/xwayland/xwayland-window.h +++ b/hw/xwayland/xwayland-window.h @@ -68,8 +68,10 @@ void xwl_window_update_property(struct xwl_window *xwl_window, Bool xwl_window_has_viewport_enabled(struct xwl_window *xwl_window); Bool xwl_window_is_toplevel(WindowPtr window); void xwl_window_check_resolution_change_emulation(struct xwl_window *xwl_window); +void xwl_window_rootful_update_title(struct xwl_window *xwl_window); void xwl_window_set_window_pixmap(WindowPtr window, PixmapPtr pixmap); + Bool xwl_realize_window(WindowPtr window); Bool xwl_unrealize_window(WindowPtr window); Bool xwl_change_window_attributes(WindowPtr window, unsigned long mask); -- GitLab