mirror of
https://github.com/NickHu/sway
synced 2024-12-28 22:23:30 +01:00
8355884fbd
Xwayland views are aware of their coordinates, so validating transaction
completions should take into account the reported coordinates of the
view. Prior to this commit they didn't, and matching dimensions would
suffice to validate the transaction.
Also introduced `transaction_notify_view_ready_immediately` to support
the fix from d0f7e0f
without jumping through hoops to figure out the
geometry of an `xdg_shell` view.
54 lines
1.7 KiB
C
54 lines
1.7 KiB
C
#ifndef _SWAY_TRANSACTION_H
|
|
#define _SWAY_TRANSACTION_H
|
|
#include <stdint.h>
|
|
|
|
/**
|
|
* Transactions enable us to perform atomic layout updates.
|
|
*
|
|
* A transaction contains a list of containers and their new state.
|
|
* A state might contain a new size, or new border settings, or new parent/child
|
|
* relationships.
|
|
*
|
|
* Committing a transaction 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.
|
|
*
|
|
* When we want to make adjustments to the layout, we change the pending state
|
|
* in containers, mark them as dirty and call transaction_commit_dirty(). This
|
|
* create and commits a transaction from the dirty containers.
|
|
*/
|
|
|
|
struct sway_transaction_instruction;
|
|
struct sway_view;
|
|
|
|
/**
|
|
* Find all dirty containers, create and commit a transaction containing them,
|
|
* and unmark them as dirty.
|
|
*/
|
|
void transaction_commit_dirty(void);
|
|
|
|
/**
|
|
* 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_by_serial(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 geometry rather than by serial.
|
|
*
|
|
* This is used by xwayland views, as they don't have serials.
|
|
*/
|
|
void transaction_notify_view_ready_by_geometry(struct sway_view *view,
|
|
double x, double y, int width, int height);
|
|
|
|
/**
|
|
* Unconditionally notify the transaction system that a view is ready for the
|
|
* new layout.
|
|
*/
|
|
void transaction_notify_view_ready_immediately(struct sway_view *view);
|
|
|
|
#endif
|