path: root/src/lib/elementary/elm_widget.h
diff options
authorMarcel Hollerbach <>2017-09-02 19:08:18 +0200
committerMarcel Hollerbach <>2017-09-02 21:10:56 +0200
commitc51f35d42a148b34a9cf74714ecc16609984eecb (patch)
tree9e7fa063e796c20c93ca695fa4b729a9e1843044 /src/lib/elementary/elm_widget.h
parent3af81932b04c60f89903834057dfb652cdcd9d5c (diff)
elm_widget: move the complete regsiter/unregister logic
We had here a little problem, state focus_state_eval function handled the unregisteration and consideration of the focus flags and then only called a helper function (which was a widget function), that then did the registeration in logical or regular mode. Elm scroller for example took that function overwrote it and did onyl permit logical registrations. Then again a evaluation of the focus state and flags took place, and the function considered elm_scroller should be registered as regular object, but found it to be logical. This lead to the problem that we permantently unregistered Elm.Scroller and registered it again as logical just to unregister it again. This was on the one side a performance downside. But also a bug since all items from within the Elm_Scrollers sub manager are getting reparent onto the parent, which means not the root of the scroller (the scroller itself) is the logical entrypoint to the widget but rather this reparented widget, which led to unexpected focus warps like described in T5923. tldr: this fixes T5923
Diffstat (limited to 'src/lib/elementary/elm_widget.h')
1 files changed, 1 insertions, 5 deletions
diff --git a/src/lib/elementary/elm_widget.h b/src/lib/elementary/elm_widget.h
index 3bd9b02521..8f3eae2ee0 100644
--- a/src/lib/elementary/elm_widget.h
+++ b/src/lib/elementary/elm_widget.h
@@ -430,11 +430,7 @@ typedef struct _Elm_Widget_Smart_Data
430 Elm_Focus_Move_Policy focus_move_policy; 430 Elm_Focus_Move_Policy focus_move_policy;
431 Elm_Focus_Region_Show_Mode focus_region_show_mode; 431 Elm_Focus_Region_Show_Mode focus_region_show_mode;
432 432
433 struct { 433 Elm_Widget_Focus_State focus;
434 Efl_Ui_Focus_Manager *manager; //manager which is currently regsitered in
435 Efl_Ui_Focus_Object *parent; //the parent where it is currently registered
436 Eina_Bool logical;
437 } focus;
438 struct { 434 struct {
439 int child_count; 435 int child_count;
440 Efl_Ui_Focus_Object *parent; 436 Efl_Ui_Focus_Object *parent;