summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlberts Muktupāvels <alberts.muktupavels@gmail.com>2015-01-18 16:26:07 +0200
committerAlberts Muktupāvels <alberts.muktupavels@gmail.com>2015-01-20 19:35:04 +0200
commitdfedc7df1bf334b39b5f30693a941812c9c79df1 (patch)
treeff74dfa92cbf6ad964a51397f5d24a1c8ee8fbd3 /src
parent85e15225f8da0ee45e8118c4d551d3f985908ebf (diff)
downloadmetacity-dfedc7df1bf334b39b5f30693a941812c9c79df1.tar.gz
MetaWindow: Repurpose get_outer_rect and add get_input_rect
get_outer_rect now returns the visible region, and a new get_input_rect method returns the boundaries of the full frame, including the possible invisible regions. When undecorated, both do the samething. https://bugzilla.gnome.org/show_bug.cgi?id=644930
Diffstat (limited to 'src')
-rw-r--r--src/core/window-private.h2
-rw-r--r--src/core/window.c40
2 files changed, 41 insertions, 1 deletions
diff --git a/src/core/window-private.h b/src/core/window-private.h
index c76c09e2..aa12e3cc 100644
--- a/src/core/window-private.h
+++ b/src/core/window-private.h
@@ -523,6 +523,8 @@ void meta_window_get_geometry (MetaWindow *window,
int *y,
int *width,
int *height);
+void meta_window_get_input_rect (const MetaWindow *window,
+ MetaRectangle *rect);
void meta_window_get_outer_rect (const MetaWindow *window,
MetaRectangle *rect);
void meta_window_get_xor_rect (MetaWindow *window,
diff --git a/src/core/window.c b/src/core/window.c
index 852e8f5d..e7f34bf0 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -4029,13 +4029,51 @@ 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_outer_rect (const MetaWindow *window,
+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 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)
+ {
+ 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;