diff src/dnd.c @ 1393:79b32088ecc4

show a label instead of the default drag icon
author nadvornik
date Sun, 08 Mar 2009 10:25:24 +0000
parents 8b89e3ff286b
children 3a9fb1b52559
line wrap: on
line diff
--- a/src/dnd.c	Sun Mar 08 09:56:40 2009 +0000
+++ b/src/dnd.c	Sun Mar 08 10:25:24 2009 +0000
@@ -167,4 +167,29 @@
 	g_object_unref(pixmap);
 	if (mask) g_object_unref(mask);
 }
+
+static void dnd_set_drag_label_end_cb(GtkWidget *widget, GdkDragContext *context, gpointer data)
+{
+	GtkWidget *window = data;
+	g_signal_handlers_disconnect_by_func(widget, dnd_set_drag_label_end_cb, data);
+	gtk_widget_destroy(window);
+}
+
+void dnd_set_drag_label(GtkWidget *widget, GdkDragContext *context, const gchar *text)
+{
+	GtkWidget *window;
+	GtkWidget *label;
+
+	window = gtk_window_new(GTK_WINDOW_POPUP);
+	gtk_widget_realize (window);
+
+	label = gtk_label_new(text);
+	gtk_container_add(GTK_CONTAINER (window), label);
+	gtk_widget_show(label);
+	gtk_drag_set_icon_widget(context, window, -15, 10);
+	g_signal_connect(G_OBJECT(widget), "drag_end",
+			 G_CALLBACK(dnd_set_drag_label_end_cb), window);
+}
+
+
 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */