From bdae625cb344209424841a7c5f0c0967773c8c10 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Wed, 24 Oct 2018 19:38:52 +1000 Subject: Rebase the cursor after mapping a view I originally put the rebase at the end of view_map, but at this point the view is still at its native size and will ignore the motion event if it falls outside of its native size. The only way to do this properly is to rebase the cursor later - either after sending the configure, after the view commits with the new size, or after applying the transaction. I chose to do it after applying the transaction for simplicity. I then attempted to just call cursor_rebase after applying every transaction, but this causes crashes when exiting sway (and possibly other places) because cursor_rebase assumes the tree is in a valid state. So my chosen solution introduces transaction_commit_dirty_with_callback which allows handle_map to register a callback which will run when the transaction is applied. --- include/sway/desktop/transaction.h | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'include/sway/desktop') diff --git a/include/sway/desktop/transaction.h b/include/sway/desktop/transaction.h index 66e8c9a2..f38f033c 100644 --- a/include/sway/desktop/transaction.h +++ b/include/sway/desktop/transaction.h @@ -28,6 +28,13 @@ struct sway_view; */ void transaction_commit_dirty(void); +/** + * Same as above, but runs the specific callback when the transaction is + * applied. + */ +void transaction_commit_dirty_with_callback( + void (*callback)(void *data), void *data); + /** * Notify the transaction system that a view is ready for the new layout. * -- cgit v1.2.3