fileselector: fileselector: Add "activated" smart callback
authorRyuan Choi <ryuan.choi@gmail.com>
Wed, 2 Oct 2013 03:35:23 +0000 (12:35 +0900)
committerRyuan Choi <ryuan.choi@gmail.com>
Wed, 2 Oct 2013 03:36:08 +0000 (12:36 +0900)
It can be used to execute a file activated by double-clicking or
pressing Enter key.

ChangeLog
NEWS
src/bin/test_fileselector.c
src/lib/elc_fileselector.c
src/lib/elc_fileselector.h

index e3bce08..1017722 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
 
         * 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 (file)
--- 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:
 
index c85f255..a7b1c9b 100644 (file)
@@ -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);
index b0ae946..cb96372 100644 (file)
@@ -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);
index 6d465c2..7a6d7f0 100644 (file)
@@ -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