diff options
| author | Přemysl Eric Janouch <p@janouch.name> | 2022-01-07 06:07:48 +0100 | 
|---|---|---|
| committer | Přemysl Eric Janouch <p@janouch.name> | 2022-01-07 06:11:42 +0100 | 
| commit | 8fdf9e2bc3433932878c9f6a15ea411f9a2b0f61 (patch) | |
| tree | ce72237984165be10dabf847beb2ce842aa28e7a /fiv-sidebar.c | |
| parent | 235af3738287696c9880b9c006e073dd07e2f406 (diff) | |
| download | fiv-8fdf9e2bc3433932878c9f6a15ea411f9a2b0f61.tar.gz fiv-8fdf9e2bc3433932878c9f6a15ea411f9a2b0f61.tar.xz fiv-8fdf9e2bc3433932878c9f6a15ea411f9a2b0f61.zip  | |
Turn breadcrumbs into DnD sources
Now it makes sense to keep that GtkSidebar placeholder item around.
Diffstat (limited to 'fiv-sidebar.c')
| -rw-r--r-- | fiv-sidebar.c | 23 | 
1 files changed, 23 insertions, 0 deletions
diff --git a/fiv-sidebar.c b/fiv-sidebar.c index 7cdd6ce..1e901cc 100644 --- a/fiv-sidebar.c +++ b/fiv-sidebar.c @@ -106,6 +106,20 @@ on_breadcrumb_release(  	return TRUE;  } +static void +on_breadcrumb_drag_data_get(G_GNUC_UNUSED GtkWidget *widget, +	G_GNUC_UNUSED GdkDragContext *context, GtkSelectionData *selection_data, +	G_GNUC_UNUSED guint info, G_GNUC_UNUSED guint time_, gpointer user_data) +{ +	GtkListBoxRow *row = GTK_LIST_BOX_ROW(user_data); +	GFile *location = +		g_object_get_qdata(G_OBJECT(row), fiv_sidebar_location_quark()); + +	gchar *uris[] = {g_file_get_uri(location), NULL}; +	gtk_selection_data_set_uris(selection_data, uris); +	g_free(*uris); +} +  static GtkWidget *  create_row(FivSidebar *self, GFile *file, const char *icon_name)  { @@ -148,6 +162,13 @@ create_row(FivSidebar *self, GFile *file, const char *icon_name)  		GTK_REVEALER(revealer), GTK_REVEALER_TRANSITION_TYPE_NONE);  	gtk_container_add(GTK_CONTAINER(revealer), rowbox); +	GtkTargetList *target_list = gtk_target_list_new(NULL, 0); +	gtk_target_list_add_uri_targets(target_list, 0); +	gtk_drag_source_set(revealer, GDK_BUTTON1_MASK, NULL, 0, GDK_ACTION_LINK); +	gtk_drag_source_set_target_list(revealer, target_list); +	gtk_drag_source_set_icon_name(revealer, "inode-directory-symbolic"); +	gtk_target_list_unref(target_list); +  	GtkWidget *row = gtk_list_box_row_new();  	g_object_set_qdata_full(G_OBJECT(row), fiv_sidebar_location_quark(),  		g_object_ref(file), (GDestroyNotify) g_object_unref); @@ -155,6 +176,8 @@ create_row(FivSidebar *self, GFile *file, const char *icon_name)  		g_object_ref(self), (GDestroyNotify) g_object_unref);  	g_signal_connect(revealer, "button-release-event",  		G_CALLBACK(on_breadcrumb_release), row); +	g_signal_connect(revealer, "drag-data-get", +		G_CALLBACK(on_breadcrumb_drag_data_get), row);  	gtk_container_add(GTK_CONTAINER(row), revealer);  	gtk_widget_show_all(row);  | 
