[virt-tools-list] [PATCH virt-viewer] Allow to use numpad accelerators for zoom

Pavel Grunt pgrunt at redhat.com
Thu Jan 29 11:07:42 UTC 2015


Resolves https://bugzilla.redhat.com/show_bug.cgi?id=921326
---
 src/virt-gtk-compat.h    |  3 +++
 src/virt-viewer-window.c | 28 ++++++++++++++++++++++++++++
 2 files changed, 31 insertions(+)

diff --git a/src/virt-gtk-compat.h b/src/virt-gtk-compat.h
index 110c17a..99965ff 100644
--- a/src/virt-gtk-compat.h
+++ b/src/virt-gtk-compat.h
@@ -57,6 +57,9 @@ G_BEGIN_DECLS
 #define GDK_0 GDK_KEY_0
 #define GDK_plus GDK_KEY_plus
 #define GDK_minus GDK_KEY_minus
+#define GDK_KP_0 GDK_KEY_KP_0
+#define GDK_KP_Add GDK_KEY_KP_Add
+#define GDK_KP_Subtract GDK_KEY_KP_Subtract
 #endif
 
 #if !GTK_CHECK_VERSION(3, 0, 0)
diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c
index c5f7c75..62f0d86 100644
--- a/src/virt-viewer-window.c
+++ b/src/virt-viewer-window.c
@@ -283,6 +283,33 @@ can_activate_cb (GtkWidget *widget G_GNUC_UNUSED,
 }
 
 static void
+numpad_closure (VirtViewerWindow *self,
+                GObject *acceleratable,
+                guint keyval)
+{
+    if (keyval == GDK_KP_0)
+        virt_viewer_window_menu_view_zoom_reset(GTK_WIDGET(acceleratable), self);
+    else if (keyval == GDK_KP_Add)
+        virt_viewer_window_menu_view_zoom_in(GTK_WIDGET(acceleratable), self);
+    else if (keyval == GDK_KP_Subtract)
+        virt_viewer_window_menu_view_zoom_out(GTK_WIDGET(acceleratable), self);
+}
+
+static void
+add_numpad_accelerators (VirtViewerWindow *self)
+{
+    VirtViewerWindowPrivate *priv = self->priv;
+    g_return_if_fail(VIRT_VIEWER_IS_WINDOW(self));
+
+    gtk_accel_group_connect(priv->accel_group, GDK_KP_0, GDK_CONTROL_MASK, GTK_ACCEL_MASK,
+                            g_cclosure_new_object_swap(G_CALLBACK(numpad_closure), G_OBJECT(self)));
+    gtk_accel_group_connect(priv->accel_group, GDK_KP_Add, GDK_CONTROL_MASK, GTK_ACCEL_MASK,
+                            g_cclosure_new_object_swap(G_CALLBACK(numpad_closure), G_OBJECT(self)));
+    gtk_accel_group_connect(priv->accel_group, GDK_KP_Subtract, GDK_CONTROL_MASK, GTK_ACCEL_MASK,
+                            g_cclosure_new_object_swap(G_CALLBACK(numpad_closure), G_OBJECT(self)));
+}
+
+static void
 virt_viewer_window_init (VirtViewerWindow *self)
 {
     VirtViewerWindowPrivate *priv;
@@ -305,6 +332,7 @@ virt_viewer_window_init (VirtViewerWindow *self)
     gtk_builder_connect_signals(priv->builder, self);
 
     priv->accel_group = GTK_ACCEL_GROUP(gtk_builder_get_object(priv->builder, "accelgroup"));
+    add_numpad_accelerators(self);
 
     /* make sure they can be activated even if the menu item is not visible */
     g_signal_connect(gtk_builder_get_object(priv->builder, "menu-view-fullscreen"),
-- 
1.9.3




More information about the virt-tools-list mailing list