Revision: 1923
          http://gtkpod.svn.sourceforge.net/gtkpod/?rev=1923&view=rev
Author:   Sikon
Date:     2008-01-06 02:51:16 -0800 (Sun, 06 Jan 2008)

Log Message:
-----------
Fixed various track view regressions

Modified Paths:
--------------
    gtkpod/trunk/ChangeLog
    gtkpod/trunk/src/display_tracks.c

Modified: gtkpod/trunk/ChangeLog
===================================================================
--- gtkpod/trunk/ChangeLog      2008-01-06 08:33:46 UTC (rev 1922)
+++ gtkpod/trunk/ChangeLog      2008-01-06 10:51:16 UTC (rev 1923)
@@ -1,6 +1,7 @@
 2008-01-06 Matvey Kozhev <sikon at users.sourceforge.net>
 
   * data/gtkpod.glade:
+  * src/display.h:
   * src/display_tracks.c:
   * src/display_sorttabs.c:
   * src/prefsdlg.c:

Modified: gtkpod/trunk/src/display_tracks.c
===================================================================
--- gtkpod/trunk/src/display_tracks.c   2008-01-06 08:33:46 UTC (rev 1922)
+++ gtkpod/trunk/src/display_tracks.c   2008-01-06 10:51:16 UTC (rev 1923)
@@ -116,16 +116,28 @@
        return result;
 }
 
-static GtkTreeModel *get_model (GtkTreeView *tree)
+static GtkListStore *get_model_as_store (GtkTreeModel *model)
 {
-       GtkTreeModel *model = gtk_tree_view_get_model (tree);
-       
        if (!GTK_IS_TREE_MODEL_FILTER (model))
-               return model;
+               return GTK_LIST_STORE (model);
        else
-               return gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER 
(model));
+               return GTK_LIST_STORE (gtk_tree_model_filter_get_model 
(GTK_TREE_MODEL_FILTER (model)));
 }
 
+static void convert_iter (GtkTreeModel *model, GtkTreeIter *from, GtkTreeIter 
*to)
+{
+    if (!GTK_IS_TREE_MODEL_FILTER (model))
+        *to = *from;
+    else
+        gtk_tree_model_filter_convert_iter_to_child_iter 
(GTK_TREE_MODEL_FILTER (model), to, from);
+}
+
+static void update_model_view (GtkTreeModel *model)
+{
+    if (GTK_IS_TREE_MODEL_FILTER (model))
+        gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (model));
+}
+
 static GtkTreeModelFilter *get_filter (GtkTreeView *tree)
 {
        GtkTreeModel *model = gtk_tree_view_get_model (tree);
@@ -186,9 +198,11 @@
                                  GtkTreePath *path,
                                  GtkTreeViewDropPosition pos)
 {
+    GtkTreeIter temp;
     GtkTreeIter to_iter;
     GtkTreeIter *from_iter;
     GtkTreeModel *model;
+    GtkListStore *store;
     GList *iterlist = NULL;
     GList *link;
     gchar **paths, **pathp;
@@ -196,55 +210,61 @@
     g_return_val_if_fail (data, FALSE);
     g_return_val_if_fail (*data, FALSE);
 
-    model = get_model (track_treeview);
+    model = gtk_tree_view_get_model (track_treeview);
     g_return_val_if_fail (model, FALSE);
+    store = get_model_as_store (model);
+    g_return_val_if_fail (store, FALSE);
 
-    g_return_val_if_fail (gtk_tree_model_get_iter (model, &to_iter, path),
-                         FALSE);
+    g_return_val_if_fail (gtk_tree_model_get_iter (model, &temp, path), FALSE);
+    convert_iter (model, &temp, &to_iter);
 
     /* split the path list into individual strings */
     paths = g_strsplit (data, "\n", -1);
     pathp = paths;
+    
     /* Convert the list of paths into a list of iters */
     while (*pathp)
     {
-       from_iter = g_malloc (sizeof (GtkTreeIter));
-       if ((strlen (*pathp) > 0) &&
-           gtk_tree_model_get_iter_from_string (model, from_iter, *pathp))
-       {
-           iterlist = g_list_append (iterlist, from_iter);
-       }
-       ++pathp;
+        if ((strlen (*pathp) > 0) && gtk_tree_model_get_iter_from_string 
(model, &temp, *pathp))
+        {
+            from_iter = g_new (GtkTreeIter, 1);
+            convert_iter (model, &temp, from_iter);
+            iterlist = g_list_append (iterlist, from_iter);
+        }
+        
+        ++pathp;
     }
+    
     g_strfreev (paths);
+    
     /* Move the iters in iterlist before or after @to_iter */
     switch (pos)
     {
     case GTK_TREE_VIEW_DROP_INTO_OR_AFTER:
     case GTK_TREE_VIEW_DROP_AFTER:
-       for (link = g_list_last (iterlist); link; link = link->prev)
-       {
-           from_iter = (GtkTreeIter *)link->data;
-           gtk_list_store_move_after (GTK_LIST_STORE (model),
-                                      from_iter, &to_iter);
-       }
-       break;
+    for (link = g_list_last (iterlist); link; link = link->prev)
+    {
+        from_iter = (GtkTreeIter *)link->data;
+        gtk_list_store_move_after (store, from_iter, &to_iter);
+    }
+    break;
     case GTK_TREE_VIEW_DROP_INTO_OR_BEFORE:
     case GTK_TREE_VIEW_DROP_BEFORE:
-       for (link = g_list_first (iterlist); link; link = link->next)
-       {
-           from_iter = (GtkTreeIter *)link->data;
-           gtk_list_store_move_before (GTK_LIST_STORE (model),
-                                       from_iter, &to_iter);
-       }
-       break;
+    for (link = g_list_first (iterlist); link; link = link->next)
+    {
+        from_iter = (GtkTreeIter *)link->data;
+        gtk_list_store_move_before (store,
+                    from_iter, &to_iter);
     }
+    break;
+    }
 
     /* free iterlist */
     for (link = iterlist; link; link = link->next)
        g_free (link->data);
     g_list_free (iterlist);
 
+    update_model_view (model);
     tm_rows_reordered ();
     return TRUE;
 }
