|
|
48c875 |
From 400c937247380756ab6fa56593edc07dc5c092fc Mon Sep 17 00:00:00 2001
|
|
|
48c875 |
From: Pavel Grunt <pgrunt@redhat.com>
|
|
|
48c875 |
Date: Tue, 9 May 2017 13:53:13 +0200
|
|
|
48c875 |
Subject: [PATCH virt-viewer 30/32] window: Allow to control zoom using keypad
|
|
|
48c875 |
To: virt-tools-list@redhat.com
|
|
|
48c875 |
|
|
|
48c875 |
Support for more than one key combo for accelerator is available
|
|
|
48c875 |
since GTK 3.12 through GAction. It is currently not possible to
|
|
|
48c875 |
use mnemonics also for numpad keys, for more info see:
|
|
|
48c875 |
https://bugzilla.gnome.org/show_bug.cgi?id=699823
|
|
|
48c875 |
|
|
|
48c875 |
Resolves: rhbz#1337575
|
|
|
48c875 |
|
|
|
48c875 |
Reviewed-by: Victor Toso <victortoso@redhat.com>
|
|
|
48c875 |
(cherry picked from commit 701d57742fad8edf40ae53bfcd41f81235fc5d90)
|
|
|
48c875 |
---
|
|
|
48c875 |
configure.ac | 4 ++--
|
|
|
48c875 |
src/virt-viewer-window.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
48c875 |
2 files changed, 58 insertions(+), 2 deletions(-)
|
|
|
48c875 |
|
|
|
48c875 |
diff --git a/configure.ac b/configure.ac
|
|
|
48c875 |
index 3d03687..395659b 100644
|
|
|
48c875 |
--- a/configure.ac
|
|
|
48c875 |
+++ b/configure.ac
|
|
|
48c875 |
@@ -17,8 +17,8 @@ GLIB2_REQUIRED="2.38"
|
|
|
48c875 |
GLIB2_ENCODED_VERSION="GLIB_VERSION_2_38"
|
|
|
48c875 |
|
|
|
48c875 |
# Keep these two definitions in agreement.
|
|
|
48c875 |
-GTK_REQUIRED="3.10"
|
|
|
48c875 |
-GTK_ENCODED_VERSION="GDK_VERSION_3_10"
|
|
|
48c875 |
+GTK_REQUIRED="3.12"
|
|
|
48c875 |
+GTK_ENCODED_VERSION="GDK_VERSION_3_12"
|
|
|
48c875 |
|
|
|
48c875 |
LIBXML2_REQUIRED="2.6.0"
|
|
|
48c875 |
LIBVIRT_REQUIRED="0.10.0"
|
|
|
48c875 |
diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c
|
|
|
48c875 |
index 867a7b0..f5448c6 100644
|
|
|
48c875 |
--- a/src/virt-viewer-window.c
|
|
|
48c875 |
+++ b/src/virt-viewer-window.c
|
|
|
48c875 |
@@ -693,6 +693,45 @@ virt_viewer_window_get_keycombo_menu(VirtViewerWindow *self)
|
|
|
48c875 |
return menu;
|
|
|
48c875 |
}
|
|
|
48c875 |
|
|
|
48c875 |
+static void
|
|
|
48c875 |
+action_zoom_in(G_GNUC_UNUSED GSimpleAction *action,
|
|
|
48c875 |
+ G_GNUC_UNUSED GVariant *state,
|
|
|
48c875 |
+ gpointer user_data)
|
|
|
48c875 |
+{
|
|
|
48c875 |
+ virt_viewer_window_menu_view_zoom_in(NULL, VIRT_VIEWER_WINDOW(user_data));
|
|
|
48c875 |
+}
|
|
|
48c875 |
+
|
|
|
48c875 |
+static void
|
|
|
48c875 |
+action_zoom_out(G_GNUC_UNUSED GSimpleAction *action,
|
|
|
48c875 |
+ G_GNUC_UNUSED GVariant *state,
|
|
|
48c875 |
+ gpointer user_data)
|
|
|
48c875 |
+{
|
|
|
48c875 |
+ virt_viewer_window_menu_view_zoom_out(NULL, VIRT_VIEWER_WINDOW(user_data));
|
|
|
48c875 |
+}
|
|
|
48c875 |
+
|
|
|
48c875 |
+static void
|
|
|
48c875 |
+action_zoom_reset(G_GNUC_UNUSED GSimpleAction *action,
|
|
|
48c875 |
+ G_GNUC_UNUSED GVariant *state,
|
|
|
48c875 |
+ gpointer user_data)
|
|
|
48c875 |
+{
|
|
|
48c875 |
+ virt_viewer_window_menu_view_zoom_reset(NULL, VIRT_VIEWER_WINDOW(user_data));
|
|
|
48c875 |
+}
|
|
|
48c875 |
+
|
|
|
48c875 |
+/* Keep keypad_action_entries and keypad_action_accels in sync */
|
|
|
48c875 |
+static const GActionEntry keypad_action_entries[] = {
|
|
|
48c875 |
+ { .name = "zoom-in", .activate = action_zoom_in },
|
|
|
48c875 |
+ { .name = "zoom-out", .activate = action_zoom_out },
|
|
|
48c875 |
+ { .name = "zoom-reset", .activate = action_zoom_reset },
|
|
|
48c875 |
+};
|
|
|
48c875 |
+
|
|
|
48c875 |
+static const gchar *const keypad_action_accels[][2] = {
|
|
|
48c875 |
+ /* numpad keys are not handled automatically by gtk, see bgo#699823 */
|
|
|
48c875 |
+ {"<control>KP_Add", NULL},
|
|
|
48c875 |
+ {"<control>KP_Subtract", NULL},
|
|
|
48c875 |
+ {"<control>KP_0", NULL},
|
|
|
48c875 |
+};
|
|
|
48c875 |
+G_STATIC_ASSERT(G_N_ELEMENTS(keypad_action_entries) == G_N_ELEMENTS(keypad_action_accels));
|
|
|
48c875 |
+
|
|
|
48c875 |
void
|
|
|
48c875 |
virt_viewer_window_disable_modifiers(VirtViewerWindow *self)
|
|
|
48c875 |
{
|
|
|
48c875 |
@@ -700,6 +739,7 @@ virt_viewer_window_disable_modifiers(VirtViewerWindow *self)
|
|
|
48c875 |
VirtViewerWindowPrivate *priv = self->priv;
|
|
|
48c875 |
GValue empty;
|
|
|
48c875 |
GSList *accels;
|
|
|
48c875 |
+ guint i;
|
|
|
48c875 |
|
|
|
48c875 |
if (!priv->accel_enabled)
|
|
|
48c875 |
return;
|
|
|
48c875 |
@@ -726,6 +766,10 @@ virt_viewer_window_disable_modifiers(VirtViewerWindow *self)
|
|
|
48c875 |
"gtk-enable-mnemonics", FALSE,
|
|
|
48c875 |
NULL);
|
|
|
48c875 |
|
|
|
48c875 |
+ for (i = 0; i < G_N_ELEMENTS(keypad_action_entries); i++) {
|
|
|
48c875 |
+ g_action_map_remove_action(G_ACTION_MAP(priv->window), keypad_action_entries[i].name);
|
|
|
48c875 |
+ }
|
|
|
48c875 |
+
|
|
|
48c875 |
priv->accel_enabled = FALSE;
|
|
|
48c875 |
}
|
|
|
48c875 |
|
|
|
48c875 |
@@ -735,6 +779,7 @@ virt_viewer_window_enable_modifiers(VirtViewerWindow *self)
|
|
|
48c875 |
GtkSettings *settings = gtk_settings_get_default();
|
|
|
48c875 |
VirtViewerWindowPrivate *priv = self->priv;
|
|
|
48c875 |
GSList *accels;
|
|
|
48c875 |
+ guint i;
|
|
|
48c875 |
|
|
|
48c875 |
if (priv->accel_enabled)
|
|
|
48c875 |
return;
|
|
|
48c875 |
@@ -755,6 +800,17 @@ virt_viewer_window_enable_modifiers(VirtViewerWindow *self)
|
|
|
48c875 |
"gtk-enable-mnemonics", priv->enable_mnemonics_save,
|
|
|
48c875 |
NULL);
|
|
|
48c875 |
|
|
|
48c875 |
+ g_action_map_add_action_entries(G_ACTION_MAP(priv->window),
|
|
|
48c875 |
+ keypad_action_entries, G_N_ELEMENTS(keypad_action_entries),
|
|
|
48c875 |
+ self);
|
|
|
48c875 |
+ for (i = 0; i < G_N_ELEMENTS(keypad_action_entries); i++) {
|
|
|
48c875 |
+ gchar *detailed_name = g_strdup_printf("win.%s", keypad_action_entries[i].name);
|
|
|
48c875 |
+ gtk_application_set_accels_for_action(GTK_APPLICATION(priv->app),
|
|
|
48c875 |
+ detailed_name,
|
|
|
48c875 |
+ keypad_action_accels[i]);
|
|
|
48c875 |
+ g_free(detailed_name);
|
|
|
48c875 |
+ }
|
|
|
48c875 |
+
|
|
|
48c875 |
priv->accel_enabled = TRUE;
|
|
|
48c875 |
}
|
|
|
48c875 |
|
|
|
48c875 |
--
|
|
|
48c875 |
2.12.2
|
|
|
48c875 |
|