[virt-tools-list] [PATCH virt-viewer v2] window: Allow to control zoom using keypad
Victor Toso
lists at victortoso.com
Fri May 5 12:48:03 UTC 2017
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 at redhat.com>
> +
> +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 at redhat.com
> https://www.redhat.com/mailman/listinfo/virt-tools-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/virt-tools-list/attachments/20170505/8f60bd25/attachment.sig>
More information about the virt-tools-list
mailing list