Mercurial > geeqie
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: */