Changeset 1710
- Timestamp:
- 03/06/07 22:59:06
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/libtinymailui-gtk/tny-gtk-header-list-model.c
r1708 r1710 132 132 g_static_rec_mutex_lock (list_model->iterator_lock); 133 133 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 134 142 tree_path = gtk_tree_path_new (); 135 143 gtk_tree_path_append_index (tree_path, (gint) iter->user_data); … … 222 230 const gchar *str; 223 231 gchar *rdate = NULL; 232 int i; 224 233 225 234 if (iter->stamp != TNY_GTK_HEADER_LIST_MODEL (self)->stamp) … … 229 238 g_static_rec_mutex_lock (list_model->iterator_lock); 230 239 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]; 232 251 233 252 if (((GObject*)header)->ref_count <= 0) … … 329 348 newv = ((gint)iter->user_data); 330 349 newv++; 331 332 350 iter->user_data = (gpointer) newv; 333 351 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 } 335 358 336 359 g_static_rec_mutex_unlock (list_model->iterator_lock); … … 385 408 iter->user_data = (gpointer) n; 386 409 retval = TRUE; 410 } else { 411 iter->stamp = -1; 412 iter->user_data = (gpointer) 0; 387 413 } 388 414 … … 424 450 gtk_tree_path_append_index (path, 0); 425 451 iter.stamp = me->stamp; 426 iter.user_data = (gpointer) me->items->len;427 452 428 453 /* Prepend something to the list */ … … 430 455 g_object_ref (G_OBJECT (item)); 431 456 g_ptr_array_add (me->items, item); 457 iter.user_data = (gpointer) (me->items->len - 1); 432 458 433 459 /* Letting the observers know about this (the GtkTreeView) */ … … 465 491 TnyGtkHeaderListModel *me = (TnyGtkHeaderListModel*)self; 466 492 GtkTreePath *path; 467 GtkTreeIter iter;468 493 gint i; gboolean found = FALSE; 469 494 … … 480 505 } 481 506 482 iter.stamp = me->stamp;483 iter.user_data = (gpointer) i;484 485 507 /* Remove something from the list */ 486 508 487 509 if (found) 488 510 { 511 GtkTreeIter iter; 512 iter.stamp = me->stamp; 513 iter.user_data = (gpointer) i; 489 514 path = tny_gtk_header_list_model_get_path (GTK_TREE_MODEL (me), &iter); 490 515 g_ptr_array_remove (me->items, item); … … 643 668 GtkTreePath *path; 644 669 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 649 670 g_mutex_lock (self->folder_lock); 650 671 g_static_rec_mutex_lock (self->iterator_lock); … … 664 685 tny_folder_get_headers (folder, TNY_LIST (self), refresh, NULL); 665 686 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 666 691 g_mutex_lock (self->folder_lock); 667 692 g_static_rec_mutex_lock (self->iterator_lock); … … 670 695 671 696 /* 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 } 675 702 676 703 g_static_rec_mutex_unlock (self->iterator_lock);
