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

Reply via email to