dnd fixes
authorVladimir Nadvornik <nadvornik@suse.cz>
Sun, 8 Mar 2009 12:42:23 +0000 (12:42 +0000)
committerVladimir Nadvornik <nadvornik@suse.cz>
Sun, 8 Mar 2009 12:42:23 +0000 (12:42 +0000)
src/bar_keywords.c
src/metadata.c
src/metadata.h

index 845a199..25bed16 100644 (file)
@@ -527,6 +527,7 @@ static void bar_pane_keywords_dnd_receive(GtkWidget *tree_view, GdkDragContext *
                                          GtkSelectionData *selection_data, guint info,
                                          guint time, gpointer data)
 {
+       PaneKeywordsData *pkd = data;
        GtkTreePath *tpath = NULL;
         GtkTreeViewDropPosition pos;
        GtkTreeModel *model;
@@ -578,6 +579,12 @@ static void bar_pane_keywords_dnd_receive(GtkWidget *tree_view, GdkDragContext *
                        return;
                        }
 
+               if (src_valid && keyword_compare(keyword_tree, &src_kw_iter, &dest_kw_iter) == 0)
+                       {
+                       /* can't move to itself */
+                       return;
+                       }
+
                if ((pos == GTK_TREE_VIEW_DROP_INTO_OR_BEFORE || pos == GTK_TREE_VIEW_DROP_INTO_OR_AFTER) &&
                    !gtk_tree_model_iter_has_child(keyword_tree, &dest_kw_iter))
                        {
@@ -622,6 +629,7 @@ static void bar_pane_keywords_dnd_receive(GtkWidget *tree_view, GdkDragContext *
                        }
                }
        string_list_free(new_keywords);
+       bar_keyword_tree_sync(pkd);
 }
 
 static gint bar_pane_keywords_dnd_motion(GtkWidget *tree_view, GdkDragContext *context,
index 5c2b372..15a1681 100644 (file)
@@ -729,6 +729,16 @@ void keyword_set(GtkTreeStore *keyword_tree, GtkTreeIter *iter, const gchar *nam
        g_free(casefold);
 }
 
+gboolean keyword_compare(GtkTreeModel *keyword_tree, GtkTreeIter *a, GtkTreeIter *b)
+{
+       GtkTreePath *pa = gtk_tree_model_get_path(keyword_tree, a);
+       GtkTreePath *pb = gtk_tree_model_get_path(keyword_tree, b);
+       gint ret = gtk_tree_path_compare(pa, pb);
+       gtk_tree_path_free(pa);
+       gtk_tree_path_free(pb);
+       return ret;
+}
+
 void keyword_copy(GtkTreeStore *keyword_tree, GtkTreeIter *to, GtkTreeIter *from)
 {
 
index a1ce98e..f47f99c 100644 (file)
@@ -55,6 +55,8 @@ gchar *keyword_get_name(GtkTreeModel *keyword_tree, GtkTreeIter *iter);
 gchar *keyword_get_casefold(GtkTreeModel *keyword_tree, GtkTreeIter *iter);
 gboolean keyword_get_is_keyword(GtkTreeModel *keyword_tree, GtkTreeIter *iter);
 
+gboolean keyword_compare(GtkTreeModel *keyword_tree, GtkTreeIter *a, GtkTreeIter *b);
+
 void keyword_copy(GtkTreeStore *keyword_tree, GtkTreeIter *to, GtkTreeIter *from);
 void keyword_copy_recursive(GtkTreeStore *keyword_tree, GtkTreeIter *to, GtkTreeIter *from);
 void keyword_move_recursive(GtkTreeStore *keyword_tree, GtkTreeIter *to, GtkTreeIter *from);