diff --git a/gio/gliststore.c b/gio/gliststore.c index 8d87159d5..7b2a453d6 100644 --- a/gio/gliststore.c +++ b/gio/gliststore.c @@ -55,6 +55,7 @@ struct _GListStore /* cache */ guint last_position; GSequenceIter *last_iter; + gboolean last_position_valid; }; enum @@ -79,7 +80,8 @@ g_list_store_items_changed (GListStore *store, if (position <= store->last_position) { store->last_iter = NULL; - store->last_position = -1u; + store->last_position = 0; + store->last_position_valid = FALSE; } g_list_model_items_changed (G_LIST_MODEL (store), position, removed, added); @@ -179,7 +181,7 @@ g_list_store_get_item (GListModel *list, GListStore *store = G_LIST_STORE (list); GSequenceIter *it = NULL; - if (store->last_position != -1u) + if (store->last_position_valid) { if (position < G_MAXUINT && store->last_position == position + 1) it = g_sequence_iter_prev (store->last_iter); @@ -194,6 +196,7 @@ g_list_store_get_item (GListModel *list, store->last_iter = it; store->last_position = position; + store->last_position_valid = TRUE; if (g_sequence_iter_is_end (it)) return NULL; @@ -213,7 +216,8 @@ static void g_list_store_init (GListStore *store) { store->items = g_sequence_new (g_object_unref); - store->last_position = -1u; + store->last_position = 0; + store->last_position_valid = FALSE; } /**