static RBDisplayPage * get_page_at_index (RBDisplayPageMenu *menu, int index, GtkTreeIter *iter) { int i; if (get_page_iter (menu, iter) == FALSE) return NULL; i = 0; do { RBDisplayPage *page; gboolean counted; gtk_tree_model_get (menu->priv->real_model, iter, RB_DISPLAY_PAGE_MODEL_COLUMN_PAGE, &page, -1); counted = consider_page (menu, page); if (counted && index == i) { return page; } else if (counted) { i++; } g_object_unref (page); } while (gtk_tree_model_iter_next (menu->priv->real_model, iter)); return NULL; }
static int count_items (RBDisplayPageMenu *menu, int upto) { GtkTreeIter iter; int i; int c; if (get_page_iter (menu, &iter) == FALSE) { return 0; } i = 0; c = 0; while (c < upto) { RBDisplayPage *page; gtk_tree_model_get (menu->priv->real_model, &iter, RB_DISPLAY_PAGE_MODEL_COLUMN_PAGE, &page, -1); if (consider_page (menu, page)) { i++; } g_object_unref (page); c++; if (!gtk_tree_model_iter_next (menu->priv->real_model, &iter)) break; } return i; }
static int count_items (RBDisplayPageMenu *menu) { GtkTreeIter iter; int i; if (get_page_iter (menu, &iter) == FALSE) return 0; i = 0; do { RBDisplayPage *page; gboolean counted; gtk_tree_model_get (GTK_TREE_MODEL (menu->priv->model), &iter, RB_DISPLAY_PAGE_MODEL_COLUMN_PAGE, &page, -1); counted = consider_page (menu, page); g_object_unref (page); if (counted) i++; } while (gtk_tree_model_iter_next (GTK_TREE_MODEL (menu->priv->model), &iter)); return i; }
static gboolean consider_page_iter (RBDisplayPageMenu *menu, GtkTreeIter *iter) { RBDisplayPage *page; gboolean result; gtk_tree_model_get (menu->priv->real_model, iter, RB_DISPLAY_PAGE_MODEL_COLUMN_PAGE, &page, -1); if (page == NULL) return FALSE; result = consider_page (menu, page); g_object_unref (page); return result; }