mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-10-29 05:40:12 -04:00
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:
parent
08e14deeca
commit
c0881bdc01
2 changed files with 13 additions and 6 deletions
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue