[focus] update child_can_focus on parents, when an widget becomes focusable
authorShinwoo Kim <cinoo.kim@samsung.com>
Thu, 25 Apr 2013 06:10:50 +0000 (15:10 +0900)
committerSungho Kwak <sungho1.kwak@samsung.com>
Mon, 29 Apr 2013 11:32:16 +0000 (20:32 +0900)
Change-Id: I24d50d1b78efac33987e337930f68a0782863707

src/lib/elm_widget.c
src/lib/els_scroller.c

index a7db4f6..eda6c71 100644 (file)
@@ -1339,6 +1339,21 @@ 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
      {
index b590ea5..e87a53c 100644 (file)
@@ -2025,35 +2025,9 @@ _smart_event_mouse_up(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *ev
                             if ((_elm_config->thumbscroll_friction > 0.0) &&
                                 (vel > _elm_config->thumbscroll_momentum_threshold))
                               {
-                                 int minx, miny, mx, my, px, py;
-                                 sd->pan_func.min_get(sd->pan_obj, &minx, &miny);
-                                 sd->pan_func.max_get(sd->pan_obj, &mx, &my);
-                                 sd->pan_func.get(sd->pan_obj, &px, &py);
                                  sd->down.dx = ((double)dx / at);
                                  sd->down.dy = ((double)dy / at);
-                                 if (((sd->down.dx > 0) && (sd->down.pdx > 0)) ||
-                                     ((sd->down.dx < 0) && (sd->down.pdx < 0)))
-                                   if (px > minx && px < mx)
-                                     sd->down.dx += (double)sd->down.pdx * 1.5; // FIXME: * 1.5 - probably should be config
-                                 if (((sd->down.dy > 0) && (sd->down.pdy > 0)) ||
-                                     ((sd->down.dy < 0) && (sd->down.pdy < 0)))
-                                   if (py > miny && py < my)
-                                     sd->down.dy += (double)sd->down.pdy * 1.5; // FIXME: * 1.5 - probably should be config
-                                 if (((sd->down.dx > 0) && (sd->down.pdx > 0)) ||
-                                     ((sd->down.dx < 0) && (sd->down.pdx < 0)) ||
-                                     ((sd->down.dy > 0) && (sd->down.pdy > 0)) ||
-                                     ((sd->down.dy < 0) && (sd->down.pdy < 0)))
-                                   {
-                                      double tt = ecore_loop_time_get();
-                                      double dtt = tt - sd->down.anim_start;
-
-                                      if (dtt < 0.0) dtt = 0.0;
-                                      else if (dtt > _elm_config->thumbscroll_friction)
-                                        dtt = _elm_config->thumbscroll_friction;
-                                      sd->down.extra_time = _elm_config->thumbscroll_friction - dtt;
-                                   }
-                                 else
-                                   sd->down.extra_time = 0.0;
+                                 sd->down.extra_time = 0.0;
                                  sd->down.pdx = sd->down.dx;
                                  sd->down.pdy = sd->down.dy;
                                  ox = -sd->down.dx;