diff options
author | Amitesh Singh <amitesh.sh@samsung.com> | 2014-02-22 04:09:46 +0900 |
---|---|---|
committer | Daniel Juyung Seo <seojuyung2@gmail.com> | 2014-02-26 01:27:05 +0900 |
commit | 8c1e9aefb605e2488080a46cfe42edefdd0ffcd9 (patch) | |
tree | faadc5a7e5bc849d27a5327387191afdb383820a | |
parent | e2417e4bb674c76277906c1a94a5c9896ea2fa5d (diff) | |
download | elementary-8c1e9aefb605e2488080a46cfe42edefdd0ffcd9.tar.gz |
list: focus highlight is handled by item theme.
Summary:
Problem: list theme (elm/list/base/default) is an alias of scroller
base theme (elm/scroller/base/default) in which focus_highlight is set to "on".
Solution: Now focus highlight in_theme is set by list item theme.
Test Plan: elementary_test->"List Focus"
Reviewers: seoz, woohyun
Reviewed By: seoz
CC: nirajkr
Differential Revision: https://phab.enlightenment.org/D572
-rw-r--r-- | src/lib/elm_list.c | 11 | ||||
-rw-r--r-- | src/lib/elm_widget.c | 13 | ||||
-rw-r--r-- | src/lib/elm_widget.h | 1 | ||||
-rw-r--r-- | src/lib/elm_widget_list.h | 1 | ||||
-rw-r--r-- | src/lib/elm_win.c | 1 |
5 files changed, 26 insertions, 1 deletions
diff --git a/src/lib/elm_list.c b/src/lib/elm_list.c index 7efa425f4..f81f643dd 100644 --- a/src/lib/elm_list.c +++ b/src/lib/elm_list.c @@ -980,6 +980,11 @@ _elm_list_smart_theme(Eo *obj, void *_pd, va_list *list) } _items_fix(obj); + + //focus highlight in_theme is set by list item theme. + _elm_widget_item_highlight_in_theme( + obj, elm_list_first_item_get(obj)); + elm_layout_sizing_eval(obj); if (ret) *ret = EINA_TRUE; @@ -2523,6 +2528,12 @@ _item_append(Eo *obj, void *_pd, va_list *list) it = _item_new(obj, label, icon, end, func, data); + if (!sd->in_theme_checked) + { + _elm_widget_item_highlight_in_theme(obj, (Elm_Object_Item *)it); + sd->in_theme_checked = EINA_TRUE; + } + sd->items = eina_list_append(sd->items, it); it->node = eina_list_last(sd->items); elm_box_pack_end(sd->box, VIEW(it)); diff --git a/src/lib/elm_widget.c b/src/lib/elm_widget.c index 464352a67..20ce48f10 100644 --- a/src/lib/elm_widget.c +++ b/src/lib/elm_widget.c @@ -84,6 +84,19 @@ _elm_scrollable_is(const Evas_Object *obj) } void +_elm_widget_item_highlight_in_theme(Evas_Object *obj, Elm_Object_Item *it) +{ + const char *str; + + if (!it) return; + str = edje_object_data_get(VIEW(it), "focus_highlight"); + if ((str) && (!strcmp(str, "on"))) + elm_widget_highlight_in_theme_set(obj, EINA_TRUE); + else + elm_widget_highlight_in_theme_set(obj, EINA_FALSE); +} + +void _elm_widget_focus_highlight_start(const Evas_Object *obj) { Evas_Object *top = elm_widget_top_get(obj); diff --git a/src/lib/elm_widget.h b/src/lib/elm_widget.h index a127dd500..137717990 100644 --- a/src/lib/elm_widget.h +++ b/src/lib/elm_widget.h @@ -810,6 +810,7 @@ EAPI Evas_Object *elm_widget_item_track(Elm_Widget_Item *item); EAPI void elm_widget_item_untrack(Elm_Widget_Item *item); EAPI int elm_widget_item_track_get(const Elm_Widget_Item *item); EAPI void _elm_widget_item_track_cancel(Elm_Widget_Item *item); +void _elm_widget_item_highlight_in_theme(Evas_Object *obj, Elm_Object_Item *it); /** * Function to operate on a given widget's scrollabe children when necessary. diff --git a/src/lib/elm_widget_list.h b/src/lib/elm_widget_list.h index 06562da29..ccef1877f 100644 --- a/src/lib/elm_widget_list.h +++ b/src/lib/elm_widget_list.h @@ -53,6 +53,7 @@ struct _Elm_List_Smart_Data Eina_Bool multi : 1; Eina_Bool swipe : 1; Eina_Bool delete_me : 1; + Eina_Bool in_theme_checked : 1; /**< flag for setting item highlight in theme. */ }; typedef struct _Elm_List_Item Elm_List_Item; diff --git a/src/lib/elm_win.c b/src/lib/elm_win.c index 53a707b09..16ecab1ef 100644 --- a/src/lib/elm_win.c +++ b/src/lib/elm_win.c @@ -5830,7 +5830,6 @@ _elm_win_focus_highlight_start(Evas_Object *obj) if (!elm_win_focus_highlight_enabled_get(obj)) return; sd->focus_highlight.cur.visible = EINA_TRUE; - sd->focus_highlight.cur.in_theme = EINA_FALSE; sd->focus_highlight.geometry_changed = EINA_TRUE; _elm_win_focus_highlight_reconfigure(sd); } |