forked from enlightenment/efl
[hoversel] - Added focus support on hoversel items.
Summary: Focus support on hoversel items. Test Plan: elementary_test->hoversel2 Reviewers: seoz, raster, Hermet CC: nirajkr Differential Revision: https://phab.enlightenment.org/D316
This commit is contained in:
parent
09b4d56c4a
commit
08936d7f38
|
@ -1743,3 +1743,7 @@
|
|||
2013-11-07 ChunEon Park (Hermet)
|
||||
|
||||
* scroller: don't focus region show if the scroller is disabled.
|
||||
|
||||
2013-11-05 Amitesh Singh (_ami_)
|
||||
|
||||
* hoversel: Added focus support on hoversel items.
|
||||
|
|
|
@ -156,6 +156,7 @@ Improvements:
|
|||
layout.
|
||||
* Popup: Change the behavior of adding/removing buttons dynamically. User defined button's position is kept.
|
||||
* Fileselector: Monitor and update changes of selected path automatically while EIO is working.
|
||||
* Hoversel: Added focus support on hoversel items.
|
||||
|
||||
Fixes:
|
||||
* Now elm_datetime_field_limit_set() can set year limits wihtout problems.
|
||||
|
|
|
@ -71,6 +71,7 @@ void test_toolbar7(void *data, Evas_Object *obj, void *event_info);
|
|||
void test_toolbar8(void *data, Evas_Object *obj, void *event_info);
|
||||
void test_toolbar_vertical(void *data, Evas_Object *obj, void *event_info);
|
||||
void test_hoversel(void *data, Evas_Object *obj, void *event_info);
|
||||
void test_hoversel_focus(void *data, Evas_Object *obj, void *event_info);
|
||||
void test_list(void *data, Evas_Object *obj, void *event_info);
|
||||
void test_list_horizontal(void *data, Evas_Object *obj, void *event_info);
|
||||
void test_list2(void *data, Evas_Object *obj, void *event_info);
|
||||
|
@ -710,6 +711,7 @@ add_tests:
|
|||
ADD_TEST(NULL, "Selectors", "ColorSelector", test_colorselector);
|
||||
ADD_TEST(NULL, "Selectors", "SegmentControl", test_segment_control);
|
||||
ADD_TEST(NULL, "Selectors", "Hoversel", test_hoversel);
|
||||
ADD_TEST(NULL, "Selectors", "Hoversel Focus", test_hoversel_focus);
|
||||
ADD_TEST(NULL, "Selectors", "Radio", test_radio);
|
||||
ADD_TEST(NULL, "Selectors", "FlipSelector", test_flipselector);
|
||||
ADD_TEST(NULL, "Selectors", "DaySelector", test_dayselector);
|
||||
|
|
|
@ -240,3 +240,65 @@ test_hoversel(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_
|
|||
|
||||
evas_object_show(win);
|
||||
}
|
||||
|
||||
void
|
||||
test_hoversel_focus(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
|
||||
{
|
||||
Evas_Object *win, *bx, *hoversel;
|
||||
|
||||
win = elm_win_util_standard_add("hoversel focus", "Hoversel Focus");
|
||||
elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
|
||||
elm_win_focus_highlight_animate_set(win, EINA_TRUE);
|
||||
elm_win_autodel_set(win, EINA_TRUE);
|
||||
|
||||
bx = elm_box_add(win);
|
||||
evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
||||
elm_win_resize_object_add(win, bx);
|
||||
evas_object_show(bx);
|
||||
|
||||
hoversel = elm_hoversel_add(win);
|
||||
elm_hoversel_hover_parent_set(hoversel, win);
|
||||
elm_object_text_set(hoversel, "Vertical");
|
||||
elm_hoversel_item_add(hoversel, "Item 1", NULL, ELM_ICON_NONE, NULL, NULL);
|
||||
elm_hoversel_item_add(hoversel, "Item 2", NULL, ELM_ICON_NONE, NULL, NULL);
|
||||
elm_hoversel_item_add(hoversel, "Item 3", NULL, ELM_ICON_NONE, NULL, NULL);
|
||||
elm_hoversel_item_add(hoversel, "Item 4 - Long Label Here", "close", ELM_ICON_STANDARD, NULL, NULL);
|
||||
evas_object_smart_callback_add(hoversel, "clicked",
|
||||
_hoversel_clicked_cb, NULL);
|
||||
evas_object_smart_callback_add(hoversel, "selected",
|
||||
_hoversel_selected_cb, NULL);
|
||||
evas_object_smart_callback_add(hoversel, "dismissed",
|
||||
_hoversel_dismissed_cb, NULL);
|
||||
elm_box_pack_end(bx, hoversel);
|
||||
evas_object_show(hoversel);
|
||||
|
||||
hoversel = elm_hoversel_add(win);
|
||||
elm_hoversel_horizontal_set(hoversel, EINA_TRUE);
|
||||
elm_hoversel_hover_parent_set(hoversel, win);
|
||||
elm_object_text_set(hoversel, "Horizontal");
|
||||
elm_hoversel_item_add(hoversel, "Item 1", NULL, ELM_ICON_NONE, NULL, NULL);
|
||||
elm_hoversel_item_add(hoversel, "Item 2", NULL, ELM_ICON_NONE, NULL, NULL);
|
||||
elm_hoversel_item_add(hoversel, "Item 3", "home", ELM_ICON_STANDARD, NULL,
|
||||
NULL);
|
||||
elm_hoversel_item_add(hoversel, "Item 4", "close", ELM_ICON_STANDARD, NULL,
|
||||
NULL);
|
||||
elm_box_pack_end(bx, hoversel);
|
||||
evas_object_show(hoversel);
|
||||
|
||||
hoversel = elm_hoversel_add(win);
|
||||
elm_hoversel_hover_parent_set(hoversel, win);
|
||||
elm_object_text_set(hoversel, "Icons");
|
||||
elm_hoversel_item_add(hoversel, "Item 1", "apps", ELM_ICON_STANDARD, NULL,
|
||||
NULL);
|
||||
elm_hoversel_item_add(hoversel, "Item 2", "arrow_down", ELM_ICON_STANDARD,
|
||||
NULL, NULL);
|
||||
elm_hoversel_item_add(hoversel, "Item 3", "home", ELM_ICON_STANDARD, NULL,
|
||||
NULL);
|
||||
elm_hoversel_item_add(hoversel, "Item 4", "close", ELM_ICON_STANDARD, NULL,
|
||||
NULL);
|
||||
elm_box_pack_end(bx, hoversel);
|
||||
evas_object_show(hoversel);
|
||||
|
||||
evas_object_resize(win, 320, 500);
|
||||
evas_object_show(win);
|
||||
}
|
||||
|
|
|
@ -562,6 +562,90 @@ elm_hoversel_item_icon_get(const Elm_Object_Item *it,
|
|||
if (icon_type) *icon_type = item->icon_type;
|
||||
}
|
||||
|
||||
static void
|
||||
_elm_hoversel_smart_focus_direction_manager_is(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list)
|
||||
{
|
||||
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
|
||||
if(ret) *ret = EINA_TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
_elm_hoversel_smart_focus_direction(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list)
|
||||
{
|
||||
Elm_Hoversel_Smart_Data *sd = _pd;
|
||||
Evas_Object *base = va_arg(*list, Evas_Object *);
|
||||
double degree = va_arg(*list, double);
|
||||
Evas_Object **direction = va_arg(*list, Evas_Object **);
|
||||
double *weight = va_arg(*list, double *);
|
||||
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
|
||||
if (ret) *ret = EINA_FALSE;
|
||||
Eina_Bool int_ret;
|
||||
Eina_List *l = NULL;
|
||||
void *(*list_data_get)(const Eina_List *list);
|
||||
|
||||
if (!sd || !sd->hover) return;
|
||||
|
||||
list_data_get = eina_list_data_get;
|
||||
l = eina_list_append(l, sd->hover);
|
||||
|
||||
int_ret = elm_widget_focus_list_direction_get
|
||||
(obj, base, l, list_data_get, degree, direction, weight);
|
||||
if (ret) *ret = int_ret;
|
||||
eina_list_free(l);
|
||||
}
|
||||
|
||||
static void
|
||||
_elm_hoversel_smart_event(Eo *obj, void *_pd, va_list *list)
|
||||
{
|
||||
Evas_Object *src = va_arg(*list, Evas_Object *);
|
||||
(void) src;
|
||||
Evas_Callback_Type type = va_arg(*list, Evas_Callback_Type);
|
||||
void *event_info = va_arg(*list, void *);
|
||||
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
|
||||
if (ret) *ret = EINA_FALSE;
|
||||
Evas_Event_Key_Down *ev = event_info;
|
||||
Elm_Hoversel_Smart_Data *sd = _pd;
|
||||
|
||||
eo_do_super(obj, MY_CLASS, elm_wdg_event(src, type, event_info, ret));
|
||||
if (*ret) return;
|
||||
|
||||
if (!sd || !sd->hover) return;
|
||||
if (elm_widget_disabled_get(obj)) return;
|
||||
if (type != EVAS_CALLBACK_KEY_DOWN) return;
|
||||
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
|
||||
|
||||
if ((!strcmp(ev->key, "Down")) ||
|
||||
((!strcmp(ev->key, "KP_Down")) && (!ev->string)))
|
||||
{
|
||||
elm_widget_focus_cycle(sd->hover, ELM_FOCUS_DOWN);
|
||||
goto success;
|
||||
}
|
||||
else if ((!strcmp(ev->key, "Up")) ||
|
||||
((!strcmp(ev->key, "KP_Up")) && (!ev->string)))
|
||||
{
|
||||
elm_widget_focus_cycle(sd->hover, ELM_FOCUS_UP);
|
||||
goto success;
|
||||
}
|
||||
else if ((!strcmp(ev->key, "Left")) ||
|
||||
((!strcmp(ev->key, "KP_Left")) && (!ev->string)))
|
||||
{
|
||||
elm_widget_focus_cycle(sd->hover, ELM_FOCUS_LEFT);
|
||||
goto success;
|
||||
}
|
||||
else if ((!strcmp(ev->key, "Right")) ||
|
||||
((!strcmp(ev->key, "KP_Right")) && (!ev->string)))
|
||||
{
|
||||
elm_widget_focus_cycle(sd->hover, ELM_FOCUS_RIGHT);
|
||||
goto success;
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
success:
|
||||
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
|
||||
if (ret) *ret = EINA_TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
_class_constructor(Eo_Class *klass)
|
||||
{
|
||||
|
@ -576,6 +660,9 @@ _class_constructor(Eo_Class *klass)
|
|||
EO_OP_FUNC(ELM_WIDGET_ID(ELM_WIDGET_SUB_ID_THEME), _elm_hoversel_smart_theme),
|
||||
EO_OP_FUNC(ELM_WIDGET_ID(ELM_WIDGET_SUB_ID_TRANSLATE), _elm_hoversel_smart_translate),
|
||||
EO_OP_FUNC(ELM_WIDGET_ID(ELM_WIDGET_SUB_ID_PARENT_SET), _elm_hoversel_smart_parent_set),
|
||||
EO_OP_FUNC(ELM_WIDGET_ID(ELM_WIDGET_SUB_ID_FOCUS_DIRECTION_MANAGER_IS), _elm_hoversel_smart_focus_direction_manager_is),
|
||||
EO_OP_FUNC(ELM_WIDGET_ID(ELM_WIDGET_SUB_ID_FOCUS_DIRECTION), _elm_hoversel_smart_focus_direction),
|
||||
EO_OP_FUNC(ELM_WIDGET_ID(ELM_WIDGET_SUB_ID_EVENT), _elm_hoversel_smart_event),
|
||||
|
||||
EO_OP_FUNC(ELM_OBJ_BUTTON_ID(ELM_OBJ_BUTTON_SUB_ID_ADMITS_AUTOREPEAT_GET), _elm_hoversel_smart_admits_autorepeat_get),
|
||||
|
||||
|
|
Loading…
Reference in New Issue