From 107ff616ddbcffa3f2c3ad3382388560aa7fc25f Mon Sep 17 00:00:00 2001 From: Federico Mena Quintero Date: Sat, 20 Nov 2004 04:48:30 +0000 Subject: [PATCH] Fix #158475: 2004-11-19 Federico Mena Quintero 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. --- ChangeLog | 9 +++++++++ ChangeLog.pre-2-10 | 9 +++++++++ ChangeLog.pre-2-6 | 9 +++++++++ ChangeLog.pre-2-8 | 9 +++++++++ gtk/gtkpathbar.c | 41 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 77 insertions(+) diff --git a/ChangeLog b/ChangeLog index dbb92347a3..5a424237d9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2004-11-19 Federico Mena Quintero + + 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. + 2004-11-19 Federico Mena Quintero Fix #141077. Based on a patch by Christian Neumair : diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index dbb92347a3..5a424237d9 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,12 @@ +2004-11-19 Federico Mena Quintero + + 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. + 2004-11-19 Federico Mena Quintero Fix #141077. Based on a patch by Christian Neumair : diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index dbb92347a3..5a424237d9 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,12 @@ +2004-11-19 Federico Mena Quintero + + 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. + 2004-11-19 Federico Mena Quintero Fix #141077. Based on a patch by Christian Neumair : diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index dbb92347a3..5a424237d9 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,12 @@ +2004-11-19 Federico Mena Quintero + + 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. + 2004-11-19 Federico Mena Quintero Fix #141077. Based on a patch by Christian Neumair : diff --git a/gtk/gtkpathbar.c b/gtk/gtkpathbar.c index 2ce59bba4a..51c106165f 100644 --- a/gtk/gtkpathbar.c +++ b/gtk/gtkpathbar.c @@ -23,6 +23,7 @@ #include "gtktogglebutton.h" #include "gtkalignment.h" #include "gtkarrow.h" +#include "gtkdnd.h" #include "gtkimage.h" #include "gtkintl.h" #include "gtkicontheme.h" @@ -928,6 +929,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, @@ -935,6 +964,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; @@ -994,6 +1027,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; }