diff options
author | Carlos Garcia Campos <carlosgc@gnome.org> | 2009-01-18 09:41:32 (GMT) |
---|---|---|
committer | Carlos Garcia Campos <carlosgc@src.gnome.org> | 2009-01-18 09:41:32 (GMT) |
commit | 15d272c8212714e052b30e4a47d4a5ec106d48ca (patch) | |
tree | 87faa6f9a1d79f75827485bfc791af059453a137 /shell/ev-window.c | |
parent | 0ad297527bc7bbb218f70e9e44170afec9129654 (diff) |
Make the whole EvWindow the destination of a drag and drop operation.
2009-01-17 Carlos Garcia Campos <carlosgc@gnome.org>
* shell/ev-view.c: (ev_view_drag_data_received),
(ev_view_class_init), (ev_view_init):
* shell/ev-window.c: (ev_window_drag_data_received),
(ev_window_class_init), (ev_window_init):
Make the whole EvWindow the destination of a drag and drop
operation.
svn path=/trunk/; revision=3345
Diffstat (limited to 'shell/ev-window.c')
-rw-r--r-- | shell/ev-window.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/shell/ev-window.c b/shell/ev-window.c index 9c63904..eb606ef 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -238,6 +238,10 @@ static const gchar *document_print_settings[] = { GTK_PRINT_SETTINGS_OUTPUT_URI }; +static const GtkTargetEntry ev_window_drop_targets[] = { + { "text/uri-list", 0, 0 } +}; + static void ev_window_update_actions (EvWindow *ev_window); static void ev_window_sidebar_visibility_changed_cb (EvSidebar *ev_sidebar, GParamSpec *pspec, @@ -4684,6 +4688,40 @@ zoom_control_changed_cb (EphyZoomAction *action, } static void +ev_window_drag_data_received (GtkWidget *widget, + GdkDragContext *context, + gint x, + gint y, + GtkSelectionData *selection_data, + guint info, + guint time) + +{ + EvWindow *window = EV_WINDOW (widget); + gchar **uris; + gint i = 0; + GSList *uri_list = NULL; + + uris = gtk_selection_data_get_uris (selection_data); + if (!uris) { + gtk_drag_finish (context, FALSE, FALSE, time); + return; + } + + for (i = 0; uris[i]; i++) { + uri_list = g_slist_prepend (uri_list, (gpointer) uris[i]); + } + + ev_application_open_uri_list (EV_APP, uri_list, + gtk_window_get_screen (GTK_WINDOW (window)), + 0); + gtk_drag_finish (context, TRUE, FALSE, time); + + g_strfreev (uris); + g_slist_free (uri_list); +} + +static void ev_window_finalize (GObject *object) { GList *windows = ev_application_get_windows (EV_APP); @@ -4899,6 +4937,7 @@ ev_window_class_init (EvWindowClass *ev_window_class) widget_class->screen_changed = ev_window_screen_changed; widget_class->window_state_event = ev_window_state_event; + widget_class->drag_data_received = ev_window_drag_data_received; g_type_class_add_private (g_object_class, sizeof (EvWindowPrivate)); } @@ -6194,6 +6233,13 @@ ev_window_init (EvWindow *ev_window) ev_window_sizing_mode_changed_cb (EV_VIEW (ev_window->priv->view), NULL, ev_window); ev_window_setup_action_sensitivity (ev_window); + + /* Drag and Drop */ + gtk_drag_dest_set (GTK_WIDGET (ev_window), + GTK_DEST_DEFAULT_ALL, + ev_window_drop_targets, + G_N_ELEMENTS (ev_window_drop_targets), + GDK_ACTION_COPY); } /** |