Use a transient object for the dnd session
diff --git a/clients/window.h b/clients/window.h
index f9da805..1b4285f 100644
--- a/clients/window.h
+++ b/clients/window.h
@@ -111,6 +111,9 @@
 				       int32_t x, int32_t y,
 				       int32_t sx, int32_t sy, void *data);
 
+typedef void (*display_drag_offer_handler_t)(struct wl_drag_offer *offer,
+					     struct display *display);
+
 struct window *
 window_create(struct display *display, const char *title,
 	      int32_t x, int32_t y, int32_t width, int32_t height);
@@ -149,6 +152,9 @@
 void
 window_set_user_data(struct window *window, void *data);
 
+void *
+window_get_user_data(struct window *window);
+
 void
 window_set_redraw_handler(struct window *window,
 			  window_redraw_handler_t handler);
@@ -191,7 +197,13 @@
 			 window_frame_handler_t handler);
 
 void
-window_start_drag(struct window *window, struct input *input, uint32_t time);
+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);
+
 
 void
 input_get_position(struct input *input, int32_t *x, int32_t *y);