ryuan pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=7d9b8def4db8ba2c1ac8fae282a79566842b1890

commit 7d9b8def4db8ba2c1ac8fae282a79566842b1890
Author: Ryuan Choi <ryuan.c...@gmail.com>
Date:   Wed Oct 2 12:35:23 2013 +0900

    fileselector: fileselector: Add "activated" smart callback
    
    It can be used to execute a file activated by double-clicking or
    pressing Enter key.
---
 ChangeLog                   |  4 ++++
 NEWS                        |  1 +
 src/bin/test_fileselector.c | 10 ++++++++++
 src/lib/elc_fileselector.c  | 23 ++++++++++++++++++++++-
 src/lib/elc_fileselector.h  |  3 +++
 5 files changed, 40 insertions(+), 1 deletion(-)

diff --git a/ChangeLog b/ChangeLog
index e3bce08..1017722 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1664,3 +1664,7 @@
 
         * fileselector: Add the configuration 
fileselector_double_tap_navigation_enable.
         It makes fileselector navigate folder using double tap instead of 
single tap.
+
+2013-10-02  Ryuan Choi (ryuan)
+        * fileselector: Add "activated" smart callback. It can be used to 
execute
+        a file activated by double-clicking or pressing Enter key.
diff --git a/NEWS b/NEWS
index 72139a0..417f1f8 100644
--- a/NEWS
+++ b/NEWS
@@ -95,6 +95,7 @@ Additions:
    * Add "dismissed" smart callback for menu.
    * Add elm_menu_item_subitems_clear().
    * Add the configuration fileselector_double_tap_navigation_enable.
+   * Add "activated" smart callback for fileselector.
 
 Improvements:
 
diff --git a/src/bin/test_fileselector.c b/src/bin/test_fileselector.c
index c85f255..a7b1c9b 100644
--- a/src/bin/test_fileselector.c
+++ b/src/bin/test_fileselector.c
@@ -75,6 +75,14 @@ my_fileselector_invalid(void *data   EINA_UNUSED,
 }
 
 static void
+my_fileselector_activated(void *data EINA_UNUSED,
+                          Evas_Object *obj EINA_UNUSED,
+                          void *event_info)
+{
+   printf("Activated file: %s\n", (char *)event_info);
+}
+
+static void
 _is_save_clicked(void            *data,
                  Evas_Object *obj EINA_UNUSED,
                  void *event_info EINA_UNUSED)
@@ -205,6 +213,8 @@ test_fileselector(void *data       EINA_UNUSED,
                                   win);
    evas_object_smart_callback_add(fs, "selected,invalid",
                                   my_fileselector_invalid, win);
+   evas_object_smart_callback_add(fs, "activated", my_fileselector_activated,
+                                  win);
 
    /* test buttons */
    sep = elm_separator_add(win);
diff --git a/src/lib/elc_fileselector.c b/src/lib/elc_fileselector.c
index b0ae946..cb96372 100644
--- a/src/lib/elc_fileselector.c
+++ b/src/lib/elc_fileselector.c
@@ -4,7 +4,6 @@
  *  - user defined icon/label cb
  *  - show/hide/add buttons ???
  *  - show/hide hidden files
- *  - double click to choose a file
  *  - multi-selection
  *  - make variable/function names that are sensible
  *  - Pattern Filter support
@@ -31,6 +30,7 @@ static Elm_Genlist_Item_Class *list_itc[ELM_FILE_LAST];
 static Elm_Gengrid_Item_Class *grid_itc[ELM_FILE_LAST];
 
 #define ELM_PRIV_FILESELECTOR_SIGNALS(cmd) \
+   cmd(SIG_ACTIVATED, "activated", "s") \
    cmd(SIG_DIRECTORY_OPEN, "directory,open", "s") \
    cmd(SIG_DONE, "done", "s") \
    cmd(SIG_SELECTED, "selected", "s") \
@@ -712,6 +712,25 @@ _on_item_double_clicked(void *data,
 }
 
 static void
+_on_item_activated(void *data,
+                   Evas_Object *obj __UNUSED__,
+                   void *event_info)
+{
+   //This event_info could be a list or gengrid item
+   Elm_Object_Item *it = event_info;
+   const char *path;
+   Eina_Bool is_dir;
+
+   path = elm_object_item_data_get(it);
+   if (!path) return;
+
+   is_dir = ecore_file_is_dir(path);
+   if (is_dir) return;
+
+   evas_object_smart_callback_call(data, SIG_ACTIVATED, (void *)path);
+}
+
+static void
 _on_item_selected(void *data,
                   Evas_Object *obj __UNUSED__,
                   void *event_info)
@@ -1065,6 +1084,7 @@ _elm_fileselector_smart_add(Eo *obj, void *_pd, va_list 
*list EINA_UNUSED)
 
    evas_object_smart_callback_add(li, "selected", _on_item_selected, obj);
    evas_object_smart_callback_add(li, "clicked,double", 
_on_item_double_clicked, obj);
+   evas_object_smart_callback_add(li, "activated", _on_item_activated, obj);
    evas_object_smart_callback_add
      (li, "expand,request", _on_list_expand_req, obj);
    evas_object_smart_callback_add
@@ -1073,6 +1093,7 @@ _elm_fileselector_smart_add(Eo *obj, void *_pd, va_list 
*list EINA_UNUSED)
    evas_object_smart_callback_add(li, "contracted", _on_list_contracted, obj);
    evas_object_smart_callback_add(grid, "selected", _on_item_selected, obj);
    evas_object_smart_callback_add(grid, "clicked,double", 
_on_item_double_clicked, obj);
+   evas_object_smart_callback_add(grid, "activated", _on_item_activated, obj);
 
    elm_widget_sub_object_add(obj, li);
    elm_widget_sub_object_add(obj, grid);
diff --git a/src/lib/elc_fileselector.h b/src/lib/elc_fileselector.h
index 6d465c2..7a6d7f0 100644
--- a/src/lib/elc_fileselector.h
+++ b/src/lib/elc_fileselector.h
@@ -39,6 +39,9 @@
  *
  * This widget emits the following signals, besides the ones sent from
  * @ref Layout:
+ * - @c "activated" - the user activated a file. This can happen by
+ *      double-clicking or pressing Enter key. (@c event_info is a
+ *      pointer to the activated file path)
  * - @c "selected" - the user has clicked on a file (when not in
  *      folders-only mode) or directory (when in folders-only mode)
  * - @c "selected,invalid" - the user has tried to access wrong path

-- 


Reply via email to