summaryrefslogtreecommitdiff
path: root/shell/ev-utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'shell/ev-utils.c')
-rw-r--r--shell/ev-utils.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/shell/ev-utils.c b/shell/ev-utils.c
index 8789ef88..d4a8ff76 100644
--- a/shell/ev-utils.c
+++ b/shell/ev-utils.c
@@ -26,14 +26,38 @@
#include <string.h>
#include <glib/gi18n.h>
+#if GTK_CHECK_VERSION(3, 22, 0)
+static int
+_gtk_get_monitor_num (GdkMonitor *monitor)
+{
+ GdkDisplay *display;
+ int n_monitors, i;
+
+ display = gdk_monitor_get_display (monitor);
+ n_monitors = gdk_display_get_n_monitors (display);
+
+ for(i = 0; i < n_monitors; i++)
+ {
+ if (gdk_display_get_monitor (display, i) == monitor) return i;
+ }
+
+ return -1;
+}
+#endif
+
static void
ev_gui_sanitise_popup_position (GtkMenu *menu,
GtkWidget *widget,
gint *x,
gint *y)
{
+#if GTK_CHECK_VERSION (3, 22, 0)
+ GdkDisplay *display = gtk_widget_get_display (widget);
+ GdkMonitor *monitor_num;
+#else
GdkScreen *screen = gtk_widget_get_screen (widget);
gint monitor_num;
+#endif
GdkRectangle monitor;
GtkRequisition req;
@@ -41,9 +65,15 @@ ev_gui_sanitise_popup_position (GtkMenu *menu,
gtk_widget_get_preferred_size (GTK_WIDGET (menu), &req, NULL);
+#if GTK_CHECK_VERSION (3, 22, 0)
+ monitor_num = gdk_display_get_monitor_at_point (display, *x, *y);
+ gtk_menu_set_monitor (menu, _gtk_get_monitor_num (monitor_num));
+ gdk_monitor_get_geometry (monitor_num, &monitor);
+#else
monitor_num = gdk_screen_get_monitor_at_point (screen, *x, *y);
gtk_menu_set_monitor (menu, monitor_num);
gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
+#endif
*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));