diff options
author | Drew DeVault <sir@cmpwn.com> | 2018-06-30 06:27:39 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-30 06:27:39 -0700 |
commit | d8c61c976372eedf271f505ffd82c461b6503f6f (patch) | |
tree | 323739dc80680dd774acfdcf43eb76cfe93aa64c /include/sway/desktop/transaction.h | |
parent | 9ba72433b6c87086f2772405e09e8ac8c0136a01 (diff) | |
parent | e396af853b01438f7e5ef34bfa6fd2507d11ce5a (diff) |
Merge pull request #2072 from RyanDwyer/atomic
Atomic layout updates
Diffstat (limited to 'include/sway/desktop/transaction.h')
-rw-r--r-- | include/sway/desktop/transaction.h | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/include/sway/desktop/transaction.h b/include/sway/desktop/transaction.h new file mode 100644 index 00000000..7ab80eb8 --- /dev/null +++ b/include/sway/desktop/transaction.h @@ -0,0 +1,67 @@ +#ifndef _SWAY_TRANSACTION_H +#define _SWAY_TRANSACTION_H +#include <wlr/render/wlr_texture.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; + +/** + * 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); + +/** + * 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); + +/** + * Notify the transaction system that a view is ready for the new layout, but + * identifying the instruction by width and height rather than by serial. + * + * This is used by xwayland views, as they don't have serials. + */ +void transaction_notify_view_ready_by_size(struct sway_view *view, + int width, int height); + +/** + * Get the saved texture that should be rendered for a view. + * + * The addresses pointed at by the width and height pointers will be populated + * with the surface's dimensions, which may be different to the texture's + * dimensions if output scaling is used. + * + * This function should only be called if it is known that the view has + * instructions. + */ +struct wlr_texture *transaction_get_saved_texture(struct sway_view *view, + int *width, int *height); + +#endif |