forked from enlightenment/efl
[Toolbar] Add the feature for key events.
This commit is contained in:
parent
f3664848a1
commit
633be421a5
|
@ -1247,3 +1247,7 @@
|
||||||
|
|
||||||
* Fix the calculation double type number.
|
* Fix the calculation double type number.
|
||||||
Round off to the nearest whole number.
|
Round off to the nearest whole number.
|
||||||
|
|
||||||
|
2013-04-15 Jaehwan Kim
|
||||||
|
|
||||||
|
* Add the feature for key events.
|
||||||
|
|
|
@ -60,6 +60,7 @@ Additions:
|
||||||
* Add the API elm_scroller_page_scroll_limit_set/get.
|
* Add the API elm_scroller_page_scroll_limit_set/get.
|
||||||
* Add elm_mapbuf_auto_set/get.
|
* Add elm_mapbuf_auto_set/get.
|
||||||
* Add the API elm_scroller_single_direction_set/get.
|
* Add the API elm_scroller_single_direction_set/get.
|
||||||
|
* Add the feature for key events.
|
||||||
|
|
||||||
Improvements:
|
Improvements:
|
||||||
|
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 266 B |
|
@ -390,6 +390,7 @@ group { name: "elm/toolbar/more/default";
|
||||||
group { name: "elm/toolbar/item/default";
|
group { name: "elm/toolbar/item/default";
|
||||||
images {
|
images {
|
||||||
image: "toolbar_sel.png" COMP;
|
image: "toolbar_sel.png" COMP;
|
||||||
|
image: "item_highlight.png" COMP;
|
||||||
}
|
}
|
||||||
data.item: "transition_animation_on" "1";
|
data.item: "transition_animation_on" "1";
|
||||||
parts {
|
parts {
|
||||||
|
@ -665,6 +666,20 @@ group { name: "elm/toolbar/item/default";
|
||||||
color: 255 255 255 255;
|
color: 255 255 255 255;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
part { name: "highlight";
|
||||||
|
type: IMAGE;
|
||||||
|
description { state: "default" 0.0;
|
||||||
|
visible: 0;
|
||||||
|
image {
|
||||||
|
normal: "item_highlight.png";
|
||||||
|
border: 3 3 3 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
description { state: "highlighted" 0.0;
|
||||||
|
inherit: "default" 0.0;
|
||||||
|
visible: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
part { name: "event";
|
part { name: "event";
|
||||||
type: RECT;
|
type: RECT;
|
||||||
mouse_events: 1;
|
mouse_events: 1;
|
||||||
|
@ -828,6 +843,18 @@ group { name: "elm/toolbar/item/default";
|
||||||
target: "elm.icon.clipper";
|
target: "elm.icon.clipper";
|
||||||
target: "elm.icon_new.clipper";
|
target: "elm.icon_new.clipper";
|
||||||
}
|
}
|
||||||
|
program { name: "highlight_on";
|
||||||
|
signal: "elm,highlight,on";
|
||||||
|
source: "elm";
|
||||||
|
action: STATE_SET "highlighted" 0.0;
|
||||||
|
target: "highlight";
|
||||||
|
}
|
||||||
|
program { name: "highlight_off";
|
||||||
|
signal: "elm,highlight,off";
|
||||||
|
source: "elm";
|
||||||
|
action: STATE_SET "default" 0.0;
|
||||||
|
target: "highlight";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1397,6 +1424,20 @@ group { name: "elm/toolbar/item/item_centered";
|
||||||
color: 255 255 255 153;
|
color: 255 255 255 153;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
part { name: "highlight";
|
||||||
|
type: IMAGE;
|
||||||
|
description { state: "default" 0.0;
|
||||||
|
visible: 0;
|
||||||
|
image {
|
||||||
|
normal: "item_highlight.png";
|
||||||
|
border: 3 3 3 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
description { state: "highlighted" 0.0;
|
||||||
|
inherit: "default" 0.0;
|
||||||
|
visible: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
part { name: "event";
|
part { name: "event";
|
||||||
type: RECT;
|
type: RECT;
|
||||||
mouse_events: 1;
|
mouse_events: 1;
|
||||||
|
@ -1611,6 +1652,18 @@ group { name: "elm/toolbar/item/item_centered";
|
||||||
set_state(PART:"padding_after_icon", "default", 0.0);
|
set_state(PART:"padding_after_icon", "default", 0.0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
program { name: "highlight_on";
|
||||||
|
signal: "elm,highlight,on";
|
||||||
|
source: "elm";
|
||||||
|
action: STATE_SET "highlighted" 0.0;
|
||||||
|
target: "highlight";
|
||||||
|
}
|
||||||
|
program { name: "highlight_off";
|
||||||
|
signal: "elm,highlight,off";
|
||||||
|
source: "elm";
|
||||||
|
action: STATE_SET "default" 0.0;
|
||||||
|
target: "highlight";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1643,5 +1696,33 @@ group { name: "elm/toolbar/object/default";
|
||||||
description { state: "default" 0.0;
|
description { state: "default" 0.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
part { name: "highlight";
|
||||||
|
type: IMAGE;
|
||||||
|
description { state: "default" 0.0;
|
||||||
|
visible: 0;
|
||||||
|
image {
|
||||||
|
normal: "item_highlight.png";
|
||||||
|
border: 3 3 3 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
description { state: "highlighted" 0.0;
|
||||||
|
inherit: "default" 0.0;
|
||||||
|
visible: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
programs {
|
||||||
|
program { name: "highlight_on";
|
||||||
|
signal: "elm,highlight,on";
|
||||||
|
source: "elm";
|
||||||
|
action: STATE_SET "highlighted" 0.0;
|
||||||
|
target: "highlight";
|
||||||
|
}
|
||||||
|
program { name: "highlight_off";
|
||||||
|
signal: "elm,highlight,off";
|
||||||
|
source: "elm";
|
||||||
|
action: STATE_SET "default" 0.0;
|
||||||
|
target: "highlight";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,8 @@ static const Evas_Smart_Cb_Description _smart_callbacks[] = {
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void _item_select(Elm_Toolbar_Item *it);
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_toolbar_item_prio_compare_cb(const void *i1,
|
_toolbar_item_prio_compare_cb(const void *i1,
|
||||||
const void *i2)
|
const void *i2)
|
||||||
|
@ -563,15 +565,63 @@ _elm_toolbar_smart_on_focus(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
|
||||||
{
|
{
|
||||||
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
|
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
|
||||||
Elm_Widget_Smart_Data *wd = eo_data_get(obj, ELM_OBJ_WIDGET_CLASS);
|
Elm_Widget_Smart_Data *wd = eo_data_get(obj, ELM_OBJ_WIDGET_CLASS);
|
||||||
|
ELM_TOOLBAR_DATA_GET(obj, sd);
|
||||||
|
|
||||||
if (elm_widget_focus_get(obj))
|
if (elm_widget_focus_get(obj))
|
||||||
evas_object_focus_set(wd->resize_obj, EINA_TRUE);
|
evas_object_focus_set(wd->resize_obj, EINA_TRUE);
|
||||||
else
|
else
|
||||||
evas_object_focus_set(wd->resize_obj, EINA_FALSE);
|
{
|
||||||
|
if (sd->highlighted_item)
|
||||||
|
{
|
||||||
|
edje_object_signal_emit(VIEW(sd->highlighted_item), "elm,highlight,off", "elm");
|
||||||
|
sd->highlighted_item = NULL;
|
||||||
|
}
|
||||||
|
evas_object_focus_set(wd->resize_obj, EINA_FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
if (ret) *ret = EINA_TRUE;
|
if (ret) *ret = EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Elm_Toolbar_Item *
|
||||||
|
_highlight_next_item_get(Evas_Object *obj, Evas_Object *box, Eina_Bool reverse)
|
||||||
|
{
|
||||||
|
ELM_TOOLBAR_DATA_GET(obj, sd);
|
||||||
|
Eina_List *list = NULL;
|
||||||
|
Elm_Toolbar_Item *it = NULL;
|
||||||
|
Evas_Object *it_obj = NULL;
|
||||||
|
|
||||||
|
list = evas_object_box_children_get(box);
|
||||||
|
if (reverse)
|
||||||
|
list = eina_list_reverse(list);
|
||||||
|
|
||||||
|
if (sd->highlighted_item)
|
||||||
|
{
|
||||||
|
list = eina_list_data_find_list(list, VIEW(sd->highlighted_item));
|
||||||
|
if (list) list = eina_list_next(list);
|
||||||
|
}
|
||||||
|
it_obj = eina_list_data_get(list);
|
||||||
|
if (it_obj) it = evas_object_data_get(it_obj, "item");
|
||||||
|
else it = NULL;
|
||||||
|
|
||||||
|
while (it &&
|
||||||
|
(it->separator ||
|
||||||
|
elm_object_item_disabled_get((Elm_Object_Item *)it)))
|
||||||
|
{
|
||||||
|
if (list) list = eina_list_next(list);
|
||||||
|
if (!list)
|
||||||
|
{
|
||||||
|
it = NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
it_obj = eina_list_data_get(list);
|
||||||
|
if (it_obj) it = evas_object_data_get(it_obj, "item");
|
||||||
|
else it = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return it;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_elm_toolbar_smart_event(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list)
|
_elm_toolbar_smart_event(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list)
|
||||||
{
|
{
|
||||||
|
@ -582,12 +632,85 @@ _elm_toolbar_smart_event(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *li
|
||||||
void *event_info = va_arg(*list, void *);
|
void *event_info = va_arg(*list, void *);
|
||||||
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
|
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
|
||||||
if (ret) *ret = EINA_FALSE;
|
if (ret) *ret = EINA_FALSE;
|
||||||
|
Elm_Toolbar_Item *it = NULL;
|
||||||
|
|
||||||
|
ELM_TOOLBAR_DATA_GET(obj, sd);
|
||||||
|
|
||||||
Evas_Event_Key_Down *ev = event_info;
|
Evas_Event_Key_Down *ev = event_info;
|
||||||
|
|
||||||
|
if (elm_widget_disabled_get(obj)) return;
|
||||||
|
if (type != EVAS_CALLBACK_KEY_DOWN) return;
|
||||||
|
if (!sd->items) return;
|
||||||
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
|
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
|
||||||
|
|
||||||
//TODO: Key Down Event precess for toolbar
|
if ((!strcmp(ev->keyname, "Return")) ||
|
||||||
|
((!strcmp(ev->keyname, "KP_Enter")) && !ev->string))
|
||||||
|
{
|
||||||
|
if (sd->highlighted_item)
|
||||||
|
_item_select(sd->highlighted_item);
|
||||||
|
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
|
||||||
|
if (ret) *ret = EINA_TRUE;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if ((!strcmp(ev->keyname, "Left")) ||
|
||||||
|
((!strcmp(ev->keyname, "KP_Left")) && !ev->string))
|
||||||
|
{
|
||||||
|
if (!sd->vertical)
|
||||||
|
it = _highlight_next_item_get(obj, sd->bx, EINA_TRUE);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (ret) *ret = EINA_FALSE;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ((!strcmp(ev->keyname, "Right")) ||
|
||||||
|
((!strcmp(ev->keyname, "KP_Right")) && !ev->string))
|
||||||
|
{
|
||||||
|
if (!sd->vertical)
|
||||||
|
it = _highlight_next_item_get(obj, sd->bx, EINA_FALSE);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (ret) *ret = EINA_FALSE;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ((!strcmp(ev->keyname, "Up")) ||
|
||||||
|
((!strcmp(ev->keyname, "KP_Up")) && !ev->string))
|
||||||
|
{
|
||||||
|
if (sd->vertical)
|
||||||
|
it = _highlight_next_item_get(obj, sd->bx, EINA_TRUE);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (ret) *ret = EINA_FALSE;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ((!strcmp(ev->keyname, "Down")) ||
|
||||||
|
((!strcmp(ev->keyname, "KP_Down")) && !ev->string))
|
||||||
|
{
|
||||||
|
if (sd->vertical)
|
||||||
|
it = _highlight_next_item_get(obj, sd->bx, EINA_FALSE);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (ret) *ret = EINA_FALSE;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!it)
|
||||||
|
{
|
||||||
|
if (ret) *ret = EINA_FALSE;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sd->highlighted_item)
|
||||||
|
edje_object_signal_emit(VIEW(sd->highlighted_item), "elm,highlight,off", "elm");
|
||||||
|
sd->highlighted_item = it;
|
||||||
|
edje_object_signal_emit(VIEW(sd->highlighted_item), "elm,highlight,on", "elm");
|
||||||
|
|
||||||
|
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
|
||||||
|
if (ret) *ret = EINA_TRUE;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1914,6 +2037,7 @@ _item_new(Evas_Object *obj,
|
||||||
it->base.data = data;
|
it->base.data = data;
|
||||||
|
|
||||||
VIEW(it) = edje_object_add(evas_object_evas_get(obj));
|
VIEW(it) = edje_object_add(evas_object_evas_get(obj));
|
||||||
|
evas_object_data_set(VIEW(it), "item", it);
|
||||||
|
|
||||||
if (_elm_config->access_mode == ELM_ACCESS_MODE_ON)
|
if (_elm_config->access_mode == ELM_ACCESS_MODE_ON)
|
||||||
_access_widget_item_register(it);
|
_access_widget_item_register(it);
|
||||||
|
|
|
@ -28,7 +28,8 @@ struct _Elm_Toolbar_Smart_Data
|
||||||
Evas_Object *bx, *more, *bx_more, *bx_more2;
|
Evas_Object *bx, *more, *bx_more, *bx_more2;
|
||||||
Evas_Object *menu_parent;
|
Evas_Object *menu_parent;
|
||||||
Eina_Inlist *items;
|
Eina_Inlist *items;
|
||||||
Elm_Toolbar_Item *more_item, *selected_item;
|
Elm_Toolbar_Item *more_item;
|
||||||
|
Elm_Toolbar_Item *selected_item, *highlighted_item;
|
||||||
Elm_Toolbar_Item *reorder_empty, *reorder_item;
|
Elm_Toolbar_Item *reorder_empty, *reorder_item;
|
||||||
Elm_Toolbar_Shrink_Mode shrink_mode;
|
Elm_Toolbar_Shrink_Mode shrink_mode;
|
||||||
Elm_Icon_Lookup_Order lookup_order;
|
Elm_Icon_Lookup_Order lookup_order;
|
||||||
|
|
Loading…
Reference in New Issue