diff --git a/ChangeLog b/ChangeLog index e4bf0f6178..4279ce6008 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2008-07-03 Matthias Clasen + + Bug 540618 – gtk_menu_shell_select_first prints warning on GtkMenubar + constructed using GtkUIManager + + * gtk/gtkmenuitem.c: Fall back to the default positioning when + the menuitem is not realized. Patch by Björn Lindqvist. + 2008-07-03 Matthias Clasen Bug 540612 – mem leak in filechooser diff --git a/gtk/gtkmenuitem.c b/gtk/gtkmenuitem.c index f343f93771..a59b340752 100644 --- a/gtk/gtkmenuitem.c +++ b/gtk/gtkmenuitem.c @@ -1141,6 +1141,7 @@ gtk_menu_item_real_popup_submenu (GtkWidget *widget, if (GTK_WIDGET_IS_SENSITIVE (menu_item->submenu)) { gboolean take_focus; + GtkMenuPositionFunc menu_position_func; take_focus = gtk_menu_shell_get_take_focus (GTK_MENU_SHELL (widget->parent)); gtk_menu_shell_set_take_focus (GTK_MENU_SHELL (menu_item->submenu), @@ -1162,10 +1163,21 @@ gtk_menu_item_real_popup_submenu (GtkWidget *widget, "gtk-menu-exact-popup-time", NULL); } + /* gtk_menu_item_position_menu positions the submenu from the + * menuitems position. If the menuitem doesn't have a window, + * that doesn't work. In that case we use the default + * positioning function instead which places the submenu at the + * mouse cursor. + */ + if (widget->window) + menu_position_func = gtk_menu_item_position_menu; + else + menu_position_func = NULL; + gtk_menu_popup (GTK_MENU (menu_item->submenu), widget->parent, widget, - gtk_menu_item_position_menu, + menu_position_func, menu_item, GTK_MENU_SHELL (widget->parent)->button, 0);