[gtk+] display: Add vfunc for get_monitor_at_window
- From: Olivier Fourdan <ofourdan src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] display: Add vfunc for get_monitor_at_window
- Date: Wed, 18 May 2016 17:08:08 +0000 (UTC)
commit d288a134a427e5728d230404c6a56fc9397b45d9
Author: Olivier Fourdan <ofourdan redhat com>
Date: Tue May 17 13:09:23 2016 +0200
display: Add vfunc for get_monitor_at_window
Some backends (namely Wayland) do not support global coordinates so
using the window position to determine the monitor will always fail on
such backends.
In such cases, the backend itself might be better suited to identify
the monitor a given window resides on.
Add a vfunc get_monitor_at_window() to the display class so that we can
use the backend to retrieve the monitor, if the backend implements it.
https://bugzilla.gnome.org/show_bug.cgi?id=766566
gdk/gdkdisplay.c | 11 +++++++++++
gdk/gdkdisplayprivate.h | 2 ++
2 files changed, 13 insertions(+), 0 deletions(-)
---
diff --git a/gdk/gdkdisplay.c b/gdk/gdkdisplay.c
index 5e2fa87..9e638dc 100644
--- a/gdk/gdkdisplay.c
+++ b/gdk/gdkdisplay.c
@@ -2692,9 +2692,20 @@ gdk_display_get_monitor_at_window (GdkDisplay *display,
int n_monitors, i;
int area = 0;
GdkMonitor *best = NULL;
+ GdkWindowImplClass *impl_class;
+ GdkDisplayClass *class;
g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL);
+ class = GDK_DISPLAY_GET_CLASS (display);
+ if (class->get_monitor_at_window)
+ {
+ best = class->get_monitor_at_window (display, window);
+
+ if (best)
+ return best;
+ }
+
gdk_window_get_geometry (window, &win.x, &win.y, &win.width, &win.height);
gdk_window_get_origin (window, &win.x, &win.y);
diff --git a/gdk/gdkdisplayprivate.h b/gdk/gdkdisplayprivate.h
index c8bc712..4b5a009 100644
--- a/gdk/gdkdisplayprivate.h
+++ b/gdk/gdkdisplayprivate.h
@@ -246,6 +246,8 @@ struct _GdkDisplayClass
GdkMonitor * (*get_monitor) (GdkDisplay *display,
int index);
GdkMonitor * (*get_primary_monitor) (GdkDisplay *display);
+ GdkMonitor * (*get_monitor_at_window) (GdkDisplay *display,
+ GdkWindow *window);
/* Signals */
void (*opened) (GdkDisplay *display);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]