diff options
author | William Hua <william.hua@canonical.com> | 2015-09-25 09:18:14 -0400 |
---|---|---|
committer | William Hua <william.hua@canonical.com> | 2016-01-06 10:37:41 -0500 |
commit | cc690bdbea4dbe89f49bd1a3a142d7a00bd0cecd (patch) | |
tree | 05f78f2b52b591b720cbe4918b3810feeef50d71 | |
parent | f6d47073a282ef2fb7422e924334fdc31e8bd1b9 (diff) | |
download | gtk+-cc690bdbea4dbe89f49bd1a3a142d7a00bd0cecd.tar.gz |
gtkrecentchooserdefault: use gtk_menu_popup_with_params ()
-rw-r--r-- | gtk/gtkrecentchooserdefault.c | 77 |
1 files changed, 31 insertions, 46 deletions
diff --git a/gtk/gtkrecentchooserdefault.c b/gtk/gtkrecentchooserdefault.c index 5d6172dba6..8392d2a7ce 100644 --- a/gtk/gtkrecentchooserdefault.c +++ b/gtk/gtkrecentchooserdefault.c @@ -1729,61 +1729,46 @@ recent_view_menu_build (GtkRecentChooserDefault *impl) recent_view_menu_ensure_state (impl); } -/* taken from gtkfilechooserdefault.c */ -static void -popup_position_func (GtkMenu *menu, - gint *x, - gint *y, - gboolean *push_in, - gpointer user_data) -{ - GtkAllocation allocation; - GtkWidget *widget = GTK_WIDGET (user_data); - GdkScreen *screen = gtk_widget_get_screen (widget); - GtkRequisition req; - gint monitor_num; - GdkRectangle monitor; - - if (G_UNLIKELY (!gtk_widget_get_realized (widget))) - return; - - gdk_window_get_origin (gtk_widget_get_window (widget), - x, y); - - gtk_widget_get_preferred_size (GTK_WIDGET (menu), - &req, NULL); - - gtk_widget_get_allocation (widget, &allocation); - *x += (allocation.width - req.width) / 2; - *y += (allocation.height - req.height) / 2; - - monitor_num = gdk_screen_get_monitor_at_point (screen, *x, *y); - gtk_menu_set_monitor (menu, monitor_num); - gdk_screen_get_monitor_workarea (screen, monitor_num, &monitor); - - *x = CLAMP (*x, monitor.x, monitor.x + MAX (0, monitor.width - req.width)); - *y = CLAMP (*y, monitor.y, monitor.y + MAX (0, monitor.height - req.height)); - - *push_in = FALSE; -} - - static void recent_view_menu_popup (GtkRecentChooserDefault *impl, GdkEventButton *event) { + GdkAttachParams *params; + recent_view_menu_build (impl); if (event) - gtk_menu_popup (GTK_MENU (impl->priv->recent_popup_menu), - NULL, NULL, NULL, NULL, - event->button, event->time); + gtk_menu_popup_with_params (GTK_MENU (impl->priv->recent_popup_menu), + NULL, + NULL, + NULL, + event->button, + event->time, + TRUE, + GDK_WINDOW_TYPE_HINT_POPUP_MENU, + NULL); else { - gtk_menu_popup (GTK_MENU (impl->priv->recent_popup_menu), - NULL, NULL, - popup_position_func, impl->priv->recent_view, - 0, GDK_CURRENT_TIME); + params = gtk_menu_create_params (GTK_MENU (impl->priv->recent_popup_menu)); + + gdk_attach_params_add_primary_rules (params, + GDK_ATTACH_AXIS_Y | GDK_ATTACH_RECT_MID | GDK_ATTACH_WINDOW_MID, + NULL); + + gdk_attach_params_add_secondary_rules (params, + GDK_ATTACH_AXIS_X | GDK_ATTACH_RECT_MID | GDK_ATTACH_WINDOW_MID, + NULL); + + gtk_menu_popup_with_params (GTK_MENU (impl->priv->recent_popup_menu), + NULL, + NULL, + impl->priv->recent_view, + 0, + GDK_CURRENT_TIME, + TRUE, + GDK_WINDOW_TYPE_HINT_POPUP_MENU, + params); + gtk_menu_shell_select_first (GTK_MENU_SHELL (impl->priv->recent_popup_menu), FALSE); } |