Re: [PATCH virt-viewer] Fix key-combo menu not showing up with Gtk3

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Looks good, ACK.

On 03/23/2012 06:20 PM, Marc-André Lureau wrote:
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);
  }




[Index of Archives]     [Linux Virtualization]     [KVM Development]     [CentOS Virtualization]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]     [Video 4 Linux]

  Powered by Linux