summaryrefslogtreecommitdiff
path: root/drivemount/drive-button.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivemount/drive-button.c')
-rw-r--r--drivemount/drive-button.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/drivemount/drive-button.c b/drivemount/drive-button.c
index 2c93ce75..6bc598a5 100644
--- a/drivemount/drive-button.c
+++ b/drivemount/drive-button.c
@@ -176,6 +176,25 @@ drive_button_unrealize (GtkWidget *widget)
}
#endif /* 0 */
+#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
+
/* the following function is adapted from gtkmenuitem.c */
static void
position_menu (GtkMenu *menu, gint *x, gint *y,
@@ -188,7 +207,12 @@ position_menu (GtkMenu *menu, gint *x, gint *y,
GtkRequisition requisition;
GtkTextDirection direction;
GdkRectangle monitor;
+#if GTK_CHECK_VERSION (3, 22, 0)
+ GdkMonitor *monitor_num;
+ GdkDisplay *display;
+#else
gint monitor_num;
+#endif
g_return_if_fail (menu != NULL);
g_return_if_fail (x != NULL);
@@ -203,9 +227,17 @@ position_menu (GtkMenu *menu, gint *x, gint *y,
theight = requisition.height;
screen = gtk_widget_get_screen (GTK_WIDGET (menu));
+#if GTK_CHECK_VERSION (3, 22, 0)
+ display =gdk_screen_get_display (screen);
+ monitor_num = gdk_display_get_monitor_at_window (display, gtk_widget_get_window (widget));
+ if (monitor_num == NULL)
+ monitor_num = gdk_display_get_monitor (display, 0);
+ gdk_monitor_get_geometry (monitor_num, &monitor);
+#else
monitor_num = gdk_screen_get_monitor_at_window (screen, gtk_widget_get_window (widget));
if (monitor_num < 0) monitor_num = 0;
gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
+#endif
if (!gdk_window_get_origin (gtk_widget_get_window (widget), &tx, &ty)) {
g_warning ("Menu not on screen");
@@ -230,7 +262,12 @@ position_menu (GtkMenu *menu, gint *x, gint *y,
*x = CLAMP (tx, monitor.x, MAX (monitor.x, monitor.x + monitor.width - twidth));
*y = ty;
+
+#if GTK_CHECK_VERSION (3, 22, 0)
+ gtk_menu_set_monitor (menu, _gtk_get_monitor_num (monitor_num));
+#else
gtk_menu_set_monitor (menu, monitor_num);
+#endif
}
static gboolean