From 8355884fbd4ea04203614172424b27c5b74018ab Mon Sep 17 00:00:00 2001 From: Tudor Brindus Date: Sun, 18 Oct 2020 16:26:01 -0400 Subject: transaction: validate X transaction completions by geometry, not size 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. --- sway/desktop/transaction.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'sway/desktop/transaction.c') diff --git a/sway/desktop/transaction.c b/sway/desktop/transaction.c index 0d0e0635..e186bf89 100644 --- a/sway/desktop/transaction.c +++ b/sway/desktop/transaction.c @@ -510,17 +510,27 @@ void transaction_notify_view_ready_by_serial(struct sway_view *view, } } -void transaction_notify_view_ready_by_size(struct sway_view *view, - int width, int height) { +void transaction_notify_view_ready_by_geometry(struct sway_view *view, + double x, double y, int width, int height) { struct sway_transaction_instruction *instruction = view->container->node.instruction; if (instruction != NULL && + (int)instruction->container_state.content_x == (int)x && + (int)instruction->container_state.content_y == (int)y && instruction->container_state.content_width == width && instruction->container_state.content_height == height) { set_instruction_ready(instruction); } } +void transaction_notify_view_ready_immediately(struct sway_view *view) { + struct sway_transaction_instruction *instruction = + view->container->node.instruction; + if (instruction != NULL) { + set_instruction_ready(instruction); + } +} + void transaction_commit_dirty(void) { if (!server.dirty_nodes->length) { return; -- cgit v1.2.3-54-g00ecf