forked from enlightenment/efl
informers now are just event callbacks. makes for a simpler api. interceptors
are done now too - when an interceptor is set it takes over from the actual call it intercepts and now that call is responsible for doing the move/resize/raise/lower etc. (method overriding) SVN revision: 6490
This commit is contained in:
parent
72b9af03de
commit
f837c83cc7
|
@ -15,7 +15,12 @@ enum _Evas_Callback_Type
|
|||
EVAS_CALLBACK_KEY_DOWN, /**< Key Press Event */
|
||||
EVAS_CALLBACK_KEY_UP, /**< Key Release Event */
|
||||
EVAS_CALLBACK_FOCUS_IN, /**< Focus In Event */
|
||||
EVAS_CALLBACK_FOCUS_OUT /**< Focus Out Event */
|
||||
EVAS_CALLBACK_FOCUS_OUT, /**< Focus Out Event */
|
||||
EVAS_CALLBACK_SHOW, /**< Show Event */
|
||||
EVAS_CALLBACK_HIDE, /**< Hide Event */
|
||||
EVAS_CALLBACK_MOVE, /**< Move Event */
|
||||
EVAS_CALLBACK_RESIZE, /**< Resize Event */
|
||||
EVAS_CALLBACK_RESTACK /**< Restack Event */
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -413,8 +418,6 @@ extern "C" {
|
|||
void evas_event_feed_key_down (Evas *e, char *keyname);
|
||||
void evas_event_feed_key_up (Evas *e, char *keyname);
|
||||
|
||||
* should we allow multiple objects to have the focus? good question!
|
||||
|
||||
void evas_object_focus_set (Evas_Object *o, int focus);
|
||||
int evas_object_focus_get (Evas_Object *o);
|
||||
|
||||
|
@ -439,6 +442,9 @@ extern "C" {
|
|||
void evas_key_lock_on (Evas *e, char *keyname);
|
||||
void evas_key_lock_off (Evas *e, char *keyname);
|
||||
|
||||
int evas_object_key_grab (Evas_Object *o, char *keyname, int exclusive);
|
||||
void evas_object_key_ungrab (Evas_Object *o, char *keyname);
|
||||
|
||||
* errr need to add key grabbing/ungrabbing calls.
|
||||
|
||||
...end implement */
|
||||
|
@ -451,18 +457,6 @@ extern "C" {
|
|||
void evas_object_event_callback_add (Evas_Object *obj, Evas_Callback_Type type, void (*func) (void *data, Evas *e, Evas_Object *obj, void *event_info), void *data);
|
||||
void *evas_object_event_callback_del (Evas_Object *obj, Evas_Callback_Type type, void (*func) (void *data, Evas *e, Evas_Object *obj, void *event_info));
|
||||
|
||||
void evas_object_inform_show_callback_add (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj), void *data);
|
||||
void *evas_object_inform_show_callback_del (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj));
|
||||
void evas_object_inform_hide_callback_add (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj), void *data);
|
||||
void *evas_object_inform_hide_callback_del (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj));
|
||||
void evas_object_inform_move_callback_add (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj), void *data);
|
||||
void *evas_object_inform_move_callback_del (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj));
|
||||
void evas_object_inform_resize_callback_add (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj), void *data);
|
||||
void *evas_object_inform_resize_callback_del (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj));
|
||||
void evas_object_inform_restack_callback_add (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj), void *data);
|
||||
void *evas_object_inform_restack_callback_del (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj));
|
||||
|
||||
/* FIXME: implement... */
|
||||
void evas_object_intercept_show_callback_add (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj), void *data);
|
||||
void *evas_object_intercept_show_callback_del (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj));
|
||||
void evas_object_intercept_hide_callback_add (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj), void *data);
|
||||
|
@ -481,7 +475,6 @@ extern "C" {
|
|||
void *evas_object_intercept_stack_below_callback_del (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, Evas_Object *below));
|
||||
void evas_object_intercept_layer_set_callback_add (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, int l), void *data);
|
||||
void *evas_object_intercept_layer_set_callback_del (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, int l));
|
||||
/* ...end implement */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -2,6 +2,43 @@
|
|||
#include "evas_private.h"
|
||||
#include "Evas.h"
|
||||
|
||||
static void evas_object_event_callback_list_free(Evas_Object_List **list);
|
||||
|
||||
static void
|
||||
evas_object_event_callback_list_free(Evas_Object_List **list)
|
||||
{
|
||||
/* MEM OK */
|
||||
while (*list)
|
||||
{
|
||||
Evas_Func_Node *fn;
|
||||
|
||||
fn = (Evas_Func_Node *)(*list);
|
||||
*list = evas_object_list_remove(*list, fn);
|
||||
free(fn);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
evas_object_event_callback_cleanup(Evas_Object *obj)
|
||||
{
|
||||
/* MEM OK */
|
||||
evas_object_event_callback_list_free(&(obj->callbacks.in));
|
||||
evas_object_event_callback_list_free(&(obj->callbacks.out));
|
||||
evas_object_event_callback_list_free(&(obj->callbacks.down));
|
||||
evas_object_event_callback_list_free(&(obj->callbacks.up));
|
||||
evas_object_event_callback_list_free(&(obj->callbacks.move));
|
||||
evas_object_event_callback_list_free(&(obj->callbacks.free));
|
||||
evas_object_event_callback_list_free(&(obj->callbacks.key_down));
|
||||
evas_object_event_callback_list_free(&(obj->callbacks.key_up));
|
||||
evas_object_event_callback_list_free(&(obj->callbacks.obj_focus_in));
|
||||
evas_object_event_callback_list_free(&(obj->callbacks.obj_focus_out));
|
||||
evas_object_event_callback_list_free(&(obj->callbacks.obj_show));
|
||||
evas_object_event_callback_list_free(&(obj->callbacks.obj_hide));
|
||||
evas_object_event_callback_list_free(&(obj->callbacks.obj_move));
|
||||
evas_object_event_callback_list_free(&(obj->callbacks.obj_resize));
|
||||
evas_object_event_callback_list_free(&(obj->callbacks.obj_restack));
|
||||
}
|
||||
|
||||
void
|
||||
evas_object_event_callback_call(Evas_Object *obj, Evas_Callback_Type type, void *event_info)
|
||||
{
|
||||
|
@ -28,6 +65,33 @@ evas_object_event_callback_call(Evas_Object *obj, Evas_Callback_Type type, void
|
|||
case EVAS_CALLBACK_FREE:
|
||||
l_mod = &(obj->callbacks.free);
|
||||
break;
|
||||
case EVAS_CALLBACK_KEY_DOWN:
|
||||
l_mod = &(obj->callbacks.key_down);
|
||||
break;
|
||||
case EVAS_CALLBACK_KEY_UP:
|
||||
l_mod = &(obj->callbacks.key_up);
|
||||
break;
|
||||
case EVAS_CALLBACK_FOCUS_IN:
|
||||
l_mod = &(obj->callbacks.obj_focus_in);
|
||||
break;
|
||||
case EVAS_CALLBACK_FOCUS_OUT:
|
||||
l_mod = &(obj->callbacks.obj_focus_out);
|
||||
break;
|
||||
case EVAS_CALLBACK_SHOW:
|
||||
l_mod = &(obj->callbacks.obj_show);
|
||||
break;
|
||||
case EVAS_CALLBACK_HIDE:
|
||||
l_mod = &(obj->callbacks.obj_hide);
|
||||
break;
|
||||
case EVAS_CALLBACK_MOVE:
|
||||
l_mod = &(obj->callbacks.obj_move);
|
||||
break;
|
||||
case EVAS_CALLBACK_RESIZE:
|
||||
l_mod = &(obj->callbacks.obj_resize);
|
||||
break;
|
||||
case EVAS_CALLBACK_RESTACK:
|
||||
l_mod = &(obj->callbacks.obj_restack);
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
break;
|
||||
|
@ -73,10 +137,12 @@ evas_object_event_callback_call(Evas_Object *obj, Evas_Callback_Type type, void
|
|||
* The event type @p type to trigger the function mys be one of
|
||||
* EVAS_CALLBACK_MOUSE_IN, EVAS_CALLBACK_MOUSE_OUT, EVAS_CALLBACK_MOUSE_DOWN,
|
||||
* EVAS_CALLBACK_MOUSE_UP, EVAS_CALLBACK_MOUSE_MOVE, EVAS_CALLBACK_FREE,
|
||||
* EVAS_CALLBACK_KEY_DOWN, EVAS_CALLBACK_KEY_UP, EVAS_CALLBACK_FOCUS_IN
|
||||
* or EVAS_CALLBACK_FOCUS_OUT. This determines the kind of event that will
|
||||
* trigger the callback to be called. The @p event_info pointer passed to the
|
||||
* callback will be one of the following, depending on the event tiggering it:
|
||||
* EVAS_CALLBACK_KEY_DOWN, EVAS_CALLBACK_KEY_UP, EVAS_CALLBACK_FOCUS_IN,
|
||||
* EVAS_CALLBACK_FOCUS_OUT, EVAS_CALLBACK_SHOW, EVAS_CALLBACK_HIDE,
|
||||
* EVAS_CALLBACK_MOVE, EVAS_CALLBACK_RESIZE or EVAS_CALLBACK_RESTACK. This
|
||||
* determines the kind of event that will trigger the callback to be called.
|
||||
* The @p event_info pointer passed to the callback will be one of the
|
||||
* following, depending on the event tiggering it:
|
||||
*
|
||||
* EVAS_CALLBACK_MOUSE_IN: event_info = pointer to Evas_Event_Mouse_In
|
||||
*
|
||||
|
@ -151,6 +217,26 @@ evas_object_event_callback_call(Evas_Object *obj, Evas_Callback_Type type, void
|
|||
* This event is triggered by an object losing the focus. When the callback is
|
||||
* called the object has already lost the focus.
|
||||
*
|
||||
* EVAS_CALLBACK_SHOW: event_info = NULL
|
||||
*
|
||||
* This event is triggered being shown by evas_object_show().
|
||||
*
|
||||
* EVAS_CALLBACK_HIDE: event_info = NULL
|
||||
*
|
||||
* This event is triggered by an object being hidden by evas_object_hide().
|
||||
*
|
||||
* EVAS_CALLBACK_MOVE: event_info = NULL
|
||||
*
|
||||
* This event is triggered by an object being moved. evas_object_move() can
|
||||
* trigger this, as can any object specific manipulations that would mean the
|
||||
* objects origin could move.
|
||||
*
|
||||
* EVAS_CALLBACK_RESIZE: event_info = NULL
|
||||
*
|
||||
* This event is triggered by an object being resized. Resizes can be
|
||||
* triggered by evas_object_resize() or by any object specific calls that may
|
||||
* cause the object to resize.
|
||||
*
|
||||
* Example:
|
||||
* @code
|
||||
* extern Evas_Object *object;
|
||||
|
@ -177,6 +263,7 @@ evas_object_event_callback_add(Evas_Object *obj, Evas_Callback_Type type, void (
|
|||
{
|
||||
/* MEM OK */
|
||||
Evas_Func_Node *fn;
|
||||
Evas_Object_List **l_mod;
|
||||
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return;
|
||||
|
@ -189,46 +276,60 @@ evas_object_event_callback_add(Evas_Object *obj, Evas_Callback_Type type, void (
|
|||
if (!fn) return;
|
||||
fn->func = func;
|
||||
fn->data = data;
|
||||
do
|
||||
{
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case EVAS_CALLBACK_MOUSE_IN:
|
||||
obj->callbacks.in = evas_object_list_prepend(obj->callbacks.in, fn);
|
||||
l_mod = &(obj->callbacks.in);
|
||||
break;
|
||||
case EVAS_CALLBACK_MOUSE_OUT:
|
||||
obj->callbacks.out = evas_object_list_prepend(obj->callbacks.out, fn);
|
||||
l_mod = &(obj->callbacks.out);
|
||||
break;
|
||||
case EVAS_CALLBACK_MOUSE_DOWN:
|
||||
obj->callbacks.down = evas_object_list_prepend(obj->callbacks.down, fn);
|
||||
l_mod = &(obj->callbacks.down);
|
||||
break;
|
||||
case EVAS_CALLBACK_MOUSE_UP:
|
||||
obj->callbacks.up = evas_object_list_prepend(obj->callbacks.up, fn);
|
||||
l_mod = &(obj->callbacks.up);
|
||||
break;
|
||||
case EVAS_CALLBACK_MOUSE_MOVE:
|
||||
obj->callbacks.move = evas_object_list_prepend(obj->callbacks.move, fn);
|
||||
l_mod = &(obj->callbacks.move);
|
||||
break;
|
||||
case EVAS_CALLBACK_FREE:
|
||||
obj->callbacks.free = evas_object_list_prepend(obj->callbacks.free, fn);
|
||||
l_mod = &(obj->callbacks.free);
|
||||
break;
|
||||
case EVAS_CALLBACK_KEY_DOWN:
|
||||
l_mod = &(obj->callbacks.key_down);
|
||||
break;
|
||||
case EVAS_CALLBACK_KEY_UP:
|
||||
l_mod = &(obj->callbacks.key_up);
|
||||
break;
|
||||
case EVAS_CALLBACK_FOCUS_IN:
|
||||
l_mod = &(obj->callbacks.obj_focus_in);
|
||||
break;
|
||||
case EVAS_CALLBACK_FOCUS_OUT:
|
||||
l_mod = &(obj->callbacks.obj_focus_out);
|
||||
break;
|
||||
case EVAS_CALLBACK_SHOW:
|
||||
l_mod = &(obj->callbacks.obj_show);
|
||||
break;
|
||||
case EVAS_CALLBACK_HIDE:
|
||||
l_mod = &(obj->callbacks.obj_hide);
|
||||
break;
|
||||
case EVAS_CALLBACK_MOVE:
|
||||
l_mod = &(obj->callbacks.obj_move);
|
||||
break;
|
||||
case EVAS_CALLBACK_RESIZE:
|
||||
l_mod = &(obj->callbacks.obj_resize);
|
||||
break;
|
||||
case EVAS_CALLBACK_RESTACK:
|
||||
l_mod = &(obj->callbacks.obj_restack);
|
||||
break;
|
||||
default:
|
||||
free(fn);
|
||||
return;
|
||||
break;
|
||||
}
|
||||
if (!evas_list_alloc_error()) return;
|
||||
MERR_BAD();
|
||||
if (!evas_mem_free(sizeof(Evas_List)))
|
||||
{
|
||||
if (!evas_mem_degrade(sizeof(Evas_List)))
|
||||
{
|
||||
MERR_FATAL();
|
||||
free(fn);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
while (evas_list_alloc_error());
|
||||
*l_mod = evas_object_list_append(*l_mod, fn);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -242,7 +343,7 @@ evas_object_event_callback_add(Evas_Object *obj, Evas_Callback_Type type, void (
|
|||
* @p obj which was triggered by the event type @p type and was calling the
|
||||
* function @p func when triggered. If the callback is successful it will also
|
||||
* return the data pointer, passed to evas_object_event_callback_add() when
|
||||
* the callback was added to the object. IF not successful NULL will be
|
||||
* the callback was added to the object. If not successful NULL will be
|
||||
* returned.
|
||||
*
|
||||
* Example:
|
||||
|
@ -287,6 +388,33 @@ evas_object_event_callback_del(Evas_Object *obj, Evas_Callback_Type type, void (
|
|||
case EVAS_CALLBACK_FREE:
|
||||
l_mod = &(obj->callbacks.free);
|
||||
break;
|
||||
case EVAS_CALLBACK_KEY_DOWN:
|
||||
l_mod = &(obj->callbacks.key_down);
|
||||
break;
|
||||
case EVAS_CALLBACK_KEY_UP:
|
||||
l_mod = &(obj->callbacks.key_up);
|
||||
break;
|
||||
case EVAS_CALLBACK_FOCUS_IN:
|
||||
l_mod = &(obj->callbacks.obj_focus_in);
|
||||
break;
|
||||
case EVAS_CALLBACK_FOCUS_OUT:
|
||||
l_mod = &(obj->callbacks.obj_focus_out);
|
||||
break;
|
||||
case EVAS_CALLBACK_SHOW:
|
||||
l_mod = &(obj->callbacks.obj_show);
|
||||
break;
|
||||
case EVAS_CALLBACK_HIDE:
|
||||
l_mod = &(obj->callbacks.obj_hide);
|
||||
break;
|
||||
case EVAS_CALLBACK_MOVE:
|
||||
l_mod = &(obj->callbacks.obj_move);
|
||||
break;
|
||||
case EVAS_CALLBACK_RESIZE:
|
||||
l_mod = &(obj->callbacks.obj_resize);
|
||||
break;
|
||||
case EVAS_CALLBACK_RESTACK:
|
||||
l_mod = &(obj->callbacks.obj_restack);
|
||||
break;
|
||||
default:
|
||||
return NULL;
|
||||
break;
|
||||
|
|
|
@ -113,6 +113,7 @@ evas_object_layer_set(Evas_Object *obj, int l)
|
|||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
if (evas_object_intercept_call_layer_set(obj, l)) return;
|
||||
if (obj->cur.layer == l)
|
||||
{
|
||||
evas_object_raise(obj);
|
||||
|
|
|
@ -2,284 +2,34 @@
|
|||
#include "evas_private.h"
|
||||
#include "Evas.h"
|
||||
|
||||
typedef struct _Evas_Inform_Func_Node Evas_Inform_Func_Node;
|
||||
|
||||
struct _Evas_Inform_Func_Node
|
||||
{
|
||||
void (*func) (void *data, Evas_Object *obj);
|
||||
void *data;
|
||||
};
|
||||
|
||||
/* local calls */
|
||||
|
||||
static void evas_object_inform_init(Evas_Object *obj);
|
||||
static void evas_object_inform_deinit(Evas_Object *obj);
|
||||
static void evas_object_inform_list_add(Evas_Object *obj, Evas_List **l, void (*func) (void *data, Evas_Object *obj), void *data);
|
||||
static void *evas_object_inform_list_del(Evas_Object *obj, Evas_List **list, void (*func) (void *data, Evas_Object *obj));
|
||||
static void evas_object_inform_call(Evas_Object *obj, Evas_List *list);
|
||||
|
||||
static void
|
||||
evas_object_inform_init(Evas_Object *obj)
|
||||
{
|
||||
if (!obj->informers)
|
||||
obj->informers = evas_mem_calloc(sizeof(Evas_Inform_Func));
|
||||
}
|
||||
|
||||
static void
|
||||
evas_object_inform_deinit(Evas_Object *obj)
|
||||
{
|
||||
if (!obj->informers) return;
|
||||
if ((obj->informers->show) ||
|
||||
(obj->informers->hide) ||
|
||||
(obj->informers->move) ||
|
||||
(obj->informers->resize) ||
|
||||
(obj->informers->restack)) return;
|
||||
free(obj->informers);
|
||||
obj->informers = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
evas_object_inform_list_add(Evas_Object *obj, Evas_List **l, void (*func) (void *data, Evas_Object *obj), void *data)
|
||||
{
|
||||
Evas_Inform_Func_Node *fn;
|
||||
|
||||
fn = evas_mem_calloc(sizeof(Evas_Inform_Func_Node));
|
||||
if (!fn) return;
|
||||
fn->func = func;
|
||||
fn->data = data;
|
||||
evas_object_inform_init(obj);
|
||||
if (!obj->informers)
|
||||
{
|
||||
free(fn);
|
||||
return;
|
||||
}
|
||||
do
|
||||
{
|
||||
*l = evas_list_append(*l, fn);
|
||||
if (!evas_list_alloc_error()) return;
|
||||
MERR_BAD();
|
||||
if (!evas_mem_free(sizeof(Evas_List)))
|
||||
{
|
||||
if (!evas_mem_degrade(sizeof(Evas_List)))
|
||||
{
|
||||
evas_object_inform_deinit(obj);
|
||||
MERR_FATAL();
|
||||
free(fn);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
while (evas_list_alloc_error());
|
||||
}
|
||||
|
||||
static void *
|
||||
evas_object_inform_list_del(Evas_Object *obj, Evas_List **list, void (*func) (void *data, Evas_Object *obj))
|
||||
{
|
||||
if (!obj->informers) return NULL;
|
||||
{
|
||||
Evas_List *l;
|
||||
|
||||
for (l = (*list); l; l = l->next)
|
||||
{
|
||||
Evas_Inform_Func_Node *fn;
|
||||
|
||||
fn = l->data;
|
||||
if (fn->func == func)
|
||||
{
|
||||
void *data;
|
||||
|
||||
data = fn->data;
|
||||
free(fn);
|
||||
(*list) = evas_list_remove_list((*list), l);
|
||||
evas_object_inform_deinit(obj);
|
||||
return data;
|
||||
}
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
evas_object_inform_call(Evas_Object *obj, Evas_List *list)
|
||||
{
|
||||
Evas_List *l;
|
||||
|
||||
for (l = list; l; l = l->next)
|
||||
{
|
||||
Evas_Inform_Func_Node *fn;
|
||||
|
||||
fn = l->data;
|
||||
fn->func(fn->data, obj);
|
||||
}
|
||||
}
|
||||
|
||||
/* private calls */
|
||||
|
||||
void
|
||||
evas_object_inform_cleanup(Evas_Object *obj)
|
||||
{
|
||||
if (!obj->informers) return;
|
||||
while (obj->informers->show)
|
||||
{
|
||||
free(obj->informers->show->data);
|
||||
obj->informers->show = evas_list_remove(obj->informers->show, obj->informers->show->data);
|
||||
}
|
||||
while (obj->informers->hide)
|
||||
{
|
||||
free(obj->informers->hide->data);
|
||||
obj->informers->hide = evas_list_remove(obj->informers->hide, obj->informers->hide->data);
|
||||
}
|
||||
while (obj->informers->move)
|
||||
{
|
||||
free(obj->informers->move->data);
|
||||
obj->informers->move = evas_list_remove(obj->informers->move, obj->informers->move->data);
|
||||
}
|
||||
while (obj->informers->resize)
|
||||
{
|
||||
free(obj->informers->resize->data);
|
||||
obj->informers->resize = evas_list_remove(obj->informers->resize, obj->informers->resize->data);
|
||||
}
|
||||
while (obj->informers->restack)
|
||||
{
|
||||
free(obj->informers->restack->data);
|
||||
obj->informers->restack = evas_list_remove(obj->informers->restack, obj->informers->restack->data);
|
||||
}
|
||||
free(obj->informers);
|
||||
}
|
||||
|
||||
void
|
||||
evas_object_inform_call_show(Evas_Object *obj)
|
||||
{
|
||||
if (!obj->informers) return;
|
||||
evas_object_inform_call(obj, obj->informers->show);
|
||||
evas_object_event_callback_call(obj, EVAS_CALLBACK_SHOW, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
evas_object_inform_call_hide(Evas_Object *obj)
|
||||
{
|
||||
if (!obj->informers) return;
|
||||
evas_object_inform_call(obj, obj->informers->hide);
|
||||
evas_object_event_callback_call(obj, EVAS_CALLBACK_HIDE, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
evas_object_inform_call_move(Evas_Object *obj)
|
||||
{
|
||||
if (!obj->informers) return;
|
||||
evas_object_inform_call(obj, obj->informers->move);
|
||||
evas_object_event_callback_call(obj, EVAS_CALLBACK_MOVE, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
evas_object_inform_call_resize(Evas_Object *obj)
|
||||
{
|
||||
if (!obj->informers) return;
|
||||
evas_object_inform_call(obj, obj->informers->resize);
|
||||
evas_object_event_callback_call(obj, EVAS_CALLBACK_RESIZE, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
evas_object_inform_call_restack(Evas_Object *obj)
|
||||
{
|
||||
if (!obj->informers) return;
|
||||
evas_object_inform_call(obj, obj->informers->restack);
|
||||
}
|
||||
|
||||
/* public calls */
|
||||
|
||||
void
|
||||
evas_object_inform_show_callback_add(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj), void *data)
|
||||
{
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
if (!func) return;
|
||||
evas_object_inform_list_add(obj, &(obj->informers->show), func, data);
|
||||
}
|
||||
|
||||
void *
|
||||
evas_object_inform_show_callback_del(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj))
|
||||
{
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return NULL;
|
||||
MAGIC_CHECK_END();
|
||||
if (!func) return NULL;
|
||||
return evas_object_inform_list_del(obj, &(obj->informers->show), func);
|
||||
}
|
||||
|
||||
void
|
||||
evas_object_inform_hide_callback_add(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj), void *data)
|
||||
{
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
if (!func) return;
|
||||
evas_object_inform_list_add(obj, &(obj->informers->hide), func, data);
|
||||
}
|
||||
|
||||
void *
|
||||
evas_object_inform_hide_callback_del(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj))
|
||||
{
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return NULL;
|
||||
MAGIC_CHECK_END();
|
||||
if (!func) return;
|
||||
return evas_object_inform_list_del(obj, &(obj->informers->hide), func);
|
||||
}
|
||||
|
||||
void
|
||||
evas_object_inform_move_callback_add(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj), void *data)
|
||||
{
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
if (!func) return;
|
||||
evas_object_inform_list_add(obj, &(obj->informers->move), func, data);
|
||||
}
|
||||
|
||||
void *
|
||||
evas_object_inform_move_callback_del(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj))
|
||||
{
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return NULL;
|
||||
MAGIC_CHECK_END();
|
||||
if (!func) return NULL;
|
||||
return evas_object_inform_list_del(obj, &(obj->informers->move), func);
|
||||
}
|
||||
|
||||
void
|
||||
evas_object_inform_resize_callback_add(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj), void *data)
|
||||
{
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
if (!func) return;
|
||||
evas_object_inform_list_add(obj, &(obj->informers->resize), func, data);
|
||||
}
|
||||
|
||||
void *
|
||||
evas_object_inform_resize_callback_del(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj))
|
||||
{
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return NULL;
|
||||
MAGIC_CHECK_END();
|
||||
if (!func) return NULL;
|
||||
return evas_object_inform_list_del(obj, &(obj->informers->resize), func);
|
||||
}
|
||||
|
||||
void
|
||||
evas_object_inform_restack_callback_add(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj), void *data)
|
||||
{
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
if (!func) return;
|
||||
evas_object_inform_list_add(obj, &(obj->informers->restack), func, data);
|
||||
}
|
||||
|
||||
void *
|
||||
evas_object_inform_restack_callback_del(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj))
|
||||
{
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return NULL;
|
||||
MAGIC_CHECK_END();
|
||||
if (!func) return NULL;
|
||||
return evas_object_inform_list_del(obj, &(obj->informers->restack), func);
|
||||
evas_object_event_callback_call(obj, EVAS_CALLBACK_RESTACK, NULL);
|
||||
}
|
||||
|
|
|
@ -2,173 +2,471 @@
|
|||
#include "evas_private.h"
|
||||
#include "Evas.h"
|
||||
|
||||
/* local calls */
|
||||
|
||||
static void evas_object_intercept_init(Evas_Object *obj);
|
||||
static void evas_object_intercept_deinit(Evas_Object *obj);
|
||||
|
||||
static void
|
||||
evas_object_intercept_init(Evas_Object *obj)
|
||||
{
|
||||
/* MEM OK */
|
||||
if (!obj->interceptors)
|
||||
obj->interceptors = evas_mem_calloc(sizeof(Evas_Intercept_Func));
|
||||
}
|
||||
|
||||
static void
|
||||
evas_object_intercept_deinit(Evas_Object *obj)
|
||||
{
|
||||
/* MEM OK */
|
||||
if (!obj->interceptors) return;
|
||||
if ((obj->interceptors->show.func) ||
|
||||
(obj->interceptors->hide.func) ||
|
||||
(obj->interceptors->move.func) ||
|
||||
(obj->interceptors->resize.func) ||
|
||||
(obj->interceptors->raise.func) ||
|
||||
(obj->interceptors->lower.func) ||
|
||||
(obj->interceptors->stack_above.func) ||
|
||||
(obj->interceptors->stack_below.func) ||
|
||||
(obj->interceptors->layer_set.func))
|
||||
return;
|
||||
free(obj->interceptors);
|
||||
obj->interceptors = NULL;
|
||||
}
|
||||
|
||||
/* private calls */
|
||||
|
||||
void
|
||||
evas_object_intercept_cleanup(Evas_Object *obj)
|
||||
{
|
||||
/* MEM OK */
|
||||
if (obj->interceptors) free(obj->interceptors);
|
||||
}
|
||||
|
||||
int
|
||||
evas_object_intercept_call_show(Evas_Object *obj)
|
||||
{
|
||||
/* MEM OK */
|
||||
int ret;
|
||||
|
||||
if (!obj->interceptors) return 0;
|
||||
if (obj->intercepted) return 0;
|
||||
obj->intercepted = 1;
|
||||
ret = obj->interceptors->show.func;
|
||||
if (obj->interceptors->show.func)
|
||||
obj->interceptors->show.func(obj->interceptors->show.data, obj);
|
||||
obj->intercepted = 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
evas_object_intercept_call_hide(Evas_Object *obj)
|
||||
{
|
||||
/* MEM OK */
|
||||
int ret;
|
||||
|
||||
if (!obj->interceptors) return 0;
|
||||
if (obj->intercepted) return 0;
|
||||
obj->intercepted = 1;
|
||||
ret = obj->interceptors->hide.func;
|
||||
if (obj->interceptors->hide.func)
|
||||
obj->interceptors->hide.func(obj->interceptors->hide.data, obj);
|
||||
obj->intercepted = 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
evas_object_intercept_call_move(Evas_Object *obj, double x, double y)
|
||||
{
|
||||
/* MEM OK */
|
||||
int ret;
|
||||
|
||||
if (!obj->interceptors) return 0;
|
||||
if (obj->intercepted) return 0;
|
||||
obj->intercepted = 1;
|
||||
ret = obj->interceptors->move.func;
|
||||
if (obj->interceptors->move.func)
|
||||
obj->interceptors->move.func(obj->interceptors->move.data, obj, x, y);
|
||||
obj->intercepted = 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
evas_object_intercept_call_resize(Evas_Object *obj, double w, double h)
|
||||
{
|
||||
/* MEM OK */
|
||||
int ret;
|
||||
|
||||
if (!obj->interceptors) return 0;
|
||||
if (obj->intercepted) return 0;
|
||||
obj->intercepted = 1;
|
||||
ret = obj->interceptors->resize.func;
|
||||
if (obj->interceptors->resize.func)
|
||||
obj->interceptors->resize.func(obj->interceptors->resize.data, obj, w, h);
|
||||
obj->intercepted = 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
evas_object_intercept_call_raise(Evas_Object *obj)
|
||||
{
|
||||
/* MEM OK */
|
||||
int ret;
|
||||
|
||||
if (!obj->interceptors) return 0;
|
||||
if (obj->intercepted) return 0;
|
||||
obj->intercepted = 1;
|
||||
ret = obj->interceptors->raise.func;
|
||||
if (obj->interceptors->raise.func)
|
||||
obj->interceptors->raise.func(obj->interceptors->raise.data, obj);
|
||||
obj->intercepted = 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
evas_object_intercept_call_lower(Evas_Object *obj)
|
||||
{
|
||||
/* MEM OK */
|
||||
int ret;
|
||||
|
||||
if (!obj->interceptors) return 0;
|
||||
if (obj->intercepted) return 0;
|
||||
obj->intercepted = 1;
|
||||
ret = obj->interceptors->lower.func;
|
||||
if (obj->interceptors->lower.func)
|
||||
obj->interceptors->lower.func(obj->interceptors->lower.data, obj);
|
||||
obj->intercepted = 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
evas_object_intercept_call_stack_above(Evas_Object *obj, Evas_Object *above)
|
||||
{
|
||||
/* MEM OK */
|
||||
int ret;
|
||||
|
||||
if (!obj->interceptors) return 0;
|
||||
if (obj->intercepted) return 0;
|
||||
obj->intercepted = 1;
|
||||
ret = obj->interceptors->stack_above.func;
|
||||
if (obj->interceptors->stack_above.func)
|
||||
obj->interceptors->stack_above.func(obj->interceptors->stack_above.data, obj, above);
|
||||
obj->intercepted = 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
evas_object_intercept_call_stack_below(Evas_Object *obj, Evas_Object *below)
|
||||
{
|
||||
/* MEM OK */
|
||||
int ret;
|
||||
|
||||
if (!obj->interceptors) return 0;
|
||||
if (obj->intercepted) return 0;
|
||||
obj->intercepted = 1;
|
||||
ret = obj->interceptors->stack_below.func;
|
||||
if (obj->interceptors->stack_below.func)
|
||||
obj->interceptors->stack_below.func(obj->interceptors->stack_below.data, obj, below);
|
||||
obj->intercepted = 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
evas_object_intercept_call_layer_set(Evas_Object *obj, int l)
|
||||
{
|
||||
/* MEM OK */
|
||||
int ret;
|
||||
|
||||
if (!obj->interceptors) return 0;
|
||||
if (obj->intercepted) return 0;
|
||||
obj->intercepted = 1;
|
||||
ret = obj->interceptors->layer_set.func;
|
||||
if (obj->interceptors->layer_set.func)
|
||||
obj->interceptors->layer_set.func(obj->interceptors->layer_set.data, obj, l);
|
||||
obj->intercepted = 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* public calls */
|
||||
|
||||
void
|
||||
evas_object_intercept_show_callback_add(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj), void *data)
|
||||
{
|
||||
/* MEM OK */
|
||||
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
if (!func) return;
|
||||
evas_object_intercept_init(obj);
|
||||
if (!obj->interceptors) return;
|
||||
obj->interceptors->show.func = func;
|
||||
obj->interceptors->show.data = data;
|
||||
}
|
||||
|
||||
void *
|
||||
evas_object_intercept_show_callback_del(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj))
|
||||
{
|
||||
/* MEM OK */
|
||||
void *data;
|
||||
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return NULL;
|
||||
MAGIC_CHECK_END();
|
||||
if (!func) return NULL;
|
||||
return NULL;
|
||||
if (!obj->interceptors) return NULL;
|
||||
obj->interceptors->show.func = NULL;
|
||||
data = obj->interceptors->show.data;
|
||||
obj->interceptors->show.data = NULL;
|
||||
evas_object_intercept_deinit(obj);
|
||||
return data;
|
||||
}
|
||||
|
||||
void
|
||||
evas_object_intercept_hide_callback_add(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj), void *data)
|
||||
{
|
||||
/* MEM OK */
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
if (!func) return;
|
||||
evas_object_intercept_init(obj);
|
||||
if (!obj->interceptors) return;
|
||||
obj->interceptors->hide.func = func;
|
||||
obj->interceptors->hide.data = data;
|
||||
}
|
||||
|
||||
void *
|
||||
evas_object_intercept_hide_callback_del(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj))
|
||||
{
|
||||
/* MEM OK */
|
||||
void *data;
|
||||
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return NULL;
|
||||
MAGIC_CHECK_END();
|
||||
if (!func) return NULL;
|
||||
return NULL;
|
||||
if (!obj->interceptors) return NULL;
|
||||
obj->interceptors->hide.func = NULL;
|
||||
data = obj->interceptors->hide.data;
|
||||
obj->interceptors->hide.data = NULL;
|
||||
evas_object_intercept_deinit(obj);
|
||||
return data;
|
||||
}
|
||||
|
||||
void
|
||||
evas_object_intercept_move_callback_add(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, double x, double y), void *data)
|
||||
{
|
||||
/* MEM OK */
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
if (!func) return;
|
||||
evas_object_intercept_init(obj);
|
||||
if (!obj->interceptors) return;
|
||||
obj->interceptors->move.func = func;
|
||||
obj->interceptors->move.data = data;
|
||||
}
|
||||
|
||||
void *
|
||||
evas_object_intercept_move_callback_del(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, double x, double y))
|
||||
{
|
||||
/* MEM OK */
|
||||
void *data;
|
||||
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return NULL;
|
||||
MAGIC_CHECK_END();
|
||||
if (!func) return NULL;
|
||||
return NULL;
|
||||
if (!obj->interceptors) return NULL;
|
||||
obj->interceptors->move.func = NULL;
|
||||
data = obj->interceptors->move.data;
|
||||
obj->interceptors->move.data = NULL;
|
||||
evas_object_intercept_deinit(obj);
|
||||
return data;
|
||||
}
|
||||
|
||||
void
|
||||
evas_object_intercept_resize_callback_add(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, double w, double h), void *data)
|
||||
{
|
||||
/* MEM OK */
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
if (!func) return;
|
||||
evas_object_intercept_init(obj);
|
||||
if (!obj->interceptors) return;
|
||||
obj->interceptors->resize.func = func;
|
||||
obj->interceptors->resize.data = data;
|
||||
}
|
||||
|
||||
void *
|
||||
evas_object_intercept_resize_callback_del(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, double w, double h))
|
||||
{
|
||||
/* MEM OK */
|
||||
void *data;
|
||||
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return NULL;
|
||||
MAGIC_CHECK_END();
|
||||
if (!func) return NULL;
|
||||
return NULL;
|
||||
if (!obj->interceptors) return NULL;
|
||||
obj->interceptors->resize.func = NULL;
|
||||
data = obj->interceptors->resize.data;
|
||||
obj->interceptors->resize.data = NULL;
|
||||
evas_object_intercept_deinit(obj);
|
||||
return data;
|
||||
}
|
||||
|
||||
void
|
||||
evas_object_intercept_raise_callback_add(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj), void *data)
|
||||
{
|
||||
/* MEM OK */
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
if (!func) return;
|
||||
evas_object_intercept_init(obj);
|
||||
if (!obj->interceptors) return;
|
||||
obj->interceptors->raise.func = func;
|
||||
obj->interceptors->raise.data = data;
|
||||
}
|
||||
|
||||
void *
|
||||
evas_object_intercept_raise_callback_del(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj))
|
||||
{
|
||||
/* MEM OK */
|
||||
void *data;
|
||||
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return NULL;
|
||||
MAGIC_CHECK_END();
|
||||
if (!func) return NULL;
|
||||
return NULL;
|
||||
if (!obj->interceptors) return NULL;
|
||||
obj->interceptors->raise.func = NULL;
|
||||
data = obj->interceptors->raise.data;
|
||||
obj->interceptors->raise.data = NULL;
|
||||
evas_object_intercept_deinit(obj);
|
||||
return data;
|
||||
}
|
||||
|
||||
void
|
||||
evas_object_intercept_lower_callback_add(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj), void *data)
|
||||
{
|
||||
/* MEM OK */
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
if (!func) return;
|
||||
evas_object_intercept_init(obj);
|
||||
if (!obj->interceptors) return;
|
||||
obj->interceptors->lower.func = func;
|
||||
obj->interceptors->lower.data = data;
|
||||
}
|
||||
|
||||
void *
|
||||
evas_object_intercept_lower_callback_del(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj))
|
||||
{
|
||||
/* MEM OK */
|
||||
void *data;
|
||||
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return NULL;
|
||||
MAGIC_CHECK_END();
|
||||
if (!func) return NULL;
|
||||
return NULL;
|
||||
if (!obj->interceptors) return NULL;
|
||||
obj->interceptors->lower.func = NULL;
|
||||
data = obj->interceptors->lower.data;
|
||||
obj->interceptors->lower.data = NULL;
|
||||
evas_object_intercept_deinit(obj);
|
||||
return data;
|
||||
}
|
||||
|
||||
void
|
||||
evas_object_intercept_stack_above_callback_add(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, Evas_Object *above), void *data)
|
||||
{
|
||||
/* MEM OK */
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
if (!func) return;
|
||||
evas_object_intercept_init(obj);
|
||||
if (!obj->interceptors) return;
|
||||
obj->interceptors->stack_above.func = func;
|
||||
obj->interceptors->stack_above.data = data;
|
||||
}
|
||||
|
||||
void *
|
||||
evas_object_intercept_stack_above_callback_del(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, Evas_Object *above))
|
||||
{
|
||||
/* MEM OK */
|
||||
void *data;
|
||||
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return NULL;
|
||||
MAGIC_CHECK_END();
|
||||
if (!func) return NULL;
|
||||
return NULL;
|
||||
if (!obj->interceptors) return NULL;
|
||||
obj->interceptors->stack_above.func = NULL;
|
||||
data = obj->interceptors->stack_above.data;
|
||||
obj->interceptors->stack_above.data = NULL;
|
||||
evas_object_intercept_deinit(obj);
|
||||
return data;
|
||||
}
|
||||
|
||||
void
|
||||
evas_object_intercept_stack_below_callback_add(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, Evas_Object *below), void *data)
|
||||
{
|
||||
/* MEM OK */
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
if (!func) return;
|
||||
evas_object_intercept_init(obj);
|
||||
if (!obj->interceptors) return;
|
||||
obj->interceptors->stack_below.func = func;
|
||||
obj->interceptors->stack_below.data = data;
|
||||
}
|
||||
|
||||
void *
|
||||
evas_object_intercept_stack_below_callback_del(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, Evas_Object *below))
|
||||
{
|
||||
/* MEM OK */
|
||||
void *data;
|
||||
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return NULL;
|
||||
MAGIC_CHECK_END();
|
||||
if (!func) return NULL;
|
||||
return NULL;
|
||||
if (!obj->interceptors) return NULL;
|
||||
obj->interceptors->stack_below.func = NULL;
|
||||
data = obj->interceptors->stack_below.data;
|
||||
obj->interceptors->stack_below.data = NULL;
|
||||
evas_object_intercept_deinit(obj);
|
||||
return data;
|
||||
}
|
||||
|
||||
void
|
||||
evas_object_intercept_layer_set_callback_add(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, int l), void *data)
|
||||
{
|
||||
/* MEM OK */
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
if (!func) return;
|
||||
evas_object_intercept_init(obj);
|
||||
if (!obj->interceptors) return;
|
||||
obj->interceptors->layer_set.func = func;
|
||||
obj->interceptors->layer_set.data = data;
|
||||
}
|
||||
|
||||
void *
|
||||
evas_object_intercept_layer_set_callback_del(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, int l))
|
||||
{
|
||||
/* MEM OK */
|
||||
void *data;
|
||||
|
||||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return NULL;
|
||||
MAGIC_CHECK_END();
|
||||
if (!func) return NULL;
|
||||
return NULL;
|
||||
if (!obj->interceptors) return NULL;
|
||||
obj->interceptors->layer_set.func = NULL;
|
||||
data = obj->interceptors->layer_set.data;
|
||||
obj->interceptors->layer_set.data = NULL;
|
||||
evas_object_intercept_deinit(obj);
|
||||
return data;
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ void
|
|||
evas_object_free(Evas_Object *obj, int clean_layer)
|
||||
{
|
||||
evas_object_event_callback_call(obj, EVAS_CALLBACK_FREE, NULL);
|
||||
evas_object_inform_cleanup(obj);
|
||||
evas_object_intercept_cleanup(obj);
|
||||
evas_object_smart_cleanup(obj);
|
||||
obj->func->free(obj);
|
||||
if (obj->name)
|
||||
|
@ -41,54 +41,7 @@ evas_object_free(Evas_Object *obj, int clean_layer)
|
|||
obj->clip.changes = evas_list_remove(obj->clip.changes, r);
|
||||
free(r);
|
||||
}
|
||||
while (obj->callbacks.in)
|
||||
{
|
||||
Evas_Func_Node *fn;
|
||||
|
||||
fn = (Evas_Func_Node *)obj->callbacks.in;
|
||||
obj->callbacks.in = evas_object_list_remove(obj->callbacks.in, fn);
|
||||
free(fn);
|
||||
}
|
||||
while (obj->callbacks.out)
|
||||
{
|
||||
Evas_Func_Node *fn;
|
||||
|
||||
fn = (Evas_Func_Node *)obj->callbacks.out;
|
||||
obj->callbacks.out = evas_object_list_remove(obj->callbacks.out, fn);
|
||||
free(fn);
|
||||
}
|
||||
while (obj->callbacks.down)
|
||||
{
|
||||
Evas_Func_Node *fn;
|
||||
|
||||
fn = (Evas_Func_Node *)obj->callbacks.down;
|
||||
obj->callbacks.down = evas_object_list_remove(obj->callbacks.down, fn);
|
||||
free(fn);
|
||||
}
|
||||
while (obj->callbacks.up)
|
||||
{
|
||||
Evas_Func_Node *fn;
|
||||
|
||||
fn = (Evas_Func_Node *)obj->callbacks.up;
|
||||
obj->callbacks.up = evas_object_list_remove(obj->callbacks.up, fn);
|
||||
free(fn);
|
||||
}
|
||||
while (obj->callbacks.move)
|
||||
{
|
||||
Evas_Func_Node *fn;
|
||||
|
||||
fn = (Evas_Func_Node *)obj->callbacks.move;
|
||||
obj->callbacks.move = evas_object_list_remove(obj->callbacks.move, fn);
|
||||
free(fn);
|
||||
}
|
||||
while (obj->callbacks.free)
|
||||
{
|
||||
Evas_Func_Node *fn;
|
||||
|
||||
fn = (Evas_Func_Node *)obj->callbacks.free;
|
||||
obj->callbacks.free = evas_object_list_remove(obj->callbacks.free, fn);
|
||||
free(fn);
|
||||
}
|
||||
evas_object_event_callback_cleanup(obj);
|
||||
while (obj->data.elements)
|
||||
{
|
||||
Evas_Data_Node *node;
|
||||
|
@ -471,6 +424,7 @@ evas_object_move(Evas_Object *obj, double x, double y)
|
|||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
if (evas_object_intercept_call_move(obj, x, y)) return;
|
||||
if (obj->smart.smart)
|
||||
{
|
||||
if (obj->smart.smart->func_move)
|
||||
|
@ -512,6 +466,7 @@ evas_object_resize(Evas_Object *obj, double w, double h)
|
|||
return;
|
||||
MAGIC_CHECK_END();
|
||||
if (w < 0.0) w = 0.0; if (h < 0.0) h = 0.0;
|
||||
if (evas_object_intercept_call_resize(obj, w, h)) return;
|
||||
if (obj->smart.smart)
|
||||
{
|
||||
if (obj->smart.smart->func_resize)
|
||||
|
@ -562,6 +517,7 @@ evas_object_show(Evas_Object *obj)
|
|||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
if (evas_object_intercept_call_show(obj)) return;
|
||||
if (obj->smart.smart)
|
||||
{
|
||||
if (obj->smart.smart->func_show)
|
||||
|
@ -593,6 +549,7 @@ evas_object_hide(Evas_Object *obj)
|
|||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
if (evas_object_intercept_call_hide(obj)) return;
|
||||
if (obj->smart.smart)
|
||||
{
|
||||
if (obj->smart.smart->func_hide)
|
||||
|
|
|
@ -47,6 +47,7 @@ evas_object_raise(Evas_Object *obj)
|
|||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
if (evas_object_intercept_call_raise(obj)) return;
|
||||
if (obj->smart.smart)
|
||||
{
|
||||
if (obj->smart.smart->func_raise)
|
||||
|
@ -83,6 +84,7 @@ evas_object_lower(Evas_Object *obj)
|
|||
MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
if (evas_object_intercept_call_lower(obj)) return;
|
||||
if (obj->smart.smart)
|
||||
{
|
||||
if (obj->smart.smart->func_lower)
|
||||
|
@ -122,6 +124,7 @@ evas_object_stack_above(Evas_Object *obj, Evas_Object *above)
|
|||
MAGIC_CHECK(above, Evas_Object, MAGIC_OBJ);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
if (evas_object_intercept_call_stack_above(obj, above)) return;
|
||||
if (obj->smart.smart)
|
||||
{
|
||||
if (obj->smart.smart->func_stack_above)
|
||||
|
@ -166,6 +169,7 @@ evas_object_stack_below(Evas_Object *obj, Evas_Object *below)
|
|||
MAGIC_CHECK(below, Evas_Object, MAGIC_OBJ);
|
||||
return;
|
||||
MAGIC_CHECK_END();
|
||||
if (evas_object_intercept_call_stack_below(obj, below)) return;
|
||||
if (obj->smart.smart)
|
||||
{
|
||||
if (obj->smart.smart->func_stack_below)
|
||||
|
|
|
@ -25,14 +25,15 @@ typedef enum _Evas_Callback_Type
|
|||
EVAS_CALLBACK_KEY_DOWN,
|
||||
EVAS_CALLBACK_KEY_UP,
|
||||
EVAS_CALLBACK_FOCUS_IN,
|
||||
EVAS_CALLBACK_FOCUS_OUT
|
||||
EVAS_CALLBACK_FOCUS_OUT,
|
||||
EVAS_CALLBACK_SHOW,
|
||||
EVAS_CALLBACK_HIDE,
|
||||
EVAS_CALLBACK_MOVE,
|
||||
EVAS_CALLBACK_RESIZE,
|
||||
EVAS_CALLBACK_RESTACK
|
||||
} Evas_Callback_Type;
|
||||
|
||||
typedef struct _Evas_Rectangle Evas_Rectangle;
|
||||
struct _Evas_Rectangle
|
||||
{
|
||||
int x, y, w, h;
|
||||
};
|
||||
|
||||
typedef struct _Evas Evas;
|
||||
typedef struct _Evas_Layer Evas_Layer;
|
||||
|
@ -45,6 +46,11 @@ typedef struct _Evas_Key Evas_Key;
|
|||
typedef struct _Evas_Modifier Evas_Modifier;
|
||||
typedef struct _Evas_Lock Evas_Lock;
|
||||
typedef struct _Evas_Smart Evas_Smart;
|
||||
typedef struct _Evas_Intercept_Func Evas_Intercept_Func;
|
||||
typedef struct _Evas_Intercept_Func_Basic Evas_Intercept_Func_Basic;
|
||||
typedef struct _Evas_Intercept_Func_SizePos Evas_Intercept_Func_SizePos;
|
||||
typedef struct _Evas_Intercept_Func_Obj Evas_Intercept_Func_Obj;
|
||||
typedef struct _Evas_Intercept_Func_Int Evas_Intercept_Func_Int;
|
||||
typedef void Evas_Performance;
|
||||
|
||||
#define MAGIC_EVAS 0x70777770
|
||||
|
@ -88,16 +94,46 @@ if (_r) \
|
|||
|
||||
#define MEM_TRY_CALLOC(_ptr, _size)
|
||||
|
||||
|
||||
typedef struct _Evas_Inform_Func Evas_Inform_Func;
|
||||
|
||||
struct _Evas_Inform_Func
|
||||
struct _Evas_Rectangle
|
||||
{
|
||||
Evas_List *show;
|
||||
Evas_List *hide;
|
||||
Evas_List *move;
|
||||
Evas_List *resize;
|
||||
Evas_List *restack;
|
||||
int x, y, w, h;
|
||||
};
|
||||
|
||||
struct _Evas_Intercept_Func_Basic
|
||||
{
|
||||
void (*func) (void *data, Evas_Object *obj);
|
||||
void *data;
|
||||
};
|
||||
|
||||
struct _Evas_Intercept_Func_SizePos
|
||||
{
|
||||
void (*func) (void *data, Evas_Object *obj, double x, double y);
|
||||
void *data;
|
||||
};
|
||||
|
||||
struct _Evas_Intercept_Func_Obj
|
||||
{
|
||||
void (*func) (void *data, Evas_Object *obj, Evas_Object *obj2);
|
||||
void *data;
|
||||
};
|
||||
|
||||
struct _Evas_Intercept_Func_Int
|
||||
{
|
||||
void (*func) (void *data, Evas_Object *obj, int n);
|
||||
void *data;
|
||||
};
|
||||
|
||||
struct _Evas_Intercept_Func
|
||||
{
|
||||
Evas_Intercept_Func_Basic show;
|
||||
Evas_Intercept_Func_Basic hide;
|
||||
Evas_Intercept_Func_SizePos move;
|
||||
Evas_Intercept_Func_SizePos resize;
|
||||
Evas_Intercept_Func_Basic raise;
|
||||
Evas_Intercept_Func_Basic lower;
|
||||
Evas_Intercept_Func_Obj stack_above;
|
||||
Evas_Intercept_Func_Obj stack_below;
|
||||
Evas_Intercept_Func_Int layer_set;
|
||||
};
|
||||
|
||||
struct _Evas_Smart
|
||||
|
@ -273,7 +309,7 @@ struct _Evas_Object
|
|||
|
||||
int delete_me;
|
||||
|
||||
Evas_Inform_Func *informers;
|
||||
Evas_Intercept_Func *interceptors;
|
||||
|
||||
struct {
|
||||
Evas_List *elements;
|
||||
|
@ -286,6 +322,15 @@ struct _Evas_Object
|
|||
Evas_Object_List *up;
|
||||
Evas_Object_List *move;
|
||||
Evas_Object_List *free;
|
||||
Evas_Object_List *key_down;
|
||||
Evas_Object_List *key_up;
|
||||
Evas_Object_List *obj_focus_in;
|
||||
Evas_Object_List *obj_focus_out;
|
||||
Evas_Object_List *obj_show;
|
||||
Evas_Object_List *obj_hide;
|
||||
Evas_Object_List *obj_move;
|
||||
Evas_Object_List *obj_resize;
|
||||
Evas_Object_List *obj_restack;
|
||||
} callbacks;
|
||||
|
||||
struct {
|
||||
|
@ -476,12 +521,22 @@ void evas_object_smart_unuse(Evas_Smart *s);
|
|||
void evas_object_smart_del(Evas_Object *obj);
|
||||
void evas_object_smart_cleanup(Evas_Object *obj);
|
||||
void *evas_mem_calloc(int size);
|
||||
void evas_object_inform_cleanup(Evas_Object *obj);
|
||||
void evas_object_event_callback_cleanup(Evas_Object *obj);
|
||||
void evas_object_inform_call_show(Evas_Object *obj);
|
||||
void evas_object_inform_call_hide(Evas_Object *obj);
|
||||
void evas_object_inform_call_move(Evas_Object *obj);
|
||||
void evas_object_inform_call_resize(Evas_Object *obj);
|
||||
void evas_object_inform_call_restack(Evas_Object *obj);
|
||||
void evas_object_intercept_cleanup(Evas_Object *obj);
|
||||
int evas_object_intercept_call_show(Evas_Object *obj);
|
||||
int evas_object_intercept_call_hide(Evas_Object *obj);
|
||||
int evas_object_intercept_call_move(Evas_Object *obj, double x, double y);
|
||||
int evas_object_intercept_call_resize(Evas_Object *obj, double w, double h);
|
||||
int evas_object_intercept_call_raise(Evas_Object *obj);
|
||||
int evas_object_intercept_call_lower(Evas_Object *obj);
|
||||
int evas_object_intercept_call_stack_above(Evas_Object *obj, Evas_Object *above);
|
||||
int evas_object_intercept_call_stack_below(Evas_Object *obj, Evas_Object *below);
|
||||
int evas_object_intercept_call_layer_set(Evas_Object *obj, int l);
|
||||
|
||||
extern int _evas_alloc_error;
|
||||
|
||||
|
|
Loading…
Reference in New Issue