diff --git a/src/core/window.c b/src/core/window.c index 210cf22a5..a9d4ec4bb 100644 --- a/src/core/window.c +++ b/src/core/window.c @@ -3647,6 +3647,42 @@ meta_window_is_fullscreen (MetaWindow *window) return window->fullscreen; } +/** + * meta_window_get_all_monitors: + * @window: The #MetaWindow + * @length: (out caller-allocates): gint holding the length, may be %NULL to + * ignore + * + * Returns: (array length=length) (element-type gint) (transfer container): + * List of the monitor indices the window is on. + */ +gint * +meta_window_get_all_monitors (MetaWindow *window, gsize *length) +{ + GArray *monitors; + MetaRectangle window_rect; + int i; + + monitors = g_array_new (FALSE, FALSE, sizeof (int)); + meta_window_get_outer_rect (window, &window_rect); + + for (i = 0; i < window->screen->n_monitor_infos; i++) + { + MetaRectangle *monitor_rect = &window->screen->monitor_infos[i].rect; + + if (meta_rectangle_overlap (&window_rect, monitor_rect)) + g_array_append_val (monitors, i); + } + + if (length) + *length = monitors->len; + + i = -1; + g_array_append_val (monitors, i); + + return (gint*) g_array_free (monitors, FALSE); +} + /** * meta_window_is_screen_sized: * diff --git a/src/meta/window.h b/src/meta/window.h index 25eae37a5..0c5fbb041 100644 --- a/src/meta/window.h +++ b/src/meta/window.h @@ -146,6 +146,7 @@ gboolean meta_window_is_monitor_sized (MetaWindow *window); gboolean meta_window_is_on_primary_monitor (MetaWindow *window); gboolean meta_window_requested_bypass_compositor (MetaWindow *window); gboolean meta_window_requested_dont_bypass_compositor (MetaWindow *window); +gint *meta_window_get_all_monitors (MetaWindow *window, gsize *length); gboolean meta_window_is_mapped (MetaWindow *window); gboolean meta_window_toplevel_is_mapped (MetaWindow *window);