xwayland/selection: end incr transfer on empty prop, not next selection
Previously, `transfer->incr` was being cleared on the next selection. However, if the next selection was *also* incremental, it's possible that `xwm_handle_selection_property_notify` would route us to `xwm_get_incr_chunk` instead of `xwm_selection_get_data`.
This commit is contained in:
parent
703c17ae41
commit
211c1e23be
|
@ -100,8 +100,8 @@ void xwm_get_incr_chunk(struct wlr_xwm_selection_transfer *transfer) {
|
||||||
if (xcb_get_property_value_length(transfer->property_reply) > 0) {
|
if (xcb_get_property_value_length(transfer->property_reply) > 0) {
|
||||||
xwm_write_selection_property_to_wl_client(transfer);
|
xwm_write_selection_property_to_wl_client(transfer);
|
||||||
} else {
|
} else {
|
||||||
xwm_selection_transfer_finish(transfer);
|
|
||||||
wlr_log(WLR_DEBUG, "incremental transfer complete");
|
wlr_log(WLR_DEBUG, "incremental transfer complete");
|
||||||
|
xwm_selection_transfer_finish(transfer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,7 +117,6 @@ static void xwm_selection_get_data(struct wlr_xwm_selection *selection) {
|
||||||
transfer->incr = true;
|
transfer->incr = true;
|
||||||
xwm_selection_transfer_destroy_property_reply(transfer);
|
xwm_selection_transfer_destroy_property_reply(transfer);
|
||||||
} else {
|
} else {
|
||||||
transfer->incr = false;
|
|
||||||
// Reply's ownership is transferred to wm, which is responsible for freeing
|
// Reply's ownership is transferred to wm, which is responsible for freeing
|
||||||
// it.
|
// it.
|
||||||
xwm_write_selection_property_to_wl_client(transfer);
|
xwm_write_selection_property_to_wl_client(transfer);
|
||||||
|
|
|
@ -35,6 +35,7 @@ void xwm_selection_transfer_destroy_property_reply(
|
||||||
|
|
||||||
void xwm_selection_transfer_finish(
|
void xwm_selection_transfer_finish(
|
||||||
struct wlr_xwm_selection_transfer *transfer) {
|
struct wlr_xwm_selection_transfer *transfer) {
|
||||||
|
transfer->incr = false;
|
||||||
xwm_selection_transfer_destroy_property_reply(transfer);
|
xwm_selection_transfer_destroy_property_reply(transfer);
|
||||||
xwm_selection_transfer_remove_event_source(transfer);
|
xwm_selection_transfer_remove_event_source(transfer);
|
||||||
xwm_selection_transfer_close_wl_client_fd(transfer);
|
xwm_selection_transfer_close_wl_client_fd(transfer);
|
||||||
|
|
Loading…
Reference in New Issue