[virt-tools-list] [PATCH virt-viewer] Fix key-combo menu not showing up with Gtk3

Marc-André Lureau marcandre.lureau at gmail.com
Fri Mar 23 17:20:42 UTC 2012


For some reason, the behaviour changed between gtk2 and gtk3, the menu
is removed from display when we unref it with gtk3. Keep a ref on
built menu and reuse it until the window is disposed.
---
 src/virt-viewer-window.c |   15 +++++++++++++--
 1 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c
index ec96532..0763481 100644
--- a/src/virt-viewer-window.c
+++ b/src/virt-viewer-window.c
@@ -98,6 +98,7 @@ struct _VirtViewerWindowPrivate {
     GtkWidget *toolbar_usb_device_selection;
     GtkWidget *toolbar_send_key;
     GtkAccelGroup *accel_group;
+    GtkMenu *keycombo_menu;
     VirtViewerNotebook *notebook;
     VirtViewerDisplay *display;
 
@@ -187,6 +188,11 @@ virt_viewer_window_dispose (GObject *object)
         priv->display = NULL;
     }
 
+    if (priv->keycombo_menu) {
+        g_object_unref(priv->keycombo_menu);
+        priv->keycombo_menu = NULL;
+    }
+
     g_free(priv->subtitle);
     priv->subtitle = NULL;
 }
@@ -568,6 +574,10 @@ virt_viewer_window_menu_send(GtkWidget *menu,
 static GtkMenu*
 virt_viewer_window_get_keycombo_menu(VirtViewerWindow *self)
 {
+    if (self->priv->keycombo_menu != NULL) {
+        return self->priv->keycombo_menu;
+    }
+
     gint i;
     GtkMenu *menu = GTK_MENU(gtk_menu_new());
 
@@ -583,7 +593,9 @@ virt_viewer_window_get_keycombo_menu(VirtViewerWindow *self)
     }
 
     gtk_widget_show_all(GTK_WIDGET(menu));
-    return g_object_ref_sink(menu);
+    self->priv->keycombo_menu = g_object_ref_sink(menu);
+
+    return self->priv->keycombo_menu;
 }
 
 static gboolean
@@ -713,7 +725,6 @@ virt_viewer_window_toolbar_send_key(GtkWidget *button G_GNUC_UNUSED,
     GtkMenu *menu = virt_viewer_window_get_keycombo_menu(self);
     gtk_menu_popup(menu, NULL, NULL, keycombo_menu_location, self,
                    0, gtk_get_current_event_time());
-    g_object_unref(menu);
 }
 
 
-- 
1.7.7.6




More information about the virt-tools-list mailing list