Hi Marc-André,
> Subject: Re: [PATCH 2/2] ui/gtk: register "Grab Input" shortcut to accel_group
>
> 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).
Yeah This will be updated in v2.
Thanks,
DW
>
>
> > + 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