summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFurkan Sahin <furkan-dev@proton.me>2020-06-28 19:05:04 +0200
committerFurkan Sahin <furkan-dev@proton.me>2020-06-28 19:05:04 +0200
commit520067f73197302296fd67c0109b77912a3c3834 (patch)
tree881dfd93f9ec0e76393324346d9fa94712c8f942
parentda0e1b6de3345c916b459750ee909186e7eb2552 (diff)
transaction: Mark client resize immediately ready
If a client commits a new size on its own, we create a transaction for the resize like any other. However, this involves sending a configure and waiting for the ack, and wlroots will not send configure events when there has been no change. This leads to transactions timing out. Instead, just mark the view ready immediately by size when the client is already ready, so that we avoid waiting for an ack that will never come. Closes: https://github.com/swaywm/sway/issues/5490
-rw-r--r--sway/desktop/transaction.c5
-rw-r--r--sway/desktop/xdg_shell.c2
-rw-r--r--sway/desktop/xwayland.c2
3 files changed, 7 insertions, 2 deletions
diff --git a/sway/desktop/transaction.c b/sway/desktop/transaction.c
index 7b9ab586..2b268e2c 100644
--- a/sway/desktop/transaction.c
+++ b/sway/desktop/transaction.c
@@ -501,7 +501,7 @@ void transaction_notify_view_ready_by_serial(struct sway_view *view,
uint32_t serial) {
struct sway_transaction_instruction *instruction =
view->container->node.instruction;
- if (instruction->serial == serial) {
+ if (instruction != NULL && instruction->serial == serial) {
set_instruction_ready(instruction);
}
}
@@ -510,7 +510,8 @@ void transaction_notify_view_ready_by_size(struct sway_view *view,
int width, int height) {
struct sway_transaction_instruction *instruction =
view->container->node.instruction;
- if (instruction->container_state.content_width == width &&
+ if (instruction != NULL &&
+ instruction->container_state.content_width == width &&
instruction->container_state.content_height == height) {
set_instruction_ready(instruction);
}
diff --git a/sway/desktop/xdg_shell.c b/sway/desktop/xdg_shell.c
index 2bf026f7..df751ef6 100644
--- a/sway/desktop/xdg_shell.c
+++ b/sway/desktop/xdg_shell.c
@@ -293,6 +293,8 @@ static void handle_commit(struct wl_listener *listener, void *data) {
memcpy(&view->geometry, &new_geo, sizeof(struct wlr_box));
desktop_damage_view(view);
transaction_commit_dirty();
+ transaction_notify_view_ready_by_size(view,
+ new_geo.width, new_geo.height);
} else {
memcpy(&view->geometry, &new_geo, sizeof(struct wlr_box));
}
diff --git a/sway/desktop/xwayland.c b/sway/desktop/xwayland.c
index 743e85bc..c972fd3a 100644
--- a/sway/desktop/xwayland.c
+++ b/sway/desktop/xwayland.c
@@ -383,6 +383,8 @@ static void handle_commit(struct wl_listener *listener, void *data) {
memcpy(&view->geometry, &new_geo, sizeof(struct wlr_box));
desktop_damage_view(view);
transaction_commit_dirty();
+ transaction_notify_view_ready_by_size(view,
+ new_geo.width, new_geo.height);
} else {
memcpy(&view->geometry, &new_geo, sizeof(struct wlr_box));
}