diff --git a/gdk/gdkdisplay.c b/gdk/gdkdisplay.c index 5e2fa873eb..9e638dceec 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 c8bc7124f8..4b5a009480 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);