@@ -512,7 +532,7 @@
     {   /* drag is within the same widget */
        gint column;
        GtkSortType order;
-       GtkTreeModel *model = get_model(GTK_TREE_VIEW(widget));
+       GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget));
        g_return_val_if_fail (model, FALSE);
        if(gtk_tree_sortable_get_sort_column_id (
               GTK_TREE_SORTABLE (model), &column, &order))
@@ -598,7 +618,7 @@
 
     display_remove_autoscroll_row_timeout (widget);
 
-    model = get_model (GTK_TREE_VIEW (widget));
+    model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget));
     g_return_if_fail (model);
     if (!gtk_tree_view_get_dest_row_at_pos (GTK_TREE_VIEW (widget),
                                            x, y, &path, &pos))
@@ -716,17 +736,19 @@
 void tm_add_track_to_track_model (Track *track, GtkTreeIter *into_iter)
 {
     GtkTreeIter iter;
-    GtkTreeModel *model = get_model (track_treeview);
+    GtkTreeModel *model = gtk_tree_view_get_model (track_treeview);
 
-    g_return_if_fail (model != NULL);
+    g_return_if_fail (model);
 
     if (into_iter)
-       iter = *into_iter;
+    {
+        convert_iter (model, into_iter, &iter);
+    }
     else
-       gtk_list_store_append (GTK_LIST_STORE (model), &iter);
-
-    gtk_list_store_set (GTK_LIST_STORE (model), &iter,
-                       READOUT_COL, track, -1);
+        gtk_list_store_append (get_model_as_store (model), &iter);
+    
+    gtk_list_store_set (get_model_as_store (model), &iter, READOUT_COL, track, 
-1);
+    update_model_view (model);
 }
 
 
