and start on allowing modified behavior when in access mode. ie turn
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 19 Aug 2011 14:39:27 +0000 (14:39 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 19 Aug 2011 14:39:27 +0000 (14:39 +0000)
it on and off. just settable by env var and config file for now.

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/elementary@62591 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/elm_access.c
src/lib/elm_button.c
src/lib/elm_config.c
src/lib/elm_priv.h
src/lib/elm_widget.h
src/modules/access_output/mod.c

index b32d22a..7625805 100644 (file)
@@ -62,16 +62,20 @@ _access_add_set(Elm_Access_Info *ac, int type)
    ac->items = eina_list_prepend(ac->items, ai);
    return ai;
 }
+
 static Eina_Bool
 _access_obj_over_timeout_cb(void *data)
 {
    Elm_Access_Info *ac = evas_object_data_get(data, "_elm_access");
    if (!ac) return EINA_FALSE;
-   _elm_access_read(ac, ELM_ACCESS_CANCEL, data, NULL);
-   _elm_access_read(ac, ELM_ACCESS_TYPE,   data, NULL);
-   _elm_access_read(ac, ELM_ACCESS_INFO,   data, NULL);
-   _elm_access_read(ac, ELM_ACCESS_STATE,  data, NULL);
-   _elm_access_read(ac, ELM_ACCESS_DONE,   data, NULL);
+   if (_elm_config->access_mode != ELM_ACCESS_MODE_OFF)
+     {
+        _elm_access_read(ac, ELM_ACCESS_CANCEL, data, NULL);
+        _elm_access_read(ac, ELM_ACCESS_TYPE,   data, NULL);
+        _elm_access_read(ac, ELM_ACCESS_INFO,   data, NULL);
+        _elm_access_read(ac, ELM_ACCESS_STATE,  data, NULL);
+        _elm_access_read(ac, ELM_ACCESS_DONE,   data, NULL);
+     }
    ac->delay_timer = NULL;
    return EINA_FALSE;
 }
@@ -87,7 +91,8 @@ _access_obj_mouse_in_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSE
         ecore_timer_del(ac->delay_timer);
         ac->delay_timer = NULL;
      }
-   ac->delay_timer = ecore_timer_add(0.2, _access_obj_over_timeout_cb, data);
+   if (_elm_config->access_mode != ELM_ACCESS_MODE_OFF)
+      ac->delay_timer = ecore_timer_add(0.2, _access_obj_over_timeout_cb, data);
 }
 
 static void
@@ -242,6 +247,22 @@ _elm_access_object_get(Evas_Object *obj)
 }
 
 EAPI void
+_elm_access_object_hilight(Evas_Object *win, Evas_Object *obj)
+{
+   // if hilight obj doens exist - create and attach to window
+   // make sure its on a high layer
+   // show it and emit signal
+   // if exists, move and resize to obj object location
+   // ** try use dragables to specify pos+size??
+}
+
+EAPI void
+_elm_access_object_unhilight(Evas_Object *win)
+{
+   // hide highlight obj is there, emit hide and then del when done
+}
+
+EAPI void
 _elm_access_object_register(Evas_Object *obj, Evas_Object *hoverobj)
 {
    Elm_Access_Info *ac;
@@ -256,6 +277,51 @@ _elm_access_object_register(Evas_Object *obj, Evas_Object *hoverobj)
    evas_object_data_set(obj, "_elm_access", ac);
 }
 
