xwayland/selection: rename Wayland-facing data and helpers
Previously, wlr_xwm_selection_transfer.source_fd meant: - the source of data in a Wayland -> X11 copy (good) - the destination of data in a X11 -> Wayland copy (confusing) This made reading through xwayland/selection/incoming.c difficult: in many places, "source" actually means "destination".
This commit is contained in:
parent
1b8330d1f8
commit
e75f483aeb
|
@ -18,8 +18,8 @@ struct wlr_xwm_selection_transfer {
|
||||||
bool flush_property_on_delete;
|
bool flush_property_on_delete;
|
||||||
bool property_set;
|
bool property_set;
|
||||||
struct wl_array source_data;
|
struct wl_array source_data;
|
||||||
int source_fd;
|
int wl_client_fd;
|
||||||
struct wl_event_source *source;
|
struct wl_event_source *event_source;
|
||||||
|
|
||||||
// when sending to x11
|
// when sending to x11
|
||||||
xcb_selection_request_event_t request;
|
xcb_selection_request_event_t request;
|
||||||
|
@ -41,9 +41,9 @@ struct wlr_xwm_selection {
|
||||||
struct wl_list outgoing;
|
struct wl_list outgoing;
|
||||||
};
|
};
|
||||||
|
|
||||||
void xwm_selection_transfer_remove_source(
|
void xwm_selection_transfer_remove_event_source(
|
||||||
struct wlr_xwm_selection_transfer *transfer);
|
struct wlr_xwm_selection_transfer *transfer);
|
||||||
void xwm_selection_transfer_close_source_fd(
|
void xwm_selection_transfer_close_wl_client_fd(
|
||||||
struct wlr_xwm_selection_transfer *transfer);
|
struct wlr_xwm_selection_transfer *transfer);
|
||||||
void xwm_selection_transfer_destroy_property_reply(
|
void xwm_selection_transfer_destroy_property_reply(
|
||||||
struct wlr_xwm_selection_transfer *transfer);
|
struct wlr_xwm_selection_transfer *transfer);
|
||||||
|
|
|
@ -26,8 +26,8 @@ static int xwm_data_source_write(int fd, uint32_t mask, void *data) {
|
||||||
if (len == -1) {
|
if (len == -1) {
|
||||||
wlr_log_errno(WLR_ERROR, "write error to target fd %d", fd);
|
wlr_log_errno(WLR_ERROR, "write error to target fd %d", fd);
|
||||||
xwm_selection_transfer_destroy_property_reply(transfer);
|
xwm_selection_transfer_destroy_property_reply(transfer);
|
||||||
xwm_selection_transfer_remove_source(transfer);
|
xwm_selection_transfer_remove_event_source(transfer);
|
||||||
xwm_selection_transfer_close_source_fd(transfer);
|
xwm_selection_transfer_close_wl_client_fd(transfer);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ static int xwm_data_source_write(int fd, uint32_t mask, void *data) {
|
||||||
transfer->property_start += len;
|
transfer->property_start += len;
|
||||||
if (len == remainder) {
|
if (len == remainder) {
|
||||||
xwm_selection_transfer_destroy_property_reply(transfer);
|
xwm_selection_transfer_destroy_property_reply(transfer);
|
||||||
xwm_selection_transfer_remove_source(transfer);
|
xwm_selection_transfer_remove_event_source(transfer);
|
||||||
|
|
||||||
if (transfer->incr) {
|
if (transfer->incr) {
|
||||||
wlr_log(WLR_DEBUG, "deleting property");
|
wlr_log(WLR_DEBUG, "deleting property");
|
||||||
|
@ -47,7 +47,7 @@ static int xwm_data_source_write(int fd, uint32_t mask, void *data) {
|
||||||
xcb_flush(xwm->xcb_conn);
|
xcb_flush(xwm->xcb_conn);
|
||||||
} else {
|
} else {
|
||||||
wlr_log(WLR_DEBUG, "transfer complete");
|
wlr_log(WLR_DEBUG, "transfer complete");
|
||||||
xwm_selection_transfer_close_source_fd(transfer);
|
xwm_selection_transfer_close_wl_client_fd(transfer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,13 +61,13 @@ static void xwm_write_property(struct wlr_xwm_selection_transfer *transfer,
|
||||||
transfer->property_start = 0;
|
transfer->property_start = 0;
|
||||||
transfer->property_reply = reply;
|
transfer->property_reply = reply;
|
||||||
|
|
||||||
xwm_data_source_write(transfer->source_fd, WL_EVENT_WRITABLE, transfer);
|
xwm_data_source_write(transfer->wl_client_fd, WL_EVENT_WRITABLE, transfer);
|
||||||
|
|
||||||
if (transfer->property_reply != NULL) {
|
if (transfer->property_reply != NULL) {
|
||||||
struct wl_event_loop *loop =
|
struct wl_event_loop *loop =
|
||||||
wl_display_get_event_loop(xwm->xwayland->wl_display);
|
wl_display_get_event_loop(xwm->xwayland->wl_display);
|
||||||
transfer->source = wl_event_loop_add_fd(loop,
|
transfer->event_source = wl_event_loop_add_fd(loop,
|
||||||
transfer->source_fd, WL_EVENT_WRITABLE, xwm_data_source_write,
|
transfer->wl_client_fd, WL_EVENT_WRITABLE, xwm_data_source_write,
|
||||||
transfer);
|
transfer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -99,7 +99,7 @@ void xwm_get_incr_chunk(struct wlr_xwm_selection_transfer *transfer) {
|
||||||
xwm_write_property(transfer, reply);
|
xwm_write_property(transfer, reply);
|
||||||
} else {
|
} else {
|
||||||
wlr_log(WLR_DEBUG, "transfer complete");
|
wlr_log(WLR_DEBUG, "transfer complete");
|
||||||
xwm_selection_transfer_close_source_fd(transfer);
|
xwm_selection_transfer_close_wl_client_fd(transfer);
|
||||||
free(reply);
|
free(reply);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -172,7 +172,7 @@ static void source_send(struct wlr_xwm_selection *selection,
|
||||||
xcb_flush(xwm->xcb_conn);
|
xcb_flush(xwm->xcb_conn);
|
||||||
|
|
||||||
fcntl(fd, F_SETFL, O_WRONLY | O_NONBLOCK);
|
fcntl(fd, F_SETFL, O_WRONLY | O_NONBLOCK);
|
||||||
transfer->source_fd = fd;
|
transfer->wl_client_fd = fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct x11_data_source {
|
struct x11_data_source {
|
||||||
|
|
|
@ -80,8 +80,8 @@ static void xwm_selection_transfer_destroy_outgoing(
|
||||||
xwm_selection_transfer_get_first(selection));
|
xwm_selection_transfer_get_first(selection));
|
||||||
}
|
}
|
||||||
|
|
||||||
xwm_selection_transfer_remove_source(transfer);
|
xwm_selection_transfer_remove_event_source(transfer);
|
||||||
xwm_selection_transfer_close_source_fd(transfer);
|
xwm_selection_transfer_close_wl_client_fd(transfer);
|
||||||
wl_array_release(&transfer->source_data);
|
wl_array_release(&transfer->source_data);
|
||||||
free(transfer);
|
free(transfer);
|
||||||
}
|
}
|
||||||
|
@ -129,14 +129,14 @@ static int xwm_data_source_read(int fd, uint32_t mask, void *data) {
|
||||||
transfer->incr = true;
|
transfer->incr = true;
|
||||||
transfer->property_set = true;
|
transfer->property_set = true;
|
||||||
transfer->flush_property_on_delete = true;
|
transfer->flush_property_on_delete = true;
|
||||||
xwm_selection_transfer_remove_source(transfer);
|
xwm_selection_transfer_remove_event_source(transfer);
|
||||||
xwm_selection_send_notify(xwm, &transfer->request, true);
|
xwm_selection_send_notify(xwm, &transfer->request, true);
|
||||||
} else if (transfer->property_set) {
|
} else if (transfer->property_set) {
|
||||||
wlr_log(WLR_DEBUG, "got %zu bytes, waiting for property delete",
|
wlr_log(WLR_DEBUG, "got %zu bytes, waiting for property delete",
|
||||||
transfer->source_data.size);
|
transfer->source_data.size);
|
||||||
|
|
||||||
transfer->flush_property_on_delete = true;
|
transfer->flush_property_on_delete = true;
|
||||||
xwm_selection_transfer_remove_source(transfer);
|
xwm_selection_transfer_remove_event_source(transfer);
|
||||||
} else {
|
} else {
|
||||||
wlr_log(WLR_DEBUG, "got %zu bytes, property deleted, setting new "
|
wlr_log(WLR_DEBUG, "got %zu bytes, property deleted, setting new "
|
||||||
"property", transfer->source_data.size);
|
"property", transfer->source_data.size);
|
||||||
|
@ -159,8 +159,8 @@ static int xwm_data_source_read(int fd, uint32_t mask, void *data) {
|
||||||
"property", transfer->source_data.size);
|
"property", transfer->source_data.size);
|
||||||
xwm_selection_flush_source_data(transfer);
|
xwm_selection_flush_source_data(transfer);
|
||||||
}
|
}
|
||||||
xwm_selection_transfer_remove_source(transfer);
|
xwm_selection_transfer_remove_event_source(transfer);
|
||||||
xwm_selection_transfer_close_source_fd(transfer);
|
xwm_selection_transfer_close_wl_client_fd(transfer);
|
||||||
} else {
|
} else {
|
||||||
wlr_log(WLR_DEBUG, "nothing happened, buffered the bytes");
|
wlr_log(WLR_DEBUG, "nothing happened, buffered the bytes");
|
||||||
}
|
}
|
||||||
|
@ -183,7 +183,7 @@ void xwm_send_incr_chunk(struct wlr_xwm_selection_transfer *transfer) {
|
||||||
transfer->flush_property_on_delete = false;
|
transfer->flush_property_on_delete = false;
|
||||||
int length = xwm_selection_flush_source_data(transfer);
|
int length = xwm_selection_flush_source_data(transfer);
|
||||||
|
|
||||||
if (transfer->source_fd >= 0) {
|
if (transfer->wl_client_fd >= 0) {
|
||||||
xwm_selection_transfer_start_outgoing(transfer);
|
xwm_selection_transfer_start_outgoing(transfer);
|
||||||
} else if (length > 0) {
|
} else if (length > 0) {
|
||||||
/* Transfer is all done, but queue a flush for
|
/* Transfer is all done, but queue a flush for
|
||||||
|
@ -234,7 +234,7 @@ static void xwm_selection_transfer_start_outgoing(
|
||||||
wl_display_get_event_loop(xwm->xwayland->wl_display);
|
wl_display_get_event_loop(xwm->xwayland->wl_display);
|
||||||
wlr_log(WLR_DEBUG, "Starting transfer %p", transfer);
|
wlr_log(WLR_DEBUG, "Starting transfer %p", transfer);
|
||||||
assert(transfer == xwm_selection_transfer_get_first(transfer->selection));
|
assert(transfer == xwm_selection_transfer_get_first(transfer->selection));
|
||||||
transfer->source = wl_event_loop_add_fd(loop, transfer->source_fd,
|
transfer->event_source = wl_event_loop_add_fd(loop, transfer->wl_client_fd,
|
||||||
WL_EVENT_READABLE, xwm_data_source_read, transfer);
|
WL_EVENT_READABLE, xwm_data_source_read, transfer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -312,7 +312,7 @@ static bool xwm_selection_send_data(struct wlr_xwm_selection *selection,
|
||||||
fcntl(p[1], F_SETFD, FD_CLOEXEC);
|
fcntl(p[1], F_SETFD, FD_CLOEXEC);
|
||||||
fcntl(p[1], F_SETFL, O_NONBLOCK);
|
fcntl(p[1], F_SETFL, O_NONBLOCK);
|
||||||
|
|
||||||
transfer->source_fd = p[0];
|
transfer->wl_client_fd = p[0];
|
||||||
|
|
||||||
wlr_log(WLR_DEBUG, "Sending Wayland selection %u to Xwayland window with "
|
wlr_log(WLR_DEBUG, "Sending Wayland selection %u to Xwayland window with "
|
||||||
"MIME type %s, target %u, transfer %p", req->target, mime_type,
|
"MIME type %s, target %u, transfer %p", req->target, mime_type,
|
||||||
|
|
|
@ -11,19 +11,19 @@
|
||||||
#include "xwayland/selection.h"
|
#include "xwayland/selection.h"
|
||||||
#include "xwayland/xwm.h"
|
#include "xwayland/xwm.h"
|
||||||
|
|
||||||
void xwm_selection_transfer_remove_source(
|
void xwm_selection_transfer_remove_event_source(
|
||||||
struct wlr_xwm_selection_transfer *transfer) {
|
struct wlr_xwm_selection_transfer *transfer) {
|
||||||
if (transfer->source != NULL) {
|
if (transfer->event_source != NULL) {
|
||||||
wl_event_source_remove(transfer->source);
|
wl_event_source_remove(transfer->event_source);
|
||||||
transfer->source = NULL;
|
transfer->event_source = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void xwm_selection_transfer_close_source_fd(
|
void xwm_selection_transfer_close_wl_client_fd(
|
||||||
struct wlr_xwm_selection_transfer *transfer) {
|
struct wlr_xwm_selection_transfer *transfer) {
|
||||||
if (transfer->source_fd >= 0) {
|
if (transfer->wl_client_fd >= 0) {
|
||||||
close(transfer->source_fd);
|
close(transfer->wl_client_fd);
|
||||||
transfer->source_fd = -1;
|
transfer->wl_client_fd = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue