eldbus_service_interface_register(_a11y_bus, path, &accessible_iface_desc);
event_infc = eldbus_service_interface_register(_a11y_bus, path, &event_iface_desc);
- eo_do(obj, eo_key_data_set("event_interface", event_infc, NULL));
+ eo_do(obj, eo_key_data_set("event_interface", event_infc));
eo_do(obj, eo_event_callback_array_add(_events_cb(), event_infc));
if (eo_isa(obj, ELM_INTERFACE_ATSPI_COMPONENT_MIXIN))
if (eo_isa(obj, ELM_INTERFACE_ATSPI_WINDOW_INTERFACE))
{
infc = eldbus_service_interface_register(_a11y_bus, path, &window_iface_desc);
- eo_do(obj, eo_key_data_set("window_interface", infc, NULL));
+ eo_do(obj, eo_key_data_set("window_interface", infc));
eo_do(obj, eo_event_callback_array_add(_window_cb(), infc));
}
if (eo_isa(obj, ELM_INTERFACE_ATSPI_ACTION_MIXIN))
if (_a11y_bus && event_infc)
{
eldbus_service_object_unregister(event_infc);
- eo_do(obj, eo_key_data_set("event_interface", NULL, NULL));
+ eo_do(obj, eo_key_data_set("event_interface", NULL));
}
eo_do(obj, eo_event_callback_del(EO_EV_DEL, _on_cache_item_del, NULL));
drops = eina_list_append(drops, dropable);
if (!drops) goto error;
dropable->obj = obj;
- eo_do(obj, eo_key_data_set("__elm_dropable", dropable, NULL));
+ eo_do(obj, eo_key_data_set("__elm_dropable", dropable));
}
dropable->cbs_list = eina_inlist_append(dropable->cbs_list, EINA_INLIST_GET(cbs));
drops = eina_list_append(drops, dropable);
if (!drops) goto error;
dropable->obj = obj;
- eo_do(obj, eo_key_data_set("__elm_dropable", dropable, NULL));
+ eo_do(obj, eo_key_data_set("__elm_dropable", dropable));
}
dropable->cbs_list = eina_inlist_append(dropable->cbs_list, EINA_INLIST_GET(cbs));
#include "elm_widget.h"
#include "elm_priv.h"
-static void
-_free_desc(void *data)
+static Eina_Bool
+_free_desc_cb(void *data, Eo *obj EINA_UNUSED, const Eo_Event_Description *desc EINA_UNUSED, void *event_info EINA_UNUSED)
{
eina_stringshare_del(data);
+
+ return EINA_TRUE;
}
EOLIAN static const char*
EOLIAN static void
_elm_interface_atspi_image_description_set(Eo *obj, void *sd EINA_UNUSED, const char *description)
{
+ const char *key = "atspi_image_description";
const char *descr = eina_stringshare_add(description);
- eo_do(obj, eo_key_data_set("atspi_image_description", descr, _free_desc));
+ char *old_descr;
+ if (eo_do_ret(obj, old_descr, eo_key_data_get(key)))
+ {
+ eina_stringshare_del(old_descr);
+ eo_do(obj, eo_event_callback_del(EO_BASE_EVENT_DEL, _free_desc_cb, old_descr));
+ }
+
+ if (descr)
+ {
+ eo_do(obj, eo_key_data_set(key, descr),
+ eo_event_callback_add(EO_BASE_EVENT_DEL, _free_desc_cb, descr));
+ }
}
EOLIAN static const char*
#define WIDGET_ITEM_DATA_SET(eo_obj, data) \
{ \
- eo_do(eo_obj, eo_key_data_set("__elm_widget_item_data", data, NULL)); \
+ eo_do(eo_obj, eo_key_data_set("__elm_widget_item_data", data)); \
}
struct _Elm_Widget_Item_Data