woohyun pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=cc0ea070b5e545f57832960c888d7591fafa1218

commit cc0ea070b5e545f57832960c888d7591fafa1218
Author: WooHyun Jung <wh0705.j...@samsung.com>
Date:   Sat Jan 17 16:29:46 2015 +0900

    widget: elm_win can be unfocused only when its ecore_evas loses focus.
---
 src/lib/elm_widget.c | 34 ++++++++++++++++++++++++++++++++--
 1 file changed, 32 insertions(+), 2 deletions(-)

diff --git a/src/lib/elm_widget.c b/src/lib/elm_widget.c
index 39aa51c..ee19dbb 100644
--- a/src/lib/elm_widget.c
+++ b/src/lib/elm_widget.c
@@ -411,8 +411,38 @@ _if_focused_revert(Evas_Object *obj,
            (top, &newest_focus_order, can_focus_only);
         if (newest)
           {
-             elm_object_focus_set(newest, EINA_FALSE);
-             elm_object_focus_set(newest, EINA_TRUE);
+             if (newest == top)
+               {
+                  ELM_WIDGET_DATA_GET(newest, sd2);
+                  if (!sd2) return;
+
+                  if (!elm_widget_focus_get(newest))
+                    elm_widget_focus_steal(newest);
+                  else
+                    {
+                       if (sd2->resize_obj && 
elm_widget_focus_get(sd2->resize_obj))
+                         elm_widget_focused_object_clear(sd2->resize_obj);
+                       else
+                         {
+                            const Eina_List *l;
+                            Evas_Object *child;
+                            EINA_LIST_FOREACH(sd2->subobjs, l, child)
+                              {
+                                 if (elm_widget_focus_get(child))
+                                   {
+                                      elm_widget_focused_object_clear(child);
+                                      break;
+                                   }
+                              }
+                         }
+                    }
+                  evas_object_focus_set(newest, EINA_TRUE);
+               }
+             else
+               {
+                  elm_object_focus_set(newest, EINA_FALSE);
+                  elm_object_focus_set(newest, EINA_TRUE);
+               }
           }
      }
 }

-- 


Reply via email to