output: require commit after hardware cursor update

Up until now only the DRM backend required an output commit after
updating the cursor. Unify this for all backends, because:

- Screen capture can now catch cursor updates listening for output
  commits
- In the future we want to make the cursor a regular wlr_output_layer,
  which would need an output commit to be updated anyways
This commit is contained in:
Simon Ser 2024-04-26 18:41:58 +02:00
parent 08e14deeca
commit c0881bdc01
2 changed files with 13 additions and 6 deletions

View file

@ -1162,7 +1162,6 @@ static bool drm_connector_set_cursor(struct wlr_output *output,
conn->cursor_height = buffer->height;
}
wlr_output_update_needs_frame(output);
return true;
}
@ -1192,7 +1191,6 @@ static bool drm_connector_move_cursor(struct wlr_output *output,
conn->cursor_x = box.x;
conn->cursor_y = box.y;
wlr_output_update_needs_frame(output);
return true;
}

View file

@ -23,6 +23,8 @@ static bool output_set_hardware_cursor(struct wlr_output *output,
return false;
}
wlr_output_update_needs_frame(output);
wlr_buffer_unlock(output->cursor_front_buffer);
output->cursor_front_buffer = NULL;
@ -33,6 +35,15 @@ static bool output_set_hardware_cursor(struct wlr_output *output,
return true;
}
static bool output_move_hardware_cursor(struct wlr_output *output, int x, int y) {
assert(output->impl->move_cursor);
if (!output->impl->move_cursor(output, x, y)) {
return false;
}
wlr_output_update_needs_frame(output);
return true;
}
static void output_cursor_damage_whole(struct wlr_output_cursor *cursor);
static void output_disable_hardware_cursor(struct wlr_output *output) {
@ -299,8 +310,7 @@ static bool output_cursor_attempt_hardware(struct wlr_output_cursor *cursor) {
// If the cursor was hidden or was a software cursor, the hardware
// cursor position is outdated
output->impl->move_cursor(cursor->output,
(int)cursor->x, (int)cursor->y);
output_move_hardware_cursor(cursor->output, (int)cursor->x, (int)cursor->y);
struct wlr_buffer *buffer = NULL;
if (texture != NULL) {
@ -452,8 +462,7 @@ bool wlr_output_cursor_move(struct wlr_output_cursor *cursor,
return true;
}
assert(cursor->output->impl->move_cursor);
return cursor->output->impl->move_cursor(cursor->output, (int)x, (int)y);
return output_move_hardware_cursor(cursor->output, (int)x, (int)y);
}
struct wlr_output_cursor *wlr_output_cursor_create(struct wlr_output *output) {