diff --git a/hw/xwayland/xwayland-input.c b/hw/xwayland/xwayland-input.c index 0cf6fb65fb906abe7408c251c89194c640e7bf2b..a5181356de8225ea0fe1bc38cc0c4ad13aa4c98d 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 dc520a0c64c0cc2e90c7249ca44e6c3c70c3782d..6a56ac4240b72c2031cd0dd57b8f78d65904f575 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 24147e3fc70ad3be9db852d7ab33f7aa7b9cf669..52edb1d5880e654e3d921840737bbaf30b9e94ae 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);