[mutter] edge-resistance: Replace booleans with flags parameter
- From: verdre <jonasd src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] edge-resistance: Replace booleans with flags parameter
- Date: Wed, 14 Oct 2020 15:53:06 +0000 (UTC)
commit f9edb6bad3ed0c9cd11d142b165f3bb9e534cd11
Author: Florian Müllner <fmuellner gnome org>
Date: Sun May 24 03:07:51 2020 +0200
edge-resistance: Replace booleans with flags parameter
Multiple boolean parameters don't make for great API, so before we
add another one, replace them with a single flag parameter.
https://bugzilla.gnome.org/show_bug.cgi?id=679609
src/core/display-private.h | 2 +-
src/core/display.c | 2 +-
src/core/edge-resistance.c | 63 +++++++++++++++++---------------
src/core/edge-resistance.h | 24 ++++++-------
src/core/keybindings.c | 24 +++++++------
src/core/window-private.h | 9 ++++-
src/core/window.c | 89 +++++++++++++++++++++++++---------------------
src/x11/window-x11.c | 4 +--
8 files changed, 120 insertions(+), 97 deletions(-)
---
diff --git a/src/core/display-private.h b/src/core/display-private.h
index 994bc45dcd..78f25fdb6c 100644
--- a/src/core/display-private.h
+++ b/src/core/display-private.h
@@ -192,7 +192,7 @@ struct _MetaDisplay
gboolean grab_threshold_movement_reached; /* raise_on_click == FALSE. */
int64_t grab_last_moveresize_time;
MetaEdgeResistanceData *grab_edge_resistance_data;
- unsigned int grab_last_user_action_was_snap;
+ unsigned int grab_last_edge_resistance_flags;
int grab_resize_timeout_id;
diff --git a/src/core/display.c b/src/core/display.c
index 2fc32da715..35ba540b6a 100644
--- a/src/core/display.c
+++ b/src/core/display.c
@@ -1903,7 +1903,7 @@ meta_display_begin_grab_op (MetaDisplay *display,
display->grab_latest_motion_x = root_x;
display->grab_latest_motion_y = root_y;
display->grab_last_moveresize_time = 0;
- display->grab_last_user_action_was_snap = FALSE;
+ display->grab_last_edge_resistance_flags = META_EDGE_RESISTANCE_DEFAULT;
display->grab_frame_action = frame_action;
meta_display_update_cursor (display);
diff --git a/src/core/edge-resistance.c b/src/core/edge-resistance.c
index 0baed077e9..870ce6e78e 100644
--- a/src/core/edge-resistance.c
+++ b/src/core/edge-resistance.c
@@ -537,19 +537,22 @@ apply_edge_snapping (int old_pos,
* function will cause a crash.
*/
static gboolean
-apply_edge_resistance_to_each_side (MetaDisplay *display,
- MetaWindow *window,
- const MetaRectangle *old_outer,
- MetaRectangle *new_outer,
- GSourceFunc timeout_func,
- gboolean auto_snap,
- gboolean keyboard_op,
- gboolean is_resize)
+apply_edge_resistance_to_each_side (MetaDisplay *display,
+ MetaWindow *window,
+ const MetaRectangle *old_outer,
+ MetaRectangle *new_outer,
+ GSourceFunc timeout_func,
+ MetaEdgeResistanceFlags flags,
+ gboolean is_resize)
{
MetaEdgeResistanceData *edge_data;
MetaRectangle modified_rect;
gboolean modified;
int new_left, new_right, new_top, new_bottom;
+ gboolean auto_snap, keyboard_op;
+
+ auto_snap = flags & META_EDGE_RESISTANCE_SNAP;
+ keyboard_op = flags & META_EDGE_RESISTANCE_KEYBOARD_OP;
if (display->grab_edge_resistance_data == NULL)
compute_resistance_and_snapping_edges (display);
@@ -1174,15 +1177,15 @@ compute_resistance_and_snapping_edges (MetaDisplay *display)
}
void
-meta_window_edge_resistance_for_move (MetaWindow *window,
- int *new_x,
- int *new_y,
- GSourceFunc timeout_func,
- gboolean snap,
- gboolean is_keyboard_op)
+meta_window_edge_resistance_for_move (MetaWindow *window,
+ int *new_x,
+ int *new_y,
+ GSourceFunc timeout_func,
+ MetaEdgeResistanceFlags flags)
{
MetaRectangle old_outer, proposed_outer, new_outer;
- gboolean is_resize;
+ MetaEdgeResistanceFlags saved_flags;
+ gboolean is_resize, is_keyboard_op, snap;
meta_window_get_frame_rect (window, &old_outer);
@@ -1191,15 +1194,18 @@ meta_window_edge_resistance_for_move (MetaWindow *window,
proposed_outer.y = *new_y;
new_outer = proposed_outer;
- window->display->grab_last_user_action_was_snap = snap;
+ snap = flags & META_EDGE_RESISTANCE_SNAP;
+ is_keyboard_op = flags & META_EDGE_RESISTANCE_KEYBOARD_OP;
+ saved_flags = flags & ~META_EDGE_RESISTANCE_KEYBOARD_OP;
+
+ window->display->grab_last_edge_resistance_flags = saved_flags;
is_resize = FALSE;
if (apply_edge_resistance_to_each_side (window->display,
window,
&old_outer,
&new_outer,
timeout_func,
- snap,
- is_keyboard_op,
+ flags,
is_resize))
{
/* apply_edge_resistance_to_each_side independently applies
@@ -1252,15 +1258,15 @@ meta_window_edge_resistance_for_move (MetaWindow *window,
}
void
-meta_window_edge_resistance_for_resize (MetaWindow *window,
- int *new_width,
- int *new_height,
- MetaGravity gravity,
- GSourceFunc timeout_func,
- gboolean snap,
- gboolean is_keyboard_op)
+meta_window_edge_resistance_for_resize (MetaWindow *window,
+ int *new_width,
+ int *new_height,
+ MetaGravity gravity,
+ GSourceFunc timeout_func,
+ MetaEdgeResistanceFlags flags)
{
MetaRectangle old_outer, new_outer;
+ MetaEdgeResistanceFlags saved_flags;
int proposed_outer_width, proposed_outer_height;
meta_window_get_frame_rect (window, &old_outer);
@@ -1272,14 +1278,15 @@ meta_window_edge_resistance_for_resize (MetaWindow *window,
proposed_outer_width,
proposed_outer_height);
- window->display->grab_last_user_action_was_snap = snap;
+ saved_flags = flags & ~META_EDGE_RESISTANCE_KEYBOARD_OP;
+ window->display->grab_last_edge_resistance_flags = saved_flags;
+
if (apply_edge_resistance_to_each_side (window->display,
window,
&old_outer,
&new_outer,
timeout_func,
- snap,
- is_keyboard_op,
+ flags,
TRUE))
{
*new_width = new_outer.width;
diff --git a/src/core/edge-resistance.h b/src/core/edge-resistance.h
index c980030c72..4eb6abdca3 100644
--- a/src/core/edge-resistance.h
+++ b/src/core/edge-resistance.h
@@ -24,19 +24,17 @@
#include "core/window-private.h"
-void meta_window_edge_resistance_for_move (MetaWindow *window,
- int *new_x,
- int *new_y,
- GSourceFunc timeout_func,
- gboolean snap,
- gboolean is_keyboard_op);
-void meta_window_edge_resistance_for_resize (MetaWindow *window,
- int *new_width,
- int *new_height,
- MetaGravity gravity,
- GSourceFunc timeout_func,
- gboolean snap,
- gboolean is_keyboard_op);
+void meta_window_edge_resistance_for_move (MetaWindow *window,
+ int *new_x,
+ int *new_y,
+ GSourceFunc timeout_func,
+ MetaEdgeResistanceFlags flags);
+void meta_window_edge_resistance_for_resize (MetaWindow *window,
+ int *new_width,
+ int *new_height,
+ MetaGravity gravity,
+ GSourceFunc timeout_func,
+ MetaEdgeResistanceFlags flags);
#endif /* META_EDGE_RESISTANCE_H */
diff --git a/src/core/keybindings.c b/src/core/keybindings.c
index 5ccacb8637..417294cbd0 100644
--- a/src/core/keybindings.c
+++ b/src/core/keybindings.c
@@ -2400,11 +2400,11 @@ process_keyboard_move_grab (MetaDisplay *display,
MetaWindow *window,
ClutterKeyEvent *event)
{
+ MetaEdgeResistanceFlags flags;
gboolean handled;
MetaRectangle frame_rect;
int x, y;
int incr;
- gboolean smart_snap;
handled = FALSE;
@@ -2420,12 +2420,15 @@ process_keyboard_move_grab (MetaDisplay *display,
x = frame_rect.x;
y = frame_rect.y;
- smart_snap = (event->modifier_state & CLUTTER_SHIFT_MASK) != 0;
+ flags = META_EDGE_RESISTANCE_KEYBOARD_OP;
+
+ if ((event->modifier_state & CLUTTER_SHIFT_MASK) != 0)
+ flags |= META_EDGE_RESISTANCE_SNAP;
#define SMALL_INCREMENT 1
#define NORMAL_INCREMENT 10
- if (smart_snap)
+ if (flags & META_EDGE_RESISTANCE_SNAP)
incr = 1;
else if (event->modifier_state & CLUTTER_CONTROL_MASK)
incr = SMALL_INCREMENT;
@@ -2501,8 +2504,7 @@ process_keyboard_move_grab (MetaDisplay *display,
&x,
&y,
NULL,
- smart_snap,
- TRUE);
+ flags);
meta_window_move_frame (window, TRUE, x, y);
meta_window_update_keyboard_move (window);
@@ -2641,7 +2643,7 @@ process_keyboard_resize_grab (MetaDisplay *display,
int height_inc;
int width_inc;
int width, height;
- gboolean smart_snap;
+ MetaEdgeResistanceFlags flags;
MetaGravity gravity;
handled = FALSE;
@@ -2679,12 +2681,15 @@ process_keyboard_resize_grab (MetaDisplay *display,
gravity = meta_resize_gravity_from_grab_op (display->grab_op);
- smart_snap = (event->modifier_state & CLUTTER_SHIFT_MASK) != 0;
+ flags = META_EDGE_RESISTANCE_KEYBOARD_OP;
+
+ if ((event->modifier_state & CLUTTER_SHIFT_MASK) != 0)
+ flags |= META_EDGE_RESISTANCE_SNAP;
#define SMALL_INCREMENT 1
#define NORMAL_INCREMENT 10
- if (smart_snap)
+ if (flags & META_EDGE_RESISTANCE_SNAP)
{
height_inc = 1;
width_inc = 1;
@@ -2853,8 +2858,7 @@ process_keyboard_resize_grab (MetaDisplay *display,
&height,
gravity,
NULL,
- smart_snap,
- TRUE);
+ flags);
meta_window_resize_frame_with_gravity (window,
TRUE,
diff --git a/src/core/window-private.h b/src/core/window-private.h
index 3872479aae..ef00231087 100644
--- a/src/core/window-private.h
+++ b/src/core/window-private.h
@@ -157,6 +157,13 @@ typedef enum
META_EDGE_CONSTRAINT_MONITOR = 2,
} MetaEdgeConstraint;
+typedef enum
+{
+ META_EDGE_RESISTANCE_DEFAULT = 0,
+ META_EDGE_RESISTANCE_SNAP = 1 << 0,
+ META_EDGE_RESISTANCE_KEYBOARD_OP = 1 << 1,
+} MetaEdgeResistanceFlags;
+
struct _MetaWindow
{
GObject parent_instance;
@@ -843,7 +850,7 @@ void meta_window_set_urgent (MetaWindow *window,
gboolean urgent);
void meta_window_update_resize (MetaWindow *window,
- gboolean snap,
+ MetaEdgeResistanceFlags flags,
int x, int y,
gboolean force);
diff --git a/src/core/window.c b/src/core/window.c
index ce6b01bfdf..9688937861 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -131,16 +131,16 @@ static void meta_window_move_resize_now (MetaWindow *window);
static void meta_window_unqueue (MetaWindow *window, guint queuebits);
-static void update_move (MetaWindow *window,
- gboolean snap,
- int x,
- int y);
+static void update_move (MetaWindow *window,
+ MetaEdgeResistanceFlags flags,
+ int x,
+ int y);
static gboolean update_move_timeout (gpointer data);
-static void update_resize (MetaWindow *window,
- gboolean snap,
- int x,
- int y,
- gboolean force);
+static void update_resize (MetaWindow *window,
+ MetaEdgeResistanceFlags flags,
+ int x,
+ int y,
+ gboolean force);
static gboolean update_resize_timeout (gpointer data);
static gboolean should_be_on_all_workspaces (MetaWindow *window);
@@ -5980,7 +5980,7 @@ update_move_timeout (gpointer data)
MetaWindow *window = data;
update_move (window,
- window->display->grab_last_user_action_was_snap,
+ window->display->grab_last_edge_resistance_flags,
window->display->grab_latest_motion_x,
window->display->grab_latest_motion_y);
@@ -6043,10 +6043,10 @@ update_move_maybe_tile (MetaWindow *window,
}
static void
-update_move (MetaWindow *window,
- gboolean snap,
- int x,
- int y)
+update_move (MetaWindow *window,
+ MetaEdgeResistanceFlags flags,
+ int x,
+ int y)
{
int dx, dy;
int new_x, new_y;
@@ -6086,7 +6086,7 @@ update_move (MetaWindow *window,
shake_threshold = meta_prefs_get_drag_threshold () *
DRAG_THRESHOLD_TO_SHAKE_THRESHOLD_FACTOR;
- if (snap)
+ if (flags & META_EDGE_RESISTANCE_SNAP)
{
/* We don't want to tile while snapping. Also, clear any previous tile
request. */
@@ -6222,8 +6222,7 @@ update_move (MetaWindow *window,
&new_x,
&new_y,
update_move_timeout,
- snap,
- FALSE);
+ flags);
meta_window_move_frame (window, TRUE, new_x, new_y);
}
@@ -6234,7 +6233,7 @@ update_resize_timeout (gpointer data)
MetaWindow *window = data;
update_resize (window,
- window->display->grab_last_user_action_was_snap,
+ window->display->grab_last_edge_resistance_flags,
window->display->grab_latest_motion_x,
window->display->grab_latest_motion_y,
TRUE);
@@ -6242,10 +6241,11 @@ update_resize_timeout (gpointer data)
}
static void
-update_resize (MetaWindow *window,
- gboolean snap,
- int x, int y,
- gboolean force)
+update_resize (MetaWindow *window,
+ MetaEdgeResistanceFlags flags,
+ int x,
+ int y,
+ gboolean force)
{
int dx, dy;
int new_w, new_h;
@@ -6359,8 +6359,7 @@ update_resize (MetaWindow *window,
&new_h,
gravity,
update_resize_timeout,
- snap,
- FALSE);
+ flags);
meta_window_resize_frame_with_gravity (window, TRUE, new_w, new_h, gravity);
@@ -6389,11 +6388,11 @@ maybe_maximize_tiled_window (MetaWindow *window)
void
meta_window_update_resize (MetaWindow *window,
- gboolean snap,
+ MetaEdgeResistanceFlags flags,
int x, int y,
gboolean force)
{
- update_resize (window, snap, x, y, force);
+ update_resize (window, flags, x, y, force);
}
static void
@@ -6401,6 +6400,7 @@ end_grab_op (MetaWindow *window,
const ClutterEvent *event)
{
ClutterModifierType modifiers;
+ MetaEdgeResistanceFlags last_flags;
gfloat x, y;
clutter_event_get_coords (event, &x, &y);
@@ -6413,23 +6413,27 @@ end_grab_op (MetaWindow *window,
* not want a non-snapped movement to occur from the button
* release.
*/
- if (!window->display->grab_last_user_action_was_snap)
+ last_flags = window->display->grab_last_edge_resistance_flags;
+ if ((last_flags & META_EDGE_RESISTANCE_SNAP) == 0)
{
+ MetaEdgeResistanceFlags flags = META_EDGE_RESISTANCE_DEFAULT;
+
+ if (modifiers & CLUTTER_SHIFT_MASK)
+ flags |= META_EDGE_RESISTANCE_SNAP;
+
if (meta_grab_op_is_moving (window->display->grab_op))
{
if (window->display->preview_tile_mode != META_TILE_NONE)
meta_window_tile (window, window->display->preview_tile_mode);
else
- update_move (window,
- modifiers & CLUTTER_SHIFT_MASK,
- x, y);
+ update_move (window, flags, x, y);
}
else if (meta_grab_op_is_resizing (window->display->grab_op))
{
- update_resize (window,
- modifiers & CLUTTER_SHIFT_MASK || window->tile_match != NULL,
- x, y,
- TRUE);
+ if (window->tile_match != NULL)
+ flags |= META_EDGE_RESISTANCE_SNAP;
+
+ update_resize (window, flags, x, y, TRUE);
maybe_maximize_tiled_window (window);
}
}
@@ -6443,6 +6447,7 @@ meta_window_handle_mouse_grab_op_event (MetaWindow *window,
{
ClutterEventSequence *sequence = clutter_event_get_event_sequence (event);
ClutterModifierType modifier_state;
+ MetaEdgeResistanceFlags flags;
gfloat x, y;
switch (event->type)
@@ -6493,20 +6498,22 @@ meta_window_handle_mouse_grab_op_event (MetaWindow *window,
case CLUTTER_MOTION:
modifier_state = clutter_event_get_state (event);
clutter_event_get_coords (event, &x, &y);
+ flags = META_EDGE_RESISTANCE_DEFAULT;
+
+ if (modifier_state & CLUTTER_SHIFT_MASK)
+ flags |= META_EDGE_RESISTANCE_SNAP;
meta_display_check_threshold_reached (window->display, x, y);
if (meta_grab_op_is_moving (window->display->grab_op))
{
- update_move (window,
- modifier_state & CLUTTER_SHIFT_MASK,
- x, y);
+ update_move (window, flags, x, y);
}
else if (meta_grab_op_is_resizing (window->display->grab_op))
{
- update_resize (window,
- modifier_state & CLUTTER_SHIFT_MASK || window->tile_match != NULL,
- x, y,
- FALSE);
+ if (window->tile_match != NULL)
+ flags |= META_EDGE_RESISTANCE_SNAP;
+
+ update_resize (window, flags, x, y, FALSE);
}
return TRUE;
diff --git a/src/x11/window-x11.c b/src/x11/window-x11.c
index 0d85a0d0aa..2b191c2a1f 100644
--- a/src/x11/window-x11.c
+++ b/src/x11/window-x11.c
@@ -1226,7 +1226,7 @@ sync_request_timeout (gpointer data)
meta_grab_op_is_resizing (window->display->grab_op))
{
meta_window_update_resize (window,
- window->display->grab_last_user_action_was_snap,
+ window->display->grab_last_edge_resistance_flags,
window->display->grab_latest_motion_x,
window->display->grab_latest_motion_y,
TRUE);
@@ -4028,7 +4028,7 @@ meta_window_x11_update_sync_request_counter (MetaWindow *window,
/* This means we are ready for another configure;
* no pointer round trip here, to keep in sync */
meta_window_update_resize (window,
- window->display->grab_last_user_action_was_snap,
+ window->display->grab_last_edge_resistance_flags,
window->display->grab_latest_motion_x,
window->display->grab_latest_motion_y,
TRUE);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]