}
-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)
{
{
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);
}
}
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)
{
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)
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: */
/* 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: */