diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/sway/commands.h | 1 | ||||
-rw-r--r-- | include/sway/criteria.h | 5 | ||||
-rw-r--r-- | include/sway/debug.h | 8 | ||||
-rw-r--r-- | include/sway/desktop/transaction.h | 33 | ||||
-rw-r--r-- | include/sway/input/seat.h | 11 | ||||
-rw-r--r-- | include/sway/server.h | 5 | ||||
-rw-r--r-- | include/sway/tree/arrange.h | 22 | ||||
-rw-r--r-- | include/sway/tree/container.h | 15 | ||||
-rw-r--r-- | include/sway/tree/view.h | 8 | ||||
-rw-r--r-- | include/sway/tree/workspace.h | 4 |
10 files changed, 54 insertions, 58 deletions
diff --git a/include/sway/commands.h b/include/sway/commands.h index 3ebd0002..1e93e2a3 100644 --- a/include/sway/commands.h +++ b/include/sway/commands.h | |||
@@ -152,6 +152,7 @@ sway_cmd cmd_swaybg_command; | |||
152 | sway_cmd cmd_swap; | 152 | sway_cmd cmd_swap; |
153 | sway_cmd cmd_title_format; | 153 | sway_cmd cmd_title_format; |
154 | sway_cmd cmd_unmark; | 154 | sway_cmd cmd_unmark; |
155 | sway_cmd cmd_urgent; | ||
155 | sway_cmd cmd_workspace; | 156 | sway_cmd cmd_workspace; |
156 | sway_cmd cmd_ws_auto_back_and_forth; | 157 | sway_cmd cmd_ws_auto_back_and_forth; |
157 | sway_cmd cmd_workspace_layout; | 158 | sway_cmd cmd_workspace_layout; |
diff --git a/include/sway/criteria.h b/include/sway/criteria.h index bd3ca0ac..6a8337c5 100644 --- a/include/sway/criteria.h +++ b/include/sway/criteria.h | |||
@@ -6,9 +6,10 @@ | |||
6 | #include "tree/view.h" | 6 | #include "tree/view.h" |
7 | 7 | ||
8 | enum criteria_type { | 8 | enum criteria_type { |
9 | CT_COMMAND = 1 << 0, | 9 | CT_COMMAND = 1 << 0, |
10 | CT_ASSIGN_OUTPUT = 1 << 1, | 10 | CT_ASSIGN_OUTPUT = 1 << 1, |
11 | CT_ASSIGN_WORKSPACE = 1 << 2, | 11 | CT_ASSIGN_WORKSPACE = 1 << 2, |
12 | CT_NO_FOCUS = 1 << 3, | ||
12 | }; | 13 | }; |
13 | 14 | ||
14 | struct criteria { | 15 | struct criteria { |
diff --git a/include/sway/debug.h b/include/sway/debug.h index 2430d319..38d4eccd 100644 --- a/include/sway/debug.h +++ b/include/sway/debug.h | |||
@@ -1,7 +1,15 @@ | |||
1 | #ifndef SWAY_DEBUG_H | 1 | #ifndef SWAY_DEBUG_H |
2 | #define SWAY_DEBUG_H | 2 | #define SWAY_DEBUG_H |
3 | 3 | ||
4 | // Tree | ||
4 | extern bool enable_debug_tree; | 5 | extern bool enable_debug_tree; |
5 | void update_debug_tree(); | 6 | void update_debug_tree(); |
6 | 7 | ||
8 | // Damage | ||
9 | extern const char *damage_debug; | ||
10 | |||
11 | // Transactions | ||
12 | extern int txn_timeout_ms; | ||
13 | extern bool txn_debug; | ||
14 | |||
7 | #endif | 15 | #endif |
diff --git a/include/sway/desktop/transaction.h b/include/sway/desktop/transaction.h index 7ab80eb8..cee4afed 100644 --- a/include/sway/desktop/transaction.h +++ b/include/sway/desktop/transaction.h | |||
@@ -6,34 +6,25 @@ | |||
6 | /** | 6 | /** |
7 | * Transactions enable us to perform atomic layout updates. | 7 | * Transactions enable us to perform atomic layout updates. |
8 | * | 8 | * |
9 | * When we want to make adjustments to the layout, we create a transaction. | 9 | * A transaction contains a list of containers and their new state. |
10 | * A transaction contains a list of affected containers and their new state. | ||
11 | * A state might contain a new size, or new border settings, or new parent/child | 10 | * A state might contain a new size, or new border settings, or new parent/child |
12 | * relationships. | 11 | * relationships. |
13 | * | 12 | * |
14 | * Calling transaction_commit() makes sway notify of all the affected clients | 13 | * Committing a transaction makes sway notify of all the affected clients with |
15 | * with their new sizes. We then wait for all the views to respond with their | 14 | * their new sizes. We then wait for all the views to respond with their new |
16 | * new surface sizes. When all are ready, or when a timeout has passed, we apply | 15 | * surface sizes. When all are ready, or when a timeout has passed, we apply the |
17 | * the updates all at the same time. | 16 | * updates all at the same time. |
18 | */ | 17 | * |
19 | 18 | * When we want to make adjustments to the layout, we change the pending state | |
20 | struct sway_transaction; | 19 | * in containers, mark them as dirty and call transaction_commit_dirty(). This |
21 | 20 | * create and commits a transaction from the dirty containers. | |
22 | /** | ||
23 | * Create a new transaction. | ||
24 | */ | ||
25 | struct sway_transaction *transaction_create(void); | ||
26 | |||
27 | /** | ||
28 | * Add a container's pending state to the transaction. | ||
29 | */ | 21 | */ |
30 | void transaction_add_container(struct sway_transaction *transaction, | ||
31 | struct sway_container *container); | ||
32 | 22 | ||
33 | /** | 23 | /** |
34 | * Submit a transaction to the client views for configuration. | 24 | * Find all dirty containers, create and commit a transaction containing them, |
25 | * and unmark them as dirty. | ||
35 | */ | 26 | */ |
36 | void transaction_commit(struct sway_transaction *transaction); | 27 | void transaction_commit_dirty(void); |
37 | 28 | ||
38 | /** | 29 | /** |
39 | * Notify the transaction system that a view is ready for the new layout. | 30 | * Notify the transaction system that a view is ready for the new layout. |
diff --git a/include/sway/input/seat.h b/include/sway/input/seat.h index 0e440701..1f7792ba 100644 --- a/include/sway/input/seat.h +++ b/include/sway/input/seat.h | |||
@@ -119,17 +119,6 @@ struct sway_container *seat_get_active_child(struct sway_seat *seat, | |||
119 | struct sway_container *container); | 119 | struct sway_container *container); |
120 | 120 | ||
121 | /** | 121 | /** |
122 | * Return the immediate child of container which was most recently focused, with | ||
123 | * fallback to selecting the child in the parent's `current` (rendered) children | ||
124 | * list. | ||
125 | * | ||
126 | * This is useful for when a tabbed container and its children are destroyed but | ||
127 | * still being rendered, and we have to render an appropriate child. | ||
128 | */ | ||
129 | struct sway_container *seat_get_active_current_child(struct sway_seat *seat, | ||
130 | struct sway_container *container); | ||
131 | |||
132 | /** | ||
133 | * Iterate over the focus-inactive children of the container calling the | 122 | * Iterate over the focus-inactive children of the container calling the |
134 | * function on each. | 123 | * function on each. |
135 | */ | 124 | */ |
diff --git a/include/sway/server.h b/include/sway/server.h index a3e32898..a017d1c4 100644 --- a/include/sway/server.h +++ b/include/sway/server.h | |||
@@ -47,10 +47,7 @@ struct sway_server { | |||
47 | bool debug_txn_timings; | 47 | bool debug_txn_timings; |
48 | 48 | ||
49 | list_t *transactions; | 49 | list_t *transactions; |
50 | 50 | list_t *dirty_containers; | |
51 | // When a view is being destroyed and is waiting for a transaction to | ||
52 | // complete it will be stored here. | ||
53 | list_t *destroying_containers; | ||
54 | }; | 51 | }; |
55 | 52 | ||
56 | struct sway_server server; | 53 | struct sway_server server; |
diff --git a/include/sway/tree/arrange.h b/include/sway/tree/arrange.h index 58235642..d6abcc81 100644 --- a/include/sway/tree/arrange.h +++ b/include/sway/tree/arrange.h | |||
@@ -11,26 +11,8 @@ void remove_gaps(struct sway_container *c); | |||
11 | void add_gaps(struct sway_container *c); | 11 | void add_gaps(struct sway_container *c); |
12 | 12 | ||
13 | /** | 13 | /** |
14 | * Arrange layout for all the children of the given container, and add them to | 14 | * Arrange layout for all the children of the given container. |
15 | * the given transaction. | ||
16 | * | ||
17 | * Use this function if you need to arrange multiple sections of the tree in one | ||
18 | * transaction. | ||
19 | * | ||
20 | * You must set the desired state of the container before calling | ||
21 | * arrange_windows, then don't change any state-tracked properties in the | ||
22 | * container until you've called transaction_commit. | ||
23 | */ | 15 | */ |
24 | void arrange_windows(struct sway_container *container, | 16 | void arrange_windows(struct sway_container *container); |
25 | struct sway_transaction *transaction); | ||
26 | |||
27 | /** | ||
28 | * Arrange layout for the given container and commit the transaction. | ||
29 | * | ||
30 | * This function is a wrapper around arrange_windows, and handles creating and | ||
31 | * committing the transaction for you. Use this function if you're only doing | ||
32 | * one arrange operation. | ||
33 | */ | ||
34 | void arrange_and_commit(struct sway_container *container); | ||
35 | 17 | ||
36 | #endif | 18 | #endif |
diff --git a/include/sway/tree/container.h b/include/sway/tree/container.h index a69da9db..ca7a3288 100644 --- a/include/sway/tree/container.h +++ b/include/sway/tree/container.h | |||
@@ -68,6 +68,9 @@ struct sway_container_state { | |||
68 | struct sway_container *parent; | 68 | struct sway_container *parent; |
69 | list_t *children; | 69 | list_t *children; |
70 | 70 | ||
71 | struct sway_container *focused_inactive_child; | ||
72 | bool focused; | ||
73 | |||
71 | // View properties | 74 | // View properties |
72 | double view_x, view_y; | 75 | double view_x, view_y; |
73 | double view_width, view_height; | 76 | double view_width, view_height; |
@@ -144,6 +147,10 @@ struct sway_container { | |||
144 | 147 | ||
145 | bool destroying; | 148 | bool destroying; |
146 | 149 | ||
150 | // If true, indicates that the container has pending state that differs from | ||
151 | // the current. | ||
152 | bool dirty; | ||
153 | |||
147 | struct { | 154 | struct { |
148 | struct wl_signal destroy; | 155 | struct wl_signal destroy; |
149 | // Raised after the tree updates, but before arrange_windows | 156 | // Raised after the tree updates, but before arrange_windows |
@@ -303,4 +310,12 @@ void container_get_box(struct sway_container *container, struct wlr_box *box); | |||
303 | void container_floating_move_to(struct sway_container *con, | 310 | void container_floating_move_to(struct sway_container *con, |
304 | double lx, double ly); | 311 | double lx, double ly); |
305 | 312 | ||
313 | /** | ||
314 | * Mark a container as dirty if it isn't already. Dirty containers will be | ||
315 | * included in the next transaction then unmarked as dirty. | ||
316 | */ | ||
317 | void container_set_dirty(struct sway_container *container); | ||
318 | |||
319 | bool container_has_urgent_child(struct sway_container *container); | ||
320 | |||
306 | #endif | 321 | #endif |
diff --git a/include/sway/tree/view.h b/include/sway/tree/view.h index 21d6403e..9022f7a6 100644 --- a/include/sway/tree/view.h +++ b/include/sway/tree/view.h | |||
@@ -70,6 +70,10 @@ struct sway_view { | |||
70 | bool border_left; | 70 | bool border_left; |
71 | bool border_right; | 71 | bool border_right; |
72 | 72 | ||
73 | struct timespec urgent; | ||
74 | bool allow_request_urgent; | ||
75 | struct wl_event_source *urgent_timer; | ||
76 | |||
73 | bool destroying; | 77 | bool destroying; |
74 | 78 | ||
75 | list_t *executed_criteria; // struct criteria * | 79 | list_t *executed_criteria; // struct criteria * |
@@ -305,4 +309,8 @@ void view_update_marks_textures(struct sway_view *view); | |||
305 | */ | 309 | */ |
306 | bool view_is_visible(struct sway_view *view); | 310 | bool view_is_visible(struct sway_view *view); |
307 | 311 | ||
312 | void view_set_urgent(struct sway_view *view, bool enable); | ||
313 | |||
314 | bool view_is_urgent(struct sway_view *view); | ||
315 | |||
308 | #endif | 316 | #endif |
diff --git a/include/sway/tree/workspace.h b/include/sway/tree/workspace.h index c72a4ac0..bc95317a 100644 --- a/include/sway/tree/workspace.h +++ b/include/sway/tree/workspace.h | |||
@@ -10,6 +10,7 @@ struct sway_workspace { | |||
10 | struct sway_view *fullscreen; | 10 | struct sway_view *fullscreen; |
11 | struct sway_container *floating; | 11 | struct sway_container *floating; |
12 | list_t *output_priority; | 12 | list_t *output_priority; |
13 | bool urgent; | ||
13 | }; | 14 | }; |
14 | 15 | ||
15 | extern char *prev_workspace_name; | 16 | extern char *prev_workspace_name; |
@@ -42,4 +43,7 @@ void workspace_output_add_priority(struct sway_container *workspace, | |||
42 | 43 | ||
43 | struct sway_container *workspace_output_get_highest_available( | 44 | struct sway_container *workspace_output_get_highest_available( |
44 | struct sway_container *ws, struct sway_container *exclude); | 45 | struct sway_container *ws, struct sway_container *exclude); |
46 | |||
47 | void workspace_detect_urgent(struct sway_container *workspace); | ||
48 | |||
45 | #endif | 49 | #endif |