I’ll explain it using the new API for getting headers in tinymail. You can see this code in a working demo (that adds a GtkTreeModelSort) at this location.
You don’t see an ‘iterator‘ here: the TnyListIface is the iteratable type that doesn’t depend on Gtk+. The iterator itself is of course being used in the implementation. It can also be used by the developer who’ll be using the tinymail framework.
Update (fwd reply from Dirk@maemo): Updated “modest” to the new API — works fine here so far.
static void refresh_current_folder (TnyMsgFolderIface *folder, gboolean cancelled, gpointer ud) { GtkTreeView *header_view = ud; if (!cancelled) { #define TLI TNY_LIST_IFACE TnyListIface *model = TLI (tny_msg_headers_list_model_new ()); tny_msg_folder_iface_get_headers (folder, model, FALSE); gtk_tree_view_set_model (header_view, GTK_TREE_MODEL (model)); } } static void on_folder_view_tree_sel_chgd (GtkTreeSelection *sel, gpointer ud) { GtkTreeModel *model; GtkTreeIter iter; if (gtk_tree_selection_get_selected (sel, &model, &iter)) { TnyMsgFolderIface *folder; gtk_tree_model_get (model, &iter, TNY_ACCOUNT_TREE_MODEL_INSTANCE_COLUMN, &folder, -1); if (USE_ASYNC) { tny_msg_folder_iface_refresh_async (folder, refresh_current_folder, status_update, ud); } else { tny_msg_folder_iface_refresh (folder); refresh_current_folder (folder, FALSE, ud); } } }