diff --git a/src/core/window.c b/src/core/window.c index d460a9532..b9ba2b805 100644 --- a/src/core/window.c +++ b/src/core/window.c @@ -5157,19 +5157,50 @@ meta_window_get_geometry (MetaWindow *window, window->size_hints.height_inc; } +/** + * meta_window_get_input_rect: + * @window: a #MetaWindow + * @rect: (out): pointer to an allocated #MetaRectangle + * + * Gets the rectangle that bounds @window that is responsive to mouse events. + * This includes decorations - the visible portion of its border - and (if + * present) any invisible area that we make make responsive to mouse clicks in + * order to allow convenient border dragging. + */ +void +meta_window_get_input_rect (const MetaWindow *window, + MetaRectangle *rect) +{ + if (window->frame) + *rect = window->frame->rect; + else + *rect = window->rect; +} + /** * meta_window_get_outer_rect: * @window: a #MetaWindow * @rect: (out): pointer to an allocated #MetaRectangle * - * Gets the rectangle that bounds @window and, if decorated, its decorations. + * Gets the rectangle that bounds @window that is responsive to mouse events. + * This includes only what is visible; it doesn't include any extra reactive + * area we add to the edges of windows. */ void meta_window_get_outer_rect (const MetaWindow *window, MetaRectangle *rect) { if (window->frame) - *rect = window->frame->rect; + { + MetaFrameBorders borders; + *rect = window->frame->rect; + meta_frame_calc_borders (window->frame, &borders); + + rect->x += borders.invisible.left; + rect->y += borders.invisible.top; + rect->width -= borders.invisible.left + borders.invisible.right; + rect->height -= borders.invisible.top + borders.invisible.bottom; + } else *rect = window->rect; } diff --git a/src/meta/window.h b/src/meta/window.h index 985a14604..1b4b004f6 100644 --- a/src/meta/window.h +++ b/src/meta/window.h @@ -75,6 +75,7 @@ gboolean meta_window_is_shaded (MetaWindow *window); gboolean meta_window_is_override_redirect (MetaWindow *window); gboolean meta_window_is_skip_taskbar (MetaWindow *window); MetaRectangle *meta_window_get_rect (MetaWindow *window); +void meta_window_get_input_rect (const MetaWindow *window, MetaRectangle *rect); void meta_window_get_outer_rect (const MetaWindow *window, MetaRectangle *rect); MetaScreen *meta_window_get_screen (MetaWindow *window); MetaDisplay *meta_window_get_display (MetaWindow *window);