static void _selection_done(void *data, Evas_Object *obj, void *event_info);
static void _activate(Evas_Object *obj);
static void _activate_hook(Evas_Object *obj);
+static Eina_Bool _event_hook(Evas_Object *obj, Evas_Object *src,
+ Evas_Callback_Type type, void *event_info);
static const char SIG_CLICKED[] = "clicked";
static const char SIG_UNPRESSED[] = "unpressed";
{NULL, NULL}
};
+static Eina_Bool
+_event_hook(Evas_Object *obj, Evas_Object *src __UNUSED__, Evas_Callback_Type type, void *event_info)
+{
+ if (type != EVAS_CALLBACK_KEY_DOWN) return EINA_FALSE;
+ Evas_Event_Key_Down *ev = event_info;
+ if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return EINA_FALSE;
+ if (strcmp(ev->keyname, "Return") && strcmp(ev->keyname, "space"))
+ return EINA_FALSE;
+ _activate(obj);
+ ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
+ return EINA_TRUE;
+}
+
static void
_del_hook(Evas_Object *obj)
{
elm_widget_disable_hook_set(obj, _disable_hook);
elm_widget_can_focus_set(obj, 1);
elm_widget_activate_hook_set(obj, _activate_hook);
+ elm_widget_event_hook_set(obj, _event_hook);
wd->btn = edje_object_add(e);
_elm_theme_object_set(obj, wd->btn, "button", "base", "default");
Evas_Object *hover_parent;
Eina_List *items;
Eina_Bool horizontal : 1;
+ Eina_Bool expanded : 1;
};
struct _Elm_Hoversel_Item
static void _sizing_eval(Evas_Object *obj);
static void _changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info);
static void _parent_del(void *data, Evas *e, Evas_Object *obj, void *event_info);
+static Eina_Bool _event_hook(Evas_Object *obj, Evas_Object *src,
+ Evas_Callback_Type type, void *event_info);
+
+static Eina_Bool
+_event_hook(Evas_Object *obj, Evas_Object *src __UNUSED__, Evas_Callback_Type type, void *event_info)
+{
+ if (type != EVAS_CALLBACK_KEY_DOWN) return EINA_FALSE;
+ Evas_Event_Key_Down *ev = event_info;
+ if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return EINA_FALSE;
+ if (strcmp(ev->keyname, "Return") && strcmp(ev->keyname, "space"))
+ return EINA_FALSE;
+ _activate(obj);
+ ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
+ return EINA_TRUE;
+}
static void
_del_pre_hook(Evas_Object *obj)
char buf[4096];
if (!wd) return;
+ if (wd->expanded)
+ {
+ elm_hoversel_hover_end(obj);
+ return;
+ }
+ wd->expanded = EINA_TRUE;
+
if (elm_widget_disabled_get(obj)) return;
wd->hover = elm_hover_add(obj);
if (wd->horizontal)
elm_widget_theme_hook_set(obj, _theme_hook);
elm_widget_disable_hook_set(obj, _disable_hook);
elm_widget_activate_hook_set(obj, _activate_hook);
+ elm_widget_event_hook_set(obj, _event_hook);
wd->btn = elm_button_add(parent);
+ wd->expanded = EINA_FALSE;
if (wd->horizontal)
snprintf(buf, sizeof(buf), "hoversel_horizontal/%s", elm_widget_style_get(obj));
else
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
if (!wd->hover) return;
+ wd->expanded = EINA_FALSE;
evas_object_del(wd->hover);
wd->hover = NULL;
evas_object_smart_callback_call(obj, "dismissed", NULL);
static void _on_focus_hook(void *data, Evas_Object *obj);
static void _activate(Evas_Object *obj);
static void _activate_hook(Evas_Object *obj);
+static Eina_Bool _event_hook(Evas_Object *obj, Evas_Object *src,
+ Evas_Callback_Type type, void *event_info);
static const char SIG_CLICKED[] = "clicked";
static const char SIG_REPEATED[] = "repeated";
{NULL, NULL}
};
+static Eina_Bool
+_event_hook(Evas_Object *obj, Evas_Object *src __UNUSED__, Evas_Callback_Type type, void *event_info)
+{
+ if (type != EVAS_CALLBACK_KEY_DOWN) return EINA_FALSE;
+ Evas_Event_Key_Down *ev = event_info;
+ if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return EINA_FALSE;
+ if (strcmp(ev->keyname, "Return") && strcmp(ev->keyname, "space"))
+ return EINA_FALSE;
+ _activate(obj);
+ ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
+ return EINA_TRUE;
+}
+
static void
_del_hook(Evas_Object *obj)
{
elm_widget_disable_hook_set(obj, _disable_hook);
elm_widget_can_focus_set(obj, 1);
elm_widget_activate_hook_set(obj, _activate_hook);
+ elm_widget_event_hook_set(obj, _event_hook);
wd->btn = edje_object_add(e);
_elm_theme_object_set(obj, wd->btn, "button", "base", "default");
static void _on_focus_hook(void *data, Evas_Object *obj);
static void _activate_hook(Evas_Object *obj);
static void _activate(Evas_Object *obj);
+static Eina_Bool _event_hook(Evas_Object *obj, Evas_Object *src,
+ Evas_Callback_Type type, void *event_info);
static const char SIG_CHANGED[] = "changed";
static const Evas_Smart_Cb_Description _signals[] = {
{NULL, NULL}
};
+static Eina_Bool
+_event_hook(Evas_Object *obj, Evas_Object *src __UNUSED__, Evas_Callback_Type type, void *event_info)
+{
+ if (type != EVAS_CALLBACK_KEY_DOWN) return EINA_FALSE;
+ Evas_Event_Key_Down *ev = event_info;
+ if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return EINA_FALSE;
+ if (strcmp(ev->keyname, "Return") && strcmp(ev->keyname, "space"))
+ return EINA_FALSE;
+ _activate(obj);
+ ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
+ return EINA_TRUE;
+}
+
+
static void
_del_hook(Evas_Object *obj)
{
elm_widget_disable_hook_set(obj, _disable_hook);
elm_widget_can_focus_set(obj, 1);
elm_widget_activate_hook_set(obj, _activate_hook);
+ elm_widget_event_hook_set(obj, _event_hook);
wd->chk = edje_object_add(e);
_elm_theme_object_set(obj, wd->chk, "check", "base", "default");
static void _on_focus_hook(void *data, Evas_Object *obj);
static void _activate(Evas_Object *obj);
static void _activate_hook(Evas_Object *obj);
+static Eina_Bool _event_hook(Evas_Object *obj, Evas_Object *src,
+ Evas_Callback_Type type, void *event_info);
static const char SIG_CHANGED[] = "changed";
static const Evas_Smart_Cb_Description _signals[] = {
{NULL, NULL}
};
+static Eina_Bool
+_event_hook(Evas_Object *obj, Evas_Object *src __UNUSED__, Evas_Callback_Type type, void *event_info)
+{
+ if (type != EVAS_CALLBACK_KEY_DOWN) return EINA_FALSE;
+ Evas_Event_Key_Down *ev = event_info;
+ if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return EINA_FALSE;
+ if (strcmp(ev->keyname, "Return") && strcmp(ev->keyname, "space"))
+ return EINA_FALSE;
+ _activate(obj);
+ ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
+ return EINA_TRUE;
+}
+
static void
_del_hook(Evas_Object *obj)
{
elm_widget_disable_hook_set(obj, _disable_hook);
elm_widget_can_focus_set(obj, 1);
elm_widget_activate_hook_set(obj, _activate_hook);
+ elm_widget_event_hook_set(obj, _event_hook);
wd->radio = edje_object_add(e);
_elm_theme_object_set(obj, wd->radio, "radio", "base", "default");
static void _signal_toggle_off(void *data, Evas_Object *obj, const char *emission, const char *source);
static void _signal_toggle_on(void *data, Evas_Object *obj, const char *emission, const char *source);
static void _on_focus_hook(void *data, Evas_Object *obj);
+static Eina_Bool _event_hook(Evas_Object *obj, Evas_Object *src,
+ Evas_Callback_Type type, void *event_info);
static const char SIG_CHANGED[] = "changed";
static const Evas_Smart_Cb_Description _signals[] = {
{NULL, NULL}
};
+static Eina_Bool
+_event_hook(Evas_Object *obj, Evas_Object *src __UNUSED__, Evas_Callback_Type type, void *event_info)
+{
+ if (type != EVAS_CALLBACK_KEY_DOWN) return EINA_FALSE;
+ Evas_Event_Key_Down *ev = event_info;
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return EINA_FALSE;
+ if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return EINA_FALSE;
+ if (strcmp(ev->keyname, "Return") && strcmp(ev->keyname, "space"))
+ return EINA_FALSE;
+ elm_toggle_state_set(obj, !wd->state);
+ evas_object_smart_callback_call(obj, SIG_CHANGED, NULL);
+ ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
+ return EINA_TRUE;
+}
+
static void
_del_hook(Evas_Object *obj)
{
elm_widget_theme_hook_set(obj, _theme_hook);
elm_widget_disable_hook_set(obj, _disable_hook);
elm_widget_can_focus_set(obj, EINA_TRUE);
+ elm_widget_event_hook_set(obj, _event_hook);
wd->tgl = edje_object_add(e);
_elm_theme_object_set(obj, wd->tgl, "toggle", "base", "default");