Changeset 1766
- Timestamp:
- 03/30/07 17:13:03
- Files:
-
- trunk/libtinymailui-gtk/tny-gtk-header-list-model.c (modified) (5 diffs)
- trunk/libtinymailui-gtk/tny-gtk-header-list-model.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/libtinymailui-gtk/tny-gtk-header-list-model.c
r1765 r1766 438 438 } notify_views_data_t; 439 439 440 441 static void 442 notify_views_add_destroy (gpointer data) 443 { 444 TnyGtkHeaderListModel *me = (TnyGtkHeaderListModel*) data; 445 446 g_mutex_lock (me->ra_lock); 447 me->recent_updated = 0; 448 me->recent_added = 0; 449 me->updating_views = FALSE; 450 g_mutex_unlock (me->ra_lock); 451 g_object_unref (me); 452 453 } 454 440 455 static gboolean 441 456 notify_views_add (gpointer data) 442 457 { 443 458 TnyGtkHeaderListModel *me = (TnyGtkHeaderListModel*) data; 444 gint i, added; GtkTreePath *path; 459 gint updated, going_to_update, i, added; 460 GtkTreePath *path; 461 gboolean needmore = FALSE; 445 462 446 463 g_mutex_lock (me->ra_lock); 447 added = me->recent_added; 448 me->recent_added = 0; 449 me->going_to_update_views = FALSE; 464 if (me->recent_added - me->recent_updated > 300) { 465 going_to_update = me->recent_updated + 300; 466 needmore = TRUE; 467 } else 468 going_to_update = me->recent_added; 469 updated = me->recent_updated; 450 470 g_mutex_unlock (me->ra_lock); 451 471 … … 454 474 455 475 gdk_threads_enter(); 456 for (i = 0; i< added; i++)476 for (i = updated; i < going_to_update; i++) 457 477 { 458 478 GtkTreeIter iter; 459 479 iter.stamp = me->stamp; 460 iter.user_data = (gpointer) (me->items->len - 1); 461 gtk_tree_model_row_inserted (GTK_TREE_MODEL (me), path, &iter); 462 } 480 iter.user_data = (gpointer) i; 481 gtk_tree_model_row_inserted ((GtkTreeModel *)me, path, &iter); 482 } 483 me->recent_updated = i; 463 484 gdk_threads_leave(); 464 485 465 486 gtk_tree_path_free (path); 466 g_object_unref (G_OBJECT (me)); 467 468 return FALSE; 487 488 return needmore; 469 489 } 470 490 … … 483 503 * iterator_lock for locking this out, by the way. */ 484 504 485 g_object_ref ( G_OBJECT (item));505 g_object_ref (item); 486 506 g_ptr_array_add (me->items, item); 487 507 … … 489 509 * of the view is, however, quite slow. So we delay it per 100 or so. */ 490 510 491 /* TNY TODO: this delay is not time driven. This means that on slow492 * connections (fewer prepends happen per time), the updating will be493 * slower. This is unwanted: updating should be time, not connection494 * speed, based. Therefore: alter this to use time in stead of counts. */495 496 511 g_mutex_lock (me->ra_lock); 497 512 me->recent_added++; 498 if (!me-> going_to_update_views)513 if (!me->updating_views) 499 514 { 500 g_object_ref (G_OBJECT (me)); 501 me->going_to_update_views = TRUE; 502 g_timeout_add (2000, notify_views_add, me); 515 g_object_ref (me); 516 me->updating_views = TRUE; 517 me->recent_updated = 0; 518 g_timeout_add_full (500, G_PRIORITY_DEFAULT_IDLE, 519 notify_views_add, me, notify_views_add_destroy); 503 520 } 504 521 g_mutex_unlock (me->ra_lock); … … 709 726 g_static_rec_mutex_init (self->iterator_lock); 710 727 self->items = g_ptr_array_sized_new (1000); 711 self-> going_to_update_views = FALSE;728 self->updating_views = FALSE; 712 729 self->ra_lock = g_mutex_new (); 713 730 self->recent_added = 0; 731 self->recent_updated = 0; 714 732 715 733 return; trunk/libtinymailui-gtk/tny-gtk-header-list-model.h
r1763 r1766 66 66 GStaticRecMutex *iterator_lock; 67 67 TnyFolder *folder; 68 gint stamp, recent_added ;69 gboolean going_to_update_views;68 gint stamp, recent_added, recent_updated; 69 gboolean updating_views; 70 70 GMutex *ra_lock; 71 71
