From 51517c1a721725f7ca0524db4b3a1e85ad875ad3 Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Wed, 4 Jan 2006 11:25:19 +0000 Subject: [PATCH] use gtk_menu_attach_to_widget() and gtk_menu_detach() instead of 2006-01-04 Michael Natterer * gtk/gtkmenutoolbutton.c (gtk_menu_tool_button_set_menu) (gtk_menu_tool_button_destroy): use gtk_menu_attach_to_widget() and gtk_menu_detach() instead of reffing/unreffing the menu manually. Also fixes brokenness on screen change (bug #85715). --- ChangeLog | 8 ++++++++ ChangeLog.pre-2-10 | 8 ++++++++ gtk/gtkmenutoolbutton.c | 21 ++++++++++++++++----- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 488d38a962..91dcf4dc40 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2006-01-04 Michael Natterer + + * gtk/gtkmenutoolbutton.c + (gtk_menu_tool_button_set_menu) + (gtk_menu_tool_button_destroy): use gtk_menu_attach_to_widget() + and gtk_menu_detach() instead of reffing/unreffing the menu + manually. Also fixes brokenness on screen change (bug #85715). + 2006-01-04 Matthias Clasen * gtk/gtkaccelmap.c: diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 488d38a962..91dcf4dc40 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,11 @@ +2006-01-04 Michael Natterer + + * gtk/gtkmenutoolbutton.c + (gtk_menu_tool_button_set_menu) + (gtk_menu_tool_button_destroy): use gtk_menu_attach_to_widget() + and gtk_menu_detach() instead of reffing/unreffing the menu + manually. Also fixes brokenness on screen change (bug #85715). + 2006-01-04 Matthias Clasen * gtk/gtkaccelmap.c: diff --git a/gtk/gtkmenutoolbutton.c b/gtk/gtkmenutoolbutton.c index cefa6d323d..e0d845d8a2 100644 --- a/gtk/gtkmenutoolbutton.c +++ b/gtk/gtkmenutoolbutton.c @@ -450,8 +450,7 @@ gtk_menu_tool_button_destroy (GtkObject *object) g_signal_handlers_disconnect_by_func (button->priv->menu, menu_deactivate_cb, button); - g_object_unref (button->priv->menu); - button->priv->menu = NULL; + gtk_menu_detach (button->priv->menu); g_signal_handlers_disconnect_by_func (button->priv->arrow_button, arrow_button_toggled_cb, @@ -535,6 +534,17 @@ menu_deactivate_cb (GtkMenuShell *menu_shell, return TRUE; } +static void +menu_detacher (GtkWidget *widget, + GtkMenu *menu) +{ + GtkMenuToolButtonPrivate *priv = GTK_MENU_TOOL_BUTTON (widget)->priv; + + g_return_if_fail (priv->menu == menu); + + priv->menu = NULL; +} + /** * gtk_menu_tool_button_set_menu: * @button: a #GtkMenuToolButton @@ -566,18 +576,19 @@ gtk_menu_tool_button_set_menu (GtkMenuToolButton *button, g_signal_handlers_disconnect_by_func (priv->menu, menu_deactivate_cb, button); - g_object_unref (priv->menu); + gtk_menu_detach (priv->menu); } priv->menu = GTK_MENU (menu); if (priv->menu) { - g_object_ref_sink (priv->menu); + gtk_menu_attach_to_widget (priv->menu, GTK_WIDGET (button), + menu_detacher); gtk_widget_set_sensitive (priv->arrow_button, TRUE); - g_signal_connect (button->priv->menu, "deactivate", + g_signal_connect (priv->menu, "deactivate", G_CALLBACK (menu_deactivate_cb), button); } else