@@ -739,44 +761,59 @@
                                GtkTreeIter *iter,
                                gpointer data)
 {
-  Track *track;
+    Track *track;
 
-  gtk_tree_model_get (model, iter, READOUT_COL, &track, -1);
-  if(track == (Track *)data)
-  {
-      GtkTreeSelection *selection = gtk_tree_view_get_selection
-         (track_treeview);
-/*       printf("unselect...\n"); */
-      gtk_tree_selection_unselect_iter (selection, iter);
-/*       printf("...unselect done\n"); */
-      gtk_list_store_remove (GTK_LIST_STORE (model), iter);
-      return TRUE;
-  }
-  return FALSE;
+    gtk_tree_model_get (model, iter, READOUT_COL, &track, -1);
+
+    if(track == (Track *)data)
+    {
+        GtkTreeIter temp;
+
+        GtkTreeSelection *selection = gtk_tree_view_get_selection
+        (track_treeview);
+        /*       printf("unselect...\n"); */
+        gtk_tree_selection_unselect_iter (selection, iter);
+        /*       printf("...unselect done\n"); */
+
+        convert_iter (model, iter, &temp);
+        gtk_list_store_remove (get_model_as_store (model), &temp);
+        update_model_view (model);
+        return TRUE;
+    }
+    return FALSE;
 }
 
 
 /* Remove track from the display model */
 void tm_remove_track (Track *track)
 {
-  GtkTreeModel *model = get_model (track_treeview);
-  if (model != NULL)
-    gtk_tree_model_foreach (model, tm_delete_track, track);
+    GtkTreeModel *model = gtk_tree_view_get_model (track_treeview);
+
+    if (model)
+    {
+        gtk_tree_model_foreach (model, tm_delete_track, track);
+        update_model_view (model);
+    }
 }
 
 
 /* Remove all tracks from the display model */
 void tm_remove_all_tracks ()
 {
-  GtkTreeModel *model = get_model (track_treeview);
-  GtkTreeIter iter;
+    GtkTreeModel *model = gtk_tree_view_get_model (track_treeview);
+    GtkTreeIter iter;
 
-  while (gtk_tree_model_get_iter_first (model, &iter))
-  {
-      gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
-  }
-  tm_store_col_order ();
-  tm_update_default_sizes ();
+    while (gtk_tree_model_get_iter_first (model, &iter))
+    {
+        GtkTreeIter temp;
+
+        convert_iter (model, &iter, &temp);
+        gtk_list_store_remove (get_model_as_store (model), &temp);
+    }
+
+    update_model_view (model);
+    tm_store_col_order ();
+    tm_update_default_sizes ();
 }
 
 /* find out at which position column @tm_item is displayed */
