-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
WIP: Atomic layout updates ground work
- Loading branch information
Showing
16 changed files
with
690 additions
and
266 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
#ifndef _SWAY_TRANSACTION_H | ||
#define _SWAY_TRANSACTION_H | ||
#include "sway/tree/container.h" | ||
|
||
/** | ||
* Transactions enable us to perform atomic layout updates. | ||
* | ||
* When we want to make adjustments to the layout, we create a transaction. | ||
* A transaction contains a list of affected containers and their new state. | ||
* A state might contain a new size, or new border settings, or new parent/child | ||
* relationships. | ||
* | ||
* Calling transaction_commit() makes sway notify of all the affected clients | ||
* with their new sizes. We then wait for all the views to respond with their | ||
* new surface sizes. When all are ready, or when a timeout has passed, we apply | ||
* the updates all at the same time. | ||
*/ | ||
|
||
struct sway_transaction { | ||
struct wl_event_source *timer; | ||
list_t *instructions; // struct sway_transaction_instruction * | ||
list_t *damage; // struct wlr_box * | ||
size_t num_waiting; | ||
}; | ||
|
||
/** | ||
* Create a new transaction. | ||
*/ | ||
struct sway_transaction *transaction_create(void); | ||
|
||
/** | ||
* Add a container's pending state to the transaction. | ||
*/ | ||
void transaction_add_container(struct sway_transaction *transaction, | ||
struct sway_container *container); | ||
|
||
/** | ||
* Add a box to be damaged when the transaction is applied. | ||
* The box should be in layout coordinates. | ||
*/ | ||
void transaction_add_damage(struct sway_transaction *transaction, | ||
struct wlr_box *box); | ||
|
||
/** | ||
* Submit a transaction to the client views for configuration. | ||
*/ | ||
void transaction_commit(struct sway_transaction *transaction); | ||
|
||
/** | ||
* Notify the transaction system that a view is ready for the new layout. | ||
* | ||
* When all views in the transaction are ready, the layout will be applied. | ||
*/ | ||
void transaction_notify_view_ready(struct sway_view *view, uint32_t serial); | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,18 +1,33 @@ | ||
#ifndef _SWAY_ARRANGE_H | ||
#define _SWAY_ARRANGE_H | ||
#include "sway/desktop/transaction.h" | ||
|
||
struct sway_container; | ||
|
||
// Determine the root container's geometry, then iterate to everything below | ||
void arrange_root(void); | ||
|
||
// Determine the output's geometry, then iterate to everything below | ||
void arrange_output(struct sway_container *output); | ||
/** | ||
* Arrange layout for all the children of the given container, and add them to | ||
* the given transaction. | ||
* | ||
* Use this function if you need to arrange multiple sections of the tree in one | ||
* transaction. | ||
*/ | ||
void arrange_windows(struct sway_container *container, | ||
struct sway_transaction *transaction); | ||
|
||
// Determine the workspace's geometry, then iterate to everything below | ||
void arrange_workspace(struct sway_container *workspace); | ||
/** | ||
* Arrange layout for the given container and commit the transaction. | ||
* | ||
* This function is a wrapper around arrange_windows, and handles creating and | ||
* committing the transaction for you. Use this function if you're only doing | ||
* one arrange operation. | ||
*/ | ||
void arrange_and_commit(struct sway_container *container); | ||
|
||
// Arrange layout for all the children of the given workspace/container | ||
void arrange_children_of(struct sway_container *parent); | ||
// These functions are temporary and are only here to make everything compile. | ||
// They are wrappers around arrange_and_commit. | ||
void arrange_root(void); | ||
void arrange_output(struct sway_container *container); | ||
void arrange_workspace(struct sway_container *container); | ||
void arrange_children_of(struct sway_container *container); | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.