+static void
+_access_2nd_click_del_cb(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
+{
+   Ecore_Timer *t;
+
+   evas_object_event_callback_del_full(obj, EVAS_CALLBACK_DEL,
+                                       _access_2nd_click_del_cb, NULL);
+   t = evas_object_data_get(obj, "_elm_2nd_timeout");
+   if (t)
+     {
+        ecore_timer_del(t);
+        evas_object_data_del(obj, "_elm_2nd_timeout");
+     }
+}
+
+static Eina_Bool
+_access_2nd_click_timeout_cb(void *data)
+{
+   evas_object_event_callback_del_full(data, EVAS_CALLBACK_DEL,
+                                       _access_2nd_click_del_cb, NULL);
+   evas_object_data_del(data, "_elm_2nd_timeout");
+   return EINA_FALSE;
+}
+
+EAPI Eina_Bool
+_elm_access_2nd_click_timeout(Evas_Object *obj)
+{
+   Ecore_Timer *t;
+
+   t = evas_object_data_get(obj, "_elm_2nd_timeout");
+   if (t)
+     {
+        ecore_timer_del(t);
+        evas_object_data_del(obj, "_elm_2nd_timeout");
+        evas_object_event_callback_del_full(obj, EVAS_CALLBACK_DEL,
+                                            _access_2nd_click_del_cb, NULL);
+        return EINA_TRUE;
+     }
+   t = ecore_timer_add(0.3, _access_2nd_click_timeout_cb, obj);
+   evas_object_data_set(obj, "_elm_2nd_timeout", t);
+   evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL,
+                                  _access_2nd_click_del_cb, NULL);
+   return EINA_FALSE;
+}
+
 // XXX special version for items
 //EAPI void
 //_elm_access_item_hover_register(Elm_Widget_Item *item, Evas_Object *hoverobj)
index 04faaf9..9bc6e77 100644 (file)
@@ -212,8 +212,13 @@ _activate(Evas_Object *obj)
         wd->timer = NULL;
      }
    wd->repeating = EINA_FALSE;
-   _elm_access_say(E_("Clicked"));
-   evas_object_smart_callback_call(obj, SIG_CLICKED, NULL);
+   if ((_elm_config->access_mode == ELM_ACCESS_MODE_OFF) || 
+       (_elm_access_2nd_click_timeout(obj)))
+     {
+        if (_elm_config->access_mode != ELM_ACCESS_MODE_OFF)
+           _elm_access_say(E_("Clicked"));
+        evas_object_smart_callback_call(obj, SIG_CLICKED, NULL);
+     }
 }
 
 static void
index 350a330..4955b15 100644 (file)
@@ -611,6 +611,7 @@ _desc_init(void)
    ELM_CONFIG_VAL(D, T, glayer_line_angular_tolerance, T_DOUBLE);
    ELM_CONFIG_VAL(D, T, glayer_flick_time_limit_ms, T_INT);
    ELM_CONFIG_VAL(D, T, glayer_long_tap_start_timeout, T_DOUBLE);
+   ELM_CONFIG_VAL(D, T, access_mode, T_INT);
 #undef T
 #undef D
 #undef T_INT
@@ -1638,6 +1639,8 @@ _env_get(void)
 
    s = getenv("ELM_DESKTOP_ENTRY");
    if (s) _elm_config->desktop_entry = !!atoi(s);
+   s = getenv("ELM_ACCESS_MODE");
+   if (s) _elm_config->access_mode = ELM_ACCESS_MODE_ON;
 }
 
 EAPI Eina_Bool
index d5570ef..3dc18f5 100644 (file)
@@ -82,6 +82,9 @@ extern const char *_elm_engines[];
 
 #define ELM_FONT_TOKEN_STYLE ":style="
 
+#define ELM_ACCESS_MODE_OFF 0
+#define ELM_ACCESS_MODE_ON 1
+
 struct _Elm_Config
 {
    int            config_version;
@@ -140,6 +143,7 @@ struct _Elm_Config
    double         glayer_line_angular_tolerance;
    unsigned int   glayer_flick_time_limit_ms;
    double         glayer_long_tap_start_timeout;
+   int            access_mode;
 };
 
 struct _Elm_Module
index c35070f..3783c23 100644 (file)
@@ -232,6 +232,7 @@ EAPI void             _elm_access_read(Elm_Access_Info *ac, int type, Evas_Objec
 EAPI void             _elm_access_say(const char *txt);
 EAPI Elm_Access_Info *_elm_access_object_get(Evas_Object *obj);
 EAPI void             _elm_access_object_register(Evas_Object *obj, Evas_Object *hoverobj);
+EAPI Eina_Bool        _elm_access_2nd_click_timeout(Evas_Object *obj);
 
 struct _Elm_Widget_Item
 {
index 79e9799..024cce9 100644 (file)
@@ -5,6 +5,7 @@
 
 /* to enable this module
 export ELM_MODULES="access_output>access/api"
+export ELM_ACCESS_MODE=1
  */
 
 static void (*cb_func) (void *data);