aboutsummaryrefslogtreecommitdiff
path: root/sway/input
diff options
context:
space:
mode:
authorKenny Levinsen <kl@kl.wtf>2021-02-12 23:22:51 +0100
committerTudor Brindus <me@tbrindus.ca>2021-02-16 22:05:00 -0500
commita047b5ee4a2a67d30d93641ff86531d54b8e0879 (patch)
tree271666c6254e4fabf943c1153224059411a5ce56 /sway/input
parent28cadf558090854ace1df1a0a64f5fbc059541c0 (diff)
container: Move pending state to state struct
Pending state is currently inlined directly in the container struct, while the current state is in a state struct. A side-effect of this is that it is not immediately obvious that pending double-buffered state is accessed, nor is it obvious what state is double-buffered. Instead, use the state struct for both current and pending.
Diffstat (limited to 'sway/input')
-rw-r--r--sway/input/cursor.c16
-rw-r--r--sway/input/seat.c20
-rw-r--r--sway/input/seatop_default.c32
-rw-r--r--sway/input/seatop_move_floating.c6
-rw-r--r--sway/input/seatop_move_tiling.c38
-rw-r--r--sway/input/seatop_resize_floating.c32
-rw-r--r--sway/input/seatop_resize_tiling.c24
7 files changed, 84 insertions, 84 deletions
diff --git a/sway/input/cursor.c b/sway/input/cursor.c
index b40e0299..cbb5c6e9 100644
--- a/sway/input/cursor.c
+++ b/sway/input/cursor.c
@@ -824,8 +824,8 @@ static void check_constraint_region(struct sway_cursor *cursor) {
struct sway_container *con = view->container;
- double sx = cursor->cursor->x - con->content_x + view->geometry.x;
- double sy = cursor->cursor->y - con->content_y + view->geometry.y;
+ double sx = cursor->cursor->x - con->pending.content_x + view->geometry.x;
+ double sy = cursor->cursor->y - con->pending.content_y + view->geometry.y;
if (!pixman_region32_contains_point(region,
floor(sx), floor(sy), NULL)) {
@@ -836,8 +836,8 @@ static void check_constraint_region(struct sway_cursor *cursor) {
double sy = (boxes[0].y1 + boxes[0].y2) / 2.;
wlr_cursor_warp_closest(cursor->cursor, NULL,
- sx + con->content_x - view->geometry.x,
- sy + con->content_y - view->geometry.y);
+ sx + con->pending.content_x - view->geometry.x,
+ sy + con->pending.content_y - view->geometry.y);
cursor_rebase(cursor);
}
@@ -1157,8 +1157,8 @@ void cursor_warp_to_container(struct sway_cursor *cursor,
return;
}
- double x = container->x + container->width / 2.0;
- double y = container->y + container->height / 2.0;
+ double x = container->pending.x + container->pending.width / 2.0;
+ double y = container->pending.y + container->pending.height / 2.0;
wlr_cursor_warp(cursor->cursor, NULL, x, y);
cursor_unhide(cursor);
@@ -1271,8 +1271,8 @@ static void warp_to_constraint_cursor_hint(struct sway_cursor *cursor) {
struct sway_view *view = view_from_wlr_surface(constraint->surface);
struct sway_container *con = view->container;
- double lx = sx + con->content_x - view->geometry.x;
- double ly = sy + con->content_y - view->geometry.y;
+ double lx = sx + con->pending.content_x - view->geometry.x;
+ double ly = sy + con->pending.content_y - view->geometry.y;
wlr_cursor_warp(cursor->cursor, NULL, lx, ly);
diff --git a/sway/input/seat.c b/sway/input/seat.c
index 3c0d9a29..e6e1d4fb 100644
--- a/sway/input/seat.c
+++ b/sway/input/seat.c
@@ -309,8 +309,8 @@ static void handle_seat_node_destroy(struct wl_listener *listener, void *data) {
// Setting focus_inactive
focus = seat_get_focus_inactive(seat, &root->node);
seat_set_raw_focus(seat, next_focus);
- if (focus->type == N_CONTAINER && focus->sway_container->workspace) {
- seat_set_raw_focus(seat, &focus->sway_container->workspace->node);
+ if (focus->type == N_CONTAINER && focus->sway_container->pending.workspace) {
+ seat_set_raw_focus(seat, &focus->sway_container->pending.workspace->node);
}
seat_set_raw_focus(seat, focus);
}
@@ -1086,7 +1086,7 @@ void seat_set_focus(struct sway_seat *seat, struct sway_node *node) {
}
struct sway_workspace *new_workspace = node->type == N_WORKSPACE ?
- node->sway_workspace : node->sway_container->workspace;
+ node->sway_workspace : node->sway_container->pending.workspace;
struct sway_container *container = node->type == N_CONTAINER ?
node->sway_container : NULL;
@@ -1135,10 +1135,10 @@ void seat_set_focus(struct sway_seat *seat, struct sway_node *node) {
// Put the container parents on the focus stack, then the workspace, then
// the focused container.
if (container) {
- struct sway_container *parent = container->parent;
+ struct sway_container *parent = container->pending.parent;
while (parent) {
seat_set_raw_focus(seat, &parent->node);
- parent = parent->parent;
+ parent = parent->pending.parent;
}
}
if (new_workspace) {
@@ -1327,7 +1327,7 @@ struct sway_container *seat_get_focus_inactive_tiling(struct sway_seat *seat,
struct sway_node *node = current->node;
if (node->type == N_CONTAINER &&
!container_is_floating_or_child(node->sway_container) &&
- node->sway_container->workspace == workspace) {
+ node->sway_container->pending.workspace == workspace) {
return node->sway_container;
}
}
@@ -1344,7 +1344,7 @@ struct sway_container *seat_get_focus_inactive_floating(struct sway_seat *seat,
struct sway_node *node = current->node;
if (node->type == N_CONTAINER &&
container_is_floating_or_child(node->sway_container) &&
- node->sway_container->workspace == workspace) {
+ node->sway_container->pending.workspace == workspace) {
return node->sway_container;
}
}
@@ -1392,7 +1392,7 @@ struct sway_workspace *seat_get_focused_workspace(struct sway_seat *seat) {
return NULL;
}
if (focus->type == N_CONTAINER) {
- return focus->sway_container->workspace;
+ return focus->sway_container->pending.workspace;
}
if (focus->type == N_WORKSPACE) {
return focus->sway_workspace;
@@ -1405,8 +1405,8 @@ struct sway_workspace *seat_get_last_known_workspace(struct sway_seat *seat) {
wl_list_for_each(current, &seat->focus_stack, link) {
struct sway_node *node = current->node;
if (node->type == N_CONTAINER &&
- node->sway_container->workspace) {
- return node->sway_container->workspace;
+ node->sway_container->pending.workspace) {
+ return node->sway_container->pending.workspace;
} else if (node->type == N_WORKSPACE) {
return node->sway_workspace;
}
diff --git a/sway/input/seatop_default.c b/sway/input/seatop_default.c
index 10d97309..f9eb8c8a 100644
--- a/sway/input/seatop_default.c
+++ b/sway/input/seatop_default.c
@@ -60,7 +60,7 @@ static bool edge_is_external(struct sway_container *cont, enum wlr_edges edge) {
return false;
}
}
- cont = cont->parent;
+ cont = cont->pending.parent;
}
return true;
}
@@ -70,25 +70,25 @@ static enum wlr_edges find_edge(struct sway_container *cont,
if (!cont->view || (surface && cont->view->surface != surface)) {
return WLR_EDGE_NONE;
}
- if (cont->border == B_NONE || !cont->border_thickness ||
- cont->border == B_CSD) {
+ if (cont->pending.border == B_NONE || !cont->pending.border_thickness ||
+ cont->pending.border == B_CSD) {
return WLR_EDGE_NONE;
}
- if (cont->fullscreen_mode) {
+ if (cont->pending.fullscreen_mode) {
return WLR_EDGE_NONE;
}
enum wlr_edges edge = 0;
- if (cursor->cursor->x < cont->x + cont->border_thickness) {
+ if (cursor->cursor->x < cont->pending.x + cont->pending.border_thickness) {
edge |= WLR_EDGE_LEFT;
}
- if (cursor->cursor->y < cont->y + cont->border_thickness) {
+ if (cursor->cursor->y < cont->pending.y + cont->pending.border_thickness) {
edge |= WLR_EDGE_TOP;
}
- if (cursor->cursor->x >= cont->x + cont->width - cont->border_thickness) {
+ if (cursor->cursor->x >= cont->pending.x + cont->pending.width - cont->pending.border_thickness) {
edge |= WLR_EDGE_RIGHT;
}
- if (cursor->cursor->y >= cont->y + cont->height - cont->border_thickness) {
+ if (cursor->cursor->y >= cont->pending.y + cont->pending.height - cont->pending.border_thickness) {
edge |= WLR_EDGE_BOTTOM;
}
@@ -251,7 +251,7 @@ static void handle_tablet_tool_tip(struct sway_seat *seat,
// Handle moving a tiling container
if (config->tiling_drag && mod_pressed && !is_floating_or_child &&
- cont->fullscreen_mode == FULLSCREEN_NONE) {
+ cont->pending.fullscreen_mode == FULLSCREEN_NONE) {
seatop_begin_move_tiling(seat, cont);
return;
}
@@ -386,7 +386,7 @@ static void handle_button(struct sway_seat *seat, uint32_t time_msec,
struct sway_container *cont_to_focus = cont;
enum sway_container_layout layout = container_parent_layout(cont);
if (layout == L_TABBED || layout == L_STACKED) {
- cont_to_focus = seat_get_focus_inactive_view(seat, &cont->parent->node);
+ cont_to_focus = seat_get_focus_inactive_view(seat, &cont->pending.parent->node);
}
seat_set_focus_container(seat, cont_to_focus);
@@ -402,9 +402,9 @@ static void handle_button(struct sway_seat *seat, uint32_t time_msec,
BTN_LEFT : BTN_RIGHT;
if (button == btn_resize) {
edge = 0;
- edge |= cursor->cursor->x > cont->x + cont->width / 2 ?
+ edge |= cursor->cursor->x > cont->pending.x + cont->pending.width / 2 ?
WLR_EDGE_RIGHT : WLR_EDGE_LEFT;
- edge |= cursor->cursor->y > cont->y + cont->height / 2 ?
+ edge |= cursor->cursor->y > cont->pending.y + cont->pending.height / 2 ?
WLR_EDGE_BOTTOM : WLR_EDGE_TOP;
const char *image = NULL;
@@ -451,9 +451,9 @@ static void handle_button(struct sway_seat *seat, uint32_t time_msec,
if (mod_pressed && button == btn_resize) {
struct sway_container *floater = container_toplevel_ancestor(cont);
edge = 0;
- edge |= cursor->cursor->x > floater->x + floater->width / 2 ?
+ edge |= cursor->cursor->x > floater->pending.x + floater->pending.width / 2 ?
WLR_EDGE_RIGHT : WLR_EDGE_LEFT;
- edge |= cursor->cursor->y > floater->y + floater->height / 2 ?
+ edge |= cursor->cursor->y > floater->pending.y + floater->pending.height / 2 ?
WLR_EDGE_BOTTOM : WLR_EDGE_TOP;
seatop_begin_resize_floating(seat, floater, edge);
return;
@@ -463,7 +463,7 @@ static void handle_button(struct sway_seat *seat, uint32_t time_msec,
// Handle moving a tiling container
if (config->tiling_drag && (mod_pressed || on_titlebar) &&
state == WLR_BUTTON_PRESSED && !is_floating_or_child &&
- cont && cont->fullscreen_mode == FULLSCREEN_NONE) {
+ cont && cont->pending.fullscreen_mode == FULLSCREEN_NONE) {
struct sway_container *focus = seat_get_focused_container(seat);
bool focused = focus == cont || container_has_ancestor(focus, cont);
if (on_titlebar && !focused) {
@@ -674,7 +674,7 @@ static void handle_pointer_axis(struct sway_seat *seat,
bool on_border = edge != WLR_EDGE_NONE;
bool on_titlebar = cont && !on_border && !surface;
bool on_titlebar_border = cont && on_border &&
- cursor->cursor->y < cont->content_y;
+ cursor->cursor->y < cont->pending.content_y;
bool on_contents = cont && !on_border && surface;
bool on_workspace = node && node->type == N_WORKSPACE;
float scroll_factor =
diff --git a/sway/input/seatop_move_floating.c b/sway/input/seatop_move_floating.c
index 6683be21..ddcd4c53 100644
--- a/sway/input/seatop_move_floating.c
+++ b/sway/input/seatop_move_floating.c
@@ -15,7 +15,7 @@ static void finalize_move(struct sway_seat *seat) {
// We "move" the container to its own location
// so it discovers its output again.
- container_floating_move_to(e->con, e->con->x, e->con->y);
+ container_floating_move_to(e->con, e->con->pending.x, e->con->pending.y);
transaction_commit_dirty();
seatop_begin_default(seat);
@@ -70,8 +70,8 @@ void seatop_begin_move_floating(struct sway_seat *seat,
return;
}
e->con = con;
- e->dx = cursor->cursor->x - con->x;
- e->dy = cursor->cursor->y - con->y;
+ e->dx = cursor->cursor->x - con->pending.x;
+ e->dy = cursor->cursor->y - con->pending.y;
seat->seatop_impl = &seatop_impl;
seat->seatop_data = e;
diff --git a/sway/input/seatop_move_tiling.c b/sway/input/seatop_move_tiling.c
index 7d9ecd8f..446612c6 100644
--- a/sway/input/seatop_move_tiling.c
+++ b/sway/input/seatop_move_tiling.c
@@ -120,8 +120,8 @@ static void handle_motion_postthreshold(struct sway_seat *seat) {
// Deny moving within own workspace if this is the only child
struct sway_container *con = node->sway_container;
- if (workspace_num_tiling_views(e->con->workspace) == 1 &&
- con->workspace == e->con->workspace) {
+ if (workspace_num_tiling_views(e->con->pending.workspace) == 1 &&
+ con->pending.workspace == e->con->pending.workspace) {
e->target_node = NULL;
e->target_edge = WLR_EDGE_NONE;
return;
@@ -133,8 +133,8 @@ static void handle_motion_postthreshold(struct sway_seat *seat) {
enum wlr_edges edge = WLR_EDGE_NONE;
enum sway_container_layout layout = container_parent_layout(con);
struct wlr_box parent;
- con->parent ? container_get_box(con->parent, &parent) :
- workspace_get_box(con->workspace, &parent);
+ con->pending.parent ? container_get_box(con->pending.parent, &parent) :
+ workspace_get_box(con->pending.workspace, &parent);
if (layout == L_HORIZ || layout == L_TABBED) {
if (cursor->cursor->y < parent.y + DROP_LAYOUT_BORDER) {
edge = WLR_EDGE_TOP;
@@ -161,7 +161,7 @@ static void handle_motion_postthreshold(struct sway_seat *seat) {
desktop_damage_box(&e->drop_box);
return;
}
- con = con->parent;
+ con = con->pending.parent;
}
// Use the hovered view - but we must be over the actual surface
@@ -174,23 +174,23 @@ static void handle_motion_postthreshold(struct sway_seat *seat) {
}
// Find the closest edge
- size_t thickness = fmin(con->content_width, con->content_height) * 0.3;
+ size_t thickness = fmin(con->pending.content_width, con->pending.content_height) * 0.3;
size_t closest_dist = INT_MAX;
size_t dist;
e->target_edge = WLR_EDGE_NONE;
- if ((dist = cursor->cursor->y - con->y) < closest_dist) {
+ if ((dist = cursor->cursor->y - con->pending.y) < closest_dist) {
closest_dist = dist;
e->target_edge = WLR_EDGE_TOP;
}
- if ((dist = cursor->cursor->x - con->x) < closest_dist) {
+ if ((dist = cursor->cursor->x - con->pending.x) < closest_dist) {
closest_dist = dist;
e->target_edge = WLR_EDGE_LEFT;
}
- if ((dist = con->x + con->width - cursor->cursor->x) < closest_dist) {
+ if ((dist = con->pending.x + con->pending.width - cursor->cursor->x) < closest_dist) {
closest_dist = dist;
e->target_edge = WLR_EDGE_RIGHT;
}
- if ((dist = con->y + con->height - cursor->cursor->y) < closest_dist) {
+ if ((dist = con->pending.y + con->pending.height - cursor->cursor->y) < closest_dist) {
closest_dist = dist;
e->target_edge = WLR_EDGE_BOTTOM;
}
@@ -200,10 +200,10 @@ static void handle_motion_postthreshold(struct sway_seat *seat) {
}
e->target_node = node;
- e->drop_box.x = con->content_x;
- e->drop_box.y = con->content_y;
- e->drop_box.width = con->content_width;
- e->drop_box.height = con->content_height;
+ e->drop_box.x = con->pending.content_x;
+ e->drop_box.y = con->pending.content_y;
+ e->drop_box.width = con->pending.content_width;
+ e->drop_box.height = con->pending.content_height;
resize_box(&e->drop_box, e->target_edge, thickness);
desktop_damage_box(&e->drop_box);
}
@@ -234,11 +234,11 @@ static void finalize_move(struct sway_seat *seat) {
}
struct sway_container *con = e->con;
- struct sway_container *old_parent = con->parent;
- struct sway_workspace *old_ws = con->workspace;
+ struct sway_container *old_parent = con->pending.parent;
+ struct sway_workspace *old_ws = con->pending.workspace;
struct sway_node *target_node = e->target_node;
struct sway_workspace *new_ws = target_node->type == N_WORKSPACE ?
- target_node->sway_workspace : target_node->sway_container->workspace;
+ target_node->sway_workspace : target_node->sway_container->pending.workspace;
enum wlr_edges edge = e->target_edge;
int after = edge != WLR_EDGE_TOP && edge != WLR_EDGE_LEFT;
bool swap = edge == WLR_EDGE_NONE && target_node->type == N_CONTAINER;
@@ -285,8 +285,8 @@ static void finalize_move(struct sway_seat *seat) {
int index = list_find(siblings, con);
struct sway_container *sibling = index == 0 ?
siblings->items[1] : siblings->items[index - 1];
- con->width = sibling->width;
- con->height = sibling->height;
+ con->pending.width = sibling->pending.width;
+ con->pending.height = sibling->pending.height;
con->width_fraction = sibling->width_fraction;
con->height_fraction = sibling->height_fraction;
}
diff --git a/sway/input/seatop_resize_floating.c b/sway/input/seatop_resize_floating.c
index 78dfe29f..8400a4b3 100644
--- a/sway/input/seatop_resize_floating.c
+++ b/sway/input/seatop_resize_floating.c
@@ -118,21 +118,21 @@ static void handle_pointer_motion(struct sway_seat *seat, uint32_t time_msec) {
// Determine the amounts we need to bump everything relative to the current
// size.
- int relative_grow_width = width - con->width;
- int relative_grow_height = height - con->height;
- int relative_grow_x = (e->ref_con_lx + grow_x) - con->x;
- int relative_grow_y = (e->ref_con_ly + grow_y) - con->y;
+ int relative_grow_width = width - con->pending.width;
+ int relative_grow_height = height - con->pending.height;
+ int relative_grow_x = (e->ref_con_lx + grow_x) - con->pending.x;
+ int relative_grow_y = (e->ref_con_ly + grow_y) - con->pending.y;
// Actually resize stuff
- con->x += relative_grow_x;
- con->y += relative_grow_y;
- con->width += relative_grow_width;
- con->height += relative_grow_height;
+ con->pending.x += relative_grow_x;
+ con->pending.y += relative_grow_y;
+ con->pending.width += relative_grow_width;
+ con->pending.height += relative_grow_height;
- con->content_x += relative_grow_x;
- con->content_y += relative_grow_y;
- con->content_width += relative_grow_width;
- con->content_height += relative_grow_height;
+ con->pending.content_x += relative_grow_x;
+ con->pending.content_y += relative_grow_y;
+ con->pending.content_width += relative_grow_width;
+ con->pending.content_height += relative_grow_height;
arrange_container(con);
transaction_commit_dirty();
@@ -169,10 +169,10 @@ void seatop_begin_resize_floating(struct sway_seat *seat,
e->edge = edge == WLR_EDGE_NONE ? WLR_EDGE_BOTTOM | WLR_EDGE_RIGHT : edge;
e->ref_lx = seat->cursor->cursor->x;
e->ref_ly = seat->cursor->cursor->y;
- e->ref_con_lx = con->x;
- e->ref_con_ly = con->y;
- e->ref_width = con->width;
- e->ref_height = con->height;
+ e->ref_con_lx = con->pending.x;
+ e->ref_con_ly = con->pending.y;
+ e->ref_width = con->pending.width;
+ e->ref_height = con->pending.height;
seat->seatop_impl = &seatop_impl;
seat->seatop_data = e;
diff --git a/sway/input/seatop_resize_tiling.c b/sway/input/seatop_resize_tiling.c
index c5fe269e..869d11b5 100644
--- a/sway/input/seatop_resize_tiling.c
+++ b/sway/input/seatop_resize_tiling.c
@@ -53,19 +53,19 @@ static void handle_button(struct sway_seat *seat, uint32_t time_msec,
if (e->h_con) {
container_set_resizing(e->h_con, false);
container_set_resizing(e->h_sib, false);
- if (e->h_con->parent) {
- arrange_container(e->h_con->parent);
+ if (e->h_con->pending.parent) {
+ arrange_container(e->h_con->pending.parent);
} else {
- arrange_workspace(e->h_con->workspace);
+ arrange_workspace(e->h_con->pending.workspace);
}
}
if (e->v_con) {
container_set_resizing(e->v_con, false);
container_set_resizing(e->v_sib, false);
- if (e->v_con->parent) {
- arrange_container(e->v_con->parent);
+ if (e->v_con->pending.parent) {
+ arrange_container(e->v_con->pending.parent);
} else {
- arrange_workspace(e->v_con->workspace);
+ arrange_workspace(e->v_con->pending.workspace);
}
}
transaction_commit_dirty();
@@ -82,16 +82,16 @@ static void handle_pointer_motion(struct sway_seat *seat, uint32_t time_msec) {
if (e->h_con) {
if (e->edge & WLR_EDGE_LEFT) {
- amount_x = (e->h_con_orig_width - moved_x) - e->h_con->width;
+ amount_x = (e->h_con_orig_width - moved_x) - e->h_con->pending.width;
} else if (e->edge & WLR_EDGE_RIGHT) {
- amount_x = (e->h_con_orig_width + moved_x) - e->h_con->width;
+ amount_x = (e->h_con_orig_width + moved_x) - e->h_con->pending.width;
}
}
if (e->v_con) {
if (e->edge & WLR_EDGE_TOP) {
- amount_y = (e->v_con_orig_height - moved_y) - e->v_con->height;
+ amount_y = (e->v_con_orig_height - moved_y) - e->v_con->pending.height;
} else if (e->edge & WLR_EDGE_BOTTOM) {
- amount_y = (e->v_con_orig_height + moved_y) - e->v_con->height;
+ amount_y = (e->v_con_orig_height + moved_y) - e->v_con->pending.height;
}
}
@@ -143,7 +143,7 @@ void seatop_begin_resize_tiling(struct sway_seat *seat,
if (e->h_con) {
container_set_resizing(e->h_con, true);
container_set_resizing(e->h_sib, true);
- e->h_con_orig_width = e->h_con->width;
+ e->h_con_orig_width = e->h_con->pending.width;
}
}
if (edge & (WLR_EDGE_TOP | WLR_EDGE_BOTTOM)) {
@@ -154,7 +154,7 @@ void seatop_begin_resize_tiling(struct sway_seat *seat,
if (e->v_con) {
container_set_resizing(e->v_con, true);
container_set_resizing(e->v_sib, true);
- e->v_con_orig_height = e->v_con->height;
+ e->v_con_orig_height = e->v_con->pending.height;
}
}