static void mtn_service_model_add_or_update (MtnServiceModel *model, const char *path, guint index) { ClutterModelIter *model_iter; if (!path) return; model_iter = mtn_service_model_lookup (model, path); if (!model_iter) { g_debug ("add service %d: %s", index, path); clutter_model_insert (CLUTTER_MODEL (model), index, MTN_SERVICE_MODEL_COL_INDEX, index, MTN_SERVICE_MODEL_COL_PRESENT, TRUE, MTN_SERVICE_MODEL_COL_HIDDEN, FALSE, MTN_SERVICE_MODEL_COL_OBJECT_PATH, path, MTN_SERVICE_MODEL_COL_WIDGET, mtn_service_tile_new (path), -1); } else { g_debug ("update service %d: %s", index, path); clutter_model_iter_set (model_iter, MTN_SERVICE_MODEL_COL_INDEX, index, MTN_SERVICE_MODEL_COL_PRESENT, TRUE, -1); g_object_unref (model_iter); } }
static void mtn_service_model_update (MtnServiceModel *model, GVariant *services) { ClutterModelIter *model_iter; GVariantIter *iter; char *path; guint index; if (services) { index = 0; g_variant_get (services, "ao", &iter); while (g_variant_iter_next (iter, "&o", &path)) { mtn_service_model_add_or_update (model, path, index); index++; } } /* remove the rows that were not present in the Services list */ index = 0; while ((model_iter = clutter_model_get_iter_at_row (CLUTTER_MODEL (model), index))) { gboolean present, hidden; clutter_model_iter_get (model_iter, MTN_SERVICE_MODEL_COL_PRESENT, &present, MTN_SERVICE_MODEL_COL_HIDDEN, &hidden, -1); if (present) { /* initialize to present=FALSE for next _services_changed() call */ if (!hidden) { clutter_model_iter_set (model_iter, MTN_SERVICE_MODEL_COL_PRESENT, FALSE, -1); } index++; } else { clutter_model_remove (CLUTTER_MODEL (model), index); } g_object_unref (model_iter); } }
static void filter_model (ClutterModel *model) { ClutterModelIter *iter; g_print ("\n* Filter function: even rows\n"); clutter_model_set_filter (model, filter_func, NULL, NULL); iter = clutter_model_get_first_iter (model); while (!clutter_model_iter_is_last (iter)) { print_iter (iter, "Filtered Forward Iteration"); iter = clutter_model_iter_next (iter); } g_object_unref (iter); g_print ("\n* Sorting function: reverse alpha\n"); clutter_model_set_sort (model, COLUMN_BAR, sort_func, NULL, NULL); g_signal_connect (model, "row-changed", G_CALLBACK (on_row_changed), NULL); iter = clutter_model_get_iter_at_row (model, 0); clutter_model_iter_set (iter, COLUMN_BAR, "Changed string of 0th row, " "automatically gets sorted", -1); g_object_unref (iter); clutter_model_foreach (model, foreach_func, NULL); g_print ("\n* Unset filter\n"); clutter_model_set_filter (model, NULL, NULL, NULL); while (clutter_model_get_n_rows (model)) clutter_model_remove (model, 0); clutter_main_quit (); }