119 lines
3.7 KiB
Diff
119 lines
3.7 KiB
Diff
--- a/src/defaults.c
|
|
+++ b/src/defaults.c
|
|
@@ -1882,34 +1882,57 @@ defaults_get_top_corner (Defaults *self,
|
|
{
|
|
GdkRectangle rect;
|
|
GdkWindow* active_window = NULL;
|
|
+ GdkDisplay * display;
|
|
GdkDeviceManager* device_manager;
|
|
GdkDevice* device;
|
|
gint mx;
|
|
gint my;
|
|
- gint monitor = 0;
|
|
+#if GTK_CHECK_VERSION (3, 22, 0)
|
|
+ GdkMonitor * monitor;
|
|
+ GdkMonitor * aw_monitor;
|
|
+ GdkMonitor * primary_monitor;
|
|
+#else
|
|
+ gint monitor;
|
|
gint aw_monitor;
|
|
+ gint primary_monitor;
|
|
+#endif
|
|
gboolean follow_focus = defaults_multihead_does_focus_follow (self);
|
|
gboolean is_composited = FALSE;
|
|
- gint primary_monitor;
|
|
|
|
g_return_if_fail (self != NULL && IS_DEFAULTS (self));
|
|
|
|
- device_manager = gdk_display_get_device_manager (gdk_display_get_default ());
|
|
+ display = gdk_display_get_default ();
|
|
+ device_manager = gdk_display_get_device_manager (display);
|
|
device = gdk_device_manager_get_client_pointer (device_manager);
|
|
gdk_device_get_position (device, screen, &mx, &my);
|
|
+#if GTK_CHECK_VERSION (3, 22, 0)
|
|
+ monitor = gdk_display_get_primary_monitor (display);
|
|
+#else
|
|
+ monitor = gdk_screen_get_primary_monitor (*screen);
|
|
+#endif
|
|
|
|
is_composited = gdk_screen_is_composited (*screen);
|
|
|
|
if (follow_focus)
|
|
{
|
|
g_debug ("multi_head_focus_follow mode");
|
|
+#if GTK_CHECK_VERSION (3, 22, 0)
|
|
+ monitor = gdk_display_get_monitor_at_point (display, mx, my);
|
|
+#else
|
|
monitor = gdk_screen_get_monitor_at_point (*screen, mx, my);
|
|
+#endif
|
|
active_window = gdk_screen_get_active_window (*screen);
|
|
if (active_window != NULL)
|
|
{
|
|
+#if GTK_CHECK_VERSION (3, 22, 0)
|
|
+ aw_monitor = gdk_display_get_monitor_at_window (
|
|
+ display,
|
|
+ active_window);
|
|
+#else
|
|
aw_monitor = gdk_screen_get_monitor_at_window (
|
|
*screen,
|
|
active_window);
|
|
+#endif
|
|
|
|
if (monitor != aw_monitor)
|
|
{
|
|
@@ -1927,7 +1950,7 @@ defaults_get_top_corner (Defaults *self,
|
|
/* _NET_WORKAREA is always a rectangle spanning all monitors of
|
|
* a screen. As such, it can't properly deal with monitor setups
|
|
* that aren't aligned or have different resolutions.
|
|
- * gdk_screen_get_monitor_workarea() works around this by only
|
|
+ * gdk_monitor_get_workarea() works around this by only
|
|
* returning the workarea for the primary screen and the full
|
|
* geometry for all other monitors.
|
|
*
|
|
@@ -1937,28 +1960,43 @@ defaults_get_top_corner (Defaults *self,
|
|
* other monitors as well.
|
|
*/
|
|
|
|
+#if GTK_CHECK_VERSION (3, 22, 0)
|
|
+ primary_monitor = gdk_display_get_primary_monitor (display);
|
|
+ if (monitor == primary_monitor)
|
|
+ {
|
|
+ gdk_monitor_get_workarea (primary_monitor, &rect);
|
|
+ }
|
|
+#else
|
|
primary_monitor = gdk_screen_get_primary_monitor (*screen);
|
|
if (monitor == primary_monitor)
|
|
{
|
|
gdk_screen_get_monitor_workarea (*screen, primary_monitor, &rect);
|
|
}
|
|
+#endif
|
|
else
|
|
{
|
|
GdkRectangle workarea;
|
|
GdkRectangle primary_geom;
|
|
gint panel_height;
|
|
|
|
+#if GTK_CHECK_VERSION (3, 22, 0)
|
|
+ gdk_monitor_get_workarea (primary_monitor, &workarea);
|
|
+ gdk_monitor_get_geometry (primary_monitor, &primary_geom);
|
|
+ panel_height = workarea.y - primary_geom.y;
|
|
+
|
|
+ gdk_monitor_get_geometry (monitor, &rect);
|
|
+#else
|
|
gdk_screen_get_monitor_workarea (*screen, primary_monitor, &workarea);
|
|
gdk_screen_get_monitor_geometry (*screen, primary_monitor, &primary_geom);
|
|
panel_height = workarea.y - primary_geom.y;
|
|
|
|
gdk_screen_get_monitor_geometry (*screen, monitor, &rect);
|
|
+#endif
|
|
rect.y += panel_height;
|
|
rect.height -= panel_height;
|
|
}
|
|
|
|
- g_debug ("selecting monitor %d at (%d,%d) - %dx%d",
|
|
- monitor,
|
|
+ g_debug ("selecting monitor at (%d,%d) - %dx%d",
|
|
rect.x,
|
|
rect.y,
|
|
rect.width,
|