[gtk+] Fixed GtkMenuShell to deactivate itself at dispose time



commit 6716e7c3f1925560a5b4901581cabbaee4e01e28
Author: Tristan Van Berkom <tristan van berkom gmail com>
Date:   Thu Nov 25 14:04:52 2010 +0900

    Fixed GtkMenuShell to deactivate itself at dispose time
    
    Since GdkDevice stuff, it seems that destroying an active
    menu doesnt get rid of all the device grabery, this fixes
    bug 635693.

 gtk/gtkmenu.c      |    7 +++++--
 gtk/gtkmenushell.c |   12 ++++++++++++
 2 files changed, 17 insertions(+), 2 deletions(-)
---
diff --git a/gtk/gtkmenu.c b/gtk/gtkmenu.c
index 3032f3b..13998ee 100644
--- a/gtk/gtkmenu.c
+++ b/gtk/gtkmenu.c
@@ -1760,8 +1760,11 @@ gtk_menu_popdown (GtkMenu *menu)
   
   /* The X Grab, if present, will automatically be removed when we hide
    * the window */
-  gtk_widget_hide (menu->toplevel);
-  gtk_window_set_transient_for (GTK_WINDOW (menu->toplevel), NULL);
+  if (menu->toplevel)
+    {
+      gtk_widget_hide (menu->toplevel);
+      gtk_window_set_transient_for (GTK_WINDOW (menu->toplevel), NULL);
+    }
 
   pointer = _gtk_menu_shell_get_grab_device (menu_shell);
 
diff --git a/gtk/gtkmenushell.c b/gtk/gtkmenushell.c
index d630cdd..7b94ce9 100644
--- a/gtk/gtkmenushell.c
+++ b/gtk/gtkmenushell.c
@@ -153,6 +153,7 @@ static void gtk_menu_shell_get_property      (GObject           *object,
                                               GParamSpec        *pspec);
 static void gtk_menu_shell_realize           (GtkWidget         *widget);
 static void gtk_menu_shell_finalize          (GObject           *object);
+static void gtk_menu_shell_dispose           (GObject           *object);
 static gint gtk_menu_shell_button_press      (GtkWidget         *widget,
 					      GdkEventButton    *event);
 static gint gtk_menu_shell_button_release    (GtkWidget         *widget,
@@ -222,6 +223,7 @@ gtk_menu_shell_class_init (GtkMenuShellClass *klass)
   object_class->set_property = gtk_menu_shell_set_property;
   object_class->get_property = gtk_menu_shell_get_property;
   object_class->finalize = gtk_menu_shell_finalize;
+  object_class->dispose = gtk_menu_shell_dispose;
 
   widget_class->realize = gtk_menu_shell_realize;
   widget_class->button_press_event = gtk_menu_shell_button_press;
@@ -463,6 +465,16 @@ gtk_menu_shell_finalize (GObject *object)
 }
 
 
+static void 
+gtk_menu_shell_dispose (GObject           *object)
+{
+  GtkMenuShell *menu_shell = GTK_MENU_SHELL (object);
+
+  gtk_menu_shell_deactivate (menu_shell);
+
+  G_OBJECT_CLASS (gtk_menu_shell_parent_class)->dispose (object);
+}
+
 void
 gtk_menu_shell_append (GtkMenuShell *menu_shell,
 		       GtkWidget    *child)



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