diff options
author | Juan Pablo Ugarte <juanpablougarte@gmail.com> | 2018-01-20 18:57:52 -0300 |
---|---|---|
committer | Juan Pablo Ugarte <juanpablougarte@gmail.com> | 2018-01-20 18:59:01 -0300 |
commit | 22749bc1ff6f557770d0e214687dc0a8e7653325 (patch) | |
tree | db1627aa5ca3f56448bdcffbb1a402db23d056de | |
parent | 87bd20b97e672558c6a5cea30f5249acd495c67a (diff) | |
download | glade-22749bc1ff6f557770d0e214687dc0a8e7653325.tar.gz |
GladeAdaptorChooserWidget: enable Drag & Drop
NOTE: Gtk bug #771986 needs to be fixed for this to work
-rw-r--r-- | gladeui/glade-adaptor-chooser-widget.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/gladeui/glade-adaptor-chooser-widget.c b/gladeui/glade-adaptor-chooser-widget.c index 468e10e1..a7b06c49 100644 --- a/gladeui/glade-adaptor-chooser-widget.c +++ b/gladeui/glade-adaptor-chooser-widget.c @@ -24,6 +24,7 @@ #include "glade-app.h" #include "gladeui-enum-types.h" #include "glade-adaptor-chooser-widget.h" +#include "glade-dnd.h" #include <string.h> @@ -396,6 +397,45 @@ adaptor_text_cell_data_func (GtkTreeViewColumn *tree_column, } static void +glade_adaptor_chooser_widget_drag_begin (GtkWidget *widget, + GdkDragContext *context, + gpointer data) +{ + GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)); + GtkTreeModel *model; + GtkTreeIter iter; + + if (gtk_tree_selection_get_selected (selection, &model, &iter)) + { + GladeWidgetAdaptor *adaptor; + gtk_tree_model_get (model, &iter, COLUMN_ADAPTOR, &adaptor, -1); + _glade_dnd_set_icon_widget (context, + glade_widget_adaptor_get_icon_name (adaptor), + glade_widget_adaptor_get_name (adaptor)); + } +} + +static void +glade_adaptor_chooser_widget_drag_data_get (GtkWidget *widget, + GdkDragContext *context, + GtkSelectionData *data, + guint info, + guint time, + gpointer userdata) +{ + GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)); + GtkTreeModel *model; + GtkTreeIter iter; + + if (gtk_tree_selection_get_selected (selection, &model, &iter)) + { + GladeWidgetAdaptor *adaptor; + gtk_tree_model_get (model, &iter, COLUMN_ADAPTOR, &adaptor, -1); + _glade_dnd_set_data (data, G_OBJECT (adaptor)); + } +} + +static void _glade_adaptor_chooser_widget_constructed (GObject *object) { _GladeAdaptorChooserWidget *chooser = GLADE_ADAPTOR_CHOOSER_WIDGET (object); @@ -418,6 +458,15 @@ _glade_adaptor_chooser_widget_constructed (GObject *object) gtk_entry_completion_set_match_func (priv->entrycompletion, entrycompletion_match_func, chooser, NULL); + /* Enable Drag & Drop */ + gtk_tree_view_enable_model_drag_source (priv->treeview, GDK_BUTTON1_MASK, + _glade_dnd_get_target (), 1, 0); + g_signal_connect_after (priv->treeview, "drag-begin", + G_CALLBACK (glade_adaptor_chooser_widget_drag_begin), + NULL); + g_signal_connect (priv->treeview, "drag-data-get", + G_CALLBACK (glade_adaptor_chooser_widget_drag_data_get), + NULL); } static void |