Mercurial > geeqie.yaz
diff src/advanced_exif.c @ 1392:d1b32a69b40a
dnd in keywords tree
improved dnd in advanced exif
author | nadvornik |
---|---|
date | Sun, 08 Mar 2009 09:56:40 +0000 |
parents | 2ecdff667841 |
children | 79b32088ecc4 |
line wrap: on
line diff
--- a/src/advanced_exif.c Sat Mar 07 17:02:59 2009 +0000 +++ b/src/advanced_exif.c Sun Mar 08 09:56:40 2009 +0000 @@ -45,7 +45,6 @@ GtkWidget *listview; FileData *fd; - gchar *sel_key; }; enum { @@ -230,13 +229,31 @@ static gint n_exif_drag_types = 1; -static void advanced_exif_dnd_get(GtkWidget *entry, GdkDragContext *context, +static void advanced_exif_dnd_get(GtkWidget *listview, GdkDragContext *context, GtkSelectionData *selection_data, guint info, guint time, gpointer data) { ExifWin *ew = data; + GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(listview)); + GtkTreeIter iter; - gtk_selection_data_set_text(selection_data, ew->sel_key, -1); + if (gtk_tree_selection_get_selected(sel, NULL, &iter)) + { + GtkTreeModel *store = gtk_tree_view_get_model(GTK_TREE_VIEW(listview)); + gchar *key; + + gtk_tree_model_get(store, &iter, EXIF_ADVCOL_NAME, &key, -1); + gtk_selection_data_set_text(selection_data, key, -1); + printf("%s\n",key); + g_free(key); + } + +} + +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) @@ -244,24 +261,30 @@ ExifWin *ew = data; GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(listview)); GtkTreeIter iter; - ew->sel_key = NULL; if (gtk_tree_selection_get_selected(sel, NULL, &iter)) { 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, &ew->sel_key, -1); - printf("%s\n",ew->sel_key); + 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); + + g_free(key); } - } -static void advanced_exif_dnd_end(GtkWidget *widget, GdkDragContext *context, gpointer data) -{ - ExifWin *ew = data; - g_free(ew->sel_key); - ew->sel_key = NULL; -} static void advanced_exif_add_column(GtkWidget *listview, const gchar *title, gint n, gint sizable) @@ -343,8 +366,6 @@ gtk_tree_view_set_search_column(GTK_TREE_VIEW(ew->listview), EXIF_ADVCOL_NAME); -// advanced_exif_add_column_check(ew->listview, "", EXIF_ADVCOL_ENABLED); - advanced_exif_add_column(ew->listview, _("Description"), EXIF_ADVCOL_DESCRIPTION, FALSE); advanced_exif_add_column(ew->listview, _("Value"), EXIF_ADVCOL_VALUE, TRUE); advanced_exif_add_column(ew->listview, _("Name"), EXIF_ADVCOL_NAME, FALSE); @@ -352,18 +373,16 @@ advanced_exif_add_column(ew->listview, _("Format"), EXIF_ADVCOL_FORMAT, FALSE); advanced_exif_add_column(ew->listview, _("Elements"), EXIF_ADVCOL_ELEMENTS, FALSE); - gtk_tree_view_enable_model_drag_source(GTK_TREE_VIEW(ew->listview), - GDK_BUTTON1_MASK | GDK_BUTTON2_MASK, - advanced_exif_drag_types, n_exif_drag_types, - GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK); + gtk_drag_source_set(ew->listview, + GDK_BUTTON1_MASK | GDK_BUTTON2_MASK, + advanced_exif_drag_types, n_exif_drag_types, + GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK); g_signal_connect(G_OBJECT(ew->listview), "drag_data_get", G_CALLBACK(advanced_exif_dnd_get), ew); g_signal_connect(G_OBJECT(ew->listview), "drag_begin", G_CALLBACK(advanced_exif_dnd_begin), ew); - g_signal_connect(G_OBJECT(ew->listview), "drag_end", - G_CALLBACK(advanced_exif_dnd_end), ew); ew->scrolled = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(ew->scrolled), GTK_SHADOW_IN);