From: Matthias Clasen Date: Tue, 31 Dec 2019 18:13:17 +0000 (-0500) Subject: pathbar: Convert to GtkDragSource X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~20^2~354^2~165 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=24ef9df0f131cd9301ef6d49894cd812b86ce3e5;p=gtk4.git pathbar: Convert to GtkDragSource --- diff --git a/gtk/gtkpathbar.c b/gtk/gtkpathbar.c index 5bc9906888..3f1e9a6d32 100644 --- a/gtk/gtkpathbar.c +++ b/gtk/gtkpathbar.c @@ -37,6 +37,7 @@ #include "gtkwidgetpath.h" #include "gtkwidgetprivate.h" #include "gtkeventcontrollerscroll.h" +#include "gtkdragsource.h" typedef struct { @@ -1240,15 +1241,8 @@ set_button_image (GtkPathBar *path_bar, static void button_data_free (ButtonData *button_data) { - if (button_data->file) - g_object_unref (button_data->file); - button_data->file = NULL; - + g_clear_object (&button_data->file); g_free (button_data->dir_name); - button_data->dir_name = NULL; - - button_data->button = NULL; - g_free (button_data); } @@ -1312,25 +1306,6 @@ find_button_type (GtkPathBar *path_bar, return NORMAL_BUTTON; } -static void -button_drag_data_get_cb (GtkWidget *widget, - GdkDrag *drag, - GtkSelectionData *selection_data, - gpointer data) -{ - ButtonData *button_data; - char *uris[2]; - - button_data = data; - - uris[0] = g_file_get_uri (button_data->file); - uris[1] = NULL; - - gtk_selection_data_set_uris (selection_data, uris); - - g_free (uris[0]); -} - static ButtonData * make_directory_button (GtkPathBar *path_bar, const char *dir_name, @@ -1341,6 +1316,9 @@ make_directory_button (GtkPathBar *path_bar, AtkObject *atk_obj; GtkWidget *child = NULL; ButtonData *button_data; + GValue value = G_VALUE_INIT; + GdkContentProvider *content; + GtkDragSource *source; file_is_hidden = !! file_is_hidden; /* Is it a special button? */ @@ -1387,13 +1365,13 @@ 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, - NULL, - GDK_ACTION_COPY); - gtk_drag_source_add_uri_targets (button_data->button); - g_signal_connect (button_data->button, "drag-data-get", - G_CALLBACK (button_drag_data_get_cb), button_data); + g_value_init (&value, G_TYPE_FILE); + g_value_set_object (&value, button_data->file); + content = gdk_content_provider_new_for_value (&value); + source = gtk_drag_source_new (content, GDK_ACTION_COPY); + gtk_drag_source_attach (source, button_data->button, GDK_BUTTON1_MASK); + g_object_unref (content); + g_value_unset (&value); return button_data; }