efl_ui_focus_manager_calc: do not swallow a focus event
authorMarcel Hollerbach <marcel-hollerbach@t-online.de>
Fri, 1 Sep 2017 15:31:06 +0000 (17:31 +0200)
committerMarcel Hollerbach <marcel-hollerbach@t-online.de>
Sat, 2 Sep 2017 18:06:15 +0000 (20:06 +0200)
if we have been redirecting before, we would have lost that event due to
  the element here beeing at the top of that focus stack

src/lib/elementary/efl_ui_focus_manager_calc.c

index 7c5d25c..82e4c86 100644 (file)
@@ -1193,6 +1193,7 @@ _efl_ui_focus_manager_calc_efl_ui_focus_manager_focus_set(Eo *obj, Efl_Ui_Focus_
    Efl_Ui_Focus_Manager *redirect_manager;
    Eo *focusable;
    Node_Type type;
+   Eina_Bool was_redirect = EINA_FALSE;
 
    EINA_SAFETY_ON_NULL_RETURN(focus);
 
@@ -1226,6 +1227,9 @@ _efl_ui_focus_manager_calc_efl_ui_focus_manager_focus_set(Eo *obj, Efl_Ui_Focus_
 
         //first unset the redirect
         efl_ui_focus_manager_redirect_set(obj, NULL);
+
+        //we have been redirecting
+        was_redirect = EINA_TRUE;
      }
 
    redirect_manager = node->redirect_manager;
@@ -1239,7 +1243,7 @@ _efl_ui_focus_manager_calc_efl_ui_focus_manager_focus_set(Eo *obj, Efl_Ui_Focus_
         old_focus = eina_list_last_data_get(pd->focus_stack);
 
         //check if this is already at the top
-        if (old_focus && old_focus->focusable == focus) return;
+        if (!was_redirect && old_focus && old_focus->focusable == focus) return;
 
         //remove the object from the list and add it again
         pd->focus_stack = eina_list_remove(pd->focus_stack, node);