Revision: 1489
          http://geeqie.svn.sourceforge.net/geeqie/?rev=1489&view=rev
Author:   nadvornik
Date:     2009-03-08 10:25:24 +0000 (Sun, 08 Mar 2009)

Log Message:
-----------
show a label instead of the default drag icon

Modified Paths:
--------------
    trunk/src/advanced_exif.c
    trunk/src/bar_exif.c
    trunk/src/bar_keywords.c
    trunk/src/dnd.c
    trunk/src/dnd.h

Modified: trunk/src/advanced_exif.c
===================================================================
--- trunk/src/advanced_exif.c   2009-03-08 09:56:40 UTC (rev 1488)
+++ trunk/src/advanced_exif.c   2009-03-08 10:25:24 UTC (rev 1489)
@@ -250,11 +250,6 @@
 
 }
 
-static void advanced_exif_dnd_end(GtkWidget *widget, GdkDragContext *context, 
gpointer data)
-{
-       GtkWidget *window = data;
-       gtk_widget_destroy(window);
-}
 
 static void advanced_exif_dnd_begin(GtkWidget *listview, GdkDragContext 
*context, gpointer data)
 {
@@ -266,21 +261,10 @@
                {
                GtkTreeModel *store = 
gtk_tree_view_get_model(GTK_TREE_VIEW(listview));
                gchar *key;
-               GtkWidget *window;
-               GtkWidget *label;
 
                gtk_tree_model_get(store, &iter, EXIF_ADVCOL_NAME, &key, -1);
 
-               window = gtk_window_new(GTK_WINDOW_POPUP);
-               gtk_widget_realize (window);
-
-               label = gtk_label_new(key);
-               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(listview), "drag_end",
-                                G_CALLBACK(advanced_exif_dnd_end), window);
-
+               dnd_set_drag_label(listview, context, key);
                g_free(key);
                }
 }

Modified: trunk/src/bar_exif.c
===================================================================
--- trunk/src/bar_exif.c        2009-03-08 09:56:40 UTC (rev 1488)
+++ trunk/src/bar_exif.c        2009-03-08 10:25:24 UTC (rev 1489)
@@ -320,9 +320,11 @@
        gtk_box_reorder_child(GTK_BOX(ped->vbox), new_entry, pos);
 }
 
-static void bar_pane_exif_entry_dnd_begin(GtkWidget *widget, GdkDragContext 
*context, gpointer data)
+static void bar_pane_exif_entry_dnd_begin(GtkWidget *entry, GdkDragContext 
*context, gpointer data)
 {
-//     gtk_drag_set_icon_default(context);
+       ExifEntry *ee = g_object_get_data(G_OBJECT(entry), "entry_data");
+       if (!ee) return;
+       dnd_set_drag_label(entry, context, ee->key);
 }
 
 static void bar_pane_exif_entry_dnd_end(GtkWidget *widget, GdkDragContext 
*context, gpointer data)

Modified: trunk/src/bar_keywords.c
===================================================================
--- trunk/src/bar_keywords.c    2009-03-08 09:56:40 UTC (rev 1488)
+++ trunk/src/bar_keywords.c    2009-03-08 10:25:24 UTC (rev 1489)
@@ -490,15 +490,32 @@
                        {
                        gchar *name = keyword_get_name(keyword_tree, 
&child_iter);
                        gtk_selection_data_set_text(selection_data, name, -1);
-printf("name %s\n", name);
                        g_free(name);
                        }
                        break;
                }
 }
 
-static void bar_pane_keywords_dnd_begin(GtkWidget *treeview, GdkDragContext 
*context, gpointer data)
+static void bar_pane_keywords_dnd_begin(GtkWidget *tree_view, GdkDragContext 
*context, gpointer data)
 {
+       GtkTreeIter iter;
+       GtkTreeModel *model;
+       GtkTreeIter child_iter;
+       GtkTreeModel *keyword_tree;
+       gchar *name;
+
+       GtkTreeSelection *sel = 
gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view)); 
+
+        if (!gtk_tree_selection_get_selected(sel, &model, &iter)) return;
+
+       keyword_tree = 
gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(model));
+       
gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(model), 
&child_iter, &iter);
+
+       name = keyword_get_name(keyword_tree, &child_iter);
+
+       dnd_set_drag_label(tree_view, context, name);
+       g_free(name);
+
 }
 
 static void bar_pane_keywords_dnd_end(GtkWidget *widget, GdkDragContext 
*context, gpointer data)

Modified: trunk/src/dnd.c
===================================================================
--- trunk/src/dnd.c     2009-03-08 09:56:40 UTC (rev 1488)
+++ trunk/src/dnd.c     2009-03-08 10:25:24 UTC (rev 1489)
@@ -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: */

Modified: trunk/src/dnd.h
===================================================================
--- trunk/src/dnd.h     2009-03-08 09:56:40 UTC (rev 1488)
+++ trunk/src/dnd.h     2009-03-08 10:25:24 UTC (rev 1489)
@@ -37,6 +37,7 @@
 /* sets a drag icon to pixbuf, if items is > 1, text is drawn onto icon to 
indicate value */
 void dnd_set_drag_icon(GtkWidget *widget, GdkDragContext *context, GdkPixbuf 
*pixbuf, gint items);
 
+void dnd_set_drag_label(GtkWidget *widget, GdkDragContext *context, const 
gchar *text);
 
 #endif
 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
Geeqie-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geeqie-svn

Reply via email to