Changeset 1710

Show
Ignore:
Timestamp:
03/06/07 22:59:06
Author:
pvanhoof
Message:

Some bugfixes

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/libtinymailui-gtk/tny-gtk-header-list-model.c

    r1708 r1710  
    132132        g_static_rec_mutex_lock (list_model->iterator_lock); 
    133133 
     134        i = (gint)iter->user_data; 
     135 
     136        if (i < 0 || i >= list_model->items->len) { 
     137                g_static_rec_mutex_unlock (list_model->iterator_lock); 
     138                g_mutex_unlock (list_model->folder_lock); 
     139                return NULL; 
     140        } 
     141 
    134142        tree_path = gtk_tree_path_new (); 
    135143        gtk_tree_path_append_index (tree_path, (gint) iter->user_data); 
     
    222230        const gchar *str; 
    223231        gchar *rdate = NULL; 
     232        int i; 
    224233 
    225234        if (iter->stamp != TNY_GTK_HEADER_LIST_MODEL (self)->stamp) 
     
    229238        g_static_rec_mutex_lock (list_model->iterator_lock); 
    230239 
    231         header = list_model->items->pdata[(gint) iter->user_data]; 
     240        i = (gint) iter->user_data; 
     241 
     242        if (i < 0 || i >= list_model->items->len) 
     243        { 
     244                g_warning ("GtkTreeModel in invalid state\n"); 
     245                g_static_rec_mutex_unlock (list_model->iterator_lock); 
     246                g_mutex_unlock (list_model->folder_lock); 
     247                return; 
     248        } 
     249 
     250        header = list_model->items->pdata[i]; 
    232251 
    233252        if (((GObject*)header)->ref_count <= 0) 
     
    329348        newv = ((gint)iter->user_data); 
    330349        newv++; 
    331  
    332350        iter->user_data = (gpointer) newv; 
    333351 
    334         retval = (((gint)iter->user_data) >=0 && ((gint)iter->user_data) < list_model->items->len); 
     352        retval = (newv >= 0 && newv < list_model->items->len); 
     353 
     354        if (!retval) { 
     355                iter->stamp = -1; 
     356                iter->user_data = (gpointer) 0; 
     357        } 
    335358 
    336359        g_static_rec_mutex_unlock (list_model->iterator_lock); 
     
    385408                iter->user_data = (gpointer) n; 
    386409                retval = TRUE; 
     410        } else { 
     411                iter->stamp = -1; 
     412                iter->user_data = (gpointer) 0; 
    387413        } 
    388414 
     
    424450        gtk_tree_path_append_index (path, 0); 
    425451        iter.stamp = me->stamp; 
    426         iter.user_data = (gpointer) me->items->len; 
    427452 
    428453        /* Prepend something to the list */ 
     
    430455        g_object_ref (G_OBJECT (item)); 
    431456        g_ptr_array_add (me->items, item); 
     457        iter.user_data = (gpointer) (me->items->len - 1); 
    432458 
    433459        /* Letting the observers know about this (the GtkTreeView) */ 
     
    465491        TnyGtkHeaderListModel *me = (TnyGtkHeaderListModel*)self; 
    466492        GtkTreePath *path; 
    467         GtkTreeIter iter; 
    468493        gint i; gboolean found = FALSE; 
    469494 
     
    480505                } 
    481506 
    482         iter.stamp = me->stamp; 
    483         iter.user_data = (gpointer) i; 
    484  
    485507        /* Remove something from the list */ 
    486508 
    487509        if (found) 
    488510        { 
     511                GtkTreeIter iter; 
     512                iter.stamp = me->stamp; 
     513                iter.user_data = (gpointer) i; 
    489514                path = tny_gtk_header_list_model_get_path (GTK_TREE_MODEL (me), &iter); 
    490515                g_ptr_array_remove (me->items, item); 
     
    643668        GtkTreePath *path; 
    644669 
    645         iter.stamp = self->stamp; 
    646         iter.user_data = (gpointer) 0; 
    647         path = tny_gtk_header_list_model_get_path (GTK_TREE_MODEL (self), &iter); 
    648  
    649670        g_mutex_lock (self->folder_lock); 
    650671        g_static_rec_mutex_lock (self->iterator_lock); 
     
    664685        tny_folder_get_headers (folder, TNY_LIST (self), refresh, NULL); 
    665686 
     687        iter.stamp = self->stamp; 
     688        iter.user_data = (gpointer) 0; 
     689        path = tny_gtk_header_list_model_get_path (GTK_TREE_MODEL (self), &iter); 
     690 
    666691        g_mutex_lock (self->folder_lock); 
    667692        g_static_rec_mutex_lock (self->iterator_lock); 
     
    670695 
    671696        /* Notify the observers (the GtkTreeView) */ 
    672         gtk_tree_path_append_index (path, 0); 
    673         gtk_tree_model_row_inserted (GTK_TREE_MODEL (self), path, &iter); 
    674         gtk_tree_path_free (path); 
     697        if (path) { 
     698                gtk_tree_path_append_index (path, 0); 
     699                gtk_tree_model_row_inserted (GTK_TREE_MODEL (self), path, &iter); 
     700                gtk_tree_path_free (path); 
     701        } 
    675702 
    676703        g_static_rec_mutex_unlock (self->iterator_lock);