woohyun pushed a commit to branch master.

commit f0d3f79b375eb1a6df91e378e6214dd425253eb1
Author: WooHyun Jung <[email protected]>
Date:   Thu Jul 11 17:47:25 2013 +0900

    We can change the focusable state of elm_layout by calling 
elm_object_focus_allow_set from application side.
---
 src/lib/elm_layout.c |  10 ++++-
 src/lib/elm_widget.c | 122 +++++++++++++++++++++++----------------------------
 2 files changed, 62 insertions(+), 70 deletions(-)

diff --git a/src/lib/elm_layout.c b/src/lib/elm_layout.c
index b92917a..a8d7417 100644
--- a/src/lib/elm_layout.c
+++ b/src/lib/elm_layout.c
@@ -395,7 +395,10 @@ static void
 _elm_layout_smart_focus_next_manager_is(Eo *obj EINA_UNUSED, void *_pd 
EINA_UNUSED, va_list *list)
 {
    Eina_Bool *ret = va_arg(*list, Eina_Bool *);
-   *ret = EINA_TRUE;
+   if (!elm_widget_can_focus_get(obj))
+     *ret = EINA_TRUE;
+   else
+     *ret = EINA_FALSE;
 }
 /* WARNING: if you're making a widget *not* supposed to have focusable
  * child objects, but still inheriting from elm_layout, just set its
@@ -501,7 +504,10 @@ static void
 _elm_layout_smart_focus_direction_manager_is(Eo *obj EINA_UNUSED, void *_pd 
EINA_UNUSED, va_list *list)
 {
    Eina_Bool *ret = va_arg(*list, Eina_Bool *);
-   *ret = EINA_TRUE;
+   if (!elm_widget_can_focus_get(obj))
+     *ret = EINA_TRUE;
+   else
+     *ret = EINA_FALSE;
 }
 
 static void
diff --git a/src/lib/elm_widget.c b/src/lib/elm_widget.c
index 54266ee..f3d2fe9 100644
--- a/src/lib/elm_widget.c
+++ b/src/lib/elm_widget.c
@@ -173,6 +173,53 @@ static const Evas_Smart_Cb_Description _smart_callbacks[] =
 };
 
 static void
+_obj_mouse_down(void *data,
+                Evas *e __UNUSED__,
+                Evas_Object *obj __UNUSED__,
+                void *event_info)
+{
+   ELM_WIDGET_DATA_GET(data, sd);
+   Evas_Event_Mouse_Down *ev = event_info;
+   if (!(ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD))
+     sd->still_in = EINA_TRUE;
+}
+
+static void
+_obj_mouse_move(void *data,
+                Evas *e __UNUSED__,
+                Evas_Object *obj,
+                void *event_info)
+{
+   ELM_WIDGET_DATA_GET(data, sd);
+   Evas_Event_Mouse_Move *ev = event_info;
+   if (sd->still_in)
+     {
+        if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
+          sd->still_in = EINA_FALSE;
+        else
+          {
+             Evas_Coord x, y, w, h;
+             evas_object_geometry_get(obj, &x, &y, &w, &h);
+             if ((ev->cur.canvas.x < x) || (ev->cur.canvas.y < y) ||
+                 (ev->cur.canvas.x >= (x + w)) || (ev->cur.canvas.y >= (y + 
h)))
+               sd->still_in = EINA_FALSE;
+          }
+     }
+}
+
+static void
+_obj_mouse_up(void *data,
+              Evas *e __UNUSED__,
+              Evas_Object *obj,
+              void *event_info __UNUSED__)
+{
+   ELM_WIDGET_DATA_GET(data, sd);
+   if (sd->still_in)
+     elm_widget_focus_mouse_up_handle(obj);
+   sd->still_in = EINA_FALSE;
+}
+
+static void
 _elm_widget_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
 {
 
@@ -184,6 +231,12 @@ _elm_widget_smart_add(Eo *obj, void *_pd, va_list *list 
EINA_UNUSED)
    elm_widget_can_focus_set(obj, EINA_TRUE);
    elm_widget_mirrored_set(obj, elm_config_mirrored_get());
 
+   evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_DOWN,
+                                  _obj_mouse_down, obj);
+   evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_MOVE,
+                                  _obj_mouse_move, obj);
+   evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_UP,
+                                  _obj_mouse_up, obj);
    /* just a helper for inheriting classes */
    if (priv->resize_obj)
      {
@@ -460,53 +513,6 @@ _elm_widget_focus_direction_manager_is(const Evas_Object 
*obj)
 }
 
 static void
-_obj_mouse_down(void *data,
-                Evas *e __UNUSED__,
-                Evas_Object *obj __UNUSED__,
-                void *event_info)
-{
-   ELM_WIDGET_DATA_GET(data, sd);
-   Evas_Event_Mouse_Down *ev = event_info;
-   if (!(ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD))
-     sd->still_in = EINA_TRUE;
-}
-
-static void
-_obj_mouse_move(void *data,
-                Evas *e __UNUSED__,
-                Evas_Object *obj,
-                void *event_info)
-{
-   ELM_WIDGET_DATA_GET(data, sd);
-   Evas_Event_Mouse_Move *ev = event_info;
-   if (sd->still_in)
-     {
-        if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
-          sd->still_in = EINA_FALSE;
-        else
-          {
-             Evas_Coord x, y, w, h;
-             evas_object_geometry_get(obj, &x, &y, &w, &h);
-             if ((ev->cur.canvas.x < x) || (ev->cur.canvas.y < y) ||
-                 (ev->cur.canvas.x >= (x + w)) || (ev->cur.canvas.y >= (y + 
h)))
-               sd->still_in = EINA_FALSE;
-          }
-     }
-}
-
-static void
-_obj_mouse_up(void *data,
-              Evas *e __UNUSED__,
-              Evas_Object *obj,
-              void *event_info __UNUSED__)
-{
-   ELM_WIDGET_DATA_GET(data, sd);
-   if (sd->still_in)
-     elm_widget_focus_mouse_up_handle(obj);
-   sd->still_in = EINA_FALSE;
-}
-
-static void
 _propagate_x_drag_lock(Evas_Object *obj,
                        int dir)
 {
@@ -1187,19 +1193,7 @@ _elm_widget_resize_object_set(Eo *obj, void *_pd, 
va_list *list)
      }
 
    sd->resize_obj = sobj;
-   if (!sobj)
-     {
-        evas_object_event_callback_del_full(obj,
-                                            EVAS_CALLBACK_MOUSE_DOWN,
-                                            _obj_mouse_down, obj);
-        evas_object_event_callback_del_full(obj,
-                                            EVAS_CALLBACK_MOUSE_MOVE,
-                                            _obj_mouse_move, obj);
-        evas_object_event_callback_del_full(obj,
-                                            EVAS_CALLBACK_MOUSE_UP,
-                                            _obj_mouse_up, obj);
-        return;
-     }
+   if (!sobj) return;
 
    // orphan new resize obj
    parent = evas_object_data_get(sobj, "elm-parent");
@@ -1216,17 +1210,9 @@ _elm_widget_resize_object_set(Eo *obj, void *_pd, 
va_list *list)
                elm_widget_sub_object_del(parent, sobj);
           }
      }
-
    elm_widget_sub_object_add(obj, sobj);
-
    evas_object_smart_member_add(sobj, obj);
 
-   evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_DOWN,
-                                  _obj_mouse_down, obj);
-   evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_MOVE,
-                                  _obj_mouse_move, obj);
-   evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_UP,
-                                  _obj_mouse_up, obj);
    _smart_reconfigure(sd);
 }
 

-- 

------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk

Reply via email to