seat/dnd: support null drag icon surfaces
As per the Wayland spec [1]: > The icon surface is an optional (can be NULL) surface that provides an > icon to be moved around with the cursor. However, as of now Sway "start_drag" signal handler does not starts the DND session unless a non-NULL drag icons is provided. This patch fixes it by skipping handling of the drag icon if it is null. Fixes #5509 [1] https://wayland.freedesktop.org/docs/html/apa.html#protocol-spec-wl_data_device Signed-off-by: Nick Diego Yamane <nickdiego@igalia.com>
This commit is contained in:
parent
bac9559665
commit
e5954f321f
|
@ -470,10 +470,7 @@ static void handle_start_drag(struct wl_listener *listener, void *data) {
|
||||||
wl_signal_add(&wlr_drag->events.destroy, &drag->destroy);
|
wl_signal_add(&wlr_drag->events.destroy, &drag->destroy);
|
||||||
|
|
||||||
struct wlr_drag_icon *wlr_drag_icon = wlr_drag->icon;
|
struct wlr_drag_icon *wlr_drag_icon = wlr_drag->icon;
|
||||||
if (wlr_drag_icon == NULL) {
|
if (wlr_drag_icon != NULL) {
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct sway_drag_icon *icon = calloc(1, sizeof(struct sway_drag_icon));
|
struct sway_drag_icon *icon = calloc(1, sizeof(struct sway_drag_icon));
|
||||||
if (icon == NULL) {
|
if (icon == NULL) {
|
||||||
sway_log(SWAY_ERROR, "Allocation failed");
|
sway_log(SWAY_ERROR, "Allocation failed");
|
||||||
|
@ -495,6 +492,7 @@ static void handle_start_drag(struct wl_listener *listener, void *data) {
|
||||||
wl_list_insert(&root->drag_icons, &icon->link);
|
wl_list_insert(&root->drag_icons, &icon->link);
|
||||||
|
|
||||||
drag_icon_update_position(icon);
|
drag_icon_update_position(icon);
|
||||||
|
}
|
||||||
seatop_begin_default(seat);
|
seatop_begin_default(seat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue