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 <cedric.bail@free.fr>
Differential Revision: https://phab.enlightenment.org/D10892
This commit is contained in:
Marcel Hollerbach 2019-12-17 10:07:14 +01:00 committed by Cedric BAIL
parent 193ae1c14c
commit c49880076c
5 changed files with 39 additions and 37 deletions

View File

@ -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";

View File

@ -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;

View File

@ -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";

View File

@ -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;
}

View File

@ -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;
}