add new signal for list/genlist/gengrid: "activated"
authordiscomfitor <discomfitor@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 26 Jul 2011 01:49:24 +0000 (01:49 +0000)
committerdiscomfitor <discomfitor@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 26 Jul 2011 01:49:24 +0000 (01:49 +0000)
this signal is called whenever an item receives either a double click or selection+(enter/spacebar/return)

this commit also unifies the click/enter/spacebar/etc event api for these widgets, including removing the double click signal from keypress events and removing the 'clicked' signal from double click events

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

src/lib/Elementary.h.in
src/lib/elm_gengrid.c
src/lib/elm_genlist.c
src/lib/elm_list.c

index 6e68c09..195f340 100644 (file)
@@ -4569,9 +4569,11 @@ extern "C" {
     * @section Gengrid_Smart_Events Gengrid smart events
     *
     * Smart events that you can add callbacks for are:
-    * - @c "clicked,double" - The user has double-clicked or pressed
-    *   enter on an item. The @c event_info parameter is the gengrid
-    *   item that was double-clicked.
+    * - @c "activated" - The user has double-clicked or pressed
+    *   (enter|return|spacebar) on an item. The @c event_info parameter
+    *   is the gengrid item that was activated.
+    * - @c "clicked,double" - The user has double-clicked an item.
+    *   The @c event_info parameter is the gengrid item that was double-clicked.
     * - @c "selected" - The user has made an item selected. The
     *   @c event_info parameter is the gengrid item that was selected.
     * - @c "unselected" - The user has made an item unselected. The
@@ -9276,7 +9278,11 @@ extern "C" {
     * lists, @ref Genlist should probably be used.
     *
     * Smart callbacks one can listen to:
-    * - "clicked,double" - when the user double-clicked an item
+    * - @c "activated" - The user has double-clicked or pressed
+    *   (enter|return|spacebar) on an item. The @c event_info parameter
+    *   is the item that was activated.
+    * - @c "clicked,double" - The user has double-clicked an item.
+    *   The @c event_info parameter is the item that was double-clicked.
     * - "selected" - when the user selected an item
     * - "unselected" - when the user unselected an item
     * - "longpressed" - an item in the list is long-pressed
@@ -10718,9 +10724,11 @@ extern "C" {
    EAPI void               elm_genlist_reorder_mode_set(Evas_Object *obj, Eina_Bool reorder_mode) EINA_ARG_NONNULL(1);
    EAPI Eina_Bool          elm_genlist_reorder_mode_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    /* Signals that you can add callbacks for are:
-    * "clicked,double" - This is called when a user has double-clicked an item.
-    *                    The event_info parameter is the genlist item that was
-    *                    double-clicked.
+    * - @c "activated" - The user has double-clicked or pressed
+    *   (enter|return|spacebar) on an item. The @c event_info parameter
+    *   is the item that was activated.
+    * - @c "clicked,double" - The user has double-clicked an item.
+    *   The @c event_info parameter is the item that was double-clicked.
     * "selected" - This is called when a user has made an item selected. The
     *              event_info parameter is the genlist item that was selected.
     * "unselected" - This is called when a user has made an item unselected. The
index 39630d3..1048173 100644 (file)
@@ -124,6 +124,7 @@ static Eina_Bool _deselect_all_items(Widget_Data *wd);
 static Evas_Smart_Class _pan_sc = EVAS_SMART_CLASS_INIT_VERSION;
 static void _mirrored_set(Evas_Object *obj, Eina_Bool rtl);
 
+static const char SIG_ACTIVATED[] = "activated";
 static const char SIG_CLICKED_DOUBLE[] = "clicked,double";
 static const char SIG_SELECTED[] = "selected";
 static const char SIG_UNSELECTED[] = "unselected";
@@ -142,6 +143,7 @@ static const char SIG_SCROLL_DRAG_STOP[] = "scroll,drag,stop";
 static const char SIG_MOVED[] = "moved";
 
 static const Evas_Smart_Cb_Description _signals[] = {
+       {SIG_ACTIVATED, ""},
        {SIG_CLICKED_DOUBLE, ""},
        {SIG_SELECTED, ""},
        {SIG_UNSELECTED, ""},
@@ -337,7 +339,7 @@ _event_hook(Evas_Object       *obj,
             (!strcmp(ev->keyname, "space")))
      {
         item = elm_gengrid_selected_item_get(obj);
-        evas_object_smart_callback_call(item->wd->self, SIG_CLICKED_DOUBLE, item);
+        evas_object_smart_callback_call(item->wd->self, SIG_ACTIVATED, item);
      }
    else return EINA_FALSE;
 
@@ -783,7 +785,7 @@ _mouse_down(void        *data,
    if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK)
      {
         evas_object_smart_callback_call(item->wd->self, SIG_CLICKED_DOUBLE, item);
-        evas_object_smart_callback_call(item->wd->self, "clicked", item); // will be removed
+        evas_object_smart_callback_call(item->wd->self, SIG_ACTIVATED, item);
      }
    if (item->long_timer) ecore_timer_del(item->long_timer);
    if (item->realized)
index 29120de..f5e9d67 100644 (file)
@@ -412,6 +412,7 @@ static void      _item_auto_scroll(Widget_Data *wd);
 
 static Evas_Smart_Class _pan_sc = EVAS_SMART_CLASS_INIT_VERSION;
 
+static const char SIG_ACTIVATED[] = "activated";
 static const char SIG_CLICKED_DOUBLE[] = "clicked,double";
 static const char SIG_SELECTED[] = "selected";
 static const char SIG_UNSELECTED[] = "unselected";
@@ -442,6 +443,7 @@ static const char SIG_SWIPE[] = "swipe";
 
 static const Evas_Smart_Cb_Description _signals[] = {
    {SIG_CLICKED_DOUBLE, ""},
+   {SIG_ACTIVATED, ""},
    {SIG_SELECTED, ""},
    {SIG_UNSELECTED, ""},
    {SIG_EXPANDED, ""},
@@ -576,6 +578,7 @@ _event_hook(Evas_Object       *obj,
         it = elm_genlist_selected_item_get(obj);
         elm_genlist_item_expanded_set(it,
                                       !elm_genlist_item_expanded_get(it));
+        evas_object_smart_callback_call(it->base.widget, SIG_ACTIVATED, it);
      }
    else if (!strcmp(ev->keyname, "Escape"))
      {
@@ -1421,7 +1424,10 @@ _mouse_down(void        *data,
    _item_highlight(it);
    if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK)
      if ((!it->disabled) && (!it->display_only))
-       evas_object_smart_callback_call(it->base.widget, SIG_CLICKED_DOUBLE, it);
+       {
+          evas_object_smart_callback_call(it->base.widget, SIG_CLICKED_DOUBLE, it);
+          evas_object_smart_callback_call(it->base.widget, SIG_ACTIVATED, it);
+       }
    if (it->long_timer) ecore_timer_del(it->long_timer);
    if (it->swipe_timer) ecore_timer_del(it->swipe_timer);
    it->swipe_timer = ecore_timer_add(0.4, _swipe_cancel, it);
index e8e5a04..e9a094a 100644 (file)
@@ -77,6 +77,7 @@ static Eina_Bool _event_hook(Evas_Object *obj, Evas_Object *src,
                              Evas_Callback_Type type, void *event_info);
 static Eina_Bool _deselect_all_items(Widget_Data *wd);
 
+static const char SIG_ACTIVATED[] = "activated";
 static const char SIG_CLICKED_DOUBLE[] = "clicked,double";
 static const char SIG_SELECTED[] = "selected";
 static const char SIG_UNSELECTED[] = "unselected";
@@ -87,6 +88,7 @@ static const char SIG_SCROLL_EDGE_LEFT[] = "scroll,edge,left";
 static const char SIG_SCROLL_EDGE_RIGHT[] = "scroll,edge,right";
 
 static const Evas_Smart_Cb_Description _signals[] = {
+   {SIG_ACTIVATED, ""},
    {SIG_CLICKED_DOUBLE, ""},
    {SIG_SELECTED, ""},
    {SIG_UNSELECTED, ""},
@@ -271,6 +273,14 @@ _event_hook(Evas_Object *obj, Evas_Object *src __UNUSED__, Evas_Callback_Type ty
                y += page_y;
           }
      }
+   else if (((!strcmp(ev->keyname, "Return")) ||
+            (!strcmp(ev->keyname, "KP_Enter")) ||
+            (!strcmp(ev->keyname, "space")))
+           && (!wd->multi) && (wd->selected))
+     {
+        it = elm_list_selected_item_get(obj);
+        evas_object_smart_callback_call(it->base.widget, SIG_ACTIVATED, it);
+     }
    else if (!strcmp(ev->keyname, "Escape"))
      {
         if (!_deselect_all_items(wd)) return EINA_FALSE;
@@ -913,7 +923,10 @@ _mouse_down(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED__, void
    it->swipe_timer = ecore_timer_add(0.4, _swipe_cancel, it);
    /* Always call the callbacks last - the user may delete our context! */
    if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK)
-     evas_object_smart_callback_call(it->base.widget, SIG_CLICKED_DOUBLE, it);
+     {
+        evas_object_smart_callback_call(it->base.widget, SIG_CLICKED_DOUBLE, it);
+        evas_object_smart_callback_call(it->base.widget, SIG_ACTIVATED, it);
+     }
    wd->swipe = EINA_FALSE;
    wd->movements = 0;