Hi, On Thu, May 04, 2017 at 01:43:43PM +0200, Pavel Grunt wrote: > Support for more than one key combo for accelerator is available > since GTK 3.12 through GAction. It is currently not possible to > use mnemonics also for numpad keys, for more info see: > https://bugzilla.gnome.org/show_bug.cgi?id=699823 > > Resolves: rhbz#1337575 > --- > configure.ac | 4 ++-- > src/virt-viewer-window.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 58 insertions(+), 2 deletions(-) > > diff --git a/configure.ac b/configure.ac > index 69e3708..d5eb258 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -17,8 +17,8 @@ GLIB2_REQUIRED="2.38" > GLIB2_ENCODED_VERSION="GLIB_VERSION_2_38" > > # Keep these two definitions in agreement. > -GTK_REQUIRED="3.10" > -GTK_ENCODED_VERSION="GDK_VERSION_3_10" > +GTK_REQUIRED="3.12" > +GTK_ENCODED_VERSION="GDK_VERSION_3_12" > > LIBXML2_REQUIRED="2.6.0" > LIBVIRT_REQUIRED="0.10.0" > diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c > index 867a7b0..0948d83 100644 > --- a/src/virt-viewer-window.c > +++ b/src/virt-viewer-window.c > @@ -693,6 +693,45 @@ virt_viewer_window_get_keycombo_menu(VirtViewerWindow *self) > return menu; > } > > +static void > +action_zoom_in(G_GNUC_UNUSED GSimpleAction *action, > + G_GNUC_UNUSED GVariant *state, > + gpointer user_data) > +{ > + virt_viewer_window_menu_view_zoom_in(NULL, VIRT_VIEWER_WINDOW(user_data)); > +} > + > +static void > +action_zoom_out(G_GNUC_UNUSED GSimpleAction *action, > + G_GNUC_UNUSED GVariant *state, > + gpointer user_data) > +{ > + virt_viewer_window_menu_view_zoom_out(NULL, VIRT_VIEWER_WINDOW(user_data)); > +} > + > +static void > +action_zoom_reset(G_GNUC_UNUSED GSimpleAction *action, > + G_GNUC_UNUSED GVariant *state, > + gpointer user_data) > +{ > + virt_viewer_window_menu_view_zoom_reset(NULL, VIRT_VIEWER_WINDOW(user_data)); > +} > + > +/* Keep keypad_action_entries and keypad_action_accels in sync */ > +static const GActionEntry keypad_action_entries[] = { > + {"zoom-in", action_zoom_in,}, > + {"zoom-out", action_zoom_out,}, > + {"zoom-reset", action_zoom_reset,}, > +}; You will need: diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c index 0948d83..f5448c6 100644 --- a/src/virt-viewer-window.c +++ b/src/virt-viewer-window.c @@ -719,9 +719,9 @@ action_zoom_reset(G_GNUC_UNUSED GSimpleAction *action, /* Keep keypad_action_entries and keypad_action_accels in sync */ static const GActionEntry keypad_action_entries[] = { - {"zoom-in", action_zoom_in,}, - {"zoom-out", action_zoom_out,}, - {"zoom-reset", action_zoom_reset,}, + { .name = "zoom-in", .activate = action_zoom_in }, + { .name = "zoom-out", .activate = action_zoom_out }, + { .name = "zoom-reset", .activate = action_zoom_reset }, }; To avoid: virt-viewer-window.c:722:5: warning: missing initializer for field 'parameter_type' of 'GActionEntry {aka const struct _GActionEntry}' [-Wmissing-field-initializers] Other than that, patch looks fine to me. Reviewed-by: Victor Toso <victortoso@xxxxxxxxxx> > + > +static const gchar *const keypad_action_accels[][2] = { > + /* numpad keys are not handled automatically by gtk, see bgo#699823 */ > + {"<control>KP_Add", NULL}, > + {"<control>KP_Subtract", NULL}, > + {"<control>KP_0", NULL}, > +}; > +G_STATIC_ASSERT(G_N_ELEMENTS(keypad_action_entries) == G_N_ELEMENTS(keypad_action_accels)); > + > void > virt_viewer_window_disable_modifiers(VirtViewerWindow *self) > { > @@ -700,6 +739,7 @@ virt_viewer_window_disable_modifiers(VirtViewerWindow *self) > VirtViewerWindowPrivate *priv = self->priv; > GValue empty; > GSList *accels; > + guint i; > > if (!priv->accel_enabled) > return; > @@ -726,6 +766,10 @@ virt_viewer_window_disable_modifiers(VirtViewerWindow *self) > "gtk-enable-mnemonics", FALSE, > NULL); > > + for (i = 0; i < G_N_ELEMENTS(keypad_action_entries); i++) { > + g_action_map_remove_action(G_ACTION_MAP(priv->window), keypad_action_entries[i].name); > + } > + > priv->accel_enabled = FALSE; > } > > @@ -735,6 +779,7 @@ virt_viewer_window_enable_modifiers(VirtViewerWindow *self) > GtkSettings *settings = gtk_settings_get_default(); > VirtViewerWindowPrivate *priv = self->priv; > GSList *accels; > + guint i; > > if (priv->accel_enabled) > return; > @@ -755,6 +800,17 @@ virt_viewer_window_enable_modifiers(VirtViewerWindow *self) > "gtk-enable-mnemonics", priv->enable_mnemonics_save, > NULL); > > + g_action_map_add_action_entries(G_ACTION_MAP(priv->window), > + keypad_action_entries, G_N_ELEMENTS(keypad_action_entries), > + self); > + for (i = 0; i < G_N_ELEMENTS(keypad_action_entries); i++) { > + gchar *detailed_name = g_strdup_printf("win.%s", keypad_action_entries[i].name); > + gtk_application_set_accels_for_action(GTK_APPLICATION(priv->app), > + detailed_name, > + keypad_action_accels[i]); > + g_free(detailed_name); > + } > + > priv->accel_enabled = TRUE; > } > > -- > 2.12.2 > > _______________________________________________ > virt-tools-list mailing list > virt-tools-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/virt-tools-list
Attachment:
signature.asc
Description: PGP signature
_______________________________________________ virt-tools-list mailing list virt-tools-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/virt-tools-list