[gtk+/wip/attachment-rectangle: 4/8] menuitem: use gtk_menu_popup_against ()
- From: William Hua <williamhua src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/attachment-rectangle: 4/8] menuitem: use gtk_menu_popup_against ()
- Date: Thu, 30 Jul 2015 20:45:54 +0000 (UTC)
commit ac38336fc220d6b4a630228efac25cddde3cd402
Author: William Hua <william hua canonical com>
Date: Fri Jul 24 16:16:11 2015 -0400
menuitem: use gtk_menu_popup_against ()
gtk/gtkmenuitem.c | 55 ++++++++++++++++++++++++++++++++++------------------
1 files changed, 36 insertions(+), 19 deletions(-)
---
diff --git a/gtk/gtkmenuitem.c b/gtk/gtkmenuitem.c
index d025125..ca18df7 100644
--- a/gtk/gtkmenuitem.c
+++ b/gtk/gtkmenuitem.c
@@ -1898,6 +1898,7 @@ gtk_menu_item_real_popup_submenu (GtkWidget *widget,
{
GtkMenuItem *menu_item = GTK_MENU_ITEM (widget);
GtkMenuItemPrivate *priv = menu_item->priv;
+ GdkAttachmentOptions attach_options;
GtkWidget *parent;
parent = gtk_widget_get_parent (widget);
@@ -1905,7 +1906,6 @@ gtk_menu_item_real_popup_submenu (GtkWidget *widget,
if (gtk_widget_is_sensitive (priv->submenu) && parent)
{
gboolean take_focus;
- GtkMenuPositionFunc menu_position_func;
take_focus = gtk_menu_shell_get_take_focus (GTK_MENU_SHELL (parent));
gtk_menu_shell_set_take_focus (GTK_MENU_SHELL (priv->submenu), take_focus);
@@ -1926,24 +1926,41 @@ 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 (gtk_widget_get_window (widget))
- menu_position_func = gtk_menu_item_position_menu;
- else
- menu_position_func = NULL;
-
- gtk_menu_popup (GTK_MENU (priv->submenu),
- parent,
- widget,
- menu_position_func,
- menu_item,
- GTK_MENU_SHELL (parent)->priv->button,
- 0);
+ switch (priv->submenu_placement)
+ {
+ case GTK_TOP_BOTTOM:
+ attach_options = GDK_ATTACHMENT_ATTACH_BOTTOM_EDGE |
+ GDK_ATTACHMENT_ATTACH_OPPOSITE_EDGE;
+
+ if (gtk_widget_get_direction (widget) != GTK_TEXT_DIR_RTL)
+ attach_options |= GDK_ATTACHMENT_ALIGN_LEFT_EDGES;
+ else
+ attach_options |= GDK_ATTACHMENT_ALIGN_RIGHT_EDGES;
+
+ break;
+ case GTK_LEFT_RIGHT:
+ attach_options = GDK_ATTACHMENT_ALIGN_TOP_EDGES |
+ GDK_ATTACHMENT_ATTACH_OPPOSITE_EDGE;
+
+ if (gtk_widget_get_direction (widget) != GTK_TEXT_DIR_RTL)
+ attach_options |= GDK_ATTACHMENT_ATTACH_RIGHT_EDGE;
+ else
+ attach_options |= GDK_ATTACHMENT_ATTACH_LEFT_EDGE;
+
+ break;
+ }
+
+ gtk_menu_popup_against (GTK_MENU (priv->submenu),
+ NULL,
+ parent,
+ widget,
+ NULL,
+ attach_options,
+ NULL,
+ NULL,
+ NULL,
+ GTK_MENU_SHELL (parent)->priv->button,
+ 0);
}
/* Enable themeing of the parent menu item depending on whether
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]