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,
|
void wlr_seat_set_selection(struct wlr_seat *seat,
|
||||||
struct wlr_data_source *source, uint32_t serial) {
|
struct wlr_data_source *source, uint32_t serial) {
|
||||||
|
if (seat->selection_source == source) {
|
||||||
|
seat->selection_serial = serial;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (seat->selection_source) {
|
if (seat->selection_source) {
|
||||||
wl_list_remove(&seat->selection_source_destroy.link);
|
wl_list_remove(&seat->selection_source_destroy.link);
|
||||||
wlr_data_source_destroy(seat->selection_source);
|
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,
|
void wlr_seat_set_primary_selection(struct wlr_seat *seat,
|
||||||
struct wlr_primary_selection_source *source, uint32_t serial) {
|
struct wlr_primary_selection_source *source, uint32_t serial) {
|
||||||
if (seat->primary_selection_source != NULL &&
|
if (seat->primary_selection_source == source) {
|
||||||
seat->primary_selection_serial - serial < UINT32_MAX / 2) {
|
seat->primary_selection_serial = serial;
|
||||||
wlr_log(WLR_DEBUG, "Rejecting set_selection request, invalid serial "
|
|
||||||
"(%"PRIu32" <= %"PRIu32")", serial, seat->primary_selection_serial);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue