sd->s_iface->region_bring_in(WIDGET(it), x, y, w, h);
}
+static void
+_access_activate_cb(void *data __UNUSED__,
+ Evas_Object *part_obj __UNUSED__,
+ Elm_Object_Item *item)
+{
+ _item_click_cb(item, NULL, NULL, NULL);
+}
+
static Elm_Diskselector_Item *
_item_new(Evas_Object *obj,
Evas_Object *icon,
Evas_Smart_Cb func,
const void *data)
{
+ Elm_Access_Info *ai;
Elm_Diskselector_Item *it;
const char *style = elm_widget_style_get(obj);
(VIEW(it), "elm,action,click", "", _item_click_cb, it);
}
- //XXX: ACCESS
- if (_elm_config->access_mode == ELM_ACCESS_MODE_ON)
+ /* access */
+ if (_elm_config->access_mode)
{
_elm_access_widget_item_register((Elm_Widget_Item *)it);
+ ai = _elm_access_object_get(it->base.access_obj);
- _elm_access_text_set(_elm_access_object_get(it->base.access_obj),
- ELM_ACCESS_TYPE, E_("diskselector item"));
- _elm_access_callback_set(_elm_access_object_get(it->base.access_obj),
- ELM_ACCESS_INFO,
- _access_info_cb, it);
- _elm_access_on_highlight_hook_set(
- _elm_access_object_get(it->base.access_obj), _access_on_highlight_cb,
- it);
+ _elm_access_text_set(ai, ELM_ACCESS_TYPE, E_("diskselector item"));
+ _elm_access_callback_set(ai, ELM_ACCESS_INFO, _access_info_cb, it);
+ _elm_access_on_highlight_hook_set(ai, _access_on_highlight_cb, it);
+ _elm_access_activate_callback_set(ai, _access_activate_cb, it);
}
return it;
}
static void
-_access_hook(Evas_Object *obj, Eina_Bool is_access)
+_elm_diskselector_smart_access(Evas_Object *obj, Eina_Bool is_access)
{
ELM_DISKSELECTOR_DATA_GET(obj, sd);
ELM_WIDGET_CLASS(ELM_WIDGET_DATA(sd)->api)->focus_next = _elm_diskselector_smart_focus_next;
else
ELM_WIDGET_CLASS(ELM_WIDGET_DATA(sd)->api)->focus_next = NULL;
+
+ //TODO: register, unregister item
}
ELM_WIDGET_CLASS(sc)->theme = _elm_diskselector_smart_theme;
ELM_WIDGET_CLASS(sc)->event = _elm_diskselector_smart_event;
- //XXX: ACCESS
- if (_elm_config->access_mode == ELM_ACCESS_MODE_ON)
+ /* access */
+ if (_elm_config->access_mode)
ELM_WIDGET_CLASS(sc)->focus_next = _elm_diskselector_smart_focus_next;
- ELM_WIDGET_CLASS(sc)->access = _access_hook;
+ ELM_WIDGET_CLASS(sc)->access = _elm_diskselector_smart_access;
}
EAPI const Elm_Diskselector_Smart_Class *
elm_layout_sizing_eval(obj);
}
+static Eina_Bool
+_elm_label_smart_activate(Evas_Object *obj, Elm_Activate act)
+{
+ Elm_Access_Info *ac;
+
+ if (!_elm_config->access_mode) return EINA_FALSE;
+
+ if (act != ELM_ACTIVATE_DEFAULT) return EINA_FALSE;
+
+ ac = _elm_access_object_get(obj);
+ if (!ac) return EINA_FALSE;
+ if (!ac->activate) return EINA_FALSE;
+
+ ac->activate(ac->activate_data, obj, NULL);
+
+ return EINA_TRUE;
+}
+
static void
_elm_label_smart_set_user(Elm_Label_Smart_Class *sc)
{
/* not a 'focus chain manager' */
ELM_WIDGET_CLASS(sc)->focus_next = NULL;
ELM_WIDGET_CLASS(sc)->focus_direction = NULL;
+ ELM_WIDGET_CLASS(sc)->activate = _elm_label_smart_activate;
ELM_WIDGET_CLASS(sc)->theme = _elm_label_smart_theme;
ELM_WIDGET_CLASS(sc)->translate = _elm_label_smart_translate;
}
static void
-_access_set(Evas_Object *obj, Elm_Datetime_Field_Type field_type)
+_access_activate_cb(void *data,
+ Evas_Object *part_obj,
+ Elm_Object_Item *item __UNUSED__)
+{
+ Evas_Object *obj;
+ Ctxpopup_Module_Data *ctx_mod;
+ char buf[BUFF_SIZE];
+
+ ctx_mod = (Ctxpopup_Module_Data *)data;
+ if (!ctx_mod) return;
+
+ obj = part_obj;
+
+ if (!ctx_mod->ctxpopup)
+ {
+ ctx_mod->ctxpopup = elm_ctxpopup_add(obj);
+ snprintf(buf, sizeof(buf), "datetime/%s", elm_object_style_get(ctx_mod->mod_data.base));
+ elm_object_style_set(ctx_mod->ctxpopup, buf);
+ elm_ctxpopup_horizontal_set(ctx_mod->ctxpopup, EINA_TRUE);
+ evas_object_size_hint_weight_set(ctx_mod->ctxpopup, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(ctx_mod->ctxpopup, EVAS_HINT_FILL, 0.5);
+ elm_ctxpopup_hover_parent_set(ctx_mod->ctxpopup, elm_widget_top_get(obj));
+ evas_object_event_callback_add(ctx_mod->ctxpopup, EVAS_CALLBACK_HIDE,
+ _ctxpopup_hide_cb, ctx_mod);
+ }
+
+ if (evas_object_visible_get(ctx_mod->ctxpopup) && ctx_mod->sel_field != obj)
+ {
+ if (ctx_mod->sel_field)
+ elm_object_signal_emit(ctx_mod->sel_field, "elm,state,unselect", "elm");
+ ctx_mod->sel_field = obj;
+ ctx_mod->ctxpopup_relaunch = 1;
+ evas_object_hide(ctx_mod->ctxpopup);
+ }
+ else if (ctx_mod->sel_field != obj)
+ {
+ ctx_mod->ctxpopup_relaunch = 0;
+ _field_clicked_cb(ctx_mod, obj);
+ }
+}
+
+static void
+_access_set(Evas_Object *obj, Elm_Datetime_Field_Type field_type, Elm_Datetime_Module_Data *module_data)
{
const char* type = NULL;
(_elm_access_object_get(obj), ELM_ACCESS_TYPE, type);
_elm_access_callback_set
(_elm_access_object_get(obj), ELM_ACCESS_STATE, NULL, NULL);
+
+ if ((field_type >= ELM_DATETIME_YEAR) &&
+ (field_type < ELM_DATETIME_AMPM))
+ _elm_access_activate_callback_set
+ (_elm_access_object_get(obj), _access_activate_cb, module_data);
}
// module fucns for the specific module type
evas_object_data_set(field_obj, "_field_type", (void *)field_type);
// ACCESS
- _access_set(field_obj, field_type);
+ _access_set(field_obj, field_type, ctx_mod);
return field_obj;
}