Пример #1
0
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;
	}
}
Пример #3
0
/*
 * 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;
}
Пример #4
0
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);
    }
}
Пример #5
0
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 ();
}
Пример #6
0
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;
}