[elm_widget] Fixed wrong logic when setting parent's child_can_focus as EINA_TRUE.
authorWooHyun Jung <wh0705.jung@samsung.com>
Tue, 7 May 2013 11:57:59 +0000 (20:57 +0900)
committerSungho Kwak <sungho1.kwak@samsung.com>
Wed, 12 Jun 2013 04:55:06 +0000 (13:55 +0900)
src/lib/elm_widget.c

index 40d1d07..754d941 100644 (file)
@@ -1328,6 +1328,18 @@ elm_widget_can_focus_set(Evas_Object *obj,
    sd->can_focus = can_focus;
    if (sd->can_focus)
      {
+        /* update child_can_focus of parents */
+        Evas_Object *o = obj;
+
+        for (;;)
+          {
+             o = elm_widget_parent_get(o);
+             if (!o) break;
+                        sd = evas_object_smart_data_get(o);
+             if (!sd || sd->child_can_focus) break;
+             sd->child_can_focus = EINA_TRUE;
+          }
+
         evas_object_event_callback_add(obj, EVAS_CALLBACK_KEY_DOWN,
                                        _propagate_event,
                                        (void *)(long)EVAS_CALLBACK_KEY_DOWN);
@@ -1337,21 +1349,6 @@ elm_widget_can_focus_set(Evas_Object *obj,
         evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_WHEEL,
                                        _propagate_event,
                                        (void *)(long)EVAS_CALLBACK_MOUSE_WHEEL);
-
-        /* update child focusable-ness on parents, now that a
-         * focusable child got in */
-        Elm_Widget_Smart_Data *sdp = sd;
-        if (!sd->child_can_focus)
-          {
-             sdp->child_can_focus = EINA_TRUE;
-             while (sdp->parent_obj)
-               {
-                  if (sdp->child_can_focus) break;
-
-                  sdp->child_can_focus = EINA_TRUE;
-                  sdp = evas_object_smart_data_get(sdp->parent_obj);
-               }
-          }
      }
    else
      {