Exemple #1
0
static void
libclouseau_item_add(Evas_Object *o, Clouseau_Tree_Item *parent)
{
   Clouseau_Tree_Item *treeit;
   Eina_List *children;
   Evas_Object *child;

   treeit = calloc(1, sizeof(Clouseau_Tree_Item));
   if (!treeit) return ;

   treeit->ptr = (uintptr_t) o;
   treeit->is_obj = EINA_TRUE;

   treeit->name = eina_stringshare_add(evas_object_type_get(o));
   treeit->is_clipper = !!evas_object_clipees_get(o);
   treeit->is_visible = evas_object_visible_get(o);
   treeit->info = clouseau_object_information_get(treeit);

   parent->children = eina_list_append(parent->children, treeit);

   /* if (!evas_object_smart_data_get(o)) return ; */

   /* Do this only for smart object */
   children = evas_object_smart_members_get(o);
   EINA_LIST_FREE(children, child)
     libclouseau_item_add(child, treeit);
}
Exemple #2
0
static JSBool
elixir_evas_object_smart_members_get(JSContext *cx, uintN argc, jsval *vp)
{
   Evas_Object *know = NULL;
   Eina_List *list;
   Eina_List *head;
   JSObject *array;
   int i;
   elixir_value_t val[1];

   if (!elixir_params_check(cx, _evas_object_smart_params, val, argc, JS_ARGV(cx, vp)))
     return JS_FALSE;

   GET_PRIVATE(cx, val[0].v.obj, know);

   list = (Eina_List*) evas_object_smart_members_get(know);
   if (!list)
     {
	JS_SET_RVAL(cx, vp, JSVAL_NULL);
	return JS_TRUE;
     }

   array = elixir_return_array(cx, vp);
   if (!array)
     {
	eina_list_free(list);
	return JS_FALSE;
     }

   for (i = 0, head = list; list; list = eina_list_next(list), ++i)
     {
	Evas_Object *obj;
	jsval js_obj;

	obj = eina_list_data_get(list);

	evas_object_to_jsval(cx, obj, &js_obj);
	if (JS_SetElement(cx, array, i, &js_obj) == JS_FALSE)
	  return JS_FALSE;
     }

   eina_list_free(head);

   return JS_TRUE;
}
Exemple #3
0
//--// callbacks
static int
_dnd_sorter(const void *d1, const void *d2)
{
  Evas_Object *o1 = (Evas_Object *)d1;
  Evas_Object *o2 = (Evas_Object *)d2;
  Eina_List *o1l = NULL, *o2l = NULL, *l1, *l2, *list, *l;
  Evas_Object *common = NULL, *o;

  while (o1)
  {
    o1l = eina_list_prepend(o1l, o1);
    o1 = evas_object_smart_parent_get(o1);
  }
  while (o2)
  {
    o2l = eina_list_prepend(o2l, o2);
    o2 = evas_object_smart_parent_get(o2);
  }
  o1 = o1l->data;
  o2 = o2l->data;
  if (o1 != o2)
  {
    // different toplevels
    o = evas_object_bottom_get(evas_object_evas_get(o1));
    while (o)
    {
      if (o1 == o)
      {
	// o1 below o2
	eina_list_free(o1l);
	eina_list_free(o2l);
	return -1;
      }
      if (o2 == o)
      {
	// o2 below o1
	eina_list_free(o1l);
	eina_list_free(o2l);
	return 1;
      }
      o = evas_object_above_get(o);
    }
  }
  for (l1 = o1l, l2 = o2l;
       l1 && l2;
       l1 = l1->next, l2 = l2->next)
  {
    o1 = l1->data; o2 = l2->data;
    if (o1 != o2)
    {
      // children differ, thus parent is common
      list = evas_object_smart_members_get(common);
      for (l = list; l; l = l->next)
      {
	o = l->data;
	if (o1 == o)
	{
	  // o1 below o2
	  eina_list_free(list);
	  eina_list_free(o1l);
	  eina_list_free(o2l);
	  return -1;
	}
	if (o2 == o)
	{
	  // o2 below o1
	  eina_list_free(list);
	  eina_list_free(o1l);
	  eina_list_free(o2l);
	  return 1;
	}
      }
      eina_list_free(list);
      break;
    }
    common = o1;
  }
  eina_list_free(o1l);
  eina_list_free(o2l);
  return 0;
}