summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuan Pablo Ugarte <juanpablougarte@gmail.com>2018-01-20 18:57:52 -0300
committerJuan Pablo Ugarte <juanpablougarte@gmail.com>2018-01-20 18:59:01 -0300
commit22749bc1ff6f557770d0e214687dc0a8e7653325 (patch)
treedb1627aa5ca3f56448bdcffbb1a402db23d056de
parent87bd20b97e672558c6a5cea30f5249acd495c67a (diff)
downloadglade-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.c49
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