forked from enlightenment/enlightenment
add drop handlers for gadgets
a simple wrapper around existing e_dnd functionality
This commit is contained in:
parent
686dc747d6
commit
5da62d9adf
|
@ -64,6 +64,8 @@ struct E_Gadget_Config
|
|||
void *data;
|
||||
} allow_deny;
|
||||
|
||||
Eina_Hash *drop_handlers;
|
||||
|
||||
double x, y; //fixed % positioning
|
||||
double w, h; //fixed % sizing
|
||||
Evas_Point offset; //offset from mouse down
|
||||
|
@ -262,6 +264,7 @@ _gadget_object_free(E_Object *eobj)
|
|||
evas_object_event_callback_del_full(zgc->display, EVAS_CALLBACK_DEL, _gadget_del, zgc);
|
||||
E_FREE_FUNC(zgc->display, evas_object_del);
|
||||
}
|
||||
E_FREE_FUNC(zgc->drop_handlers, eina_hash_free);
|
||||
E_FREE_FUNC(zgc->gadget, evas_object_del);
|
||||
E_FREE_FUNC(zgc->cfg_object, evas_object_del);
|
||||
E_FREE_FUNC(zgc->style.obj, evas_object_del);
|
||||
|
@ -1389,6 +1392,62 @@ e_gadget_type_iterator_get(void)
|
|||
return gadget_types ? eina_hash_iterator_key_new(gadget_types) : NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
_gadget_drop_handler_moveresize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
|
||||
{
|
||||
int x, y, w, h;
|
||||
|
||||
evas_object_geometry_get(obj, &x, &y, &w, &h);
|
||||
e_drop_handler_geometry_set(data, x, y, w, h);
|
||||
}
|
||||
|
||||
static void
|
||||
_gadget_drop_handler_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
|
||||
{
|
||||
E_Gadget_Config *zgc = data;
|
||||
|
||||
eina_hash_del_by_key(zgc->drop_handlers, &obj);
|
||||
e_object_del(evas_object_data_get(obj, "gadget_drop_handler"));
|
||||
}
|
||||
|
||||
E_API Evas_Object *
|
||||
e_gadget_drop_handler_add(Evas_Object *g, void *data,
|
||||
void (*enter_cb)(void *data, const char *type, void *event),
|
||||
void (*move_cb)(void *data, const char *type, void *event),
|
||||
void (*leave_cb)(void *data, const char *type, void *event),
|
||||
void (*drop_cb)(void *data, const char *type, void *event),
|
||||
const char **types, unsigned int num_types)
|
||||
{
|
||||
E_Gadget_Config *zgc;
|
||||
int x, y, w, h;
|
||||
Evas_Object *drop_object;
|
||||
E_Drop_Handler *drop_handler;
|
||||
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(g, NULL);
|
||||
zgc = evas_object_data_get(g, "__e_gadget");
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(zgc, NULL);
|
||||
|
||||
if (!zgc->drop_handlers)
|
||||
zgc->drop_handlers = eina_hash_pointer_new((Eina_Free_Cb)evas_object_del);
|
||||
|
||||
evas_object_geometry_get(zgc->display, &x, &y, &w, &h);
|
||||
drop_handler = e_drop_handler_add(zgc->e_obj_inherit, NULL, data,
|
||||
enter_cb, move_cb, leave_cb, drop_cb,
|
||||
types, num_types, x, y, w, h);
|
||||
drop_object = evas_object_rectangle_add(e_comp->evas);
|
||||
evas_object_color_set(drop_object, 0, 0, 0, 0);
|
||||
e_object_data_set(E_OBJECT(drop_handler), drop_object);
|
||||
evas_object_data_set(drop_object, "gadget_drop_handler", drop_handler);
|
||||
evas_object_geometry_set(drop_object, x, y, w, h);
|
||||
evas_object_pass_events_set(drop_object, 1);
|
||||
evas_object_layer_set(drop_object, evas_object_layer_get(zgc->display));
|
||||
evas_object_event_callback_add(drop_object, EVAS_CALLBACK_MOVE, _gadget_drop_handler_moveresize, drop_handler);
|
||||
evas_object_event_callback_add(drop_object, EVAS_CALLBACK_RESIZE, _gadget_drop_handler_moveresize, drop_handler);
|
||||
evas_object_event_callback_add(drop_object, EVAS_CALLBACK_DEL, _gadget_drop_handler_del, zgc);
|
||||
eina_hash_add(zgc->drop_handlers, &drop_object, drop_handler);
|
||||
return drop_object;
|
||||
}
|
||||
|
||||
E_API Evas_Object *
|
||||
e_gadget_util_layout_style_init(Evas_Object *g, Evas_Object *style)
|
||||
{
|
||||
|
|
|
@ -130,6 +130,16 @@ E_API void e_gadget_type_add(const char *type, E_Gadget_Create_Cb callback, E_Ga
|
|||
E_API void e_gadget_type_del(const char *type);
|
||||
E_API Eina_Iterator *e_gadget_type_iterator_get(void);
|
||||
|
||||
/* drop region initially matches gadget size, resizes to match returned object's size
|
||||
* handler is removed when returned object is deleted
|
||||
*/
|
||||
E_API Evas_Object *e_gadget_drop_handler_add(Evas_Object *g, void *data,
|
||||
void (*enter_cb)(void *data, const char *type, void *event),
|
||||
void (*move_cb)(void *data, const char *type, void *event),
|
||||
void (*leave_cb)(void *data, const char *type, void *event),
|
||||
void (*drop_cb)(void *data, const char *type, void *event),
|
||||
const char **types, unsigned int num_types);
|
||||
|
||||
E_API Evas_Object *e_gadget_util_layout_style_init(Evas_Object *g, Evas_Object *style);
|
||||
E_API void e_gadget_util_ctxpopup_place(Evas_Object *g, Evas_Object *ctx, Evas_Object *pos_obj);
|
||||
E_API void e_gadget_util_allow_deny_ctxpopup(Evas_Object *g, const char *text, Evas_Smart_Cb allow_cb, Evas_Smart_Cb deny_cb, const void *data);
|
||||
|
|
Loading…
Reference in New Issue