diff --git a/clients/dnd.c b/clients/dnd.c index dedf353a..d0f20811 100644 --- a/clients/dnd.c +++ b/clients/dnd.c @@ -477,6 +477,7 @@ dnd_button_handler(struct window *window, struct item *item; struct rectangle rectangle; struct dnd_drag *dnd_drag; + struct wl_drag *drag; window_get_child_rectangle(dnd->window, &rectangle); input_get_position(input, &x, &y); @@ -497,8 +498,11 @@ dnd_button_handler(struct window *window, dnd_drag->translucent = create_drag_cursor(dnd_drag, item, x, y, 0.2); - window_start_drag(window, input, time, - &drag_listener, dnd_drag); + drag = window_create_drag(window); + wl_drag_offer(drag, "text/plain"); + wl_drag_offer(drag, "text/html"); + window_activate_drag(drag, window, input, time); + wl_drag_add_listener(drag, &drag_listener, dnd_drag); } } diff --git a/clients/window.c b/clients/window.c index f720bf86..a3874e10 100644 --- a/clients/window.c +++ b/clients/window.c @@ -988,20 +988,18 @@ input_get_input_device(struct input *input) } struct wl_drag * -window_start_drag(struct window *window, struct input *input, uint32_t time, - const struct wl_drag_listener *listener, void *data) +window_create_drag(struct window *window) { - struct wl_drag *drag; - cairo_device_flush (window->display->device); - drag = wl_shell_create_drag(window->display->shell); - wl_drag_offer(drag, "text/plain"); - wl_drag_offer(drag, "text/html"); - wl_drag_activate(drag, window->surface, input->input_device, time); - wl_drag_add_listener(drag, listener, data); + return wl_shell_create_drag(window->display->shell); +} - return drag; +void +window_activate_drag(struct wl_drag *drag, struct window *window, + struct input *input, uint32_t time) +{ + wl_drag_activate(drag, window->surface, input->input_device, time); } static void diff --git a/clients/window.h b/clients/window.h index 7b967049..74e95b6e 100644 --- a/clients/window.h +++ b/clients/window.h @@ -222,9 +222,11 @@ display_set_drag_offer_handler(struct display *display, display_drag_offer_handler_t handler); struct wl_drag * -window_start_drag(struct window *window, struct input *input, uint32_t time, - const struct wl_drag_listener *listener, void *data); +window_create_drag(struct window *window); +void +window_activate_drag(struct wl_drag *drag, struct window *window, + struct input *input, uint32_t time); void input_get_position(struct input *input, int32_t *x, int32_t *y);