Merge branch 'matthiasc/for-master' into 'master'
popover: Fix submenu navigation Closes #3301 See merge request GNOME/gtk!2847
This commit is contained in:
@@ -1326,26 +1326,6 @@ gtk_model_button_class_init (GtkModelButtonClass *class)
|
||||
g_object_unref (action);
|
||||
}
|
||||
|
||||
static void
|
||||
close_submenus (GtkPopover *popover)
|
||||
{
|
||||
GtkPopoverMenu *menu;
|
||||
|
||||
if (GTK_IS_POPOVER_MENU (popover))
|
||||
{
|
||||
GtkWidget *submenu;
|
||||
|
||||
menu = GTK_POPOVER_MENU (popover);
|
||||
submenu = gtk_popover_menu_get_open_submenu (menu);
|
||||
if (submenu)
|
||||
{
|
||||
close_submenus (GTK_POPOVER (submenu));
|
||||
gtk_popover_popdown (GTK_POPOVER (submenu));
|
||||
gtk_popover_menu_set_open_submenu (menu, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
open_submenu (gpointer data)
|
||||
{
|
||||
@@ -1363,7 +1343,7 @@ open_submenu (gpointer data)
|
||||
GtkWidget *submenu = button->popover;
|
||||
|
||||
if (gtk_popover_menu_get_open_submenu (GTK_POPOVER_MENU (popover)) != submenu)
|
||||
close_submenus (popover);
|
||||
gtk_popover_menu_close_submenus (GTK_POPOVER_MENU (popover));
|
||||
|
||||
gtk_popover_popup (GTK_POPOVER (submenu));
|
||||
gtk_popover_menu_set_open_submenu (GTK_POPOVER_MENU (popover), submenu);
|
||||
|
||||
@@ -189,6 +189,20 @@ gtk_popover_menu_set_open_submenu (GtkPopoverMenu *menu,
|
||||
menu->open_submenu = submenu;
|
||||
}
|
||||
|
||||
void
|
||||
gtk_popover_menu_close_submenus (GtkPopoverMenu *menu)
|
||||
{
|
||||
GtkWidget *submenu;
|
||||
|
||||
submenu = menu->open_submenu;
|
||||
if (submenu)
|
||||
{
|
||||
gtk_popover_menu_close_submenus (GTK_POPOVER_MENU (submenu));
|
||||
gtk_widget_hide (submenu);
|
||||
gtk_popover_menu_set_open_submenu (menu, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
gtk_popover_menu_get_active_item (GtkPopoverMenu *menu)
|
||||
{
|
||||
|
||||
@@ -28,6 +28,8 @@ void gtk_popover_menu_set_active_item (GtkPopoverMenu *menu,
|
||||
GtkWidget *gtk_popover_menu_get_open_submenu (GtkPopoverMenu *menu);
|
||||
void gtk_popover_menu_set_open_submenu (GtkPopoverMenu *menu,
|
||||
GtkWidget *submenu);
|
||||
void gtk_popover_menu_close_submenus (GtkPopoverMenu *menu);
|
||||
|
||||
GtkWidget *gtk_popover_menu_get_parent_menu (GtkPopoverMenu *menu);
|
||||
void gtk_popover_menu_set_parent_menu (GtkPopoverMenu *menu,
|
||||
GtkWidget *parent);
|
||||
|
||||
Reference in New Issue
Block a user