data-device: fix crash when setting the same selection twice
This commit is contained in:
parent
41af8d8459
commit
f1d3aeff9a
|
@ -167,6 +167,11 @@ static void seat_handle_selection_source_destroy(
|
|||
|
||||
void wlr_seat_set_selection(struct wlr_seat *seat,
|
||||
struct wlr_data_source *source, uint32_t serial) {
|
||||
if (seat->selection_source == source) {
|
||||
seat->selection_serial = serial;
|
||||
return;
|
||||
}
|
||||
|
||||
if (seat->selection_source) {
|
||||
wl_list_remove(&seat->selection_source_destroy.link);
|
||||
wlr_data_source_destroy(seat->selection_source);
|
||||
|
|
|
@ -69,10 +69,8 @@ static void seat_handle_primary_selection_source_destroy(
|
|||
|
||||
void wlr_seat_set_primary_selection(struct wlr_seat *seat,
|
||||
struct wlr_primary_selection_source *source, uint32_t serial) {
|
||||
if (seat->primary_selection_source != NULL &&
|
||||
seat->primary_selection_serial - serial < UINT32_MAX / 2) {
|
||||
wlr_log(WLR_DEBUG, "Rejecting set_selection request, invalid serial "
|
||||
"(%"PRIu32" <= %"PRIu32")", serial, seat->primary_selection_serial);
|
||||
if (seat->primary_selection_source == source) {
|
||||
seat->primary_selection_serial = serial;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue