aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sway/desktop/transaction.c7
-rw-r--r--sway/desktop/xwayland.c3
2 files changed, 9 insertions, 1 deletions
diff --git a/sway/desktop/transaction.c b/sway/desktop/transaction.c
index 7c5a9b8f..d2932c87 100644
--- a/sway/desktop/transaction.c
+++ b/sway/desktop/transaction.c
@@ -298,6 +298,13 @@ void transaction_commit(struct sway_transaction *transaction) {
instruction->state.view_width,
instruction->state.view_height);
++transaction->num_waiting;
+
+ // From here on we are rendering a saved buffer of the view, which
+ // means we can send a frame done event to make the client redraw it
+ // as soon as possible. Additionally, this is required if a view is
+ // mapping and its default geometry doesn't intersect an output.
+ struct timespec when;
+ wlr_surface_send_frame_done(con->sway_view->surface, &when);
}
list_add(con->instructions, instruction);
}
diff --git a/sway/desktop/xwayland.c b/sway/desktop/xwayland.c
index 023fb2a7..ad893248 100644
--- a/sway/desktop/xwayland.c
+++ b/sway/desktop/xwayland.c
@@ -269,10 +269,11 @@ static void handle_commit(struct wl_listener *listener, void *data) {
wl_container_of(listener, xwayland_view, commit);
struct sway_view *view = &xwayland_view->view;
struct wlr_xwayland_surface *xsurface = view->wlr_xwayland_surface;
+ struct wlr_surface_state *surface_state = xsurface->surface->current;
if (view->swayc->instructions->length) {
transaction_notify_view_ready_by_size(view,
- xsurface->width, xsurface->height);
+ surface_state->width, surface_state->height);
}
view_damage_from(view);
}