[mutter] window: Replace placement constrained bool with state
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] window: Replace placement constrained bool with state
- Date: Sun, 17 Mar 2019 14:18:20 +0000 (UTC)
commit f580b28a27dce071577d718b49e76e864cbaf969
Author: Jonas Ådahl <jadahl gmail com>
Date: Fri Oct 19 13:33:13 2018 +0200
window: Replace placement constrained bool with state
Using an actual state instead of a boolean makes it clearer it's a state
that changes. Eventually we might add more state too.
https://gitlab.gnome.org/GNOME/mutter/merge_requests/496
src/core/constraints.c | 50 ++++++++++++++++++++++++++---------------------
src/core/window-private.h | 8 +++++++-
2 files changed, 35 insertions(+), 23 deletions(-)
---
diff --git a/src/core/constraints.c b/src/core/constraints.c
index 67fb92215..445d8539e 100644
--- a/src/core/constraints.c
+++ b/src/core/constraints.c
@@ -818,28 +818,34 @@ constrain_custom_rule (MetaWindow *window,
if (!placement_rule)
return TRUE;
- if (window->placement_rule_constrained)
+ switch (window->placement_state)
{
- MetaRectangle parent_buffer_rect;
-
- parent = meta_window_get_transient_for (window);
- meta_window_get_frame_rect (parent, &parent_rect);
- info->current.x =
- parent_rect.x + window->constrained_placement_rule_offset_x;
- info->current.y =
- parent_rect.y + window->constrained_placement_rule_offset_y;
-
- meta_window_get_buffer_rect (parent, &parent_buffer_rect);
- if (!meta_rectangle_overlap (&info->current, &parent_buffer_rect) &&
- !meta_rectangle_is_adjacent_to (&info->current, &parent_buffer_rect))
- {
- g_warning ("Buggy client caused popup to be placed outside of parent "
- "window");
- info->should_unmanage = TRUE;
- return TRUE;
- }
-
- return TRUE;
+ case META_PLACEMENT_STATE_UNCONSTRAINED:
+ break;
+ case META_PLACEMENT_STATE_CONSTRAINED:
+ {
+ MetaRectangle parent_buffer_rect;
+
+ parent = meta_window_get_transient_for (window);
+ meta_window_get_frame_rect (parent, &parent_rect);
+ info->current.x =
+ parent_rect.x + window->constrained_placement_rule_offset_x;
+ info->current.y =
+ parent_rect.y + window->constrained_placement_rule_offset_y;
+
+ meta_window_get_buffer_rect (parent, &parent_buffer_rect);
+ if (!meta_rectangle_overlap (&info->current, &parent_buffer_rect) &&
+ !meta_rectangle_is_adjacent_to (&info->current,
+ &parent_buffer_rect))
+ {
+ g_warning ("Buggy client caused popup to be placed outside of "
+ "parent window");
+ info->should_unmanage = TRUE;
+ return TRUE;
+ }
+
+ return TRUE;
+ }
}
meta_rectangle_intersect (&info->current, &info->work_area_monitor,
@@ -923,7 +929,7 @@ constrain_custom_rule (MetaWindow *window,
}
done:
- window->placement_rule_constrained = TRUE;
+ window->placement_state = META_PLACEMENT_STATE_CONSTRAINED;
parent = meta_window_get_transient_for (window);
meta_window_get_frame_rect (parent, &parent_rect);
diff --git a/src/core/window-private.h b/src/core/window-private.h
index a6cebb4fb..06be5aad8 100644
--- a/src/core/window-private.h
+++ b/src/core/window-private.h
@@ -142,6 +142,12 @@ typedef struct _MetaPlacementRule
int height;
} MetaPlacementRule;
+typedef enum _MetaPlacementState
+{
+ META_PLACEMENT_STATE_UNCONSTRAINED,
+ META_PLACEMENT_STATE_CONSTRAINED,
+} MetaPlacementState;
+
typedef enum
{
META_EDGE_CONSTRAINT_NONE = 0,
@@ -524,7 +530,7 @@ struct _MetaWindow
guint bypass_compositor;
MetaPlacementRule *placement_rule;
- gboolean placement_rule_constrained;
+ MetaPlacementState placement_state;
int constrained_placement_rule_offset_x;
int constrained_placement_rule_offset_y;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]