diff options
author | Federico Mena Quintero <federico@ximian.com> | 2004-11-20 04:52:57 +0000 |
---|---|---|
committer | Federico Mena Quintero <federico@src.gnome.org> | 2004-11-20 04:52:57 +0000 |
commit | 038236d42b3d811723c7bc1e61e9d1c3fbc72efb (patch) | |
tree | de680e82f4df4b31bfa0274acbfe2a2f457e3ee8 /gtk/gtkpathbar.c | |
parent | e44612e7da51de88d91526ac1d18e345047939b9 (diff) | |
download | gtk+-038236d42b3d811723c7bc1e61e9d1c3fbc72efb.tar.gz |
Merged from gtk-2-4:
2004-11-19 Federico Mena Quintero <federico@ximian.com>
Merged from gtk-2-4:
Fix #158475:
* gtk/gtkpathbar.c (make_directory_button): Make the button a drag
source.
(button_drag_data_get_cb): New callback to let us drag the
button's path as a text/uri-list.
Diffstat (limited to 'gtk/gtkpathbar.c')
-rw-r--r-- | gtk/gtkpathbar.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/gtk/gtkpathbar.c b/gtk/gtkpathbar.c index 8ebbf9c754..fdc29b391f 100644 --- a/gtk/gtkpathbar.c +++ b/gtk/gtkpathbar.c @@ -24,6 +24,7 @@ #include "gtktogglebutton.h" #include "gtkalignment.h" #include "gtkarrow.h" +#include "gtkdnd.h" #include "gtkimage.h" #include "gtkintl.h" #include "gtkicontheme.h" @@ -1067,6 +1068,34 @@ find_button_type (GtkPathBar *path_bar, return NORMAL_BUTTON; } +static void +button_drag_data_get_cb (GtkWidget *widget, + GdkDragContext *context, + GtkSelectionData *selection_data, + guint info, + guint time_, + gpointer data) +{ + ButtonData *button_data; + GtkPathBar *path_bar; + char *uri; + char *uri_list; + + button_data = data; + path_bar = GTK_PATH_BAR (widget->parent); /* the button's parent *is* the path bar */ + + uri = gtk_file_system_path_to_uri (path_bar->file_system, button_data->path); + uri_list = g_strconcat (uri, "\r\n", NULL); + g_free (uri); + + gtk_selection_data_set (selection_data, + selection_data->target, + 8, + uri_list, + strlen (uri_list)); + g_free (uri_list); +} + static ButtonData * make_directory_button (GtkPathBar *path_bar, const char *dir_name, @@ -1074,6 +1103,10 @@ make_directory_button (GtkPathBar *path_bar, gboolean current_dir, gboolean file_is_hidden) { + const GtkTargetEntry targets[] = { + { "text/uri-list", 0, 0 } + }; + GtkWidget *child = NULL; GtkWidget *label_alignment = NULL; ButtonData *button_data; @@ -1134,6 +1167,14 @@ make_directory_button (GtkPathBar *path_bar, g_object_weak_ref (G_OBJECT (button_data->button), (GWeakNotify) button_data_free, button_data); + gtk_drag_source_set (button_data->button, + GDK_BUTTON1_MASK, + targets, + G_N_ELEMENTS (targets), + GDK_ACTION_COPY); + g_signal_connect (button_data->button, "drag-data-get", + G_CALLBACK (button_drag_data_get_cb), button_data); + return button_data; } |