@@ -832,7 +869,7 @@
    iTunesDB is read and some IDs are renumbered */
 void tm_track_changed (Track *track)
 {
-  GtkTreeModel *model = get_model (track_treeview);
+  GtkTreeModel *model = gtk_tree_view_get_model (track_treeview);
   /*  printf("tm_track_changed enter\n");*/
   if (model != NULL)
     gtk_tree_model_foreach (model, tm_model_track_changed, track);
@@ -1379,7 +1416,7 @@
     gint result = 0;
     GtkTreeModel *tm = NULL;
 
-    tm = get_model (GTK_TREE_VIEW(track_treeview));
+    tm = gtk_tree_view_get_model (track_treeview);
     if (tm)
     {
        result = gtk_tree_model_iter_n_children (tm, NULL);
@@ -1417,7 +1454,7 @@
        gboolean changed = FALSE;
        iTunesDB *itdb = NULL;
 
-       tm = get_model (track_treeview);
+       tm = gtk_tree_view_get_model (track_treeview);
        g_return_if_fail (tm);
 
        valid = gtk_tree_model_get_iter_first (tm,&i);
@@ -1534,7 +1571,7 @@
     GList *result = NULL;
     GtkTreeModel *model;
 
-    if((model = get_model (track_treeview)))
+    if((model = gtk_tree_view_get_model (track_treeview)))
     {
        gtk_tree_model_foreach(model, on_all_trackids_list_foreach,
                               &result);
@@ -1548,6 +1585,7 @@
 {
     Track *tr = NULL;
     GList *l = *((GList**)data);
+    
     gtk_tree_model_get(tm, i, READOUT_COL, &tr, -1);
     g_return_if_fail (tr);
     l = g_list_append(l, tr);
@@ -1590,7 +1628,7 @@
 tm_get_all_tracks(void)
 {
     GList *result = NULL;
-    GtkTreeModel *model = get_model (track_treeview);
+    GtkTreeModel *model = gtk_tree_view_get_model (track_treeview);
 
     g_return_val_if_fail (model, NULL);
 
@@ -1917,7 +1955,7 @@
 {
     if (track_treeview)
     {
-       GtkTreeModel *model= get_model (track_treeview);
+       GtkTreeModel *model= gtk_tree_view_get_model (track_treeview);
 
        prefs_set_int("tm_sort", SORT_NONE);
        if (!BROKEN_GTK_TREE_SORT)
@@ -2093,7 +2131,7 @@
 {
     if (track_treeview)
     {
-       GtkTreeModel *model= get_model (track_treeview);
+       GtkTreeModel *model= gtk_tree_view_get_model (track_treeview);
        if (order != SORT_NONE)
        {
            gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model),
@@ -2123,7 +2161,7 @@
 /* Adds the columns to our track_treeview */
 static GtkTreeViewColumn *tm_add_column (TM_item tm_item, gint pos)
 {
-       GtkTreeModel *model = get_model (track_treeview);
+       GtkTreeModel *model = gtk_tree_view_get_model (track_treeview);
        GtkTreeViewColumn *col = NULL;
        const gchar *text;
        GtkCellRenderer *renderer = NULL;  /* default */
@@ -2390,7 +2428,7 @@
     /* create tree view */
     if (track_treeview)
     {   /* delete old tree view */
-      model = get_model (track_treeview);
+      model = gtk_tree_view_get_model (track_treeview);
       /* FIXME: how to delete model? */
       gtk_widget_destroy (GTK_WIDGET (track_treeview));
     }
@@ -2523,8 +2561,6 @@
         }
         else
         {
-            gtk_tree_view_column_set_fixed_width (tvc, -1);
-            
             switch (i)
             {
             case TM_COLUMN_TITLE:
@@ -2631,7 +2667,7 @@
            if (prefs_get_int("tm_sort") != SORT_NONE)
            {
                /* Re-enable sorting */
-               GtkTreeModel *model = get_model (track_treeview);
+               GtkTreeModel *model = gtk_tree_view_get_model (track_treeview);
                if (BROKEN_GTK_TREE_SORT)
                {
                    gtk_tree_sortable_set_sort_func (
@@ -2656,7 +2692,7 @@
            if (prefs_get_int("tm_sort") != SORT_NONE)
            {
                /* Disable sorting */
-               GtkTreeModel *model = get_model (track_treeview);
+               GtkTreeModel *model = gtk_tree_view_get_model (track_treeview);
                if (BROKEN_GTK_TREE_SORT)
                {
                    gtk_tree_sortable_set_sort_func (
@@ -2686,7 +2722,7 @@
     GtkTreeModel *model;
     GtkTreeIter new_iter;
 
-    model = get_model (track_treeview);
+    model = gtk_tree_view_get_model (track_treeview);
 
 /*    printf("plitem: %p\n", plitem);
       if (plitem) printf("plitem->type: %d\n", plitem->type);*/
@@ -2699,11 +2735,11 @@
     case GTK_TREE_VIEW_DROP_INTO_OR_BEFORE:
     case GTK_TREE_VIEW_DROP_INTO_OR_AFTER:
     case GTK_TREE_VIEW_DROP_AFTER:
-       gtk_list_store_insert_after (GTK_LIST_STORE (model),
+       gtk_list_store_insert_after (get_model_as_store (model),
                                     &new_iter, asf->to_iter);
        break;
     case GTK_TREE_VIEW_DROP_BEFORE:
-       gtk_list_store_insert_before (GTK_LIST_STORE (model),
+       gtk_list_store_insert_before (get_model_as_store (model),
                                      &new_iter, asf->to_iter);
        break;
     }
@@ -2730,7 +2766,7 @@
     g_return_val_if_fail (*data, FALSE);
     g_return_val_if_fail (current_playlist, FALSE);
 
-    model = get_model (track_treeview);
+    model = gtk_tree_view_get_model (track_treeview);
     g_return_val_if_fail (model, FALSE);
     if (path)
     {
@@ -2766,15 +2802,19 @@
     /* initialize add-track-struct */
     if (path)
     {   /* add where specified (@path/@pos) */
-       GtkTreeIter to_iter;
-       struct asf_data asf;
-       if (!gtk_tree_model_get_iter (model, &to_iter, path))
-           g_return_val_if_reached (FALSE);
-       asf.to_iter = &to_iter;
-       asf.pos = pos;
-       add_text_plain_to_playlist (current_playlist->itdb,
-                                   current_playlist, use_data, 0,
-                                   tm_addtrackfunc, &asf);
+        GtkTreeIter to_iter;
+        GtkTreeIter temp;
+            
+        struct asf_data asf;
+        if (!gtk_tree_model_get_iter (model, &to_iter, path))
+            g_return_val_if_reached (FALSE);
+            
+        convert_iter (model, &to_iter, &temp);
+        asf.to_iter = &temp;
+        asf.pos = pos;
+        add_text_plain_to_playlist (current_playlist->itdb,
+                        current_playlist, use_data, 0,
+                        tm_addtrackfunc, &asf);
     }
     else
     {   /* add to the end */
@@ -2782,6 +2822,8 @@
                                    current_playlist, use_data, 0,
                                    NULL, NULL);
     }
+    
+    update_model_view (model);
     tm_rows_reordered ();
     C_FREE (buf);
     return TRUE;


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

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
gtkpod-cvs2 mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2

Reply via email to