diff options
author | Kenny Levinsen <kl@kl.wtf> | 2021-02-12 23:22:51 +0100 |
---|---|---|
committer | Tudor Brindus <me@tbrindus.ca> | 2021-02-16 22:05:00 -0500 |
commit | a047b5ee4a2a67d30d93641ff86531d54b8e0879 (patch) | |
tree | 271666c6254e4fabf943c1153224059411a5ce56 /sway/commands | |
parent | Add missing transaction commits to seatop_default (diff) | |
download | sway-a047b5ee4a2a67d30d93641ff86531d54b8e0879.tar.gz sway-a047b5ee4a2a67d30d93641ff86531d54b8e0879.tar.zst sway-a047b5ee4a2a67d30d93641ff86531d54b8e0879.zip |
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/commands')
-rw-r--r-- | sway/commands/border.c | 8 | ||||
-rw-r--r-- | sway/commands/floating.c | 8 | ||||
-rw-r--r-- | sway/commands/focus.c | 26 | ||||
-rw-r--r-- | sway/commands/fullscreen.c | 10 | ||||
-rw-r--r-- | sway/commands/layout.c | 12 | ||||
-rw-r--r-- | sway/commands/move.c | 148 | ||||
-rw-r--r-- | sway/commands/resize.c | 112 | ||||
-rw-r--r-- | sway/commands/scratchpad.c | 12 | ||||
-rw-r--r-- | sway/commands/split.c | 2 | ||||
-rw-r--r-- | sway/commands/sticky.c | 6 | ||||
-rw-r--r-- | sway/commands/swap.c | 56 |
11 files changed, 200 insertions, 200 deletions
diff --git a/sway/commands/border.c b/sway/commands/border.c index 647663ac..7818fc96 100644 --- a/sway/commands/border.c +++ b/sway/commands/border.c | |||
@@ -19,11 +19,11 @@ static void set_border(struct sway_container *con, | |||
19 | view_set_csd_from_server(con->view, false); | 19 | view_set_csd_from_server(con->view, false); |
20 | } else if (!con->view->using_csd && new_border == B_CSD) { | 20 | } else if (!con->view->using_csd && new_border == B_CSD) { |
21 | view_set_csd_from_server(con->view, true); | 21 | view_set_csd_from_server(con->view, true); |
22 | con->saved_border = con->border; | 22 | con->saved_border = con->pending.border; |
23 | } | 23 | } |
24 | } | 24 | } |
25 | if (new_border != B_CSD || container_is_floating(con)) { | 25 | if (new_border != B_CSD || container_is_floating(con)) { |
26 | con->border = new_border; | 26 | con->pending.border = new_border; |
27 | } | 27 | } |
28 | if (con->view) { | 28 | if (con->view) { |
29 | con->view->using_csd = new_border == B_CSD; | 29 | con->view->using_csd = new_border == B_CSD; |
@@ -35,7 +35,7 @@ static void border_toggle(struct sway_container *con) { | |||
35 | set_border(con, B_NONE); | 35 | set_border(con, B_NONE); |
36 | return; | 36 | return; |
37 | } | 37 | } |
38 | switch (con->border) { | 38 | switch (con->pending.border) { |
39 | case B_NONE: | 39 | case B_NONE: |
40 | set_border(con, B_PIXEL); | 40 | set_border(con, B_PIXEL); |
41 | break; | 41 | break; |
@@ -88,7 +88,7 @@ struct cmd_results *cmd_border(int argc, char **argv) { | |||
88 | "or 'border pixel <px>'"); | 88 | "or 'border pixel <px>'"); |
89 | } | 89 | } |
90 | if (argc == 2) { | 90 | if (argc == 2) { |
91 | container->border_thickness = atoi(argv[1]); | 91 | container->pending.border_thickness = atoi(argv[1]); |
92 | } | 92 | } |
93 | 93 | ||
94 | if (container_is_floating(container)) { | 94 | if (container_is_floating(container)) { |
diff --git a/sway/commands/floating.c b/sway/commands/floating.c index ce123345..74f6522c 100644 --- a/sway/commands/floating.c +++ b/sway/commands/floating.c | |||
@@ -40,8 +40,8 @@ struct cmd_results *cmd_floating(int argc, char **argv) { | |||
40 | // If the container is in a floating split container, | 40 | // If the container is in a floating split container, |
41 | // operate on the split container instead of the child. | 41 | // operate on the split container instead of the child. |
42 | if (container_is_floating_or_child(container)) { | 42 | if (container_is_floating_or_child(container)) { |
43 | while (container->parent) { | 43 | while (container->pending.parent) { |
44 | container = container->parent; | 44 | container = container->pending.parent; |
45 | } | 45 | } |
46 | } | 46 | } |
47 | 47 | ||
@@ -51,8 +51,8 @@ struct cmd_results *cmd_floating(int argc, char **argv) { | |||
51 | container_set_floating(container, wants_floating); | 51 | container_set_floating(container, wants_floating); |
52 | 52 | ||
53 | // Floating containers in the scratchpad should be ignored | 53 | // Floating containers in the scratchpad should be ignored |
54 | if (container->workspace) { | 54 | if (container->pending.workspace) { |
55 | arrange_workspace(container->workspace); | 55 | arrange_workspace(container->pending.workspace); |
56 | } | 56 | } |
57 | 57 | ||
58 | return cmd_results_new(CMD_SUCCESS, NULL); | 58 | return cmd_results_new(CMD_SUCCESS, NULL); |
diff --git a/sway/commands/focus.c b/sway/commands/focus.c index 79b7aed5..6b4f57c1 100644 --- a/sway/commands/focus.c +++ b/sway/commands/focus.c | |||
@@ -141,9 +141,9 @@ static struct sway_node *node_get_in_direction_tiling( | |||
141 | struct sway_container *wrap_candidate = NULL; | 141 | struct sway_container *wrap_candidate = NULL; |
142 | struct sway_container *current = container; | 142 | struct sway_container *current = container; |
143 | while (current) { | 143 | while (current) { |
144 | if (current->fullscreen_mode == FULLSCREEN_WORKSPACE) { | 144 | if (current->pending.fullscreen_mode == FULLSCREEN_WORKSPACE) { |
145 | // Fullscreen container with a direction - go straight to outputs | 145 | // Fullscreen container with a direction - go straight to outputs |
146 | struct sway_output *output = current->workspace->output; | 146 | struct sway_output *output = current->pending.workspace->output; |
147 | struct sway_output *new_output = | 147 | struct sway_output *new_output = |
148 | output_get_in_direction(output, dir); | 148 | output_get_in_direction(output, dir); |
149 | if (!new_output) { | 149 | if (!new_output) { |
@@ -151,7 +151,7 @@ static struct sway_node *node_get_in_direction_tiling( | |||
151 | } | 151 | } |
152 | return get_node_in_output_direction(new_output, dir); | 152 | return get_node_in_output_direction(new_output, dir); |
153 | } | 153 | } |
154 | if (current->fullscreen_mode == FULLSCREEN_GLOBAL) { | 154 | if (current->pending.fullscreen_mode == FULLSCREEN_GLOBAL) { |
155 | return NULL; | 155 | return NULL; |
156 | } | 156 | } |
157 | 157 | ||
@@ -202,11 +202,11 @@ static struct sway_node *node_get_in_direction_tiling( | |||
202 | } | 202 | } |
203 | } | 203 | } |
204 | 204 | ||
205 | current = current->parent; | 205 | current = current->pending.parent; |
206 | } | 206 | } |
207 | 207 | ||
208 | // Check a different output | 208 | // Check a different output |
209 | struct sway_output *output = container->workspace->output; | 209 | struct sway_output *output = container->pending.workspace->output; |
210 | struct sway_output *new_output = output_get_in_direction(output, dir); | 210 | struct sway_output *new_output = output_get_in_direction(output, dir); |
211 | if ((config->focus_wrapping != WRAP_WORKSPACE || | 211 | if ((config->focus_wrapping != WRAP_WORKSPACE || |
212 | container->node.type == N_WORKSPACE) && new_output) { | 212 | container->node.type == N_WORKSPACE) && new_output) { |
@@ -226,23 +226,23 @@ static struct sway_node *node_get_in_direction_tiling( | |||
226 | static struct sway_node *node_get_in_direction_floating( | 226 | static struct sway_node *node_get_in_direction_floating( |
227 | struct sway_container *con, struct sway_seat *seat, | 227 | struct sway_container *con, struct sway_seat *seat, |
228 | enum wlr_direction dir) { | 228 | enum wlr_direction dir) { |
229 | double ref_lx = con->x + con->width / 2; | 229 | double ref_lx = con->pending.x + con->pending.width / 2; |
230 | double ref_ly = con->y + con->height / 2; | 230 | double ref_ly = con->pending.y + con->pending.height / 2; |
231 | double closest_distance = DBL_MAX; | 231 | double closest_distance = DBL_MAX; |
232 | struct sway_container *closest_con = NULL; | 232 | struct sway_container *closest_con = NULL; |
233 | 233 | ||
234 | if (!con->workspace) { | 234 | if (!con->pending.workspace) { |
235 | return NULL; | 235 | return NULL; |
236 | } | 236 | } |
237 | 237 | ||
238 | for (int i = 0; i < con->workspace->floating->length; i++) { | 238 | for (int i = 0; i < con->pending.workspace->floating->length; i++) { |
239 | struct sway_container *floater = con->workspace->floating->items[i]; | 239 | struct sway_container *floater = con->pending.workspace->floating->items[i]; |
240 | if (floater == con) { | 240 | if (floater == con) { |
241 | continue; | 241 | continue; |
242 | } | 242 | } |
243 | float distance = dir == WLR_DIRECTION_LEFT || dir == WLR_DIRECTION_RIGHT | 243 | float distance = dir == WLR_DIRECTION_LEFT || dir == WLR_DIRECTION_RIGHT |
244 | ? (floater->x + floater->width / 2) - ref_lx | 244 | ? (floater->pending.x + floater->pending.width / 2) - ref_lx |
245 | : (floater->y + floater->height / 2) - ref_ly; | 245 | : (floater->pending.y + floater->pending.height / 2) - ref_ly; |
246 | if (dir == WLR_DIRECTION_LEFT || dir == WLR_DIRECTION_UP) { | 246 | if (dir == WLR_DIRECTION_LEFT || dir == WLR_DIRECTION_UP) { |
247 | distance = -distance; | 247 | distance = -distance; |
248 | } | 248 | } |
@@ -334,7 +334,7 @@ static struct cmd_results *focus_output(struct sway_seat *seat, | |||
334 | static struct cmd_results *focus_parent(void) { | 334 | static struct cmd_results *focus_parent(void) { |
335 | struct sway_seat *seat = config->handler_context.seat; | 335 | struct sway_seat *seat = config->handler_context.seat; |
336 | struct sway_container *con = config->handler_context.container; | 336 | struct sway_container *con = config->handler_context.container; |
337 | if (!con || con->fullscreen_mode) { | 337 | if (!con || con->pending.fullscreen_mode) { |
338 | return cmd_results_new(CMD_SUCCESS, NULL); | 338 | return cmd_results_new(CMD_SUCCESS, NULL); |
339 | } | 339 | } |
340 | struct sway_node *parent = node_get_parent(&con->node); | 340 | struct sway_node *parent = node_get_parent(&con->node); |
diff --git a/sway/commands/fullscreen.c b/sway/commands/fullscreen.c index 3392a7f7..a5d30d0e 100644 --- a/sway/commands/fullscreen.c +++ b/sway/commands/fullscreen.c | |||
@@ -27,15 +27,15 @@ struct cmd_results *cmd_fullscreen(int argc, char **argv) { | |||
27 | } | 27 | } |
28 | 28 | ||
29 | // If in the scratchpad, operate on the highest container | 29 | // If in the scratchpad, operate on the highest container |
30 | if (container && !container->workspace) { | 30 | if (container && !container->pending.workspace) { |
31 | while (container->parent) { | 31 | while (container->pending.parent) { |
32 | container = container->parent; | 32 | container = container->pending.parent; |
33 | } | 33 | } |
34 | } | 34 | } |
35 | 35 | ||
36 | bool is_fullscreen = false; | 36 | bool is_fullscreen = false; |
37 | for (struct sway_container *curr = container; curr; curr = curr->parent) { | 37 | for (struct sway_container *curr = container; curr; curr = curr->pending.parent) { |
38 | if (curr->fullscreen_mode != FULLSCREEN_NONE) { | 38 | if (curr->pending.fullscreen_mode != FULLSCREEN_NONE) { |
39 | container = curr; | 39 | container = curr; |
40 | is_fullscreen = true; | 40 | is_fullscreen = true; |
41 | break; | 41 | break; |
diff --git a/sway/commands/layout.c b/sway/commands/layout.c index f2af183b..2ba61b38 100644 --- a/sway/commands/layout.c +++ b/sway/commands/layout.c | |||
@@ -133,7 +133,7 @@ struct cmd_results *cmd_layout(int argc, char **argv) { | |||
133 | 133 | ||
134 | // Operate on parent container, like i3. | 134 | // Operate on parent container, like i3. |
135 | if (container) { | 135 | if (container) { |
136 | container = container->parent; | 136 | container = container->pending.parent; |
137 | } | 137 | } |
138 | 138 | ||
139 | // We could be working with a container OR a workspace. These are different | 139 | // We could be working with a container OR a workspace. These are different |
@@ -142,10 +142,10 @@ struct cmd_results *cmd_layout(int argc, char **argv) { | |||
142 | enum sway_container_layout new_layout = L_NONE; | 142 | enum sway_container_layout new_layout = L_NONE; |
143 | enum sway_container_layout old_layout = L_NONE; | 143 | enum sway_container_layout old_layout = L_NONE; |
144 | if (container) { | 144 | if (container) { |
145 | old_layout = container->layout; | 145 | old_layout = container->pending.layout; |
146 | new_layout = get_layout(argc, argv, | 146 | new_layout = get_layout(argc, argv, |
147 | container->layout, container->prev_split_layout, | 147 | container->pending.layout, container->prev_split_layout, |
148 | container->workspace->output); | 148 | container->pending.workspace->output); |
149 | } else { | 149 | } else { |
150 | old_layout = workspace->layout; | 150 | old_layout = workspace->layout; |
151 | new_layout = get_layout(argc, argv, | 151 | new_layout = get_layout(argc, argv, |
@@ -160,13 +160,13 @@ struct cmd_results *cmd_layout(int argc, char **argv) { | |||
160 | if (old_layout != L_TABBED && old_layout != L_STACKED) { | 160 | if (old_layout != L_TABBED && old_layout != L_STACKED) { |
161 | container->prev_split_layout = old_layout; | 161 | container->prev_split_layout = old_layout; |
162 | } | 162 | } |
163 | container->layout = new_layout; | 163 | container->pending.layout = new_layout; |
164 | container_update_representation(container); | 164 | container_update_representation(container); |
165 | } else if (config->handler_context.container) { | 165 | } else if (config->handler_context.container) { |
166 | // i3 avoids changing workspace layouts with a new container | 166 | // i3 avoids changing workspace layouts with a new container |
167 | // https://github.com/i3/i3/blob/3cd1c45eba6de073bc4300eebb4e1cc1a0c4479a/src/con.c#L1817 | 167 | // https://github.com/i3/i3/blob/3cd1c45eba6de073bc4300eebb4e1cc1a0c4479a/src/con.c#L1817 |
168 | container = workspace_wrap_children(workspace); | 168 | container = workspace_wrap_children(workspace); |
169 | container->layout = new_layout; | 169 | container->pending.layout = new_layout; |
170 | container_update_representation(container); | 170 | container_update_representation(container); |
171 | } else { | 171 | } else { |
172 | if (old_layout != L_TABBED && old_layout != L_STACKED) { | 172 | if (old_layout != L_TABBED && old_layout != L_STACKED) { |
diff --git a/sway/commands/move.c b/sway/commands/move.c index f8f89f18..f2702fa1 100644 --- a/sway/commands/move.c +++ b/sway/commands/move.c | |||
@@ -113,8 +113,8 @@ static void container_move_to_container_from_direction( | |||
113 | struct sway_container *container, struct sway_container *destination, | 113 | struct sway_container *container, struct sway_container *destination, |
114 | enum wlr_direction move_dir) { | 114 | enum wlr_direction move_dir) { |
115 | if (destination->view) { | 115 | if (destination->view) { |
116 | if (destination->parent == container->parent && | 116 | if (destination->pending.parent == container->pending.parent && |
117 | destination->workspace == container->workspace) { | 117 | destination->pending.workspace == container->pending.workspace) { |
118 | sway_log(SWAY_DEBUG, "Swapping siblings"); | 118 | sway_log(SWAY_DEBUG, "Swapping siblings"); |
119 | list_t *siblings = container_get_siblings(container); | 119 | list_t *siblings = container_get_siblings(container); |
120 | int container_index = list_find(siblings, container); | 120 | int container_index = list_find(siblings, container); |
@@ -126,28 +126,28 @@ static void container_move_to_container_from_direction( | |||
126 | int offset = | 126 | int offset = |
127 | move_dir == WLR_DIRECTION_LEFT || move_dir == WLR_DIRECTION_UP; | 127 | move_dir == WLR_DIRECTION_LEFT || move_dir == WLR_DIRECTION_UP; |
128 | int index = container_sibling_index(destination) + offset; | 128 | int index = container_sibling_index(destination) + offset; |
129 | if (destination->parent) { | 129 | if (destination->pending.parent) { |
130 | container_insert_child(destination->parent, container, index); | 130 | container_insert_child(destination->pending.parent, container, index); |
131 | } else { | 131 | } else { |
132 | workspace_insert_tiling(destination->workspace, | 132 | workspace_insert_tiling(destination->pending.workspace, |
133 | container, index); | 133 | container, index); |
134 | } | 134 | } |
135 | container->width = container->height = 0; | 135 | container->pending.width = container->pending.height = 0; |
136 | container->width_fraction = container->height_fraction = 0; | 136 | container->width_fraction = container->height_fraction = 0; |
137 | workspace_squash(destination->workspace); | 137 | workspace_squash(destination->pending.workspace); |
138 | } | 138 | } |
139 | return; | 139 | return; |
140 | } | 140 | } |
141 | 141 | ||
142 | if (is_parallel(destination->layout, move_dir)) { | 142 | if (is_parallel(destination->pending.layout, move_dir)) { |
143 | sway_log(SWAY_DEBUG, "Reparenting container (parallel)"); | 143 | sway_log(SWAY_DEBUG, "Reparenting container (parallel)"); |
144 | int index = | 144 | int index = |
145 | move_dir == WLR_DIRECTION_RIGHT || move_dir == WLR_DIRECTION_DOWN ? | 145 | move_dir == WLR_DIRECTION_RIGHT || move_dir == WLR_DIRECTION_DOWN ? |
146 | 0 : destination->children->length; | 146 | 0 : destination->pending.children->length; |
147 | container_insert_child(destination, container, index); | 147 | container_insert_child(destination, container, index); |
148 | container->width = container->height = 0; | 148 | container->pending.width = container->pending.height = 0; |
149 | container->width_fraction = container->height_fraction = 0; | 149 | container->width_fraction = container->height_fraction = 0; |
150 | workspace_squash(destination->workspace); | 150 | workspace_squash(destination->pending.workspace); |
151 | return; | 151 | return; |
152 | } | 152 | } |
153 | 153 | ||
@@ -168,7 +168,7 @@ static void container_move_to_container_from_direction( | |||
168 | static void container_move_to_workspace_from_direction( | 168 | static void container_move_to_workspace_from_direction( |
169 | struct sway_container *container, struct sway_workspace *workspace, | 169 | struct sway_container *container, struct sway_workspace *workspace, |
170 | enum wlr_direction move_dir) { | 170 | enum wlr_direction move_dir) { |
171 | container->width = container->height = 0; | 171 | container->pending.width = container->pending.height = 0; |
172 | container->width_fraction = container->height_fraction = 0; | 172 | container->width_fraction = container->height_fraction = 0; |
173 | 173 | ||
174 | if (is_parallel(workspace->layout, move_dir)) { | 174 | if (is_parallel(workspace->layout, move_dir)) { |
@@ -188,8 +188,8 @@ static void container_move_to_workspace_from_direction( | |||
188 | workspace_add_tiling(workspace, container); | 188 | workspace_add_tiling(workspace, container); |
189 | return; | 189 | return; |
190 | } | 190 | } |
191 | while (focus_inactive->parent) { | 191 | while (focus_inactive->pending.parent) { |
192 | focus_inactive = focus_inactive->parent; | 192 | focus_inactive = focus_inactive->pending.parent; |
193 | } | 193 | } |
194 | container_move_to_container_from_direction(container, focus_inactive, | 194 | container_move_to_container_from_direction(container, focus_inactive, |
195 | move_dir); | 195 | move_dir); |
@@ -197,25 +197,25 @@ static void container_move_to_workspace_from_direction( | |||
197 | 197 | ||
198 | static void container_move_to_workspace(struct sway_container *container, | 198 | static void container_move_to_workspace(struct sway_container *container, |
199 | struct sway_workspace *workspace) { | 199 | struct sway_workspace *workspace) { |
200 | if (container->workspace == workspace) { | 200 | if (container->pending.workspace == workspace) { |
201 | return; | 201 | return; |
202 | } | 202 | } |
203 | struct sway_workspace *old_workspace = container->workspace; | 203 | struct sway_workspace *old_workspace = container->pending.workspace; |
204 | if (container_is_floating(container)) { | 204 | if (container_is_floating(container)) { |
205 | struct sway_output *old_output = container->workspace->output; | 205 | struct sway_output *old_output = container->pending.workspace->output; |
206 | container_detach(container); | 206 | container_detach(container); |
207 | workspace_add_floating(workspace, container); | 207 | workspace_add_floating(workspace, container); |
208 | container_handle_fullscreen_reparent(container); | 208 | container_handle_fullscreen_reparent(container); |
209 | // If changing output, center it within the workspace | 209 | // If changing output, center it within the workspace |
210 | if (old_output != workspace->output && !container->fullscreen_mode) { | 210 | if (old_output != workspace->output && !container->pending.fullscreen_mode) { |
211 | container_floating_move_to_center(container); | 211 | container_floating_move_to_center(container); |
212 | } | 212 | } |
213 | } else { | 213 | } else { |
214 | container_detach(container); | 214 | container_detach(container); |
215 | if (workspace_is_empty(workspace) && container->children) { | 215 | if (workspace_is_empty(workspace) && container->pending.children) { |
216 | workspace_unwrap_children(workspace, container); | 216 | workspace_unwrap_children(workspace, container); |
217 | } else { | 217 | } else { |
218 | container->width = container->height = 0; | 218 | container->pending.width = container->pending.height = 0; |
219 | container->width_fraction = container->height_fraction = 0; | 219 | container->width_fraction = container->height_fraction = 0; |
220 | workspace_add_tiling(workspace, container); | 220 | workspace_add_tiling(workspace, container); |
221 | } | 221 | } |
@@ -237,13 +237,13 @@ static void container_move_to_container(struct sway_container *container, | |||
237 | return; | 237 | return; |
238 | } | 238 | } |
239 | if (container_is_floating(container)) { | 239 | if (container_is_floating(container)) { |
240 | container_move_to_workspace(container, destination->workspace); | 240 | container_move_to_workspace(container, destination->pending.workspace); |
241 | return; | 241 | return; |
242 | } | 242 | } |
243 | struct sway_workspace *old_workspace = container->workspace; | 243 | struct sway_workspace *old_workspace = container->pending.workspace; |
244 | 244 | ||
245 | container_detach(container); | 245 | container_detach(container); |
246 | container->width = container->height = 0; | 246 | container->pending.width = container->pending.height = 0; |
247 | container->width_fraction = container->height_fraction = 0; | 247 | container->width_fraction = container->height_fraction = 0; |
248 | 248 | ||
249 | if (destination->view) { | 249 | if (destination->view) { |
@@ -256,12 +256,12 @@ static void container_move_to_container(struct sway_container *container, | |||
256 | ipc_event_window(container, "move"); | 256 | ipc_event_window(container, "move"); |
257 | } | 257 | } |
258 | 258 | ||
259 | if (destination->workspace) { | 259 | if (destination->pending.workspace) { |
260 | workspace_focus_fullscreen(destination->workspace); | 260 | workspace_focus_fullscreen(destination->pending.workspace); |
261 | workspace_detect_urgent(destination->workspace); | 261 | workspace_detect_urgent(destination->pending.workspace); |
262 | } | 262 | } |
263 | 263 | ||
264 | if (old_workspace && old_workspace != destination->workspace) { | 264 | if (old_workspace && old_workspace != destination->pending.workspace) { |
265 | workspace_detect_urgent(old_workspace); | 265 | workspace_detect_urgent(old_workspace); |
266 | } | 266 | } |
267 | } | 267 | } |
@@ -275,7 +275,7 @@ static bool container_move_to_next_output(struct sway_container *container, | |||
275 | if (!sway_assert(ws, "Expected output to have a workspace")) { | 275 | if (!sway_assert(ws, "Expected output to have a workspace")) { |
276 | return false; | 276 | return false; |
277 | } | 277 | } |
278 | switch (container->fullscreen_mode) { | 278 | switch (container->pending.fullscreen_mode) { |
279 | case FULLSCREEN_NONE: | 279 | case FULLSCREEN_NONE: |
280 | container_move_to_workspace_from_direction(container, ws, move_dir); | 280 | container_move_to_workspace_from_direction(container, ws, move_dir); |
281 | return true; | 281 | return true; |
@@ -293,12 +293,12 @@ static bool container_move_to_next_output(struct sway_container *container, | |||
293 | static bool container_move_in_direction(struct sway_container *container, | 293 | static bool container_move_in_direction(struct sway_container *container, |
294 | enum wlr_direction move_dir) { | 294 | enum wlr_direction move_dir) { |
295 | // If moving a fullscreen view, only consider outputs | 295 | // If moving a fullscreen view, only consider outputs |
296 | switch (container->fullscreen_mode) { | 296 | switch (container->pending.fullscreen_mode) { |
297 | case FULLSCREEN_NONE: | 297 | case FULLSCREEN_NONE: |
298 | break; | 298 | break; |
299 | case FULLSCREEN_WORKSPACE: | 299 | case FULLSCREEN_WORKSPACE: |
300 | return container_move_to_next_output(container, | 300 | return container_move_to_next_output(container, |
301 | container->workspace->output, move_dir); | 301 | container->pending.workspace->output, move_dir); |
302 | case FULLSCREEN_GLOBAL: | 302 | case FULLSCREEN_GLOBAL: |
303 | return false; | 303 | return false; |
304 | } | 304 | } |
@@ -317,26 +317,26 @@ static bool container_move_in_direction(struct sway_container *container, | |||
317 | while (!ancestor) { | 317 | while (!ancestor) { |
318 | // Don't allow containers to move out of their | 318 | // Don't allow containers to move out of their |
319 | // fullscreen or floating parent | 319 | // fullscreen or floating parent |
320 | if (current->fullscreen_mode || container_is_floating(current)) { | 320 | if (current->pending.fullscreen_mode || container_is_floating(current)) { |
321 | return false; | 321 | return false; |
322 | } | 322 | } |
323 | 323 | ||
324 | enum sway_container_layout parent_layout = container_parent_layout(current); | 324 | enum sway_container_layout parent_layout = container_parent_layout(current); |
325 | if (!is_parallel(parent_layout, move_dir)) { | 325 | if (!is_parallel(parent_layout, move_dir)) { |
326 | if (!current->parent) { | 326 | if (!current->pending.parent) { |
327 | // No parallel parent, so we reorient the workspace | 327 | // No parallel parent, so we reorient the workspace |
328 | current = workspace_wrap_children(current->workspace); | 328 | current = workspace_wrap_children(current->pending.workspace); |
329 | current->workspace->layout = | 329 | current->pending.workspace->layout = |
330 | move_dir == WLR_DIRECTION_LEFT || | 330 | move_dir == WLR_DIRECTION_LEFT || |
331 | move_dir == WLR_DIRECTION_RIGHT ? | 331 | move_dir == WLR_DIRECTION_RIGHT ? |
332 | L_HORIZ : L_VERT; | 332 | L_HORIZ : L_VERT; |
333 | container->height = container->width = 0; | 333 | container->pending.height = container->pending.width = 0; |
334 | container->height_fraction = container->width_fraction = 0; | 334 | container->height_fraction = container->width_fraction = 0; |
335 | workspace_update_representation(current->workspace); | 335 | workspace_update_representation(current->pending.workspace); |
336 | wrapped = true; | 336 | wrapped = true; |
337 | } else { | 337 | } else { |
338 | // Keep looking for a parallel parent | 338 | // Keep looking for a parallel parent |
339 | current = current->parent; | 339 | current = current->pending.parent; |
340 | } | 340 | } |
341 | continue; | 341 | continue; |
342 | } | 342 | } |
@@ -356,14 +356,14 @@ static bool container_move_in_direction(struct sway_container *container, | |||
356 | container_move_to_container_from_direction(container, | 356 | container_move_to_container_from_direction(container, |
357 | target, move_dir); | 357 | target, move_dir); |
358 | return true; | 358 | return true; |
359 | } else if (!container->parent) { | 359 | } else if (!container->pending.parent) { |
360 | // Container is at workspace level so we move it to the | 360 | // Container is at workspace level so we move it to the |
361 | // next workspace if possible | 361 | // next workspace if possible |
362 | return container_move_to_next_output(container, | 362 | return container_move_to_next_output(container, |
363 | current->workspace->output, move_dir); | 363 | current->pending.workspace->output, move_dir); |
364 | } else { | 364 | } else { |
365 | // Container has escaped its immediate parallel parent | 365 | // Container has escaped its immediate parallel parent |
366 | current = current->parent; | 366 | current = current->pending.parent; |
367 | continue; | 367 | continue; |
368 | } | 368 | } |
369 | } | 369 | } |
@@ -377,31 +377,31 @@ static bool container_move_in_direction(struct sway_container *container, | |||
377 | container_move_to_container_from_direction(container, | 377 | container_move_to_container_from_direction(container, |
378 | target, move_dir); | 378 | target, move_dir); |
379 | return true; | 379 | return true; |
380 | } else if (!wrapped && !container->parent->parent && | 380 | } else if (!wrapped && !container->pending.parent->pending.parent && |
381 | container->parent->children->length == 1) { | 381 | container->pending.parent->pending.children->length == 1) { |
382 | // Treat singleton children as if they are at workspace level like i3 | 382 | // Treat singleton children as if they are at workspace level like i3 |
383 | // https://github.com/i3/i3/blob/1d9160f2d247dbaa83fb62f02fd7041dec767fc2/src/move.c#L367 | 383 | // https://github.com/i3/i3/blob/1d9160f2d247dbaa83fb62f02fd7041dec767fc2/src/move.c#L367 |
384 | return container_move_to_next_output(container, | 384 | return container_move_to_next_output(container, |
385 | ancestor->workspace->output, move_dir); | 385 | ancestor->pending.workspace->output, move_dir); |
386 | } else { | 386 | } else { |
387 | // Container will be promoted | 387 | // Container will be promoted |
388 | struct sway_container *old_parent = container->parent; | 388 | struct sway_container *old_parent = container->pending.parent; |
389 | if (ancestor->parent) { | 389 | if (ancestor->pending.parent) { |
390 | // Container will move in with its parent | 390 | // Container will move in with its parent |
391 | container_insert_child(ancestor->parent, container, | 391 | container_insert_child(ancestor->pending.parent, container, |
392 | index + (offs < 0 ? 0 : 1)); | 392 | index + (offs < 0 ? 0 : 1)); |
393 | } else { | 393 | } else { |
394 | // Container will move to workspace level, | 394 | // Container will move to workspace level, |
395 | // may be re-split by workspace_layout | 395 | // may be re-split by workspace_layout |
396 | workspace_insert_tiling(ancestor->workspace, container, | 396 | workspace_insert_tiling(ancestor->pending.workspace, container, |
397 | index + (offs < 0 ? 0 : 1)); | 397 | index + (offs < 0 ? 0 : 1)); |
398 | } | 398 | } |
399 | ancestor->height = ancestor->width = 0; | 399 | ancestor->pending.height = ancestor->pending.width = 0; |
400 | ancestor->height_fraction = ancestor->width_fraction = 0; | 400 | ancestor->height_fraction = ancestor->width_fraction = 0; |
401 | if (old_parent) { | 401 | if (old_parent) { |
402 | container_reap_empty(old_parent); | 402 | container_reap_empty(old_parent); |
403 | } | 403 | } |
404 | workspace_squash(container->workspace); | 404 | workspace_squash(container->pending.workspace); |
405 | return true; | 405 | return true; |
406 | } | 406 | } |
407 | } | 407 | } |
@@ -427,14 +427,14 @@ static struct cmd_results *cmd_move_container(bool no_auto_back_and_forth, | |||
427 | container = workspace_wrap_children(workspace); | 427 | container = workspace_wrap_children(workspace); |
428 | } | 428 | } |
429 | 429 | ||
430 | if (container->fullscreen_mode == FULLSCREEN_GLOBAL) { | 430 | if (container->pending.fullscreen_mode == FULLSCREEN_GLOBAL) { |
431 | return cmd_results_new(CMD_FAILURE, | 431 | return cmd_results_new(CMD_FAILURE, |
432 | "Can't move fullscreen global container"); | 432 | "Can't move fullscreen global container"); |
433 | } | 433 | } |
434 | 434 | ||
435 | struct sway_seat *seat = config->handler_context.seat; | 435 | struct sway_seat *seat = config->handler_context.seat; |
436 | struct sway_container *old_parent = container->parent; | 436 | struct sway_container *old_parent = container->pending.parent; |
437 | struct sway_workspace *old_ws = container->workspace; | 437 | struct sway_workspace *old_ws = container->pending.workspace; |
438 | struct sway_output *old_output = old_ws ? old_ws->output : NULL; | 438 | struct sway_output *old_output = old_ws ? old_ws->output : NULL; |
439 | struct sway_node *destination = NULL; | 439 | struct sway_node *destination = NULL; |
440 | 440 | ||
@@ -508,7 +508,7 @@ static struct cmd_results *cmd_move_container(bool no_auto_back_and_forth, | |||
508 | destination = dst ? &dst->node : &ws->node; | 508 | destination = dst ? &dst->node : &ws->node; |
509 | } else if (strcasecmp(argv[0], "output") == 0) { | 509 | } else if (strcasecmp(argv[0], "output") == 0) { |
510 | struct sway_output *new_output = output_in_direction(argv[1], | 510 | struct sway_output *new_output = output_in_direction(argv[1], |
511 | old_output, container->x, container->y); | 511 | old_output, container->pending.x, container->pending.y); |
512 | if (!new_output) { | 512 | if (!new_output) { |
513 | return cmd_results_new(CMD_FAILURE, | 513 | return cmd_results_new(CMD_FAILURE, |
514 | "Can't find output with name/direction '%s'", argv[1]); | 514 | "Can't find output with name/direction '%s'", argv[1]); |
@@ -706,12 +706,12 @@ static struct cmd_results *cmd_move_in_direction( | |||
706 | "Cannot move workspaces in a direction"); | 706 | "Cannot move workspaces in a direction"); |
707 | } | 707 | } |
708 | if (container_is_floating(container)) { | 708 | if (container_is_floating(container)) { |
709 | if (container->fullscreen_mode) { | 709 | if (container->pending.fullscreen_mode) { |
710 | return cmd_results_new(CMD_FAILURE, | 710 | return cmd_results_new(CMD_FAILURE, |
711 | "Cannot move fullscreen floating container"); | 711 | "Cannot move fullscreen floating container"); |
712 | } | 712 | } |
713 | double lx = container->x; | 713 | double lx = container->pending.x; |
714 | double ly = container->y; | 714 | double ly = container->pending.y; |
715 | switch (direction) { | 715 | switch (direction) { |
716 | case WLR_DIRECTION_LEFT: | 716 | case WLR_DIRECTION_LEFT: |
717 | lx -= move_amt; | 717 | lx -= move_amt; |
@@ -729,8 +729,8 @@ static struct cmd_results *cmd_move_in_direction( | |||
729 | container_floating_move_to(container, lx, ly); | 729 | container_floating_move_to(container, lx, ly); |
730 | return cmd_results_new(CMD_SUCCESS, NULL); | 730 | return cmd_results_new(CMD_SUCCESS, NULL); |
731 | } | 731 | } |
732 | struct sway_workspace *old_ws = container->workspace; | 732 | struct sway_workspace *old_ws = container->pending.workspace; |
733 | struct sway_container *old_parent = container->parent; | 733 | struct sway_container *old_parent = container->pending.parent; |
734 | 734 | ||
735 | if (!container_move_in_direction(container, direction)) { | 735 | if (!container_move_in_direction(container, direction)) { |
736 | // Container didn't move | 736 | // Container didn't move |
@@ -744,7 +744,7 @@ static struct cmd_results *cmd_move_in_direction( | |||
744 | workspace_consider_destroy(old_ws); | 744 | workspace_consider_destroy(old_ws); |
745 | } | 745 | } |
746 | 746 | ||
747 | struct sway_workspace *new_ws = container->workspace; | 747 | struct sway_workspace *new_ws = container->pending.workspace; |
748 | 748 | ||
749 | if (root->fullscreen_global) { | 749 | if (root->fullscreen_global) { |
750 | arrange_root(); | 750 | arrange_root(); |
@@ -781,8 +781,8 @@ static struct cmd_results *cmd_move_to_position_pointer( | |||
781 | } | 781 | } |
782 | struct wlr_cursor *cursor = seat->cursor->cursor; | 782 | struct wlr_cursor *cursor = seat->cursor->cursor; |
783 | /* Determine where to put the window. */ | 783 | /* Determine where to put the window. */ |
784 | double lx = cursor->x - container->width / 2; | 784 | double lx = cursor->x - container->pending.width / 2; |
785 | double ly = cursor->y - container->height / 2; | 785 | double ly = cursor->y - container->pending.height / 2; |
786 | 786 | ||
787 | /* Correct target coordinates to be in bounds (on screen). */ | 787 | /* Correct target coordinates to be in bounds (on screen). */ |
788 | struct wlr_output *output = wlr_output_layout_output_at( | 788 | struct wlr_output *output = wlr_output_layout_output_at( |
@@ -792,11 +792,11 @@ static struct cmd_results *cmd_move_to_position_pointer( | |||
792 | wlr_output_layout_get_box(root->output_layout, output); | 792 | wlr_output_layout_get_box(root->output_layout, output); |
793 | lx = fmax(lx, box->x); | 793 | lx = fmax(lx, box->x); |
794 | ly = fmax(ly, box->y); | 794 | ly = fmax(ly, box->y); |
795 | if (lx + container->width > box->x + box->width) { | 795 | if (lx + container->pending.width > box->x + box->width) { |
796 | lx = box->x + box->width - container->width; | 796 | lx = box->x + box->width - container->pending.width; |
797 | } | 797 | } |
798 | if (ly + container->height > box->y + box->height) { | 798 | if (ly + container->pending.height > box->y + box->height) { |
799 | ly = box->y + box->height - container->height; | 799 | ly = box->y + box->height - container->pending.height; |
800 | } | 800 | } |
801 | } | 801 | } |
802 | 802 | ||
@@ -846,16 +846,16 @@ static struct cmd_results *cmd_move_to_position(int argc, char **argv) { | |||
846 | } else if (strcmp(argv[0], "center") == 0) { | 846 | } else if (strcmp(argv[0], "center") == 0) { |
847 | double lx, ly; | 847 | double lx, ly; |
848 | if (absolute) { | 848 | if (absolute) { |
849 | lx = root->x + (root->width - container->width) / 2; | 849 | lx = root->x + (root->width - container->pending.width) / 2; |
850 | ly = root->y + (root->height - container->height) / 2; | 850 | ly = root->y + (root->height - container->pending.height) / 2; |
851 | } else { | 851 | } else { |
852 | struct sway_workspace *ws = container->workspace; | 852 | struct sway_workspace *ws = container->pending.workspace; |
853 | if (!ws) { | 853 | if (!ws) { |
854 | struct sway_seat *seat = config->handler_context.seat; | 854 | struct sway_seat *seat = config->handler_context.seat; |
855 | ws = seat_get_focused_workspace(seat); | 855 | ws = seat_get_focused_workspace(seat); |
856 | } | 856 | } |
857 | lx = ws->x + (ws->width - container->width) / 2; | 857 | lx = ws->x + (ws->width - container->pending.width) / 2; |
858 | ly = ws->y + (ws->height - container->height) / 2; | 858 | ly = ws->y + (ws->height - container->pending.height) / 2; |
859 | } | 859 | } |
860 | container_floating_move_to(container, lx, ly); | 860 | container_floating_move_to(container, lx, ly); |
861 | return cmd_results_new(CMD_SUCCESS, NULL); | 861 | return cmd_results_new(CMD_SUCCESS, NULL); |
@@ -886,7 +886,7 @@ static struct cmd_results *cmd_move_to_position(int argc, char **argv) { | |||
886 | return cmd_results_new(CMD_INVALID, "Invalid y position specified"); | 886 | return cmd_results_new(CMD_INVALID, "Invalid y position specified"); |
887 | } | 887 | } |
888 | 888 | ||
889 | struct sway_workspace *ws = container->workspace; | 889 | struct sway_workspace *ws = container->pending.workspace; |
890 | if (!ws) { | 890 | if (!ws) { |
891 | struct sway_seat *seat = config->handler_context.seat; | 891 | struct sway_seat *seat = config->handler_context.seat; |
892 | ws = seat_get_focused_workspace(seat); | 892 | ws = seat_get_focused_workspace(seat); |
@@ -960,14 +960,14 @@ static struct cmd_results *cmd_move_to_scratchpad(void) { | |||
960 | // If the container is in a floating split container, | 960 | // If the container is in a floating split container, |
961 | // operate on the split container instead of the child. | 961 | // operate on the split container instead of the child. |
962 | if (container_is_floating_or_child(con)) { | 962 | if (container_is_floating_or_child(con)) { |
963 | while (con->parent) { | 963 | while (con->pending.parent) { |
964 | con = con->parent; | 964 | con = con->pending.parent; |
965 | } | 965 | } |
966 | } | 966 | } |
967 | 967 | ||
968 | if (!con->scratchpad) { | 968 | if (!con->scratchpad) { |
969 | root_scratchpad_add_container(con, NULL); | 969 | root_scratchpad_add_container(con, NULL); |
970 | } else if (con->workspace) { | 970 | } else if (con->pending.workspace) { |
971 | root_scratchpad_hide(con); | 971 | root_scratchpad_hide(con); |
972 | } | 972 | } |
973 | return cmd_results_new(CMD_SUCCESS, NULL); | 973 | return cmd_results_new(CMD_SUCCESS, NULL); |
diff --git a/sway/commands/resize.c b/sway/commands/resize.c index ca36e858..425069de 100644 --- a/sway/commands/resize.c +++ b/sway/commands/resize.c | |||
@@ -57,7 +57,7 @@ struct sway_container *container_find_resize_parent(struct sway_container *con, | |||
57 | (allow_last || index < siblings->length - 1)) { | 57 | (allow_last || index < siblings->length - 1)) { |
58 | return con; | 58 | return con; |
59 | } | 59 | } |
60 | con = con->parent; | 60 | con = con->pending.parent; |
61 | } | 61 | } |
62 | 62 | ||
63 | return NULL; | 63 | return NULL; |
@@ -115,13 +115,13 @@ void container_resize_tiled(struct sway_container *con, | |||
115 | int sibling_amount = prev ? ceil((double)amount / 2.0) : amount; | 115 | int sibling_amount = prev ? ceil((double)amount / 2.0) : amount; |
116 | 116 | ||
117 | if (is_horizontal(axis)) { | 117 | if (is_horizontal(axis)) { |
118 | if (con->width + amount < MIN_SANE_W) { | 118 | if (con->pending.width + amount < MIN_SANE_W) { |
119 | return; | 119 | return; |
120 | } | 120 | } |
121 | if (next->width - sibling_amount < MIN_SANE_W) { | 121 | if (next->pending.width - sibling_amount < MIN_SANE_W) { |
122 | return; | 122 | return; |
123 | } | 123 | } |
124 | if (prev && prev->width - sibling_amount < MIN_SANE_W) { | 124 | if (prev && prev->pending.width - sibling_amount < MIN_SANE_W) { |
125 | return; | 125 | return; |
126 | } | 126 | } |
127 | if (con->child_total_width <= 0) { | 127 | if (con->child_total_width <= 0) { |
@@ -133,7 +133,7 @@ void container_resize_tiled(struct sway_container *con, | |||
133 | list_t *siblings = container_get_siblings(con); | 133 | list_t *siblings = container_get_siblings(con); |
134 | for (int i = 0; i < siblings->length; ++i) { | 134 | for (int i = 0; i < siblings->length; ++i) { |
135 | struct sway_container *con = siblings->items[i]; | 135 | struct sway_container *con = siblings->items[i]; |
136 | con->width_fraction = con->width / con->child_total_width; | 136 | con->width_fraction = con->pending.width / con->child_total_width; |
137 | } | 137 | } |
138 | 138 | ||
139 | double amount_fraction = (double)amount / con->child_total_width; | 139 | double amount_fraction = (double)amount / con->child_total_width; |
@@ -146,13 +146,13 @@ void container_resize_tiled(struct sway_container *con, | |||
146 | prev->width_fraction -= sibling_amount_fraction; | 146 | prev->width_fraction -= sibling_amount_fraction; |
147 | } | 147 | } |
148 | } else { | 148 | } else { |
149 | if (con->height + amount < MIN_SANE_H) { | 149 | if (con->pending.height + amount < MIN_SANE_H) { |
150 | return; | 150 | return; |
151 | } | 151 | } |
152 | if (next->height - sibling_amount < MIN_SANE_H) { | 152 | if (next->pending.height - sibling_amount < MIN_SANE_H) { |
153 | return; | 153 | return; |
154 | } | 154 | } |
155 | if (prev && prev->height - sibling_amount < MIN_SANE_H) { | 155 | if (prev && prev->pending.height - sibling_amount < MIN_SANE_H) { |
156 | return; | 156 | return; |
157 | } | 157 | } |
158 | if (con->child_total_height <= 0) { | 158 | if (con->child_total_height <= 0) { |
@@ -164,7 +164,7 @@ void container_resize_tiled(struct sway_container *con, | |||
164 | list_t *siblings = container_get_siblings(con); | 164 | list_t *siblings = container_get_siblings(con); |
165 | for (int i = 0; i < siblings->length; ++i) { | 165 | for (int i = 0; i < siblings->length; ++i) { |
166 | struct sway_container *con = siblings->items[i]; | 166 | struct sway_container *con = siblings->items[i]; |
167 | con->height_fraction = con->height / con->child_total_height; | 167 | con->height_fraction = con->pending.height / con->child_total_height; |
168 | } | 168 | } |
169 | 169 | ||
170 | double amount_fraction = (double)amount / con->child_total_height; | 170 | double amount_fraction = (double)amount / con->child_total_height; |
@@ -178,10 +178,10 @@ void container_resize_tiled(struct sway_container *con, | |||
178 | } | 178 | } |
179 | } | 179 | } |
180 | 180 | ||
181 | if (con->parent) { | 181 | if (con->pending.parent) { |
182 | arrange_container(con->parent); | 182 | arrange_container(con->pending.parent); |
183 | } else { | 183 | } else { |
184 | arrange_workspace(con->workspace); | 184 | arrange_workspace(con->pending.workspace); |
185 | } | 185 | } |
186 | } | 186 | } |
187 | 187 | ||
@@ -203,15 +203,15 @@ static struct cmd_results *resize_adjust_floating(uint32_t axis, | |||
203 | int min_width, max_width, min_height, max_height; | 203 | int min_width, max_width, min_height, max_height; |
204 | floating_calculate_constraints(&min_width, &max_width, | 204 | floating_calculate_constraints(&min_width, &max_width, |
205 | &min_height, &max_height); | 205 | &min_height, &max_height); |
206 | if (con->width + grow_width < min_width) { | 206 | if (con->pending.width + grow_width < min_width) { |
207 | grow_width = min_width - con->width; | 207 | grow_width = min_width - con->pending.width; |
208 | } else if (con->width + grow_width > max_width) { | 208 | } else if (con->pending.width + grow_width > max_width) { |
209 | grow_width = max_width - con->width; | 209 | grow_width = max_width - con->pending.width; |
210 | } | 210 | } |
211 | if (con->height + grow_height < min_height) { | 211 | if (con->pending.height + grow_height < min_height) { |
212 | grow_height = min_height - con->height; | 212 | grow_height = min_height - con->pending.height; |
213 | } else if (con->height + grow_height > max_height) { | 213 | } else if (con->pending.height + grow_height > max_height) { |
214 | grow_height = max_height - con->height; | 214 | grow_height = max_height - con->pending.height; |
215 | } | 215 | } |
216 | int grow_x = 0, grow_y = 0; | 216 | int grow_x = 0, grow_y = 0; |
217 | 217 | ||
@@ -227,15 +227,15 @@ static struct cmd_results *resize_adjust_floating(uint32_t axis, | |||
227 | if (grow_width == 0 && grow_height == 0) { | 227 | if (grow_width == 0 && grow_height == 0) { |
228 | return cmd_results_new(CMD_INVALID, "Cannot resize any further"); | 228 | return cmd_results_new(CMD_INVALID, "Cannot resize any further"); |
229 | } | 229 | } |
230 | con->x += grow_x; | 230 | con->pending.x += grow_x; |
231 | con->y += grow_y; | 231 | con->pending.y += grow_y; |
232 | con->width += grow_width; | 232 | con->pending.width += grow_width; |
233 | con->height += grow_height; | 233 | con->pending.height += grow_height; |
234 | 234 | ||
235 | con->content_x += grow_x; | 235 | con->pending.content_x += grow_x; |
236 | con->content_y += grow_y; | 236 | con->pending.content_y += grow_y; |
237 | con->content_width += grow_width; | 237 | con->pending.content_width += grow_width; |
238 | con->content_height += grow_height; | 238 | con->pending.content_height += grow_height; |
239 | 239 | ||
240 | arrange_container(con); | 240 | arrange_container(con); |
241 | 241 | ||
@@ -256,9 +256,9 @@ static struct cmd_results *resize_adjust_tiled(uint32_t axis, | |||
256 | float pct = amount->amount / 100.0f; | 256 | float pct = amount->amount / 100.0f; |
257 | 257 | ||
258 | if (is_horizontal(axis)) { | 258 | if (is_horizontal(axis)) { |
259 | amount->amount = (float)current->width * pct; | 259 | amount->amount = (float)current->pending.width * pct; |
260 | } else { | 260 | } else { |
261 | amount->amount = (float)current->height * pct; | 261 | amount->amount = (float)current->pending.height * pct; |
262 | } | 262 | } |
263 | } | 263 | } |
264 | 264 | ||
@@ -281,20 +281,20 @@ static struct cmd_results *resize_set_tiled(struct sway_container *con, | |||
281 | if (width->unit == MOVEMENT_UNIT_PPT || | 281 | if (width->unit == MOVEMENT_UNIT_PPT || |
282 | width->unit == MOVEMENT_UNIT_DEFAULT) { | 282 | width->unit == MOVEMENT_UNIT_DEFAULT) { |
283 | // Convert to px | 283 | // Convert to px |
284 | struct sway_container *parent = con->parent; | 284 | struct sway_container *parent = con->pending.parent; |
285 | while (parent && parent->layout != L_HORIZ) { | 285 | while (parent && parent->pending.layout != L_HORIZ) { |
286 | parent = parent->parent; | 286 | parent = parent->pending.parent; |
287 | } | 287 | } |
288 | if (parent) { | 288 | if (parent) { |
289 | width->amount = parent->width * width->amount / 100; | 289 | width->amount = parent->pending.width * width->amount / 100; |
290 | } else { | 290 | } else { |
291 | width->amount = con->workspace->width * width->amount / 100; | 291 | width->amount = con->pending.workspace->width * width->amount / 100; |
292 | } | 292 | } |
293 | width->unit = MOVEMENT_UNIT_PX; | 293 | width->unit = MOVEMENT_UNIT_PX; |
294 | } | 294 | } |
295 | if (width->unit == MOVEMENT_UNIT_PX) { | 295 | if (width->unit == MOVEMENT_UNIT_PX) { |
296 | container_resize_tiled(con, AXIS_HORIZONTAL, | 296 | container_resize_tiled(con, AXIS_HORIZONTAL, |
297 | width->amount - con->width); | 297 | width->amount - con->pending.width); |
298 | } | 298 | } |
299 | } | 299 | } |
300 | 300 | ||
@@ -302,20 +302,20 @@ static struct cmd_results *resize_set_tiled(struct sway_container *con, | |||
302 | if (height->unit == MOVEMENT_UNIT_PPT || | 302 | if (height->unit == MOVEMENT_UNIT_PPT || |
303 | height->unit == MOVEMENT_UNIT_DEFAULT) { | 303 | height->unit == MOVEMENT_UNIT_DEFAULT) { |
304 | // Convert to px | 304 | // Convert to px |
305 | struct sway_container *parent = con->parent; | 305 | struct sway_container *parent = con->pending.parent; |
306 | while (parent && parent->layout != L_VERT) { | 306 | while (parent && parent->pending.layout != L_VERT) { |
307 | parent = parent->parent; | 307 | parent = parent->pending.parent; |
308 | } | 308 | } |
309 | if (parent) { | 309 | if (parent) { |
310 | height->amount = parent->height * height->amount / 100; | 310 | height->amount = parent->pending.height * height->amount / 100; |
311 | } else { | 311 | } else { |
312 | height->amount = con->workspace->height * height->amount / 100; | 312 | height->amount = con->pending.workspace->height * height->amount / 100; |
313 | } | 313 | } |
314 | height->unit = MOVEMENT_UNIT_PX; | 314 | height->unit = MOVEMENT_UNIT_PX; |
315 | } | 315 | } |
316 | if (height->unit == MOVEMENT_UNIT_PX) { | 316 | if (height->unit == MOVEMENT_UNIT_PX) { |
317 | container_resize_tiled(con, AXIS_VERTICAL, | 317 | container_resize_tiled(con, AXIS_VERTICAL, |
318 | height->amount - con->height); | 318 | height->amount - con->pending.height); |
319 | } | 319 | } |
320 | } | 320 | } |
321 | 321 | ||
@@ -339,15 +339,15 @@ static struct cmd_results *resize_set_floating(struct sway_container *con, | |||
339 | "Cannot resize a hidden scratchpad container by ppt"); | 339 | "Cannot resize a hidden scratchpad container by ppt"); |
340 | } | 340 | } |
341 | // Convert to px | 341 | // Convert to px |
342 | width->amount = con->workspace->width * width->amount / 100; | 342 | width->amount = con->pending.workspace->width * width->amount / 100; |
343 | width->unit = MOVEMENT_UNIT_PX; | 343 | width->unit = MOVEMENT_UNIT_PX; |
344 | // Falls through | 344 | // Falls through |
345 | case MOVEMENT_UNIT_PX: | 345 | case MOVEMENT_UNIT_PX: |
346 | case MOVEMENT_UNIT_DEFAULT: | 346 | case MOVEMENT_UNIT_DEFAULT: |
347 | width->amount = fmax(min_width, fmin(width->amount, max_width)); | 347 | width->amount = fmax(min_width, fmin(width->amount, max_width)); |
348 | grow_width = width->amount - con->width; | 348 | grow_width = width->amount - con->pending.width; |
349 | con->x -= grow_width / 2; | 349 | con->pending.x -= grow_width / 2; |
350 | con->width = width->amount; | 350 | con->pending.width = width->amount; |
351 | break; | 351 | break; |
352 | case MOVEMENT_UNIT_INVALID: | 352 | case MOVEMENT_UNIT_INVALID: |
353 | sway_assert(false, "invalid width unit"); | 353 | sway_assert(false, "invalid width unit"); |
@@ -363,15 +363,15 @@ static struct cmd_results *resize_set_floating(struct sway_container *con, | |||
363 | "Cannot resize a hidden scratchpad container by ppt"); | 363 | "Cannot resize a hidden scratchpad container by ppt"); |
364 | } | 364 | } |
365 | // Convert to px | 365 | // Convert to px |
366 | height->amount = con->workspace->height * height->amount / 100; | 366 | height->amount = con->pending.workspace->height * height->amount / 100; |
367 | height->unit = MOVEMENT_UNIT_PX; | 367 | height->unit = MOVEMENT_UNIT_PX; |
368 | // Falls through | 368 | // Falls through |
369 | case MOVEMENT_UNIT_PX: | 369 | case MOVEMENT_UNIT_PX: |
370 | case MOVEMENT_UNIT_DEFAULT: | 370 | case MOVEMENT_UNIT_DEFAULT: |
371 | height->amount = fmax(min_height, fmin(height->amount, max_height)); | 371 | height->amount = fmax(min_height, fmin(height->amount, max_height)); |
372 | grow_height = height->amount - con->height; | 372 | grow_height = height->amount - con->pending.height; |
373 | con->y -= grow_height / 2; | 373 | con->pending.y -= grow_height / 2; |
374 | con->height = height->amount; | 374 | con->pending.height = height->amount; |
375 | break; | 375 | break; |
376 | case MOVEMENT_UNIT_INVALID: | 376 | case MOVEMENT_UNIT_INVALID: |
377 | sway_assert(false, "invalid height unit"); | 377 | sway_assert(false, "invalid height unit"); |
@@ -379,10 +379,10 @@ static struct cmd_results *resize_set_floating(struct sway_container *con, | |||
379 | } | 379 | } |
380 | } | 380 | } |
381 | 381 | ||
382 | con->content_x -= grow_width / 2; | 382 | con->pending.content_x -= grow_width / 2; |
383 | con->content_y -= grow_height / 2; | 383 | con->pending.content_y -= grow_height / 2; |
384 | con->content_width += grow_width; | 384 | con->pending.content_width += grow_width; |
385 | con->content_height += grow_height; | 385 | con->pending.content_height += grow_height; |
386 | 386 | ||
387 | arrange_container(con); | 387 | arrange_container(con); |
388 | 388 | ||
@@ -437,10 +437,10 @@ static struct cmd_results *cmd_resize_set(int argc, char **argv) { | |||
437 | // If 0, don't resize that dimension | 437 | // If 0, don't resize that dimension |
438 | struct sway_container *con = config->handler_context.container; | 438 | struct sway_container *con = config->handler_context.container; |
439 | if (width.amount <= 0) { | 439 | if (width.amount <= 0) { |
440 | width.amount = con->width; | 440 | width.amount = con->pending.width; |
441 | } | 441 | } |
442 | if (height.amount <= 0) { | 442 | if (height.amount <= 0) { |
443 | height.amount = con->height; | 443 | height.amount = con->pending.height; |
444 | } | 444 | } |
445 | 445 | ||
446 | if (container_is_floating(con)) { | 446 | if (container_is_floating(con)) { |
diff --git a/sway/commands/scratchpad.c b/sway/commands/scratchpad.c index 34871bc6..a1285df5 100644 --- a/sway/commands/scratchpad.c +++ b/sway/commands/scratchpad.c | |||
@@ -21,8 +21,8 @@ static void scratchpad_toggle_auto(void) { | |||
21 | // If the focus is in a floating split container, | 21 | // If the focus is in a floating split container, |
22 | // operate on the split container instead of the child. | 22 | // operate on the split container instead of the child. |
23 | if (focus && container_is_floating_or_child(focus)) { | 23 | if (focus && container_is_floating_or_child(focus)) { |
24 | while (focus->parent) { | 24 | while (focus->pending.parent) { |
25 | focus = focus->parent; | 25 | focus = focus->pending.parent; |
26 | } | 26 | } |
27 | } | 27 | } |
28 | 28 | ||
@@ -52,7 +52,7 @@ static void scratchpad_toggle_auto(void) { | |||
52 | // In this case we move it to the current workspace. | 52 | // In this case we move it to the current workspace. |
53 | for (int i = 0; i < root->scratchpad->length; ++i) { | 53 | for (int i = 0; i < root->scratchpad->length; ++i) { |
54 | struct sway_container *con = root->scratchpad->items[i]; | 54 | struct sway_container *con = root->scratchpad->items[i]; |
55 | if (con->parent) { | 55 | if (con->pending.parent) { |
56 | sway_log(SWAY_DEBUG, | 56 | sway_log(SWAY_DEBUG, |
57 | "Moving a visible scratchpad window (%s) to this workspace", | 57 | "Moving a visible scratchpad window (%s) to this workspace", |
58 | con->title); | 58 | con->title); |
@@ -80,7 +80,7 @@ static void scratchpad_toggle_container(struct sway_container *con) { | |||
80 | struct sway_seat *seat = input_manager_current_seat(); | 80 | struct sway_seat *seat = input_manager_current_seat(); |
81 | struct sway_workspace *ws = seat_get_focused_workspace(seat); | 81 | struct sway_workspace *ws = seat_get_focused_workspace(seat); |
82 | // Check if it matches a currently visible scratchpad window and hide it. | 82 | // Check if it matches a currently visible scratchpad window and hide it. |
83 | if (con->workspace && ws == con->workspace) { | 83 | if (con->pending.workspace && ws == con->pending.workspace) { |
84 | root_scratchpad_hide(con); | 84 | root_scratchpad_hide(con); |
85 | return; | 85 | return; |
86 | } | 86 | } |
@@ -111,8 +111,8 @@ struct cmd_results *cmd_scratchpad(int argc, char **argv) { | |||
111 | // If the container is in a floating split container, | 111 | // If the container is in a floating split container, |
112 | // operate on the split container instead of the child. | 112 | // operate on the split container instead of the child. |
113 | if (container_is_floating_or_child(con)) { | 113 | if (container_is_floating_or_child(con)) { |
114 | while (con->parent) { | 114 | while (con->pending.parent) { |
115 | con = con->parent; | 115 | con = con->pending.parent; |
116 | } | 116 | } |
117 | } | 117 | } |
118 | 118 | ||
diff --git a/sway/commands/split.c b/sway/commands/split.c index 782bab02..3e25c6f7 100644 --- a/sway/commands/split.c +++ b/sway/commands/split.c | |||
@@ -14,7 +14,7 @@ static struct cmd_results *do_split(int layout) { | |||
14 | struct sway_workspace *ws = config->handler_context.workspace; | 14 | struct sway_workspace *ws = config->handler_context.workspace; |
15 | if (con) { | 15 | if (con) { |
16 | if (container_is_scratchpad_hidden_or_child(con) && | 16 | if (container_is_scratchpad_hidden_or_child(con) && |
17 | con->fullscreen_mode != FULLSCREEN_GLOBAL) { | 17 | con->pending.fullscreen_mode != FULLSCREEN_GLOBAL) { |
18 | return cmd_results_new(CMD_FAILURE, | 18 | return cmd_results_new(CMD_FAILURE, |
19 | "Cannot split a hidden scratchpad container"); | 19 | "Cannot split a hidden scratchpad container"); |
20 | } | 20 | } |
diff --git a/sway/commands/sticky.c b/sway/commands/sticky.c index 3c93a276..9b09a0f9 100644 --- a/sway/commands/sticky.c +++ b/sway/commands/sticky.c | |||
@@ -29,14 +29,14 @@ struct cmd_results *cmd_sticky(int argc, char **argv) { | |||
29 | !container_is_scratchpad_hidden(container)) { | 29 | !container_is_scratchpad_hidden(container)) { |
30 | // move container to active workspace | 30 | // move container to active workspace |
31 | struct sway_workspace *active_workspace = | 31 | struct sway_workspace *active_workspace = |
32 | output_get_active_workspace(container->workspace->output); | 32 | output_get_active_workspace(container->pending.workspace->output); |
33 | if (!sway_assert(active_workspace, | 33 | if (!sway_assert(active_workspace, |
34 | "Expected output to have a workspace")) { | 34 | "Expected output to have a workspace")) { |
35 | return cmd_results_new(CMD_FAILURE, | 35 | return cmd_results_new(CMD_FAILURE, |
36 | "Expected output to have a workspace"); | 36 | "Expected output to have a workspace"); |
37 | } | 37 | } |
38 | if (container->workspace != active_workspace) { | 38 | if (container->pending.workspace != active_workspace) { |
39 | struct sway_workspace *old_workspace = container->workspace; | 39 | struct sway_workspace *old_workspace = container->pending.workspace; |
40 | container_detach(container); | 40 | container_detach(container); |
41 | workspace_add_floating(active_workspace, container); | 41 | workspace_add_floating(active_workspace, container); |
42 | container_handle_fullscreen_reparent(container); | 42 | container_handle_fullscreen_reparent(container); |
diff --git a/sway/commands/swap.c b/sway/commands/swap.c index a7f9691b..ce5e5128 100644 --- a/sway/commands/swap.c +++ b/sway/commands/swap.c | |||
@@ -16,46 +16,46 @@ static const char expected_syntax[] = | |||
16 | static void swap_places(struct sway_container *con1, | 16 | static void swap_places(struct sway_container *con1, |
17 | struct sway_container *con2) { | 17 | struct sway_container *con2) { |
18 | struct sway_container *temp = malloc(sizeof(struct sway_container)); | 18 | struct sway_container *temp = malloc(sizeof(struct sway_container)); |
19 | temp->x = con1->x; | 19 | temp->pending.x = con1->pending.x; |
20 | temp->y = con1->y; | 20 | temp->pending.y = con1->pending.y; |
21 | temp->width = con1->width; | 21 | temp->pending.width = con1->pending.width; |
22 | temp->height = con1->height; | 22 | temp->pending.height = con1->pending.height; |
23 | temp->width_fraction = con1->width_fraction; | 23 | temp->width_fraction = con1->width_fraction; |
24 | temp->height_fraction = con1->height_fraction; | 24 | temp->height_fraction = con1->height_fraction; |
25 | temp->parent = con1->parent; | 25 | temp->pending.parent = con1->pending.parent; |
26 | temp->workspace = con1->workspace; | 26 | temp->pending.workspace = con1->pending.workspace; |
27 | bool temp_floating = container_is_floating(con1); | 27 | bool temp_floating = container_is_floating(con1); |
28 | 28 | ||
29 | con1->x = con2->x; | 29 | con1->pending.x = con2->pending.x; |
30 | con1->y = con2->y; | 30 | con1->pending.y = con2->pending.y; |
31 | con1->width = con2->width; | 31 | con1->pending.width = con2->pending.width; |
32 | con1->height = con2->height; | 32 | con1->pending.height = con2->pending.height; |
33 | con1->width_fraction = con2->width_fraction; | 33 | con1->width_fraction = con2->width_fraction; |
34 | con1->height_fraction = con2->height_fraction; | 34 | con1->height_fraction = con2->height_fraction; |
35 | 35 | ||
36 | con2->x = temp->x; | 36 | con2->pending.x = temp->pending.x; |
37 | con2->y = temp->y; | 37 | con2->pending.y = temp->pending.y; |
38 | con2->width = temp->width; | 38 | con2->pending.width = temp->pending.width; |
39 | con2->height = temp->height; | 39 | con2->pending.height = temp->pending.height; |
40 | con2->width_fraction = temp->width_fraction; | 40 | con2->width_fraction = temp->width_fraction; |
41 | con2->height_fraction = temp->height_fraction; | 41 | con2->height_fraction = temp->height_fraction; |
42 | 42 | ||
43 | int temp_index = container_sibling_index(con1); | 43 | int temp_index = container_sibling_index(con1); |
44 | if (con2->parent) { | 44 | if (con2->pending.parent) { |
45 | container_insert_child(con2->parent, con1, | 45 | container_insert_child(con2->pending.parent, con1, |
46 | container_sibling_index(con2)); | 46 | container_sibling_index(con2)); |
47 | } else if (container_is_floating(con2)) { | 47 | } else if (container_is_floating(con2)) { |
48 | workspace_add_floating(con2->workspace, con1); | 48 | workspace_add_floating(con2->pending.workspace, con1); |
49 | } else { | 49 | } else { |
50 | workspace_insert_tiling(con2->workspace, con1, | 50 | workspace_insert_tiling(con2->pending.workspace, con1, |
51 | container_sibling_index(con2)); | 51 | container_sibling_index(con2)); |
52 | } | 52 | } |
53 | if (temp->parent) { | 53 | if (temp->pending.parent) { |
54 | container_insert_child(temp->parent, con2, temp_index); | 54 | container_insert_child(temp->pending.parent, con2, temp_index); |
55 | } else if (temp_floating) { | 55 | } else if (temp_floating) { |
56 | workspace_add_floating(temp->workspace, con2); | 56 | workspace_add_floating(temp->pending.workspace, con2); |
57 | } else { | 57 | } else { |
58 | workspace_insert_tiling(temp->workspace, con2, temp_index); | 58 | workspace_insert_tiling(temp->pending.workspace, con2, temp_index); |
59 | } | 59 | } |
60 | 60 | ||
61 | free(temp); | 61 | free(temp); |
@@ -65,8 +65,8 @@ static void swap_focus(struct sway_container *con1, | |||
65 | struct sway_container *con2, struct sway_seat *seat, | 65 | struct sway_container *con2, struct sway_seat *seat, |
66 | struct sway_container *focus) { | 66 | struct sway_container *focus) { |
67 | if (focus == con1 || focus == con2) { | 67 | if (focus == con1 || focus == con2) { |
68 | struct sway_workspace *ws1 = con1->workspace; | 68 | struct sway_workspace *ws1 = con1->pending.workspace; |
69 | struct sway_workspace *ws2 = con2->workspace; | 69 | struct sway_workspace *ws2 = con2->pending.workspace; |
70 | enum sway_container_layout layout1 = container_parent_layout(con1); | 70 | enum sway_container_layout layout1 = container_parent_layout(con1); |
71 | enum sway_container_layout layout2 = container_parent_layout(con2); | 71 | enum sway_container_layout layout2 = container_parent_layout(con2); |
72 | if (focus == con1 && (layout2 == L_TABBED || layout2 == L_STACKED)) { | 72 | if (focus == con1 && (layout2 == L_TABBED || layout2 == L_STACKED)) { |
@@ -125,8 +125,8 @@ void container_swap(struct sway_container *con1, struct sway_container *con2) { | |||
125 | root_scratchpad_remove_container(con2); | 125 | root_scratchpad_remove_container(con2); |
126 | } | 126 | } |
127 | 127 | ||
128 | enum sway_fullscreen_mode fs1 = con1->fullscreen_mode; | 128 | enum sway_fullscreen_mode fs1 = con1->pending.fullscreen_mode; |
129 | enum sway_fullscreen_mode fs2 = con2->fullscreen_mode; | 129 | enum sway_fullscreen_mode fs2 = con2->pending.fullscreen_mode; |
130 | if (fs1) { | 130 | if (fs1) { |
131 | container_fullscreen_disable(con1); | 131 | container_fullscreen_disable(con1); |
132 | } | 132 | } |
@@ -137,9 +137,9 @@ void container_swap(struct sway_container *con1, struct sway_container *con2) { | |||
137 | struct sway_seat *seat = config->handler_context.seat; | 137 | struct sway_seat *seat = config->handler_context.seat; |
138 | struct sway_container *focus = seat_get_focused_container(seat); | 138 | struct sway_container *focus = seat_get_focused_container(seat); |
139 | struct sway_workspace *vis1 = | 139 | struct sway_workspace *vis1 = |
140 | output_get_active_workspace(con1->workspace->output); | 140 | output_get_active_workspace(con1->pending.workspace->output); |
141 | struct sway_workspace *vis2 = | 141 | struct sway_workspace *vis2 = |
142 | output_get_active_workspace(con2->workspace->output); | 142 | output_get_active_workspace(con2->pending.workspace->output); |
143 | if (!sway_assert(vis1 && vis2, "con1 or con2 are on an output without a" | 143 | if (!sway_assert(vis1 && vis2, "con1 or con2 are on an output without a" |
144 | "workspace. This should not happen")) { | 144 | "workspace. This should not happen")) { |
145 | return; | 145 | return; |