26 lines
868 B
C
26 lines
868 B
C
void destroydragicon(struct wl_listener *listener, void *data) {
|
|
/* Focus enter isn't sent during drag, so refocus the focused node. */
|
|
focusclient(focustop(selmon), 1);
|
|
motionnotify(0, NULL, 0, 0, 0, 0);
|
|
wl_list_remove(&listener->link);
|
|
free(listener);
|
|
}
|
|
|
|
void requeststartdrag(struct wl_listener *listener, void *data) {
|
|
struct wlr_seat_request_start_drag_event *event = data;
|
|
|
|
if (wlr_seat_validate_pointer_grab_serial(seat, event->origin, event->serial))
|
|
wlr_seat_start_pointer_drag(seat, event->drag, event->serial);
|
|
else
|
|
wlr_data_source_destroy(event->drag->source);
|
|
}
|
|
|
|
void startdrag(struct wl_listener *listener, void *data) {
|
|
struct wlr_drag *drag = data;
|
|
if (!drag->icon)
|
|
return;
|
|
|
|
drag->icon->data = &wlr_scene_drag_icon_create(drag_icon, drag->icon)->node;
|
|
LISTEN_STATIC(&drag->icon->events.destroy, destroydragicon);
|
|
}
|
|
|