diff --git a/ChangeLog b/ChangeLog index 0357832e12..6cd149bf7a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2007-06-01 Michael Natterer + + Merge from trunk: + + * gtk/gtkmenuitem.c (gtk_menu_item_position_menu): don't switch + submenu opening direction for overlapping reasons if there is even + less space on the other side (bug #441863, Tommi Komulainen). + 2007-05-31 Mathias Hasselmann * gtk/gtkfilechooserdialog.c: Reset the internal response_requested flag, diff --git a/gtk/gtkmenuitem.c b/gtk/gtkmenuitem.c index ae87c05304..a8109e5ef6 100644 --- a/gtk/gtkmenuitem.c +++ b/gtk/gtkmenuitem.c @@ -1105,6 +1105,7 @@ gtk_menu_item_position_menu (GtkMenu *menu, gint horizontal_offset; gint vertical_offset; gint parent_xthickness; + gint available_left, available_right; g_return_if_fail (menu != NULL); g_return_if_fail (x != NULL); @@ -1138,6 +1139,9 @@ gtk_menu_item_position_menu (GtkMenu *menu, get_offsets (menu, &horizontal_offset, &vertical_offset); + available_left = tx - monitor.x; + available_right = monitor.x + monitor.width - (tx + widget->allocation.width); + if (GTK_IS_MENU_BAR (widget->parent)) { menu_item->from_menubar = TRUE; @@ -1197,7 +1201,8 @@ gtk_menu_item_position_menu (GtkMenu *menu, switch (menu_item->submenu_direction) { case GTK_DIRECTION_LEFT: - if ((tx - twidth - parent_xthickness - horizontal_offset) >= monitor.x) + if (tx - twidth - parent_xthickness - horizontal_offset >= monitor.x || + available_left >= available_right) tx -= twidth + parent_xthickness + horizontal_offset; else { @@ -1207,7 +1212,8 @@ gtk_menu_item_position_menu (GtkMenu *menu, break; case GTK_DIRECTION_RIGHT: - if ((tx + widget->allocation.width + parent_xthickness + horizontal_offset + twidth) <= monitor.x + monitor.width) + if (tx + widget->allocation.width + parent_xthickness + horizontal_offset + twidth <= monitor.x + monitor.width || + available_right >= available_left) tx += widget->allocation.width + parent_xthickness + horizontal_offset; else {