fix a touchscreen-mode keynav corner case: when navigating to the parent

2008-04-08  Michael Natterer  <mitch@imendio.com>

	* gtk/gtkmenushell.c (gtk_real_menu_shell_move_current): fix a
	touchscreen-mode keynav corner case: when navigating to the parent
	menu, make sure we don't close two menus at the same time in case
	the deepest open menu has no selectable items.


svn path=/trunk/; revision=19981
This commit is contained in:
Michael Natterer 2008-04-08 11:03:10 +00:00 committed by Michael Natterer
parent e6ffa4f5de
commit 4cfa620fcc
2 changed files with 26 additions and 7 deletions

View File

@ -1,3 +1,10 @@
2008-04-08 Michael Natterer <mitch@imendio.com>
* gtk/gtkmenushell.c (gtk_real_menu_shell_move_current): fix a
touchscreen-mode keynav corner case: when navigating to the parent
menu, make sure we don't close two menus at the same time in case
the deepest open menu has no selectable items.
2008-04-06 Tristan Van Berkom <tvb@gnome.org>
* gtk/gtkwidget.c: Clarified a g_warning message regarding

View File

@ -1298,23 +1298,35 @@ gtk_real_menu_shell_move_current (GtkMenuShell *menu_shell,
{
GtkMenuShell *parent_menu_shell = NULL;
gboolean had_selection;
gboolean touchscreen_mode;
had_selection = menu_shell->active_menu_item != NULL;
g_object_get (gtk_widget_get_settings (GTK_WIDGET (menu_shell)),
"gtk-touchscreen-mode", &touchscreen_mode,
NULL);
if (menu_shell->parent_menu_shell)
parent_menu_shell = GTK_MENU_SHELL (menu_shell->parent_menu_shell);
switch (direction)
{
case GTK_MENU_DIR_PARENT:
if (parent_menu_shell)
if (touchscreen_mode &&
menu_shell->active_menu_item &&
GTK_MENU_ITEM (menu_shell->active_menu_item)->submenu &&
GTK_WIDGET_VISIBLE (GTK_MENU_ITEM (menu_shell->active_menu_item)->submenu))
{
/* if we are on a menu item that has an open submenu but the
* focus is not in that submenu (e.g. because it's empty or
* has only insensitive items), close that submenu instead
* of running into the code below which would close *this*
* menu.
*/
_gtk_menu_item_popdown_submenu (menu_shell->active_menu_item);
}
else if (parent_menu_shell)
{
gboolean touchscreen_mode;
g_object_get (gtk_widget_get_settings (GTK_WIDGET (menu_shell)),
"gtk-touchscreen-mode", &touchscreen_mode,
NULL);
if (touchscreen_mode)
{
/* close menu when returning from submenu. */