summaryrefslogtreecommitdiff
path: root/gtk/gtkmenushell.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2004-12-28 05:33:27 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2004-12-28 05:33:27 +0000
commite77e1e24c225fe77625882841b35232fcb63a49c (patch)
treedd89c2964d3052d159e5f6b527f1d0867704f3be /gtk/gtkmenushell.c
parent676322ac06bd2dd67906e4839c6ef316a9f42151 (diff)
downloadgtk+-e77e1e24c225fe77625882841b35232fcb63a49c.tar.gz
Return a boolean indicating whether an item in the submenu was selected.
2004-12-28 Matthias Clasen <mclasen@redhat.com> * gtk/gtkmenushell.c (gtk_menu_shell_select_submenu_first): Return a boolean indicating whether an item in the submenu was selected. (gtk_real_menu_shell_move_current): When going in child direction, don't get stuck at completely insensitive submenus. (#162055, Billy Biggs)
Diffstat (limited to 'gtk/gtkmenushell.c')
-rw-r--r--gtk/gtkmenushell.c47
1 files changed, 25 insertions, 22 deletions
diff --git a/gtk/gtkmenushell.c b/gtk/gtkmenushell.c
index 9d067fe3a2..2618cc4839 100644
--- a/gtk/gtkmenushell.c
+++ b/gtk/gtkmenushell.c
@@ -159,7 +159,7 @@ static GtkWidget *gtk_menu_shell_get_item (GtkMenuShell *menu_shell,
static GType gtk_menu_shell_child_type (GtkContainer *container);
static void gtk_menu_shell_real_select_item (GtkMenuShell *menu_shell,
GtkWidget *menu_item);
-static void gtk_menu_shell_select_submenu_first (GtkMenuShell *menu_shell);
+static gboolean gtk_menu_shell_select_submenu_first (GtkMenuShell *menu_shell);
static void gtk_real_menu_shell_move_current (GtkMenuShell *menu_shell,
GtkMenuDirectionType direction);
@@ -1062,7 +1062,7 @@ _gtk_menu_shell_select_last (GtkMenuShell *menu_shell,
gtk_menu_shell_select_item (menu_shell, to_select);
}
-static void
+static gboolean
gtk_menu_shell_select_submenu_first (GtkMenuShell *menu_shell)
{
GtkMenuItem *menu_item;
@@ -1073,7 +1073,11 @@ gtk_menu_shell_select_submenu_first (GtkMenuShell *menu_shell)
{
_gtk_menu_item_popup_submenu (GTK_WIDGET (menu_item));
gtk_menu_shell_select_first (GTK_MENU_SHELL (menu_item->submenu), TRUE);
+ if (GTK_MENU_SHELL (menu_item->submenu)->active_menu_item)
+ return TRUE;
}
+
+ return FALSE;
}
static void
@@ -1145,28 +1149,27 @@ gtk_real_menu_shell_move_current (GtkMenuShell *menu_shell,
_gtk_menu_item_is_selectable (menu_shell->active_menu_item) &&
GTK_MENU_ITEM (menu_shell->active_menu_item)->submenu)
{
- gtk_menu_shell_select_submenu_first (menu_shell);
+ if (gtk_menu_shell_select_submenu_first (menu_shell))
+ break;
}
- else
+
+ /* Try to find a menu running the opposite direction */
+ while (parent_menu_shell &&
+ (GTK_MENU_SHELL_GET_CLASS (parent_menu_shell)->submenu_placement ==
+ GTK_MENU_SHELL_GET_CLASS (menu_shell)->submenu_placement))
{
- /* Try to find a menu running the opposite direction */
- while (parent_menu_shell &&
- (GTK_MENU_SHELL_GET_CLASS (parent_menu_shell)->submenu_placement ==
- GTK_MENU_SHELL_GET_CLASS (menu_shell)->submenu_placement))
- {
- GtkWidget *tmp_widget = parent_menu_shell->parent_menu_shell;
-
- if (tmp_widget)
- parent_menu_shell = GTK_MENU_SHELL (tmp_widget);
- else
- parent_menu_shell = NULL;
- }
-
- if (parent_menu_shell)
- {
- gtk_menu_shell_move_selected (parent_menu_shell, 1);
- gtk_menu_shell_select_submenu_first (parent_menu_shell);
- }
+ GtkWidget *tmp_widget = parent_menu_shell->parent_menu_shell;
+
+ if (tmp_widget)
+ parent_menu_shell = GTK_MENU_SHELL (tmp_widget);
+ else
+ parent_menu_shell = NULL;
+ }
+
+ if (parent_menu_shell)
+ {
+ gtk_menu_shell_move_selected (parent_menu_shell, 1);
+ gtk_menu_shell_select_submenu_first (parent_menu_shell);
}
break;