From c49880076c353202e1d7a19ac2841a01f5756d41 Mon Sep 17 00:00:00 2001 From: Marcel Hollerbach Date: Tue, 17 Dec 2019 10:07:14 +0100 Subject: [PATCH] efl_ui_item: use signals from the theme and not object the problem here is that when we are using the signals from the object, then the edje object itself will receive press/unpress events before any content that is swallowed into the edje object. This means, that no clickable content, added to a item could be clicked without selecting / unselecting the item. Which was a problem. With this commit the theme is sending signals which are then passed to the efl.input.clickable mixin, this way, the part is stacked below the added content, which means, clickable content will not select / unselect the item anymore. Reviewed-by: Cedric BAIL Differential Revision: https://phab.enlightenment.org/D10892 --- data/elementary/themes/edc/efl/grid.edc | 21 +++++----- data/elementary/themes/edc/efl/group_item.edc | 2 +- data/elementary/themes/edc/efl/list.edc | 42 ++++++++++--------- src/lib/elementary/efl_ui_item.c | 5 ++- .../elementary/spec/efl_test_clickable.c | 6 +-- 5 files changed, 39 insertions(+), 37 deletions(-) diff --git a/data/elementary/themes/edc/efl/grid.edc b/data/elementary/themes/edc/efl/grid.edc index 51c1bd941d..d312ee71db 100644 --- a/data/elementary/themes/edc/efl/grid.edc +++ b/data/elementary/themes/edc/efl/grid.edc @@ -41,7 +41,7 @@ group { "efl/view_grid"; data.item: "version" "123"; } -group { "efl/grid_item"; data.item: "version" "123"; +group { "efl/grid_item"; data.item: "version" "124"; data.item: "selectraise" "on"; data.item: "focusraise" "on"; images.image: "bevel_dark_out.png" COMP; @@ -52,15 +52,6 @@ group { "efl/grid_item"; data.item: "version" "123"; parts { // BASE PARTS // - rect { "event"; - desc { "default"; - color: 0 0 0 0; - } - desc { "disabled"; - inherit: "default"; - hid; - } - } rect { "base"; mouse; desc { "default"; } @@ -208,6 +199,15 @@ group { "efl/grid_item"; data.item: "version" "123"; color: 255 255 255 64; } } + rect { "event"; + desc { "default"; + color: 0 0 0 0; + } + desc { "disabled"; + inherit: "default"; + hid; + } + } swallow { "efl.icon"; clip_to: "icon_area"; desc { "default"; @@ -258,6 +258,7 @@ group { "efl/grid_item"; data.item: "version" "123"; // TOP PARTS // } programs { + EFL_UI_CLICKABLE_PART_BIND("event") program { signal: "efl,state,selected"; source: "efl"; action: STATE_SET "selected"; diff --git a/data/elementary/themes/edc/efl/group_item.edc b/data/elementary/themes/edc/efl/group_item.edc index a76ae36c8c..16d4c78b94 100644 --- a/data/elementary/themes/edc/efl/group_item.edc +++ b/data/elementary/themes/edc/efl/group_item.edc @@ -8,7 +8,7 @@ Group: efl/group_item (@since 1.23) */ -group { "efl/group_item"; data.item: "version" "123"; nomouse; program_source: "efl"; +group { "efl/group_item"; data.item: "version" "124"; nomouse; program_source: "efl"; images.image: "shadow_square_tiny.png" COMP; images.image: "bevel_out.png" COMP; images.image: "horizontal_separated_bar_small_glow.png" COMP; diff --git a/data/elementary/themes/edc/efl/list.edc b/data/elementary/themes/edc/efl/list.edc index 71da7877f2..debbd77944 100644 --- a/data/elementary/themes/edc/efl/list.edc +++ b/data/elementary/themes/edc/efl/list.edc @@ -56,7 +56,7 @@ group { "efl/list_view"; data.item: "version" "123"; } -group { "efl/list_item"; data.item: "version" "123"; +group { "efl/list_item"; data.item: "version" "124"; data.item: "selectraise" "on"; data.item: "focusraise" "on"; images.image: "bevel_curved_horiz_out.png" COMP; @@ -65,15 +65,6 @@ group { "efl/list_item"; data.item: "version" "123"; images.image: "bevel_horiz_out.png" COMP; images.image: "shine.png" COMP; parts { - rect { "event"; - desc { "default"; - color: 0 0 0 0; - } - desc { "disabled"; - inherit: "default"; - hid; - } - } rect { "base"; nomouse; desc { "default"; color: 64 64 64 255; @@ -218,6 +209,15 @@ group { "efl/list_item"; data.item: "version" "123"; hid; } } + rect { "event"; + desc { "default"; + color: 0 0 0 0; + } + desc { "disabled"; + inherit: "default"; + hid; + } + } //##// swallow { "efl.icon"; desc { "default"; @@ -268,6 +268,7 @@ group { "efl/list_item"; data.item: "version" "123"; } } programs { + EFL_UI_CLICKABLE_PART_BIND("event") program { signal: "efl,state,odd"; source: "efl"; action: STATE_SET "odd"; @@ -343,7 +344,7 @@ group { "efl/list_item"; data.item: "version" "123"; } } -group { "efl/list_item:placeholder"; data.item: "version" "123"; +group { "efl/list_item:placeholder"; data.item: "version" "124"; data.item: "selectraise" "on"; data.item: "focusraise" "on"; images.image: "bevel_curved_horiz_out.png" COMP; @@ -352,15 +353,6 @@ group { "efl/list_item:placeholder"; data.item: "version" "123"; images.image: "bevel_horiz_out.png" COMP; images.image: "shine.png" COMP; parts { - rect { "event"; - desc { "default"; - color: 0 0 0 0; - } - desc { "disabled"; - inherit: "default"; - hid; - } - } rect { "base"; nomouse; desc { "default"; color: 64 64 64 255; @@ -425,6 +417,15 @@ group { "efl/list_item:placeholder"; data.item: "version" "123"; vis; } } + rect { "event"; + desc { "default"; + color: 0 0 0 0; + } + desc { "disabled"; + inherit: "default"; + hid; + } + } //##// swallow { "efl.content"; mouse; scale; @@ -463,6 +464,7 @@ group { "efl/list_item:placeholder"; data.item: "version" "123"; } } programs { + EFL_UI_CLICKABLE_PART_BIND("event") program { signal: "efl,state,odd"; source: "efl"; action: STATE_SET "odd"; diff --git a/src/lib/elementary/efl_ui_item.c b/src/lib/elementary/efl_ui_item.c index 349416ee8a..5d86dc934d 100644 --- a/src/lib/elementary/efl_ui_item.c +++ b/src/lib/elementary/efl_ui_item.c @@ -129,7 +129,10 @@ _efl_ui_item_efl_object_finalize(Eo *obj, Efl_Ui_Item_Data *pd EINA_UNUSED) /* Support Item Focus Feature */ elm_widget_can_focus_set(obj, EINA_TRUE); - efl_ui_action_connector_bind_clickable_to_object(wd->resize_obj, obj); + if (efl_ui_layout_theme_version_get(obj) == 123) + efl_ui_action_connector_bind_clickable_to_object(wd->resize_obj, obj); + else + efl_ui_action_connector_bind_clickable_to_theme(wd->resize_obj, obj); return eo; } diff --git a/src/tests/elementary/spec/efl_test_clickable.c b/src/tests/elementary/spec/efl_test_clickable.c index e6991f851d..d297d299c1 100644 --- a/src/tests/elementary/spec/efl_test_clickable.c +++ b/src/tests/elementary/spec/efl_test_clickable.c @@ -12,7 +12,7 @@ #include "elm_widget.h" /* spec-meta-start {"test-interface":"Efl.Ui.Clickable", - "test-widgets": ["Efl.Ui.Button", "Efl.Ui.Image", "Efl.Ui.Panes", "Efl.Ui.Frame", "Efl.Ui.Item.Realized", "Efl.Ui.Radio", "Efl.Ui.Check"] + "test-widgets": ["Efl.Ui.Button", "Efl.Ui.Image", "Efl.Ui.Panes", "Efl.Ui.Frame", "Efl.Ui.Grid_Default_Item", "Efl.Ui.List_Default_Item", "Efl.Ui.Radio", "Efl.Ui.Check"] } spec-meta-end */ @@ -64,10 +64,6 @@ prepare_window(void) } else if (efl_isa(widget, EFL_UI_ITEM_CLASS)) { - elm_widget_theme_klass_set(widget, "grid_item"); - elm_widget_theme_element_set(widget, NULL); - elm_widget_theme_style_set(widget, NULL); - efl_ui_widget_theme_apply(widget); pos->x = 30; pos->y = 30; }