diff options
author | Shaun McCance <shaunm@gnome.org> | 2010-05-21 15:52:11 -0500 |
---|---|---|
committer | Shaun McCance <shaunm@gnome.org> | 2010-05-21 15:52:11 -0500 |
commit | c705db1f687033c686e6269ae4876a780bfee423 (patch) | |
tree | e55b8f08c9a23860a865c74e05dd2b450edcb2dc | |
parent | 7df7ae57b7a88ec9b37c603d167c6af762d4efcb (diff) | |
download | yelp-c705db1f687033c686e6269ae4876a780bfee423.tar.gz |
[yelp-window] Accept dragged documents on a Yelp window
-rw-r--r-- | src/yelp-window.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/yelp-window.c b/src/yelp-window.c index d59a33f9..14a126a7 100644 --- a/src/yelp-window.c +++ b/src/yelp-window.c @@ -57,6 +57,14 @@ static void window_new (GtkAction *action, static gboolean window_configure_event (YelpWindow *window, GdkEventConfigure *event, gpointer user_data); +static void window_drag_received (YelpWindow *window, + GdkDragContext *context, + gint x, + gint y, + GtkSelectionData *data, + guint info, + guint time, + gpointer userdata); static gboolean window_resize_signal (YelpWindow *window); static void window_close (GtkAction *action, YelpWindow *window); @@ -574,6 +582,14 @@ window_construct (YelpWindow *window) g_signal_connect (priv->view, "notify::page-icon", G_CALLBACK (view_page_icon), window); gtk_container_add (GTK_CONTAINER (scroll), GTK_WIDGET (priv->view)); gtk_widget_grab_focus (GTK_WIDGET (priv->view)); + + gtk_drag_dest_set (GTK_WIDGET (window), + GTK_DEST_DEFAULT_ALL, + NULL, 0, + GDK_ACTION_COPY); + gtk_drag_dest_add_uri_targets (GTK_WIDGET (window)); + g_signal_connect (window, "drag-data-received", + G_CALLBACK (window_drag_received), NULL); } /******************************************************************************/ @@ -634,6 +650,27 @@ window_new (GtkAction *action, YelpWindow *window) g_object_unref (yuri); } +static void +window_drag_received (YelpWindow *window, + GdkDragContext *context, + gint x, + gint y, + GtkSelectionData *data, + guint info, + guint time, + gpointer userdata) +{ + gchar **uris = gtk_selection_data_get_uris (data); + if (uris && uris[0]) { + YelpUri *uri = yelp_uri_new (uris[0]); + yelp_window_load_uri (window, uri); + g_object_unref (uri); + g_strfreev (uris); + gtk_drag_finish (context, TRUE, FALSE, time); + } + gtk_drag_finish (context, FALSE, FALSE, time); +} + static gboolean window_configure_event (YelpWindow *window, GdkEventConfigure *event, |