static VALUE rbclt_model_get_iter_at_row (VALUE self, VALUE row) { ClutterModel *model = CLUTTER_MODEL (RVAL2GOBJ (self)); return GOBJ2RVALU (clutter_model_get_iter_at_row (model, NUM2UINT (row))); }
/* Clear all data in model and also release all allocated resources needed for this model */ static void _xfdashboard_applications_menu_model_clear(XfdashboardApplicationsMenuModel *self) { XfdashboardApplicationsMenuModelPrivate *priv; ClutterModelIter *iterator; GarconMenuElement *menuElement; g_return_if_fail(XFDASHBOARD_IS_APPLICATIONS_MENU_MODEL(self)); priv=self->priv; /* Unset filter (forces all rows being accessible and not being skipped/filtered) */ clutter_model_set_filter(CLUTTER_MODEL(self), NULL, NULL, NULL); /* Clean up and remove all rows */ while(clutter_model_get_n_rows(CLUTTER_MODEL(self))) { /* Get data from model for clean up */ menuElement=NULL; iterator=clutter_model_get_iter_at_row(CLUTTER_MODEL(self), 0); clutter_model_iter_get(iterator, XFDASHBOARD_APPLICATIONS_MENU_MODEL_COLUMN_MENU_ELEMENT, &menuElement, -1); /* Remove signal handler from menu element */ if(menuElement) { g_signal_handlers_disconnect_by_func(menuElement, G_CALLBACK(_xfdashboard_applications_menu_model_on_reload_required), self); } /* Remove row */ clutter_model_remove(CLUTTER_MODEL(self), 0); /* Release iterator */ if(menuElement) g_object_unref(menuElement); g_object_unref(iterator); } /* Destroy root menu */ if(priv->rootMenu) { g_object_unref(priv->rootMenu); priv->rootMenu=NULL; } }
/* * Look up item by index. * Returned object needs to be g_object_unref'd. * May return NULL. */ FooTestObject * store_get_object (ClutterModel *store, unsigned index) { ClutterModelIter *iter; FooTestObject *object = NULL; iter = clutter_model_get_iter_at_row (store, index); if (iter && !clutter_model_iter_is_last (iter)) { /* Column #0 of the model holds the actual object. */ clutter_model_iter_get (iter, 0, &object, -1); } return object; }
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 (); }
static gboolean on_status_view_button_release (ClutterActor *actor, ClutterButtonEvent *event, TweetWindow *window) { TweetWindowPrivate *priv = window->priv; #define JITTER 5 if (priv->in_press) { TwitterStatus *status; ClutterModelIter *iter; ClutterGeometry geometry = { 0, }; ClutterActor *stage, *info; priv->in_press = FALSE; if (abs (priv->press_y - event->y) > JITTER) return FALSE; iter = clutter_model_get_iter_at_row (CLUTTER_MODEL (priv->status_model), priv->press_row); if (!iter) return FALSE; status = tweet_status_model_get_status (priv->status_model, iter); if (!status) { g_object_unref (iter); return FALSE; } /* FIXME - abstract this call into a TweetStatusModel method */ tidy_list_view_get_cell_geometry (TIDY_LIST_VIEW (priv->status_view), priv->press_row, 0, TRUE, &geometry); stage = gtk_clutter_embed_get_stage (GTK_CLUTTER_EMBED (priv->canvas)); info = tweet_status_info_new (status); g_signal_connect (info, "button-press-event", G_CALLBACK (on_info_button_press), window); g_signal_connect (info, "star-clicked", G_CALLBACK (on_star_clicked), window); g_signal_connect (info, "reply-clicked", G_CALLBACK (on_reply_clicked), window); clutter_container_add_actor (CLUTTER_CONTAINER (stage), info); clutter_actor_set_position (info, geometry.x + CANVAS_PADDING, geometry.y + CANVAS_PADDING); clutter_actor_set_size (info, geometry.width, 16); clutter_actor_set_opacity (info, 0); clutter_actor_set_reactive (info, TRUE); clutter_actor_show (info); tweet_actor_animate (info, TWEET_LINEAR, 250, "y", tweet_interval_new (G_TYPE_INT, geometry.y + CANVAS_PADDING, 100 + CANVAS_PADDING), "height", tweet_interval_new (G_TYPE_INT, 16, (CANVAS_HEIGHT - (100 * 2))), "opacity", tweet_interval_new (G_TYPE_UCHAR, 0, 196), NULL); clutter_actor_set_reactive (priv->status_view, FALSE); tweet_actor_animate (priv->status_view, TWEET_LINEAR, 250, "opacity", tweet_interval_new (G_TYPE_UCHAR, 255, 128), NULL); g_object_unref (status); g_object_unref (iter); } #undef JITTER return FALSE; }