Hi On Mon, Sep 14, 2026 at 10:51 PM <[email protected]> wrote: > > From: Dongwon Kim <[email protected]> > > The "Grab Input" shortcut key currently fails to trigger when the > window is in fullscreen mode because the menubar is hidden, which > disables GtkAccelMap-based shortcuts associated with it. > > To ensure the accelerator remains active in fullscreen, connect it > directly to s->accel_group and explicitly set the hotkey display on > the menu item label. > > Cc: Marc-André Lureau <[email protected]> > Signed-off-by: Dongwon Kim <[email protected]> > --- > ui/gtk.c | 20 +++++++++++++++----- > 1 file changed, 15 insertions(+), 5 deletions(-) > > diff --git a/ui/gtk.c b/ui/gtk.c > index 3c9720a330..2f83c557d8 100644 > --- a/ui/gtk.c > +++ b/ui/gtk.c > @@ -1878,6 +1878,12 @@ static void gd_menu_grab_input(GtkMenuItem *item, void > *opaque) > gd_update_cursor(vc); > } > > +static void gd_accel_grab_input(void *opaque) > +{
https://docs.gtk.org/gtk3/method.AccelGroup.connect.html The signature used for the closure is that of GtkAccelGroupActivate. This means that other key events could potentially be triggered. It should return true (handled). > + GtkDisplayState *s = opaque; > + gtk_menu_item_activate(GTK_MENU_ITEM(s->grab_item)); > +} > + > static void gd_change_page(GtkNotebook *nb, gpointer arg1, guint arg2, > gpointer data) > { > @@ -2557,6 +2563,7 @@ static void gd_create_menu_view(GtkDisplayState *s, > DisplayOptions *opts) > { > GtkWidget *view_menu; > GtkWidget *separator; > + GtkWidget *child; > QemuConsole *con; > bool zoom_to_fit = false; > int vc, i; > @@ -2615,12 +2622,15 @@ static void gd_create_menu_view(GtkDisplayState *s, > DisplayOptions *opts) > gtk_menu_shell_append(GTK_MENU_SHELL(view_menu), s->grab_on_hover_item); > > s->grab_item = gtk_check_menu_item_new_with_mnemonic(_("_Grab Input")); > - gtk_menu_item_set_accel_path(GTK_MENU_ITEM(s->grab_item), > - "<QEMU>/View/Grab Input"); > - gtk_accel_map_add_entry("<QEMU>/View/Grab Input", GDK_KEY_g, > - HOTKEY_MODIFIERS); > gtk_menu_shell_append(GTK_MENU_SHELL(view_menu), s->grab_item); > - > + gtk_accel_group_connect(s->accel_group, GDK_KEY_g, HOTKEY_MODIFIERS, 0, > + > g_cclosure_new_swap(G_CALLBACK(gd_accel_grab_input), > + s, NULL)); > + child = gtk_bin_get_child(GTK_BIN(s->grab_item)); > + if (GTK_IS_ACCEL_LABEL(child)) { > + gtk_accel_label_set_accel(GTK_ACCEL_LABEL(child), > + GDK_KEY_g, HOTKEY_MODIFIERS); > + } > separator = gtk_separator_menu_item_new(); > gtk_menu_shell_append(GTK_MENU_SHELL(view_menu), separator); > > -- > 2.43.0 > > -- Marc-André Lureau
