forked from enlightenment/efl
Listen Space/Return in some widgets
widgets: * button * check * file selector button * hoversel * radio * toggle Author: Helen Fornazier <helen.fornazier@profusion.mobi> SVN revision: 52600
This commit is contained in:
parent
68c1638c16
commit
fc4a19b171
|
@ -43,6 +43,8 @@ static void _on_focus_hook(void *data, Evas_Object *obj);
|
|||
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";
|
||||
|
@ -55,6 +57,19 @@ 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)
|
||||
{
|
||||
|
@ -358,6 +373,7 @@ elm_fileselector_button_add(Evas_Object *parent)
|
|||
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");
|
||||
|
|
|
@ -27,6 +27,7 @@ struct _Widget_Data
|
|||
Evas_Object *hover_parent;
|
||||
Eina_List *items;
|
||||
Eina_Bool horizontal : 1;
|
||||
Eina_Bool expanded : 1;
|
||||
};
|
||||
|
||||
struct _Elm_Hoversel_Item
|
||||
|
@ -48,6 +49,21 @@ static void _disable_hook(Evas_Object *obj);
|
|||
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)
|
||||
|
@ -145,6 +161,13 @@ _activate(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)
|
||||
|
@ -256,8 +279,10 @@ elm_hoversel_add(Evas_Object *parent)
|
|||
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
|
||||
|
@ -443,6 +468,7 @@ elm_hoversel_hover_end(Evas_Object *obj)
|
|||
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);
|
||||
|
|
|
@ -34,6 +34,8 @@ static void _signal_unpressed(void *data, Evas_Object *obj, const char *emission
|
|||
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";
|
||||
|
@ -45,6 +47,19 @@ 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)
|
||||
{
|
||||
|
@ -258,6 +273,7 @@ elm_button_add(Evas_Object *parent)
|
|||
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");
|
||||
|
|
|
@ -42,6 +42,8 @@ static void _signal_check_toggle(void *data, Evas_Object *obj, const char *emiss
|
|||
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[] = {
|
||||
|
@ -49,6 +51,20 @@ 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)
|
||||
{
|
||||
|
@ -227,6 +243,7 @@ elm_check_add(Evas_Object *parent)
|
|||
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");
|
||||
|
|
|
@ -62,6 +62,8 @@ static void _signal_radio_on(void *data, Evas_Object *obj, const char *emission,
|
|||
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[] = {
|
||||
|
@ -69,6 +71,19 @@ 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)
|
||||
{
|
||||
|
@ -261,6 +276,7 @@ elm_radio_add(Evas_Object *parent)
|
|||
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");
|
||||
|
|
|
@ -36,6 +36,8 @@ static void _sub_del(void *data, Evas_Object *obj, void *event_info);
|
|||
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[] = {
|
||||
|
@ -43,6 +45,22 @@ 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)
|
||||
{
|
||||
|
@ -196,6 +214,7 @@ elm_toggle_add(Evas_Object *parent)
|
|||
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");
|
||||
|
|
Loading…
Reference in New Issue