summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorTristan Van Berkom <tristan.van.berkom@gmail.com>2010-11-25 14:04:52 +0900
committerTristan Van Berkom <tristan.van.berkom@gmail.com>2010-11-25 14:08:55 +0900
commit6716e7c3f1925560a5b4901581cabbaee4e01e28 (patch)
treec7c54759ce3b4c0e54ef5061174ebb24b6981824 /gtk
parent2e3935ba9db3a7864b3eefed5da800b26aef97ef (diff)
downloadgtk+-6716e7c3f1925560a5b4901581cabbaee4e01e28.tar.gz
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.
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtkmenu.c7
-rw-r--r--gtk/gtkmenushell.c12
2 files changed, 17 insertions, 2 deletions
diff --git a/gtk/gtkmenu.c b/gtk/gtkmenu.c
index 3032f3b95e..13998ee1b9 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 d630cdd253..7b94ce9b25 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)