From 519fed9991acb04a7d3491d379d5b47bacab8624 Mon Sep 17 00:00:00 2001 From: Tim Janik Date: Tue, 11 May 1999 02:19:37 +0000 Subject: [PATCH] propagate ::selection-done emissions up to the topmost menu shell. Mon May 10 04:20:41 1999 Tim Janik * gtk/gtkmenushell.c (gtk_menu_shell_activate_item): propagate ::selection-done emissions up to the topmost menu shell. --- ChangeLog | 5 +++++ ChangeLog.pre-2-0 | 5 +++++ ChangeLog.pre-2-10 | 5 +++++ ChangeLog.pre-2-2 | 5 +++++ ChangeLog.pre-2-4 | 5 +++++ ChangeLog.pre-2-6 | 5 +++++ ChangeLog.pre-2-8 | 5 +++++ gtk/gtkmenushell.c | 28 ++++++++++++++++++++++------ 8 files changed, 57 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4b94d678f8..98223c144f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Mon May 10 04:20:41 1999 Tim Janik + + * gtk/gtkmenushell.c (gtk_menu_shell_activate_item): propagate + ::selection-done emissions up to the topmost menu shell. + Fri May 7 10:15:14 1999 Owen Taylor * gtk/gtknotebook.c (gtk_notebook_set_scrollable): Unset diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 4b94d678f8..98223c144f 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,8 @@ +Mon May 10 04:20:41 1999 Tim Janik + + * gtk/gtkmenushell.c (gtk_menu_shell_activate_item): propagate + ::selection-done emissions up to the topmost menu shell. + Fri May 7 10:15:14 1999 Owen Taylor * gtk/gtknotebook.c (gtk_notebook_set_scrollable): Unset diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 4b94d678f8..98223c144f 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,8 @@ +Mon May 10 04:20:41 1999 Tim Janik + + * gtk/gtkmenushell.c (gtk_menu_shell_activate_item): propagate + ::selection-done emissions up to the topmost menu shell. + Fri May 7 10:15:14 1999 Owen Taylor * gtk/gtknotebook.c (gtk_notebook_set_scrollable): Unset diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 4b94d678f8..98223c144f 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,8 @@ +Mon May 10 04:20:41 1999 Tim Janik + + * gtk/gtkmenushell.c (gtk_menu_shell_activate_item): propagate + ::selection-done emissions up to the topmost menu shell. + Fri May 7 10:15:14 1999 Owen Taylor * gtk/gtknotebook.c (gtk_notebook_set_scrollable): Unset diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 4b94d678f8..98223c144f 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,8 @@ +Mon May 10 04:20:41 1999 Tim Janik + + * gtk/gtkmenushell.c (gtk_menu_shell_activate_item): propagate + ::selection-done emissions up to the topmost menu shell. + Fri May 7 10:15:14 1999 Owen Taylor * gtk/gtknotebook.c (gtk_notebook_set_scrollable): Unset diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 4b94d678f8..98223c144f 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,8 @@ +Mon May 10 04:20:41 1999 Tim Janik + + * gtk/gtkmenushell.c (gtk_menu_shell_activate_item): propagate + ::selection-done emissions up to the topmost menu shell. + Fri May 7 10:15:14 1999 Owen Taylor * gtk/gtknotebook.c (gtk_notebook_set_scrollable): Unset diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 4b94d678f8..98223c144f 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,8 @@ +Mon May 10 04:20:41 1999 Tim Janik + + * gtk/gtkmenushell.c (gtk_menu_shell_activate_item): propagate + ::selection-done emissions up to the topmost menu shell. + Fri May 7 10:15:14 1999 Owen Taylor * gtk/gtknotebook.c (gtk_notebook_set_scrollable): Unset diff --git a/gtk/gtkmenushell.c b/gtk/gtkmenushell.c index bc49e5dfe3..0fe6c6b125 100644 --- a/gtk/gtkmenushell.c +++ b/gtk/gtkmenushell.c @@ -802,6 +802,7 @@ gtk_menu_shell_activate_item (GtkMenuShell *menu_shell, GtkWidget *menu_item, gboolean force_deactivate) { + GSList *slist, *shells = NULL; gboolean deactivate = force_deactivate; g_return_if_fail (menu_shell != NULL); @@ -810,12 +811,23 @@ gtk_menu_shell_activate_item (GtkMenuShell *menu_shell, g_return_if_fail (GTK_IS_MENU_ITEM (menu_item)); if (!deactivate) - { - deactivate = GTK_MENU_ITEM_CLASS (GTK_OBJECT (menu_item)->klass)->hide_on_activate; - } + deactivate = GTK_MENU_ITEM_CLASS (GTK_OBJECT (menu_item)->klass)->hide_on_activate; + + gtk_widget_ref (GTK_WIDGET (menu_shell)); if (deactivate) { + GtkMenuShell *parent_menu_shell = menu_shell; + + do + { + gtk_widget_ref (GTK_WIDGET (parent_menu_shell)); + shells = g_slist_prepend (shells, parent_menu_shell); + parent_menu_shell = (GtkMenuShell*) parent_menu_shell->parent_menu_shell; + } + while (parent_menu_shell); + shells = g_slist_reverse (shells); + gtk_menu_shell_deactivate (menu_shell); /* flush the x-queue, so any grabs are removed and @@ -824,11 +836,15 @@ gtk_menu_shell_activate_item (GtkMenuShell *menu_shell, gdk_flush (); } - gtk_widget_ref (GTK_WIDGET (menu_shell)); gtk_widget_activate (menu_item); - if (deactivate) - gtk_signal_emit (GTK_OBJECT (menu_shell), menu_shell_signals[SELECTION_DONE]); + for (slist = shells; slist; slist = slist->next) + { + gtk_signal_emit (slist->data, menu_shell_signals[SELECTION_DONE]); + gtk_widget_unref (slist->data); + } + g_slist_free (shells); + gtk_widget_unref (GTK_WIDGET (menu_shell)); }