[*]Un-Rollback to 'Merge [elm_multibuttonentry]Changed edc TEXT part to TEXTBLOCK...
[framework/uifw/elementary.git] / src / lib / Elementary.h.in
index 7a2def6..84b6746 100644 (file)
@@ -2,6 +2,82 @@
  *
  * vim:ts=8:sw=3:sts=3:expandtab:cino=>5n-3f0^-2{2(0W1st0
  */
+
+/**
+@file Elementary.h.in
+@brief Elementary Widget Library
+*/
+
+/**
+@mainpage Elementary
+@image html  elementary.png
+@version @PACKAGE_VERSION@
+@author Carsten Haitzler <raster@@rasterman.com>
+@author Gustavo Sverzut Barbieri <barbieri@@profusion.mobi>
+@author Cedric Bail <cedric.bail@@free.fr>
+@author Vincent Torri <vtorri@@univ-evry.fr>
+@author Daniel Kolesa <quaker66@@gmail.com>
+@author Jaime Thomas <avi.thomas@@gmail.com>
+@author Swisscom - http://www.swisscom.ch/
+@author Christopher Michael <devilhorns@@comcast.net>
+@author Marco Trevisan (Treviño) <mail@@3v1n0.net>
+@author Michael Bouchaud <michael.bouchaud@@gmail.com>
+@author Jonathan Atton (Watchwolf) <jonathan.atton@@gmail.com>
+@author Brian Wang <brian.wang.0721@@gmail.com>
+@author Mike Blumenkrantz (zmike) <mike@@zentific.com>
+@author Samsung Electronics <tbd>
+@author Samsung SAIT <tbd>
+@author Brett Nash <nash@@nash.id.au>
+@author Bruno Dilly <bdilly@@profusion.mobi>
+@author Rafael Fonseca <rfonseca@@profusion.mobi>
+@author Chuneon Park <hermet@@hermet.pe.kr>
+@author Woohyun Jung <wh0705.jung@@samsung.com>
+@author Jaehwan Kim <jae.hwan.kim@@samsung.com>
+@author Wonguk Jeong <wonguk.jeong@@samsung.com>
+@author Leandro A. F. Pereira <leandro@@profusion.mobi>
+@author Helen Fornazier <helen.fornazier@@profusion.mobi>
+@author Gustavo Lima Chaves <glima@@profusion.mobi>
+@author Fabiano Fidêncio <fidencio@@profusion.mobi>
+@author Tiago Falcão <tiago@@profusion.mobi>
+@author Otavio Pontes <otavio@@profusion.mobi>
+@author Viktor Kojouharov <vkojouharov@@gmail.com>
+@author Daniel Juyung Seo (SeoZ) <juyung.seo@@samsung.com> <seojuyung2@@gmail.com>
+@author Sangho Park <sangho.g.park@@samsung.com> <gouache95@@gmail.com>
+@author Rajeev Ranjan (Rajeev) <rajeev.r@@samsung.com> <rajeev.jnnce@@gmail.com>
+@author Seunggyun Kim <sgyun.kim@@samsung.com> <tmdrbs@@gmail.com>
+@author Sohyun Kim <anna1014.kim@@samsung.com> <sohyun.anna@@gmail.com>
+@author Jihoon Kim <jihoon48.kim@@samsung.com>
+@author Jeonghyun Yun (arosis) <jh0506.yun@@samsung.com>
+@author Tom Hacohen <tom@@stosb.com>
+@author Aharon Hillel <a.hillel@@partner.samsung.com>
+@author Jonathan Atton (Watchwolf) <jonathan.atton@@gmail.com>
+@author Shinwoo Kim <kimcinoo@@gmail.com>
+@author Govindaraju SM <govi.sm@@samsung.com> <govism@@gmail.com>
+@author Prince Kumar Dubey <prince.dubey@@samsung.com> <prince.dubey@@gmail.com>
+@date 2008-2011
+
+@section intro What is Elementary?
+
+This is a VERY SIMPLE toolkit. It is not meant for writing extensive desktop
+applications (yet). Small simple ones with simple needs.
+
+It is meant to make the programmers work almost brainless but give them lots
+of flexibility.
+
+License: LGPL v2 (see COPYING in the base of Elementary's source). This
+applies to all files in the source here.
+
+Acknowledgements: There is a lot that goes into making a widget set, and
+they don't happen out of nothing. It's like trying to make everyone
+everywhere happy, regardless of age, gender, race or nationality - and
+that is really tough. So thanks to people and organisations behind this,
+aslisted in the Authors section above.
+
+@verbatim
+Pants
+@endverbatim
+*/
+
 #ifndef ELEMENTARY_H
 #define ELEMENTARY_H
 
@@ -18,6 +94,7 @@
 @ELM_EDBUS_DEF@ ELM_EDBUS
 @ELM_EFREET_DEF@ ELM_EFREET
 @ELM_ETHUMB_DEF@ ELM_ETHUMB
+@ELM_EMAP_DEF@ ELM_EMAP
 @ELM_DEBUG_DEF@ ELM_DEBUG
 @ELM_ALLOCA_H_DEF@ ELM_ALLOCA_H
 @ELM_LIBINTL_H_DEF@ ELM_LIBINTL_H
 #include <Eina.h>
 #include <Eet.h>
 #include <Evas.h>
+#include <Evas_GL.h>
 #include <Ecore.h>
 #include <Ecore_Evas.h>
 #include <Ecore_File.h>
 
 #ifdef ELM_EDBUS
 # include <E_DBus.h>
-# include <E_Hal.h>
 #endif
 
 #ifdef ELM_EFREET
 # include <Ethumb_Client.h>
 #endif
 
+#ifdef ELM_EMAP
+# include <EMap.h>
+#endif
+
 #ifdef EAPI
 # undef EAPI
 #endif
@@ -137,6 +218,25 @@ extern "C" {
 #define ELM_RECTS_INTERSECT(x, y, w, h, xx, yy, ww, hh) (((x) < ((xx) + (ww))) && ((y) < ((yy) + (hh))) && (((x) + (w)) > (xx)) && (((y) + (h)) > (yy)))
 #define ELM_PI 3.14159265358979323846
 
+   /**
+    * @defgroup General General
+    *
+    * @brief General Elementary API. Functions that don't relate to
+    * Elementary objects specifically.
+    *
+    * Here are documented functions which init/shutdown the library,
+    * that apply to generic Elementary objects, that deal with
+    * configuration, et cetera.
+    *
+    * @ref general_functions_example_page "This" example contemplates
+    * some of these functions.
+    */
+
+   /**
+    * @addtogroup General
+    * @{
+    */
+
   /**
    * Defines couple of standard Evas_Object layers to be used
    * with evas_object_layer_set().
@@ -157,36 +257,51 @@ extern "C" {
 /**************************************************************************/
    EAPI extern int ELM_ECORE_EVENT_ETHUMB_CONNECT;
 
-   /* Objects */
    /**
-    * Emitted when policy value changed.
+    * Emitted when any Elementary's policy value is changed.
     */
    EAPI extern int ELM_EVENT_POLICY_CHANGED;
-   typedef struct _Elm_Event_Policy_Changed
-     {
-        unsigned int policy;
-        int          new_value;
-        int          old_value;
-     } Elm_Event_Policy_Changed;
 
    /**
-    * Policy identifiers.
+    * @typedef Elm_Event_Policy_Changed
+    *
+    * Data on the event when an Elementary policy has changed
+    */
+    typedef struct _Elm_Event_Policy_Changed Elm_Event_Policy_Changed;
+
+   /**
+    * @struct _Elm_Event_Policy_Changed
     *
-    * @see elm_policy_set()
+    * Data on the event when an Elementary policy has changed
     */
-   typedef enum _Elm_Policy
+    struct _Elm_Event_Policy_Changed
      {
-        ELM_POLICY_QUIT, /**< when should quit application automatically.
-                          * @see Elm_Policy_Quit.
+        unsigned int policy; /**< the policy identifier */
+        int          new_value; /**< value the policy had before the change */
+        int          old_value; /**< new value the policy got */
+    };
+
+   /**
+    * Policy identifiers.
+    */
+    typedef enum _Elm_Policy
+    {
+        ELM_POLICY_QUIT, /**< under which circunstances the application
+                          * should quit automatically. @see
+                          * Elm_Policy_Quit.
                           */
         ELM_POLICY_LAST
-     } Elm_Policy;
+    } Elm_Policy; /**< Elementary policy identifiers/groups enumeration.  @see elm_policy_set()
+ */
 
    typedef enum _Elm_Policy_Quit
      {
-        ELM_POLICY_QUIT_NONE = 0, /**< never quit application automatically */
-        ELM_POLICY_QUIT_LAST_WINDOW_CLOSED /**< quit when last window is closed */
-     } Elm_Policy_Quit;
+        ELM_POLICY_QUIT_NONE = 0, /**< never quit the application
+                                   * automatically */
+        ELM_POLICY_QUIT_LAST_WINDOW_CLOSED /**< quit when the
+                                            * application's last
+                                            * window is closed */
+     } Elm_Policy_Quit; /**< Possible values for the #ELM_POLICY_QUIT policy */
 
    typedef enum _Elm_Focus_Direction
      {
@@ -201,6 +316,27 @@ extern "C" {
      } Elm_Text_Format;
 
    /**
+    * Line wrapping types.
+    */
+   typedef enum _Elm_Wrap_Type
+     {
+        ELM_WRAP_NONE = 0, /**< No wrap - value is zero */
+        ELM_WRAP_CHAR, /**< Char wrap - wrap between graphmes */
+        ELM_WRAP_WORD, /**< Word wrap - wrap in allowed wrapping points (as defined in the unicode standard) */
+        ELM_WRAP_MIXED, /**< Mixed wrap - Word wrap, and if that fails, char wrap. */
+        ELM_WRAP_LAST
+     } Elm_Wrap_Type;
+
+
+   /**
+    * @typedef Elm_Object_Item
+    * An Elementary Object item handle.
+    * @ingroup General
+    */
+   typedef struct _Elm_Object_Item Elm_Object_Item;
+
+
+   /**
     * Called back when a widget's tooltip is activated and needs content.
     * @param data user-data given to elm_object_tooltip_content_cb_set()
     * @param obj owner widget.
@@ -219,18 +355,285 @@ extern "C" {
    typedef Eina_Bool (*Elm_Event_Cb) (void *data, Evas_Object *obj, Evas_Object *src, Evas_Callback_Type type, void *event_info);
 
 #ifndef ELM_LIB_QUICKLAUNCH
-#define ELM_MAIN() int main(int argc, char **argv) {elm_init(argc, argv); return elm_main(argc, argv);}
+#define ELM_MAIN() int main(int argc, char **argv) {elm_init(argc, argv); return elm_main(argc, argv);} /**< macro to be used after the elm_main() function */
 #else
-#define ELM_MAIN() int main(int argc, char **argv) {return elm_quicklaunch_fallback(argc, argv);}
+#define ELM_MAIN() int main(int argc, char **argv) {return elm_quicklaunch_fallback(argc, argv);} /**< macro to be used after the elm_main() function */
 #endif
 
 /**************************************************************************/
    /* General calls */
+
+   /**
+    * Initialize Elementary
+    *
+    * @param[in] argc System's argument count value
+    * @param[in] argv System's pointer to array of argument strings
+    * @return The init counter value.
+    *
+    * This function initializes Elementary and increments a counter of
+    * the number of calls to it. It returs the new counter's value.
+    *
+    * @warning This call is exported only for use by the @c ELM_MAIN()
+    * macro. There is no need to use this if you use this macro (which
+    * is highly advisable). An elm_main() should contain the entry
+    * point code for your application, having the same prototype as
+    * elm_init(), and @b not being static (putting the @c EAPI symbol
+    * in front of its type declaration is advisable). The @c
+    * ELM_MAIN() call should be placed just after it.
+    *
+    * Example:
+    * @dontinclude bg_example_01.c
+    * @skip static void
+    * @until ELM_MAIN
+    *
+    * See the full @ref bg_example_01_c "example".
+    *
+    * @see elm_shutdown().
+    * @ingroup General
+    */
    EAPI int          elm_init(int argc, char **argv);
+
+   /**
+    * Shut down Elementary
+    *
+    * @return The init counter value.
+    *
+    * This should be called at the end of your application, just
+    * before it ceases to do any more processing. This will clean up
+    * any permanent resources your application may have allocated via
+    * Elementary that would otherwise persist.
+    *
+    * @see elm_init() for an example
+    *
+    * @ingroup General
+    */
    EAPI int          elm_shutdown(void);
+
+   /**
+    * Run Elementary's main loop
+    *
+    * This call should be issued just after all initialization is
+    * completed. This function will not return until elm_exit() is
+    * called. It will keep looping, running the main
+    * (event/processing) loop for Elementary.
+    *
+    * @see elm_init() for an example
+    *
+    * @ingroup General
+    */
    EAPI void         elm_run(void);
+
+   /**
+    * Exit Elementary's main loop
+    *
+    * If this call is issued, it will flag the main loop to cease
+    * processing and return back to its parent function (usually your
+    * elm_main() function).
+    *
+    * @see elm_init() for an example. There, just after a request to
+    * close the window comes, the main loop will be left.
+    *
+    * @note By using the #ELM_POLICY_QUIT on your Elementary
+    * applications, you'll this function called automatically for you.
+    *
+    * @ingroup General
+    */
    EAPI void         elm_exit(void);
 
+   /**
+    * Provide information in order to make Elementary determine the @b
+    * run time location of the software in question, so other data files
+    * such as images, sound files, executable utilities, libraries,
+    * modules and locale files can be found.
+    *
+    * @param mainfunc This is your application's main function name,
+    *        whose binary's location is to be found. Providing @c NULL
+    *        will make Elementary not to use it
+    * @param dom This will be used as the application's "domain", in the
+    *        form of a prefix to any environment variables that may
+    *        override prefix detection and the directory name, inside the
+    *        standard share or data directories, where the software's
+    *        data files will be looked for.
+    * @param checkfile This is an (optional) magic file's path to check
+    *        for existence (and it must be located in the data directory,
+    *        under the share directory provided above). Its presence will
+    *        help determine the prefix found was correct. Pass @c NULL if
+    *        the check is not to be done.
+    *
+    * This function allows one to re-locate the application somewhere
+    * else after compilation, if the developer wishes for easier
+    * distribution of pre-compiled binaries.
+    *
+    * The prefix system is designed to locate where the given software is
+    * installed (under a common path prefix) at run time and then report
+    * specific locations of this prefix and common directories inside
+    * this prefix like the binary, library, data and locale directories,
+    * through the @c elm_app_*_get() family of functions.
+    *
+    * Call elm_app_info_set() early on before you change working
+    * directory or anything about @c argv[0], so it gets accurate
+    * information.
+    *
+    * It will then try and trace back which file @p mainfunc comes from,
+    * if provided, to determine the application's prefix directory.
+    *
+    * The @p dom parameter provides a string prefix to prepend before
+    * environment variables, allowing a fallback to @b specific
+    * environment variables to locate the software. You would most
+    * probably provide a lowercase string there, because it will also
+    * serve as directory domain, explained next. For environment
+    * variables purposes, this string is made uppercase. For example if
+    * @c "myapp" is provided as the prefix, then the program would expect
+    * @c "MYAPP_PREFIX" as a master environment variable to specify the
+    * exact install prefix for the software, or more specific environment
+    * variables like @c "MYAPP_BIN_DIR", @c "MYAPP_LIB_DIR", @c
+    * "MYAPP_DATA_DIR" and @c "MYAPP_LOCALE_DIR", which could be set by
+    * the user or scripts before launching. If not provided (@c NULL),
+    * environment variables will not be used to override compiled-in
+    * defaults or auto detections.
+    *
+    * The @p dom string also provides a subdirectory inside the system
+    * shared data directory for data files. For example, if the system
+    * directory is @c /usr/local/share, then this directory name is
+    * appended, creating @c /usr/local/share/myapp, if it @p was @c
+    * "myapp". It is expected the application installs data files in
+    * this directory.
+    *
+    * The @p checkfile is a file name or path of something inside the
+    * share or data directory to be used to test that the prefix
+    * detection worked. For example, your app will install a wallpaper
+    * image as @c /usr/local/share/myapp/images/wallpaper.jpg and so to
+    * check that this worked, provide @c "images/wallpaper.jpg" as the @p
+    * checkfile string.
+    *
+    * @see elm_app_compile_bin_dir_set()
+    * @see elm_app_compile_lib_dir_set()
+    * @see elm_app_compile_data_dir_set()
+    * @see elm_app_compile_locale_set()
+    * @see elm_app_prefix_dir_get()
+    * @see elm_app_bin_dir_get()
+    * @see elm_app_lib_dir_get()
+    * @see elm_app_data_dir_get()
+    * @see elm_app_locale_dir_get()
+    */
+   EAPI void         elm_app_info_set(void *mainfunc, const char *dom, const char *checkfile);
+
+   /**
+    * Provide information on the @b fallback application's binaries
+    * directory, on scenarios where they get overriden by
+    * elm_app_info_set().
+    *
+    * @param dir The path to the default binaries directory (compile time
+    * one)
+    *
+    * @note Elementary will as well use this path to determine actual
+    * names of binaries' directory paths, maybe changing it to be @c
+    * something/local/bin instead of @c something/bin, only, for
+    * example.
+    *
+    * @warning You should call this function @b before
+    * elm_app_info_set().
+    */
+   EAPI void         elm_app_compile_bin_dir_set(const char *dir);
+
+   /**
+    * Provide information on the @b fallback application's libraries
+    * directory, on scenarios where they get overriden by
+    * elm_app_info_set().
+    *
+    * @param dir The path to the default libraries directory (compile
+    * time one)
+    *
+    * @note Elementary will as well use this path to determine actual
+    * names of libraries' directory paths, maybe changing it to be @c
+    * something/lib32 or @c something/lib64 instead of @c something/lib,
+    * only, for example.
+    *
+    * @warning You should call this function @b before
+    * elm_app_info_set().
+    */
+   EAPI void         elm_app_compile_lib_dir_set(const char *dir);
+
+   /**
+    * Provide information on the @b fallback application's data
+    * directory, on scenarios where they get overriden by
+    * elm_app_info_set().
+    *
+    * @param dir The path to the default data directory (compile time
+    * one)
+    *
+    * @note Elementary will as well use this path to determine actual
+    * names of data directory paths, maybe changing it to be @c
+    * something/local/share instead of @c something/share, only, for
+    * example.
+    *
+    * @warning You should call this function @b before
+    * elm_app_info_set().
+    */
+   EAPI void         elm_app_compile_data_dir_set(const char *dir);
+
+   /**
+    * Provide information on the @b fallback application's locale
+    * directory, on scenarios where they get overriden by
+    * elm_app_info_set().
+    *
+    * @param dir The path to the default locale directory (compile time
+    * one)
+    *
+    * @warning You should call this function @b before
+    * elm_app_info_set().
+    */
+   EAPI void         elm_app_compile_locale_set(const char *dir);
+
+   /**
+    * Retrieve the application's run time prefix directory, as set by
+    * elm_app_info_set() and the way (environment) the application was
+    * run from.
+    *
+    * @return The directory prefix the application is actually using
+    */
+   EAPI const char  *elm_app_prefix_dir_get(void);
+
+   /**
+    * Retrieve the application's run time binaries prefix directory, as
+    * set by elm_app_info_set() and the way (environment) the application
+    * was run from.
+    *
+    * @return The binaries directory prefix the application is actually
+    * using
+    */
+   EAPI const char  *elm_app_bin_dir_get(void);
+
+   /**
+    * Retrieve the application's run time libraries prefix directory, as
+    * set by elm_app_info_set() and the way (environment) the application
+    * was run from.
+    *
+    * @return The libraries directory prefix the application is actually
+    * using
+    */
+   EAPI const char  *elm_app_lib_dir_get(void);
+
+   /**
+    * Retrieve the application's run time data prefix directory, as
+    * set by elm_app_info_set() and the way (environment) the application
+    * was run from.
+    *
+    * @return The data directory prefix the application is actually
+    * using
+    */
+   EAPI const char  *elm_app_data_dir_get(void);
+
+   /**
+    * Retrieve the application's run time locale prefix directory, as
+    * set by elm_app_info_set() and the way (environment) the application
+    * was run from.
+    *
+    * @return The locale directory prefix the application is actually
+    * using
+    */
+   EAPI const char  *elm_app_locale_dir_get(void);
+
    EAPI void         elm_quicklaunch_mode_set(Eina_Bool ql_on);
    EAPI Eina_Bool    elm_quicklaunch_mode_get(void);
    EAPI int          elm_quicklaunch_init(int argc, char **argv);
@@ -248,9 +651,230 @@ extern "C" {
    EAPI Eina_Bool    elm_need_e_dbus(void);
    EAPI Eina_Bool    elm_need_ethumb(void);
 
+   /**
+    * Set a new policy's value (for a given policy group/identifier).
+    *
+    * @param policy policy identifier, as in @ref Elm_Policy.
+    * @param value policy value, which depends on the identifier
+    *
+    * @return @c EINA_TRUE on success or @c EINA_FALSE, on error.
+    *
+    * Elementary policies define applications' behavior,
+    * somehow. These behaviors are divided in policy groups (see
+    * #Elm_Policy enumeration). This call will emit the Ecore event
+    * #ELM_EVENT_POLICY_CHANGED, which can be hooked at with
+    * handlers. An #Elm_Event_Policy_Changed struct will be passed,
+    * then.
+    *
+    * @note Currently, we have only one policy identifier/group
+    * (#ELM_POLICY_QUIT), which has two possible values.
+    *
+    * @ingroup General
+    */
    EAPI Eina_Bool    elm_policy_set(unsigned int policy, int value);
+
+   /**
+    * Gets the policy value set for given policy identifier.
+    *
+    * @param policy policy identifier, as in #Elm_Policy.
+    * @return The currently set policy value, for that
+    * identifier. Will be @c 0 if @p policy passed is invalid.
+    *
+    * @ingroup General
+    */
    EAPI int          elm_policy_get(unsigned int policy);
 
+   /**
+    * Set a label of an object
+    *
+    * @param obj The Elementary object
+    * @param part The text part name to set (NULL for the default label)
+    * @param label The new text of the label
+    *
+    * @note Elementary objects may have many labels (e.g. Action Slider)
+    *
+    * @ingroup General
+    */
+   EAPI void         elm_object_text_part_set(Evas_Object *obj, const char *part, const char *label);
+
+#define elm_object_text_set(obj, label) elm_object_text_part_set((obj), NULL, (label))
+
+   /**
+    * Get a label of an object
+    *
+    * @param obj The Elementary object
+    * @param part The text part name to get (NULL for the default label)
+    * @return text of the label or NULL for any error
+    *
+    * @note Elementary objects may have many labels (e.g. Action Slider)
+    *
+    * @ingroup General
+    */
+   EAPI const char  *elm_object_text_part_get(const Evas_Object *obj, const char *part);
+
+#define elm_object_text_get(obj) elm_object_text_part_get((obj), NULL)
+
+   /**
+    * Set a content of an object
+    *
+    * @param obj The Elementary object
+    * @param part The content part name to set (NULL for the default content)
+    * @param content The new content of the object
+    *
+    * @note Elementary objects may have many contents
+    *
+    * @ingroup General
+    */
+   EAPI void elm_object_content_part_set(Evas_Object *obj, const char *part, Evas_Object *content);
+
+#define elm_object_content_set(obj, content) elm_object_content_part_set((obj), NULL, (content))
+
+   /**
+    * Get a content of an object
+    *
+    * @param obj The Elementary object
+    * @param item The content part name to get (NULL for the default content)
+    * @return content of the object or NULL for any error
+    *
+    * @note Elementary objects may have many contents
+    *
+    * @ingroup General
+    */
+   EAPI Evas_Object *elm_object_content_part_get(const Evas_Object *obj, const char *part);
+
+#define elm_object_content_get(obj) elm_object_content_part_get((obj), NULL)
+
+   /**
+    * Unset a content of an object
+    *
+    * @param obj The Elementary object
+    * @param item The content part name to unset (NULL for the default content)
+    *
+    * @note Elementary objects may have many contents
+    *
+    * @ingroup General
+    */
+   EAPI Evas_Object *elm_object_content_part_unset(Evas_Object *obj, const char *part);
+
+#define elm_object_content_unset(obj) elm_object_content_part_unset((obj), NULL)
+
+   /**
+    * Set a content of an object item
+    *
+    * @param it The Elementary object item
+    * @param part The content part name to set (NULL for the default content)
+    * @param content The new content of the object item
+    *
+    * @note Elementary object items may have many contents
+    *
+    * @ingroup General
+    */
+   EAPI void elm_object_item_content_part_set(Elm_Object_Item *it, const char *part, Evas_Object *content);
+
+#define elm_object_item_content_set(it, content) elm_object_item_content_part_set((it), NULL, (content))
+
+   /**
+    * Get a content of an object item
+    *
+    * @param it The Elementary object item
+    * @param part The content part name to unset (NULL for the default content)
+    * @return content of the object item or NULL for any error
+    *
+    * @note Elementary object items may have many contents
+    *
+    * @ingroup General
+    */
+   EAPI Evas_Object *elm_object_item_content_part_get(const Elm_Object_Item *it, const char *item);
+
+#define elm_object_item_content_get(it) elm_object_item_content_part_get((it), NULL)
+
+   /**
+    * Unset a content of an object item
+    *
+    * @param it The Elementary object item
+    * @param part The content part name to unset (NULL for the default content)
+    *
+    * @note Elementary object items may have many contents
+    *
+    * @ingroup General
+    */
+   EAPI Evas_Object *elm_object_item_content_part_unset(Elm_Object_Item *it, const char *part);
+
+#define elm_object_item_content_unset(it, content) elm_object_item_content_part_unset((it), (content))
+
+   /**
+    * Set a label of an objec itemt
+    *
+    * @param it The Elementary object item
+    * @param part The text part name to set (NULL for the default label)
+    * @param label The new text of the label
+    *
+    * @note Elementary object items may have many labels
+    *
+    * @ingroup General
+    */
+   EAPI void elm_object_item_text_part_set(Elm_Object_Item *it, const char *part, const char *label);
+
+#define elm_object_item_text_set(it, label) elm_object_item_text_part_set((it), NULL, (label))
+
+   /**
+    * Get a label of an object
+    *
+    * @param it The Elementary object item
+    * @param part The text part name to get (NULL for the default label)
+    * @return text of the label or NULL for any error
+    *
+    * @note Elementary object items may have many labels
+    *
+    * @ingroup General
+    */
+   EAPI const char *elm_object_item_text_part_get(const Elm_Object_Item *it, const char *part);
+
+   /**
+    * Set the text to read out when in accessibility mode
+    *
+    * @param obj The object which is to be described
+    * @param txt The text that describes the widget to people with poor or no vision
+    *
+    * @ingroup General
+    */
+   EAPI void elm_object_access_info_set(Evas_Object *obj, const char *txt);
+
+   /**
+    * Set the text to read out when in accessibility mode
+    *
+    * @param it The object item which is to be described
+    * @param txt The text that describes the widget to people with poor or no vision
+    *
+    * @ingroup General
+    */
+   EAPI void elm_object_item_access_info_set(Elm_Object_Item *it, const char *txt);
+
+
+#define elm_object_item_text_get(it) elm_object_item_text_part_get((it), NULL)
+
+   /**
+    * Get the data associated with an object item
+    * @param it The object item
+    * @return The data associated with @p it
+    *
+    * @ingroup General
+    */
+   EAPI void *elm_object_item_data_get(const Elm_Object_Item *it);
+
+   /**
+    * Set the data associated with an object item
+    * @param it The object item
+    * @param data The data to be associated with @p it
+    *
+    * @ingroup General
+    */
+   EAPI void elm_object_item_data_set(Elm_Object_Item *it, void *data);
+
+   /**
+    * @}
+    */
+
    EAPI void         elm_all_flush(void);
    EAPI int          elm_cache_flush_interval_get(void);
    EAPI void         elm_cache_flush_interval_set(int size);
@@ -271,23 +895,220 @@ extern "C" {
    EAPI void         elm_edje_collection_cache_set(int size);
    EAPI void         elm_edje_collection_cache_all_set(int size);
 
+   /**
+    * @defgroup Scaling Selective Widget Scaling
+    *
+    * Different widgets can be scaled independently. These functions
+    * allow you to manipulate this scaling on a per-widget basis. The
+    * object and all its children get their scaling factors multiplied
+    * by the scale factor set. This is multiplicative, in that if a
+    * child also has a scale size set it is in turn multiplied by its
+    * parent's scale size. @c 1.0 means “don't scale”, @c 2.0 is
+    * double size, @c 0.5 is half, etc.
+    *
+    * @ref general_functions_example_page "This" example contemplates
+    * some of these functions.
+    */
+
+   /**
+    * Set the scaling factor for a given Elementary object
+    *
+    * @param obj The Elementary to operate on
+    * @param scale Scale factor (from @c 0.0 up, with @c 1.0 meaning
+    * no scaling)
+    *
+    * @ingroup Scaling
+    */
    EAPI void         elm_object_scale_set(Evas_Object *obj, double scale) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get the scaling factor for a given Elementary object
+    *
+    * @param obj The object
+    * @return The scaling factor set by elm_object_scale_set()
+    *
+    * @ingroup Scaling
+    */
    EAPI double       elm_object_scale_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool    elm_object_mirrored_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_object_mirrored_set(Evas_Object *obj, Eina_Bool mirrored) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool    elm_object_mirrored_automatic_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_object_mirrored_automatic_set(Evas_Object *obj, Eina_Bool automatic) EINA_ARG_NONNULL(1);
-   EAPI void         elm_object_style_set(Evas_Object *obj, const char *style) EINA_ARG_NONNULL(1);
-   EAPI const char  *elm_object_style_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_object_disabled_set(Evas_Object *obj, Eina_Bool disabled) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool    elm_object_disabled_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
 
-   EAPI Eina_Bool    elm_object_widget_check(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI Evas_Object *elm_object_parent_widget_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI Evas_Object *elm_object_top_widget_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI const char  *elm_object_widget_type_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * @defgroup Password_last_show Password last input show
+    *
+    * Last show feature of password mode enables user to view
+    * the last input entered for few seconds before masking it.
+    * These functions allow to set this feature in password mode
+    * of entry widget and also allow to manipulate the duration 
+    * for which the input has to be visible.
+    *
+    * @{
+    */
 
-   EAPI double       elm_scale_get(void);
+   /**
+    * Get show last setting of password mode.
+    *
+    * This gets the show last input setting of password mode which might be 
+    * enabled or disabled.
+    *
+    * @return @c EINA_TRUE, if the last input show setting is enabled, @c EINA_FALSE
+    *            if it's disabled.
+    * @ingroup Password_last_show
+    */
+   EAPI Eina_Bool elm_password_show_last_get(void);
+
+   /**
+    * Set show last setting in password mode.
+    *
+    * This enables or disables show last setting of password mode.
+    *
+    * @param password_show_last If EINA_TRUE enable's last input show in password mode.
+    * @see elm_password_show_last_timeout_set()
+    * @ingroup Password_last_show
+    */
+   EAPI void elm_password_show_last_set(Eina_Bool password_show_last);
+
+   /**
+    * Get's the timeout value in last show password mode.
+    *
+    * This gets the time out value for which the last input entered in password
+    * mode will be visible.
+    *
+    * @return The timeout value of last show password mode.
+    * @ingroup Password_last_show
+    */
+   EAPI double elm_password_show_last_timeout_get(void);
+
+   /**
+    * Set's the timeout value in last show password mode.
+    *
+    * This sets the time out value for which the last input entered in password
+    * mode will be visible.
+    *
+    * @param password_show_last_timeout The timeout value.
+    * @see elm_password_show_last_set()
+    * @ingroup Password_last_show
+    */
+   EAPI void elm_password_show_last_timeout_set(double password_show_last_timeout);
+
+   /**
+    * @}
+    */
+
+   EAPI Eina_Bool    elm_object_mirrored_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void         elm_object_mirrored_set(Evas_Object *obj, Eina_Bool mirrored) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool    elm_object_mirrored_automatic_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void         elm_object_mirrored_automatic_set(Evas_Object *obj, Eina_Bool automatic) EINA_ARG_NONNULL(1);
+   /**
+    * Set the style to use by a widget
+    *
+    * Sets the style name that will define the appearance of a widget. Styles
+    * vary from widget to widget and may also be defined by other themes
+    * by means of extensions and overlays.
+    *
+    * @param obj The Elementary widget to style
+    * @param style The style name to use
+    *
+    * @see elm_theme_extension_add()
+    * @see elm_theme_overlay_add()
+    *
+    * @ingroup Theme
+    */
+   EAPI void         elm_object_style_set(Evas_Object *obj, const char *style) EINA_ARG_NONNULL(1);
+   /**
+    * Get the style used by the widget
+    *
+    * This gets the style being used for that widget. Note that the string
+    * pointer is only valid as longas the object is valid and the style doesn't
+    * change.
+    *
+    * @param obj The Elementary widget to query for its style
+    * @return The style name used
+    *
+    * @see elm_object_style_set()
+    *
+    * @ingroup Theme
+    */
+   EAPI const char  *elm_object_style_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * @defgroup Styles Styles
+    *
+    * Widgets can have different styles of look. These generic API's
+    * set styles of widgets, if they support them (and if the theme(s)
+    * do).
+    *
+    * @ref general_functions_example_page "This" example contemplates
+    * some of these functions.
+    */
+
+   /**
+    * Set the disabled state of an Elementary object.
+    *
+    * @param obj The Elementary object to operate on
+    * @param disabled The state to put in in: @c EINA_TRUE for
+    *        disabled, @c EINA_FALSE for enabled
+    *
+    * Elementary objects can be @b disabled, in which state they won't
+    * receive input and, in general, will be themed differently from
+    * their normal state, usually greyed out. Useful for contexts
+    * where you don't want your users to interact with some of the
+    * parts of you interface.
+    *
+    * This sets the state for the widget, either disabling it or
+    * enabling it back.
+    *
+    * @ingroup Styles
+    */
+   EAPI void         elm_object_disabled_set(Evas_Object *obj, Eina_Bool disabled) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get the disabled state of an Elementary object.
+    *
+    * @param obj The Elementary object to operate on
+    * @return @c EINA_TRUE, if the widget is disabled, @c EINA_FALSE
+    *            if it's enabled (or on errors)
+    *
+    * This gets the state of the widget, which might be enabled or disabled.
+    *
+    * @ingroup Styles
+    */
+   EAPI Eina_Bool    elm_object_disabled_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * @defgroup WidgetNavigation Widget Tree Navigation.
+    *
+    * How to check if an Evas Object is an Elementary widget? How to
+    * get the first elementary widget that is parent of the given
+    * object?  These are all covered in widget tree navigation.
+    *
+    * @ref general_functions_example_page "This" example contemplates
+    * some of these functions.
+    */
+
+   EAPI Eina_Bool    elm_object_widget_check(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get the first parent of the given object that is an Elementary
+    * widget.
+    *
+    * @param obj the Elementary object to query parent from.
+    * @return the parent object that is an Elementary widget, or @c
+    *         NULL, if it was not found.
+    *
+    * Use this to query for an object's parent widget.
+    *
+    * @note Most of Elementary users wouldn't be mixing non-Elementary
+    * smart objects in the objects tree of an application, as this is
+    * an advanced usage of Elementary with Evas. So, except for the
+    * application's window, which is the root of that tree, all other
+    * objects would have valid Elementary widget parents.
+    *
+    * @ingroup WidgetNavigation
+    */
+   EAPI Evas_Object *elm_object_parent_widget_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI Evas_Object *elm_object_top_widget_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI const char  *elm_object_widget_type_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   EAPI double       elm_scale_get(void);
    EAPI void         elm_scale_set(double scale);
    EAPI void         elm_scale_all_set(double scale);
 
@@ -343,19 +1164,146 @@ extern "C" {
    EAPI Eina_Hash           *elm_font_available_hash_add(Eina_List *list);
    EAPI void                 elm_font_available_hash_del(Eina_Hash *hash);
 
+   /**
+    * @defgroup Fingers Fingers
+    *
+    * Elementary is designed to be finger-friendly for touchscreens,
+    * and so in addition to scaling for display resolution, it can
+    * also scale based on finger "resolution" (or size). You can then
+    * customize the granularity of the areas meant to receive clicks
+    * on touchscreens.
+    *
+    * Different profiles may have pre-set values for finger sizes.
+    *
+    * @ref general_functions_example_page "This" example contemplates
+    * some of these functions.
+    */
+
+   /**
+    * Get the configured "finger size"
+    *
+    * @return The finger size
+    *
+    * This gets the globally configured finger size, <b>in pixels</b>
+    *
+    * @ingroup Fingers
+    */
    EAPI Evas_Coord       elm_finger_size_get(void);
    EAPI void             elm_finger_size_set(Evas_Coord size);
    EAPI void             elm_finger_size_all_set(Evas_Coord size);
 
+   /**
+    * @defgroup Focus Focus
+    *
+    * An Elementary application has, at all times, one (and only one)
+    * @b focused object. This is what determines where the input
+    * events go to within the application's window. Also, focused
+    * objects can be decorated differently, in order to signal to the
+    * user where the input is, at a given moment.
+    *
+    * Elementary applications also have the concept of <b>focus
+    * chain</b>: one can cycle through all the windows' focusable
+    * objects by input (tab key) or programmatically. The default
+    * focus chain for an application is the one define by the order in
+    * which the widgets where added in code. One will cycle through
+    * top level widgets, and, for each one containg sub-objects, cycle
+    * through them all, before returning to the level
+    * above. Elementary also allows one to set @b custom focus chains
+    * for their applications.
+    *
+    * Besides the focused decoration a widget may exhibit, when it
+    * gets focus, Elementary has a @b global focus highlight object
+    * that can be enabled for a window. If one chooses to do so, this
+    * extra highlight effect will surround the current focused object,
+    * too.
+    *
+    * @note Some Elementary widgets are @b unfocusable, after
+    * creation, by their very nature: they are not meant to be
+    * interacted with input events, but are there just for visual
+    * purposes.
+    *
+    * @ref general_functions_example_page "This" example contemplates
+    * some of these functions.
+    */
+
    EAPI Eina_Bool        elm_focus_highlight_enabled_get(void);
    EAPI void             elm_focus_highlight_enabled_set(Eina_Bool enable);
    EAPI Eina_Bool        elm_focus_highlight_animate_get(void);
    EAPI void             elm_focus_highlight_animate_set(Eina_Bool animate);
 
+   /**
+    * Get the whether an Elementary object has the focus or not.
+    *
+    * @param obj The Elementary object to get the information from
+    * @return @c EINA_TRUE, if the object is focused, @c EINA_FALSE if
+    *            not (and on errors).
+    *
+    * @see elm_object_focus()
+    *
+    * @ingroup Focus
+    */
    EAPI Eina_Bool        elm_object_focus_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Make a given Elementary object the focused one.
+    *
+    * @param obj The Elementary object to make focused.
+    *
+    * @note This object, if it can handle focus, will take the focus
+    * away from the one who had it previously and will, for now on, be
+    * the one receiving input events.
+    *
+    * @see elm_object_focus_get()
+    *
+    * @ingroup Focus
+    */
    EAPI void             elm_object_focus(Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Remove the focus from an Elementary object
+    *
+    * @param obj The Elementary to take focus from
+    *
+    * This removes the focus from @p obj, passing it back to the
+    * previous element in the focus chain list.
+    *
+    * @see elm_object_focus() and elm_object_focus_custom_chain_get()
+    *
+    * @ingroup Focus
+    */
    EAPI void             elm_object_unfocus(Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set the ability for an Element object to be focused
+    *
+    * @param obj The Elementary object to operate on
+    * @param enable @c EINA_TRUE if the object can be focused, @c
+    *        EINA_FALSE if not (and on errors)
+    *
+    * This sets whether the object @p obj is able to take focus or
+    * not. Unfocusable objects do nothing when programmatically
+    * focused, being the nearest focusable parent object the one
+    * really getting focus. Also, when they receive mouse input, they
+    * will get the event, but not take away the focus from where it
+    * was previously.
+    *
+    * @ingroup Focus
+    */
    EAPI void             elm_object_focus_allow_set(Evas_Object *obj, Eina_Bool enable) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get whether an Elementary object is focusable or not
+    *
+    * @param obj The Elementary object to operate on
+    * @return @c EINA_TRUE if the object is allowed to be focused, @c
+    *             EINA_FALSE if not (and on errors)
+    *
+    * @note Objects which are meant to be interacted with by input
+    * events are created able to be focused, by default. All the
+    * others are not.
+    *
+    * @ingroup Focus
+    */
    EAPI Eina_Bool        elm_object_focus_allow_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
 
    EAPI void             elm_object_focus_custom_chain_set(Evas_Object *obj, Eina_List *objs) EINA_ARG_NONNULL(1);
@@ -366,6 +1314,40 @@ extern "C" {
    EAPI void             elm_object_focus_cycle(Evas_Object *obj, Elm_Focus_Direction dir) EINA_ARG_NONNULL(1);
    EAPI void             elm_object_focus_direction_go(Evas_Object *obj, int x, int y) EINA_ARG_NONNULL(1);
 
+   /**
+    * Make the elementary object and its children to be unfocusable (or focusable).
+    *
+    * @param obj The Elementary object to operate on
+    * @param tree_unfocusable @c EINA_TRUE for unfocusable,
+    *        @c EINA_FALSE for focusable.
+    *
+    * This sets whether the object @p obj and its children objects
+    * able to take focus or not. If the tree is unfocusable,
+    * newest focused object which is not in this tree will get focus.
+    * This API can be helpful for an object to be deleted.
+    * When an object will be deleted soon, it and its children may not
+    * want to get focus (by focus reverting or by other focus controls).
+    * Then, just use this API before deleting.
+    *
+    * @see elm_object_tree_unfocusable_get()
+    *
+    * @ingroup Focus
+    */
+   EAPI void             elm_object_tree_unfocusable_set(Evas_Object *obj, Eina_Bool tree_unfocusable); EINA_ARG_NONNULL(1);
+
+   /**
+    * Get whether an Elementary object and its children are unfocusable or not.
+    *
+    * @param obj The Elementary object to get the information from
+    * @return @c EINA_TRUE, if the tree is unfocussable,
+    *         @c EINA_FALSE if not (and on errors).
+    *
+    * @see elm_object_tree_unfocusable_set()
+    *
+    * @ingroup Focus
+    */
+   EAPI Eina_Bool        elm_object_tree_unfocusable_get(const Evas_Object *obj); EINA_ARG_NONNULL(1);
+
    EAPI Eina_Bool        elm_scroll_bounce_enabled_get(void);
    EAPI void             elm_scroll_bounce_enabled_set(Eina_Bool enabled);
    EAPI void             elm_scroll_bounce_enabled_all_set(Eina_Bool enabled);
@@ -413,6 +1395,28 @@ extern "C" {
    EAPI void             elm_object_event_callback_add(Evas_Object *obj, Elm_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
    EAPI void            *elm_object_event_callback_del(Evas_Object *obj, Elm_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
 
+   /**
+    * Adjust size of an element for finger usage.
+    *
+    * @param times_w How many fingers should fit horizontally
+    * @param w Pointer to the width size to adjust
+    * @param times_h How many fingers should fit vertically
+    * @param h Pointer to the height size to adjust
+    *
+    * This takes width and height sizes (in pixels) as input and a
+    * size multiple (which is how many fingers you want to place
+    * within the area, being "finger" the size set by
+    * elm_finger_size_set()), and adjusts the size to be large enough
+    * to accommodate the resulting size -- if it doesn't already
+    * accommodate it. On return the @p w and @p h sizes pointed to by
+    * these parameters will be modified, on those conditions.
+    *
+    * @note This is kind of a low level Elementary call, most useful
+    * on size evaluation times for widgets. An external user wouldn't
+    * be calling, most of the time.
+    *
+    * @ingroup Fingers
+    */
    EAPI void             elm_coords_finger_size_adjust(int times_w, Evas_Coord *w, int times_h, Evas_Coord *h);
 
    EAPI double           elm_longpress_timeout_get(void);
@@ -427,34 +1431,353 @@ extern "C" {
    EAPI void             elm_autocapitalization_allow_all_set(Eina_Bool autocap);
    EAPI void             elm_autoperiod_allow_all_set(Eina_Bool autoperiod);
 
+
    /* theme */
+   /**
+    * @defgroup Theme Theme
+    *
+    * Elementary uses Edje to theme its widgets, naturally. But for the most
+    * part this is hidden behind a simpler interface that lets the user set
+    * extensions and choose the style of widgets in a much easier way.
+    *
+    * Instead of thinking in terms of paths to Edje files and their groups
+    * each time you want to change the appearance of a widget, Elementary
+    * works so you can add any theme file with extensions or replace the
+    * main theme at one point in the application, and then just set the style
+    * of widgets with elm_object_style_set() and related functions. Elementary
+    * will then look in its list of themes for a matching group and apply it,
+    * and when the theme changes midway through the application, all widgets
+    * will be updated accordingly.
+    *
+    * There are three concepts you need to know to understand how Elementary
+    * theming works: default theme, extensions and overlays.
+    *
+    * Default theme, obviously enough, is the one that provides the default
+    * look of all widgets. End users can change the theme used by Elementary
+    * by setting the @c ELM_THEME environment variable before running an
+    * application, or globally for all programs using the @c elementary_config
+    * utility. Applications can change the default theme using elm_theme_set(),
+    * but this can go against the user wishes, so it's not an adviced practice.
+    *
+    * Ideally, applications should find everything they need in the already
+    * provided theme, but there may be occasions when that's not enough and
+    * custom styles are required to correctly express the idea. For this
+    * cases, Elementary has extensions.
+    *
+    * Extensions allow the application developer to write styles of its own
+    * to apply to some widgets. This requires knowledge of how each widget
+    * is themed, as extensions will always replace the entire group used by
+    * the widget, so important signals and parts need to be there for the
+    * object to behave properly (see documentation of Edje for details).
+    * Once the theme for the extension is done, the application needs to add
+    * it to the list of themes Elementary will look into, using
+    * elm_theme_extension_add(), and set the style of the desired widgets as
+    * he would normally with elm_object_style_set().
+    *
+    * Overlays, on the other hand, can replace the look of all widgets by
+    * overriding the default style. Like extensions, it's up to the application
+    * developer to write the theme for the widgets it wants, the difference
+    * being that when looking for the theme, Elementary will check first the
+    * list of overlays, then the set theme and lastly the list of extensions,
+    * so with overlays it's possible to replace the default view and every
+    * widget will be affected. This is very much alike to setting the whole
+    * theme for the application and will probably clash with the end user
+    * options, not to mention the risk of ending up with not matching styles
+    * across the program. Unless there's a very special reason to use them,
+    * overlays should be avoided for the resons exposed before.
+    *
+    * All these theme lists are handled by ::Elm_Theme instances. Elementary
+    * keeps one default internally and every function that receives one of
+    * these can be called with NULL to refer to this default (except for
+    * elm_theme_free()). It's possible to create a new instance of a
+    * ::Elm_Theme to set other theme for a specific widget (and all of its
+    * children), but this is as discouraged, if not even more so, than using
+    * overlays. Don't use this unless you really know what you are doing.
+    *
+    * But to be less negative about things, you can look at the following
+    * examples:
+    * @li @ref theme_example_01 "Using extensions"
+    * @li @ref theme_example_02 "Using overlays"
+    *
+    * @{
+    */
+   /**
+    * @typedef Elm_Theme
+    *
+    * Opaque handler for the list of themes Elementary looks for when
+    * rendering widgets.
+    *
+    * Stay out of this unless you really know what you are doing. For most
+    * cases, sticking to the default is all a developer needs.
+    */
    typedef struct _Elm_Theme Elm_Theme;
 
+   /**
+    * Create a new specific theme
+    *
+    * This creates an empty specific theme that only uses the default theme. A
+    * specific theme has its own private set of extensions and overlays too
+    * (which are empty by default). Specific themes do not fall back to themes
+    * of parent objects. They are not intended for this use. Use styles, overlays
+    * and extensions when needed, but avoid specific themes unless there is no
+    * other way (example: you want to have a preview of a new theme you are
+    * selecting in a "theme selector" window. The preview is inside a scroller
+    * and should display what the theme you selected will look like, but not
+    * actually apply it yet. The child of the scroller will have a specific
+    * theme set to show this preview before the user decides to apply it to all
+    * applications).
+    */
    EAPI Elm_Theme       *elm_theme_new(void);
+   /**
+    * Free a specific theme
+    *
+    * @param th The theme to free
+    *
+    * This frees a theme created with elm_theme_new().
+    */
    EAPI void             elm_theme_free(Elm_Theme *th);
+   /**
+    * Copy the theme fom the source to the destination theme
+    *
+    * @param th The source theme to copy from
+    * @param thdst The destination theme to copy data to
+    *
+    * This makes a one-time static copy of all the theme config, extensions
+    * and overlays from @p th to @p thdst. If @p th references a theme, then
+    * @p thdst is also set to reference it, with all the theme settings,
+    * overlays and extensions that @p th had.
+    */
    EAPI void             elm_theme_copy(Elm_Theme *th, Elm_Theme *thdst);
+   /**
+    * Tell the source theme to reference the ref theme
+    *
+    * @param th The theme that will do the referencing
+    * @param thref The theme that is the reference source
+    *
+    * This clears @p th to be empty and then sets it to refer to @p thref
+    * so @p th acts as an override to @p thref, but where its overrides
+    * don't apply, it will fall through to @pthref for configuration.
+    */
    EAPI void             elm_theme_ref_set(Elm_Theme *th, Elm_Theme *thref);
+   /**
+    * Return the theme referred to
+    *
+    * @param th The theme to get the reference from
+    * @return The referenced theme handle
+    *
+    * This gets the theme set as the reference theme by elm_theme_ref_set().
+    * If no theme is set as a reference, NULL is returned.
+    */
    EAPI Elm_Theme       *elm_theme_ref_get(Elm_Theme *th);
+   /**
+    * Return the default theme
+    *
+    * @return The default theme handle
+    *
+    * This returns the internal default theme setup handle that all widgets
+    * use implicitly unless a specific theme is set. This is also often use
+    * as a shorthand of NULL.
+    */
    EAPI Elm_Theme       *elm_theme_default_get(void);
+   /**
+    * Prepends a theme overlay to the list of overlays
+    *
+    * @param th The theme to add to, or if NULL, the default theme
+    * @param item The Edje file path to be used
+    *
+    * Use this if your application needs to provide some custom overlay theme
+    * (An Edje file that replaces some default styles of widgets) where adding
+    * new styles, or changing system theme configuration is not possible. Do
+    * NOT use this instead of a proper system theme configuration. Use proper
+    * configuration files, profiles, environment variables etc. to set a theme
+    * so that the theme can be altered by simple confiugration by a user. Using
+    * this call to achieve that effect is abusing the API and will create lots
+    * of trouble.
+    *
+    * @see elm_theme_extension_add()
+    */
    EAPI void             elm_theme_overlay_add(Elm_Theme *th, const char *item);
+   /**
+    * Delete a theme overlay from the list of overlays
+    *
+    * @param th The theme to delete from, or if NULL, the default theme
+    * @param item The name of the theme overlay
+    *
+    * @see elm_theme_overlay_add()
+    */
    EAPI void             elm_theme_overlay_del(Elm_Theme *th, const char *item);
+   /**
+    * Appends a theme extension to the list of extensions.
+    *
+    * @param th The theme to add to, or if NULL, the default theme
+    * @param item The Edje file path to be used
+    *
+    * This is intended when an application needs more styles of widgets or new
+    * widget themes that the default does not provide (or may not provide). The
+    * application has "extended" usage by coming up with new custom style names
+    * for widgets for specific uses, but as these are not "standard", they are
+    * not guaranteed to be provided by a default theme. This means the
+    * application is required to provide these extra elements itself in specific
+    * Edje files. This call adds one of those Edje files to the theme search
+    * path to be search after the default theme. The use of this call is
+    * encouraged when default styles do not meet the needs of the application.
+    * Use this call instead of elm_theme_overlay_add() for almost all cases.
+    *
+    * @see elm_object_style_set()
+    */
    EAPI void             elm_theme_extension_add(Elm_Theme *th, const char *item);
+   /**
+    * Deletes a theme extension from the list of extensions.
+    *
+    * @param th The theme to delete from, or if NULL, the default theme
+    * @param item The name of the theme extension
+    *
+    * @see elm_theme_extension_add()
+    */
    EAPI void             elm_theme_extension_del(Elm_Theme *th, const char *item);
+   /**
+    * Set the theme search order for the given theme
+    *
+    * @param th The theme to set the search order, or if NULL, the default theme
+    * @param theme Theme search string
+    *
+    * This sets the search string for the theme in path-notation from first
+    * theme to search, to last, delimited by the : character. Example:
+    *
+    * "shiny:/path/to/file.edj:default"
+    *
+    * See the ELM_THEME environment variable for more information.
+    *
+    * @see elm_theme_get()
+    * @see elm_theme_list_get()
+    */
    EAPI void             elm_theme_set(Elm_Theme *th, const char *theme);
+   /**
+    * Return the theme search order
+    *
+    * @param th The theme to get the search order, or if NULL, the default theme
+    * @return The internal search order path
+    *
+    * This function returns a colon separated string of theme elements as
+    * returned by elm_theme_list_get().
+    *
+    * @see elm_theme_set()
+    * @see elm_theme_list_get()
+    */
    EAPI const char      *elm_theme_get(Elm_Theme *th);
+   /**
+    * Return a list of theme elements to be used in a theme.
+    *
+    * @param th Theme to get the list of theme elements from.
+    * @return The internal list of theme elements
+    *
+    * This returns the internal list of theme elements (will only be valid as
+    * long as the theme is not modified by elm_theme_set() or theme is not
+    * freed by elm_theme_free(). This is a list of strings which must not be
+    * altered as they are also internal. If @p th is NULL, then the default
+    * theme element list is returned.
+    *
+    * A theme element can consist of a full or relative path to a .edj file,
+    * or a name, without extension, for a theme to be searched in the known
+    * theme paths for Elemementary.
+    *
+    * @see elm_theme_set()
+    * @see elm_theme_get()
+    */
    EAPI const Eina_List *elm_theme_list_get(const Elm_Theme *th);
+   /**
+    * Return the full patrh for a theme element
+    *
+    * @param f The theme element name
+    * @param in_search_path Pointer to a boolean to indicate if item is in the search path or not
+    * @return The full path to the file found.
+    *
+    * This returns a string you should free with free() on success, NULL on
+    * failure. This will search for the given theme element, and if it is a
+    * full or relative path element or a simple searchable name. The returned
+    * path is the full path to the file, if searched, and the file exists, or it
+    * is simply the full path given in the element or a resolved path if
+    * relative to home. The @p in_search_path boolean pointed to is set to
+    * EINA_TRUE if the file was a searchable file andis in the search path,
+    * and EINA_FALSE otherwise.
+    */
    EAPI char            *elm_theme_list_item_path_get(const char *f, Eina_Bool *in_search_path);
+   /**
+    * Flush the current theme.
+    *
+    * @param th Theme to flush
+    *
+    * This flushes caches that let elementary know where to find theme elements
+    * in the given theme. If @p th is NULL, then the default theme is flushed.
+    * Call this function if source theme data has changed in such a way as to
+    * make any caches Elementary kept invalid.
+    */
    EAPI void             elm_theme_flush(Elm_Theme *th);
+   /**
+    * This flushes all themes (default and specific ones).
+    *
+    * This will flush all themes in the current application context, by calling
+    * elm_theme_flush() on each of them.
+    */
    EAPI void             elm_theme_full_flush(void);
-
+   /**
+    * Set the theme for all elementary using applications on the current display
+    *
+    * @param theme The name of the theme to use. Format same as the ELM_THEME
+    * environment variable.
+    */
    EAPI void             elm_theme_all_set(const char *theme);
-
+   /**
+    * Return a list of theme elements in the theme search path
+    *
+    * @return A list of strings that are the theme element names.
+    *
+    * This lists all available theme files in the standard Elementary search path
+    * for theme elements, and returns them in alphabetical order as theme
+    * element names in a list of strings. Free this with
+    * elm_theme_name_available_list_free() when you are done with the list.
+    */
    EAPI Eina_List       *elm_theme_name_available_list_new(void);
+   /**
+    * Free the list returned by elm_theme_name_available_list_new()
+    *
+    * This frees the list of themes returned by
+    * elm_theme_name_available_list_new(). Once freed the list should no longer
+    * be used. a new list mys be created.
+    */
    EAPI void             elm_theme_name_available_list_free(Eina_List *list);
-
+   /**
+    * Set a specific theme to be used for this object and its children
+    *
+    * @param obj The object to set the theme on
+    * @param th The theme to set
+    *
+    * This sets a specific theme that will be used for the given object and any
+    * child objects it has. If @p th is NULL then the theme to be used is
+    * cleared and the object will inherit its theme from its parent (which
+    * ultimately will use the default theme if no specific themes are set).
+    *
+    * Use special themes with great care as this will annoy users and make
+    * configuration difficult. Avoid any custom themes at all if it can be
+    * helped.
+    */
    EAPI void             elm_object_theme_set(Evas_Object *obj, Elm_Theme *th) EINA_ARG_NONNULL(1);
-   EAPI Elm_Theme       *elm_object_theme_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-
+   /**
+    * Get the specific theme to be used
+    *
+    * @param obj The object to get the specific theme from
+    * @return The specifc theme set.
+    *
+    * This will return a specific theme set, or NULL if no specific theme is
+    * set on that object. It will not return inherited themes from parents, only
+    * the specific theme set for that specific object. See elm_object_theme_set()
+    * for more information.
+    */
+   EAPI Elm_Theme       *elm_object_theme_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * @}
+    */
+
    /* win */
    typedef enum _Elm_Win_Type
      {
@@ -471,7 +1794,8 @@ extern "C" {
         ELM_WIN_TOOLTIP,
         ELM_WIN_NOTIFICATION,
         ELM_WIN_COMBO,
-        ELM_WIN_DND
+        ELM_WIN_DND,
+        ELM_WIN_INLINED_IMAGE,
      } Elm_Win_Type;
 
    typedef enum _Elm_Win_Keyboard_Mode
@@ -545,8 +1869,9 @@ extern "C" {
    EAPI int          elm_win_quickpanel_priority_minor_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void         elm_win_quickpanel_zone_set(Evas_Object *obj, int zone) EINA_ARG_NONNULL(1);
    EAPI int          elm_win_quickpanel_zone_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_win_prop_focus_skip_set(Evas_Object *obj, Eina_Bool skip); EINA_ARG_NONNULL(1);
-   EAPI void         elm_win_illume_command_send(Evas_Object *obj, Elm_Illume_Command command, void *params); EINA_ARG_NONNULL(1);
+   EAPI void         elm_win_prop_focus_skip_set(Evas_Object *obj, Eina_Bool skip) EINA_ARG_NONNULL(1);
+   EAPI void         elm_win_illume_command_send(Evas_Object *obj, Elm_Illume_Command command, void *params) EINA_ARG_NONNULL(1);
+   EAPI Evas_Object *elm_win_inlined_image_object_get(Evas_Object *obj);
    EAPI void         elm_win_focus_highlight_enabled_set(Evas_Object *obj, Eina_Bool enabled) EINA_ARG_NONNULL(1);
    EAPI Eina_Bool    elm_win_focus_highlight_enabled_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void         elm_win_focus_highlight_style_set(Evas_Object *obj, const char *style) EINA_ARG_NONNULL(1);
@@ -592,6 +1917,23 @@ extern "C" {
     * "moved" - window that holds the canvas was moved
     */
 
+   /**
+    * @defgroup Bg Bg
+    *
+    * @brief Background object, used for setting a solid color, image or Edje
+    * group as background to a window or any container object.
+    *
+    * The bg object is used for setting a solid background to a window or
+    * packing into any container object. It works just like an image, but has
+    * some properties useful to a background, like setting it to tiled,
+    * centered, scaled or stretched.
+    *
+    * Here is some sample code using it:
+    * @li @ref bg_01_example_page
+    * @li @ref bg_02_example_page
+    * @li @ref bg_03_example_page
+    */
+
    /* bg */
    typedef enum _Elm_Bg_Option
      {
@@ -601,16 +1943,152 @@ extern "C" {
         ELM_BG_OPTION_TILE     /**< tile background at its original size */
      } Elm_Bg_Option;
 
+   /**
+    * Add a new background to the parent
+    *
+    * @param parent The parent object
+    * @return The new object or NULL if it cannot be created
+    *
+    * @ingroup Bg
+    */
    EAPI Evas_Object  *elm_bg_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set the file (image or edje) used for the background
+    *
+    * @param obj The bg object
+    * @param file The file path
+    * @param group Optional key (group in Edje) within the file
+    *
+    * This sets the image file used in the background object. The image (or edje)
+    * will be stretched (retaining aspect if its an image file) to completely fill
+    * the bg object. This may mean some parts are not visible.
+    *
+    * @note  Once the image of @p obj is set, a previously set one will be deleted,
+    * even if @p file is NULL.
+    *
+    * @ingroup Bg
+    */
    EAPI void          elm_bg_file_set(Evas_Object *obj, const char *file, const char *group) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get the file (image or edje) used for the background
+    *
+    * @param obj The bg object
+    * @param file The file path
+    * @param group Optional key (group in Edje) within the file
+    *
+    * @ingroup Bg
+    */
    EAPI void          elm_bg_file_get(const Evas_Object *obj, const char **file, const char **group) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set the option used for the background image
+    *
+    * @param obj The bg object
+    * @param option The desired background option (TILE, SCALE)
+    *
+    * This sets the option used for manipulating the display of the background
+    * image. The image can be tiled or scaled.
+    *
+    * @ingroup Bg
+    */
    EAPI void          elm_bg_option_set(Evas_Object *obj, Elm_Bg_Option option) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get the option used for the background image
+    *
+    * @param obj The bg object
+    * @return The desired background option (CENTER, SCALE, STRETCH or TILE)
+    *
+    * @ingroup Bg
+    */
    EAPI Elm_Bg_Option elm_bg_option_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Set the option used for the background color
+    *
+    * @param obj The bg object
+    * @param r
+    * @param g
+    * @param b
+    *
+    * This sets the color used for the background rectangle. Its range goes
+    * from 0 to 255.
+    *
+    * @ingroup Bg
+    */
    EAPI void          elm_bg_color_set(Evas_Object *obj, int r, int g, int b) EINA_ARG_NONNULL(1);
+   /**
+    * Get the option used for the background color
+    *
+    * @param obj The bg object
+    * @param r
+    * @param g
+    * @param b
+    *
+    * @ingroup Bg
+    */
    EAPI void          elm_bg_color_get(const Evas_Object *obj, int *r, int *g, int *b) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set the overlay object used for the background object.
+    *
+    * @param obj The bg object
+    * @param overlay The overlay object
+    *
+    * This provides a way for elm_bg to have an 'overlay' that will be on top
+    * of the bg. Once the over object is set, a previously set one will be
+    * deleted, even if you set the new one to NULL. If you want to keep that
+    * old content object, use the elm_bg_overlay_unset() function.
+    *
+    * @ingroup Bg
+    */
+
    EAPI void          elm_bg_overlay_set(Evas_Object *obj, Evas_Object *overlay) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get the overlay object used for the background object.
+    *
+    * @param obj The bg object
+    * @return The content that is being used
+    *
+    * Return the content object which is set for this widget
+    *
+    * @ingroup Bg
+    */
    EAPI Evas_Object  *elm_bg_overlay_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get the overlay object used for the background object.
+    *
+    * @param obj The bg object
+    * @return The content that was being used
+    *
+    * Unparent and return the overlay object which was set for this widget
+    *
+    * @ingroup Bg
+    */
    EAPI Evas_Object  *elm_bg_overlay_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set the size of the pixmap representation of the image.
+    *
+    * This option just makes sense if an image is going to be set in the bg.
+    *
+    * @param obj The bg object
+    * @param w The new width of the image pixmap representation.
+    * @param h The new height of the image pixmap representation.
+    *
+    * This function sets a new size for pixmap representation of the given bg
+    * image. It allows the image to be loaded already in the specified size,
+    * reducing the memory usage and load time when loading a big image with load
+    * size set to a smaller size.
+    *
+    * NOTE: this is just a hint, the real size of the pixmap may differ
+    * depending on the type of image being loaded, being bigger than requested.
+    *
+    * @ingroup Bg
+    */
    EAPI void          elm_bg_load_size_set(Evas_Object *obj, Evas_Coord w, Evas_Coord h) EINA_ARG_NONNULL(1);
    /* smart callbacks called:
     */
@@ -626,6 +2104,7 @@ extern "C" {
 
    EAPI Evas_Object          *elm_icon_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
    EAPI Eina_Bool             elm_icon_file_set(Evas_Object *obj, const char *file, const char *group) EINA_ARG_NONNULL(1, 2);
+   EAPI void                  elm_icon_thumb_set(const Evas_Object *obj, const char *file, const char *group) EINA_ARG_NONNULL(1, 2);
    EAPI void                  elm_icon_file_get(const Evas_Object *obj, const char **file, const char **group) EINA_ARG_NONNULL(1);
    EAPI Eina_Bool             elm_icon_standard_set(Evas_Object *obj, const char *name) EINA_ARG_NONNULL(1);
    EAPI const char           *elm_icon_standard_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
@@ -641,6 +2120,12 @@ extern "C" {
    EAPI int                   elm_icon_prescale_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void                  elm_icon_order_lookup_set(Evas_Object *obj, Elm_Icon_Lookup_Order order) EINA_ARG_NONNULL(1);
    EAPI Elm_Icon_Lookup_Order elm_icon_order_lookup_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool             elm_icon_anim_available_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void                  elm_icon_anim_set(Evas_Object *obj, Eina_Bool anim) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool             elm_icon_anim_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void                  elm_icon_anim_play_set(Evas_Object *obj, Eina_Bool play) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool             elm_icon_anim_play_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
    /* smart callbacks called:
     * "clicked" - the user clicked the icon
     */
@@ -675,6 +2160,7 @@ extern "C" {
    EAPI Elm_Image_Orient elm_image_orient_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void             elm_image_editable_set(Evas_Object *obj, Eina_Bool set) EINA_ARG_NONNULL(1);
    EAPI Eina_Bool        elm_image_editable_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI Evas_Object     *elm_image_object_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void             elm_image_aspect_ratio_retained_set(Evas_Object *obj, Eina_Bool retained) EINA_ARG_NONNULL(1);
    EAPI Eina_Bool        elm_image_aspect_ratio_retained_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
 
@@ -682,75 +2168,678 @@ extern "C" {
     * "clicked" - the user clicked the image
     */
 
+   /* glview */
+   typedef void (*Elm_GLView_Func)(Evas_Object *obj);
+
+   typedef enum _Elm_GLView_Mode
+     {
+        ELM_GLVIEW_ALPHA   = 1,
+        ELM_GLVIEW_DEPTH   = 2,
+        ELM_GLVIEW_STENCIL = 4
+     } Elm_GLView_Mode;
+
+   /**
+    * Defines a policy for the glview resizing.
+    *
+    * @note Default is ELM_GLVIEW_RESIZE_POLICY_RECREATE
+    */
+   typedef enum _Elm_GLView_Resize_Policy
+     {
+        ELM_GLVIEW_RESIZE_POLICY_RECREATE = 1,      /**< Resize the internal surface along with the image */
+        ELM_GLVIEW_RESIZE_POLICY_SCALE    = 2       /**< Only reize the internal image and not the surface */
+     } Elm_GLView_Resize_Policy;
+
+   typedef enum _Elm_GLView_Render_Policy
+     {
+        ELM_GLVIEW_RENDER_POLICY_ON_DEMAND = 1,     /**< Render only when there is a need for redrawing */
+        ELM_GLVIEW_RENDER_POLICY_ALWAYS    = 2      /**< Render always even when it is not visible */
+     } Elm_GLView_Render_Policy;
+
+
+   EAPI Evas_Object     *elm_glview_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
+   EAPI void             elm_glview_size_set(Evas_Object *obj, Evas_Coord width, Evas_Coord height) EINA_ARG_NONNULL(1);
+   EAPI void             elm_glview_size_get(const Evas_Object *obj, Evas_Coord *width, Evas_Coord *height) EINA_ARG_NONNULL(1);
+   EAPI Evas_GL_API     *elm_glview_gl_api_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool        elm_glview_mode_set(Evas_Object *obj, Elm_GLView_Mode mode) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool        elm_glview_resize_policy_set(Evas_Object *obj, Elm_GLView_Resize_Policy policy) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool        elm_glview_render_policy_set(Evas_Object *obj, Elm_GLView_Render_Policy policy) EINA_ARG_NONNULL(1);
+   EAPI void             elm_glview_init_func_set(Evas_Object *obj, Elm_GLView_Func func) EINA_ARG_NONNULL(1);
+   EAPI void             elm_glview_del_func_set(Evas_Object *obj, Elm_GLView_Func func) EINA_ARG_NONNULL(1);
+   EAPI void             elm_glview_resize_func_set(Evas_Object *obj, Elm_GLView_Func func) EINA_ARG_NONNULL(1);
+   EAPI void             elm_glview_render_func_set(Evas_Object *obj, Elm_GLView_Func func) EINA_ARG_NONNULL(1);
+   EAPI void             elm_glview_changed_set(Evas_Object *obj) EINA_ARG_NONNULL(1);
+
    /* box */
+   /**
+    * @defgroup Box Box
+    *
+    * A box arranges objects in a linear fashion, governed by a layout function
+    * that defines the details of this arrangement.
+    *
+    * By default, the box will use an internal function to set the layout to
+    * a single row, either vertical or horizontal. This layout is affected
+    * by a number of parameters, such as the homogeneous flag set by
+    * elm_box_homogeneous_set(), the values given by elm_box_padding_set() and
+    * elm_box_align_set() and the hints set to each object in the box.
+    *
+    * For this default layout, it's possible to change the orientation with
+    * elm_box_horizontal_set(). The box will start in the vertical orientation,
+    * placing its elements ordered from top to bottom. When horizontal is set,
+    * the order will go from left to right. If the box is set to be
+    * homogeneous, every object in it will be assigned the same space, that
+    * of the largest object. Padding can be used to set some spacing between
+    * the cell given to each object. The alignment of the box, set with
+    * elm_box_align_set(), determines how the bounding box of all the elements
+    * will be placed within the space given to the box widget itself.
+    *
+    * The size hints of each object also affect how they are placed and sized
+    * within the box. evas_object_size_hint_min_set() will give the minimum
+    * size the object can have, and the box will use it as the basis for all
+    * latter calculations. Elementary widgets set their own minimum size as
+    * needed, so there's rarely any need to use it manually.
+    *
+    * evas_object_size_hint_weight_set(), when not in homogeneous mode, is
+    * used to tell whether the object will be allocated the minimum size it
+    * needs or if the space given to it should be expanded. It's important
+    * to realize that expanding the size given to the object is not the same
+    * thing as resizing the object. It could very well end being a small
+    * widget floating in a much larger empty space. If not set, the weight
+    * for objects will normally be 0.0 for both axis, meaning the widget will
+    * not be expanded. To take as much space possible, set the weight to
+    * EVAS_HINT_EXPAND (defined to 1.0) for the desired axis to expand.
+    *
+    * Besides how much space each object is allocated, it's possible to control
+    * how the widget will be placed within that space using
+    * evas_object_size_hint_align_set(). By default, this value will be 0.5
+    * for both axis, meaning the object will be centered, but any value from
+    * 0.0 (left or top, for the @c x and @c y axis, respectively) to 1.0
+    * (right or bottom) can be used. The special value EVAS_HINT_FILL, which
+    * is -1.0, means the object will be resized to fill the entire space it
+    * was allocated.
+    *
+    * In addition, customized functions to define the layout can be set, which
+    * allow the application developer to organize the objects within the box
+    * in any number of ways.
+    *
+    * The special elm_box_layout_transition() function can be used
+    * to switch from one layout to another, animating the motion of the
+    * children of the box.
+    *
+    * @note Objects should not be added to box objects using _add() calls.
+    *
+    * Some examples on how to use boxes follow:
+    * @li @ref box_example_01
+    * @li @ref box_example_02
+    *
+    * @{
+    */
+   /**
+    * @typedef Elm_Box_Transition
+    *
+    * Opaque handler containing the parameters to perform an animated
+    * transition of the layout the box uses.
+    *
+    * @see elm_box_transition_new()
+    * @see elm_box_layout_set()
+    * @see elm_box_layout_transition()
+    */
    typedef struct _Elm_Box_Transition Elm_Box_Transition;
 
+   /**
+    * Add a new box to the parent
+    *
+    * By default, the box will be in vertical mode and non-homogeneous.
+    *
+    * @param parent The parent object
+    * @return The new object or NULL if it cannot be created
+    */
    EAPI Evas_Object        *elm_box_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
+   /**
+    * Set the horizontal orientation
+    *
+    * By default, box object arranges their contents vertically from top to
+    * bottom.
+    * By calling this function with @p horizontal as EINA_TRUE, the box will
+    * become horizontal, arranging contents from left to right.
+    *
+    * @note This flag is ignored if a custom layout function is set.
+    *
+    * @param obj The box object
+    * @param horizontal The horizontal flag (EINA_TRUE = horizontal,
+    * EINA_FALSE = vertical)
+    */
    EAPI void                elm_box_horizontal_set(Evas_Object *obj, Eina_Bool horizontal) EINA_ARG_NONNULL(1);
+   /**
+    * Get the horizontal orientation
+    *
+    * @param obj The box object
+    * @return EINA_TRUE if the box is set to horizintal mode, EINA_FALSE otherwise
+    */
    EAPI Eina_Bool           elm_box_horizontal_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void                elm_box_homogenous_set(Evas_Object *obj, Eina_Bool homogenous) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool           elm_box_homogenous_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void                elm_box_extended_mode_set(Evas_Object *obj, Eina_Bool extended) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool           elm_box_extended_mode_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Set the box to arrange its children homogeneously
+    *
+    * If enabled, homogeneous layout makes all items the same size, according
+    * to the size of the largest of its children.
+    *
+    * @note This flag is ignored if a custom layout function is set.
+    *
+    * @param obj The box object
+    * @param homogeneous The homogeneous flag
+    */
+   EAPI void                elm_box_homogeneous_set(Evas_Object *obj, Eina_Bool homogeneous) EINA_ARG_NONNULL(1);
+   /**
+    * Get whether the box is using homogeneous mode or not
+    *
+    * @param obj The box object
+    * @return EINA_TRUE if it's homogeneous, EINA_FALSE otherwise
+    */
+   EAPI Eina_Bool           elm_box_homogeneous_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void elm_box_homogenous_set(Evas_Object *obj, Eina_Bool homogenous) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI Eina_Bool elm_box_homogenous_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Add an object to the beginning of the pack list
+    *
+    * Pack @p subobj into the box @p obj, placing it first in the list of
+    * children objects. The actual position the object will get on screen
+    * depends on the layout used. If no custom layout is set, it will be at
+    * the top or left, depending if the box is vertical or horizontal,
+    * respectively.
+    *
+    * @param obj The box object
+    * @param subobj The object to add to the box
+    *
+    * @see elm_box_pack_end()
+    * @see elm_box_pack_before()
+    * @see elm_box_pack_after()
+    * @see elm_box_unpack()
+    * @see elm_box_unpack_all()
+    * @see elm_box_clear()
+    */
    EAPI void                elm_box_pack_start(Evas_Object *obj, Evas_Object *subobj) EINA_ARG_NONNULL(1);
+   /**
+    * Add an object at the end of the pack list
+    *
+    * Pack @p subobj into the box @p obj, placing it last in the list of
+    * children objects. The actual position the object will get on screen
+    * depends on the layout used. If no custom layout is set, it will be at
+    * the bottom or right, depending if the box is vertical or horizontal,
+    * respectively.
+    *
+    * @param obj The box object
+    * @param subobj The object to add to the box
+    *
+    * @see elm_box_pack_start()
+    * @see elm_box_pack_before()
+    * @see elm_box_pack_after()
+    * @see elm_box_unpack()
+    * @see elm_box_unpack_all()
+    * @see elm_box_clear()
+    */
    EAPI void                elm_box_pack_end(Evas_Object *obj, Evas_Object *subobj) EINA_ARG_NONNULL(1);
+   /**
+    * Adds an object to the box before the indicated object
+    *
+    * This will add the @p subobj to the box indicated before the object
+    * indicated with @p before. If @p before is not already in the box, results
+    * are undefined. Before means either to the left of the indicated object or
+    * above it depending on orientation.
+    *
+    * @param obj The box object
+    * @param subobj The object to add to the box
+    * @param before The object before which to add it
+    *
+    * @see elm_box_pack_start()
+    * @see elm_box_pack_end()
+    * @see elm_box_pack_after()
+    * @see elm_box_unpack()
+    * @see elm_box_unpack_all()
+    * @see elm_box_clear()
+    */
    EAPI void                elm_box_pack_before(Evas_Object *obj, Evas_Object *subobj, Evas_Object *before) EINA_ARG_NONNULL(1);
+   /**
+    * Adds an object to the box after the indicated object
+    *
+    * This will add the @p subobj to the box indicated after the object
+    * indicated with @p after. If @p after is not already in the box, results
+    * are undefined. After means either to the right of the indicated object or
+    * below it depending on orientation.
+    *
+    * @param obj The box object
+    * @param subobj The object to add to the box
+    * @param after The object after which to add it
+    *
+    * @see elm_box_pack_start()
+    * @see elm_box_pack_end()
+    * @see elm_box_pack_before()
+    * @see elm_box_unpack()
+    * @see elm_box_unpack_all()
+    * @see elm_box_clear()
+    */
    EAPI void                elm_box_pack_after(Evas_Object *obj, Evas_Object *subobj, Evas_Object *after) EINA_ARG_NONNULL(1);
+   /**
+    * Clear the box of all children
+    *
+    * Remove all the elements contained by the box, deleting the respective
+    * objects.
+    *
+    * @param obj The box object
+    *
+    * @see elm_box_unpack()
+    * @see elm_box_unpack_all()
+    */
    EAPI void                elm_box_clear(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Unpack a box item
+    *
+    * Remove the object given by @p subobj from the box @p obj without
+    * deleting it.
+    *
+    * @param obj The box object
+    *
+    * @see elm_box_unpack_all()
+    * @see elm_box_clear()
+    */
    EAPI void                elm_box_unpack(Evas_Object *obj, Evas_Object *subobj) EINA_ARG_NONNULL(1);
+   /**
+    * Remove all items from the box, without deleting them
+    *
+    * Clear the box from all children, but don't delete the respective objects.
+    * If no other references of the box children exist, the objects will never
+    * be deleted, and thus the application will leak the memory. Make sure
+    * when using this function that you hold a reference to all the objects
+    * in the box @p obj.
+    *
+    * @param obj The box object
+    *
+    * @see elm_box_clear()
+    * @see elm_box_unpack()
+    */
    EAPI void                elm_box_unpack_all(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Retrieve a list of the objects packed into the box
+    *
+    * Returns a new @c Eina_List with a pointer to @c Evas_Object in its nodes.
+    * The order of the list corresponds to the packing order the box uses.
+    *
+    * You must free this list with eina_list_free() once you are done with it.
+    *
+    * @param obj The box object
+    */
    EAPI const Eina_List    *elm_box_children_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Set the space (padding) between the box's elements.
+    *
+    * Extra space in pixels that will be added between a box child and its
+    * neighbors after its containing cell has been calculated. This padding
+    * is set for all elements in the box, besides any possible padding that
+    * individual elements may have through their size hints.
+    *
+    * @param obj The box object
+    * @param horizontal The horizontal space between elements
+    * @param vertical The vertical space between elements
+    */
    EAPI void                elm_box_padding_set(Evas_Object *obj, Evas_Coord horizontal, Evas_Coord vertical) EINA_ARG_NONNULL(1);
+   /**
+    * Get the space (padding) between the box's elements.
+    *
+    * @param obj The box object
+    * @param horizontal The horizontal space between elements
+    * @param vertical The vertical space between elements
+    *
+    * @see elm_box_padding_set()
+    */
    EAPI void                elm_box_padding_get(const Evas_Object *obj, Evas_Coord *horizontal, Evas_Coord *vertical) EINA_ARG_NONNULL(1);
+   /**
+    * Set the alignment of the whole bouding box of contents.
+    *
+    * Sets how the bounding box containing all the elements of the box, after
+    * their sizes and position has been calculated, will be aligned within
+    * the space given for the whole box widget.
+    *
+    * @param obj The box object
+    * @param horizontal The horizontal alignment of elements
+    * @param vertical The vertical alignment of elements
+    */
    EAPI void                elm_box_align_set(Evas_Object *obj, double horizontal, double vertical) EINA_ARG_NONNULL(1);
+   /**
+    * Get the alignment of the whole bouding box of contents.
+    *
+    * @param obj The box object
+    * @param horizontal The horizontal alignment of elements
+    * @param vertical The vertical alignment of elements
+    *
+    * @see elm_box_align_set()
+    */
    EAPI void                elm_box_align_get(const Evas_Object *obj, double *horizontal, double *vertical) EINA_ARG_NONNULL(1);
 
+   /**
+    * Set the layout defining function to be used by the box
+    *
+    * Whenever anything changes that requires the box in @p obj to recalculate
+    * the size and position of its elements, the function @p cb will be called
+    * to determine what the layout of the children will be.
+    *
+    * Once a custom function is set, everything about the children layout
+    * is defined by it. The flags set by elm_box_horizontal_set() and
+    * elm_box_homogeneous_set() no longer have any meaning, and the values
+    * given by elm_box_padding_set() and elm_box_align_set() are up to this
+    * layout function to decide if they are used and how. These last two
+    * will be found in the @c priv parameter, of type @c Evas_Object_Box_Data,
+    * passed to @p cb. The @c Evas_Object the function receives is not the
+    * Elementary widget, but the internal Evas Box it uses, so none of the
+    * functions described here can be used on it.
+    *
+    * Any of the layout functions in @c Evas can be used here, as well as the
+    * special elm_box_layout_transition().
+    *
+    * The final @p data argument received by @p cb is the same @p data passed
+    * here, and the @p free_data function will be called to free it
+    * whenever the box is destroyed or another layout function is set.
+    *
+    * Setting @p cb to NULL will revert back to the default layout function.
+    *
+    * @param obj The box object
+    * @param cb The callback function used for layout
+    * @param data Data that will be passed to layout function
+    * @param free_data Function called to free @p data
+    *
+    * @see elm_box_layout_transition()
+    */
    EAPI void                elm_box_layout_set(Evas_Object *obj, Evas_Object_Box_Layout cb, const void *data, void (*free_data)(void *data)) EINA_ARG_NONNULL(1);
+   /**
+    * Special layout function that animates the transition from one layout to another
+    *
+    * Normally, when switching the layout function for a box, this will be
+    * reflected immediately on screen on the next render, but it's also
+    * possible to do this through an animated transition.
+    *
+    * This is done by creating an ::Elm_Box_Transition and setting the box
+    * layout to this function.
+    *
+    * For example:
+    * @code
+    * Elm_Box_Transition *t = elm_box_transition_new(1.0,
+    *                            evas_object_box_layout_vertical, // start
+    *                            NULL, // data for initial layout
+    *                            NULL, // free function for initial data
+    *                            evas_object_box_layout_horizontal, // end
+    *                            NULL, // data for final layout
+    *                            NULL, // free function for final data
+    *                            anim_end, // will be called when animation ends
+    *                            NULL); // data for anim_end function\
+    * elm_box_layout_set(box, elm_box_layout_transition, t,
+    *                    elm_box_transition_free);
+    * @endcode
+    *
+    * @note This function can only be used with elm_box_layout_set(). Calling
+    * it directly will not have the expected results.
+    *
+    * @see elm_box_transition_new
+    * @see elm_box_transition_free
+    * @see elm_box_layout_set
+    */
    EAPI void                elm_box_layout_transition(Evas_Object *obj, Evas_Object_Box_Data *priv, void *data);
+   /**
+    * Create a new ::Elm_Box_Transition to animate the switch of layouts
+    *
+    * If you want to animate the change from one layout to another, you need
+    * to set the layout function of the box to elm_box_layout_transition(),
+    * passing as user data to it an instance of ::Elm_Box_Transition with the
+    * necessary information to perform this animation. The free function to
+    * set for the layout is elm_box_transition_free().
+    *
+    * The parameters to create an ::Elm_Box_Transition sum up to how long
+    * will it be, in seconds, a layout function to describe the initial point,
+    * another for the final position of the children and one function to be
+    * called when the whole animation ends. This last function is useful to
+    * set the definitive layout for the box, usually the same as the end
+    * layout for the animation, but could be used to start another transition.
+    *
+    * @param start_layout The layout function that will be used to start the animation
+    * @param start_layout_data The data to be passed the @p start_layout function
+    * @param start_layout_free_data Function to free @p start_layout_data
+    * @param end_layout The layout function that will be used to end the animation
+    * @param end_layout_free_data The data to be passed the @p end_layout function
+    * @param end_layout_free_data Function to free @p end_layout_data
+    * @param transition_end_cb Callback function called when animation ends
+    * @param transition_end_data Data to be passed to @p transition_end_cb
+    * @return An instance of ::Elm_Box_Transition
+    *
+    * @see elm_box_transition_new
+    * @see elm_box_layout_transition
+    */
    EAPI Elm_Box_Transition *elm_box_transition_new(const double duration, Evas_Object_Box_Layout start_layout, void *start_layout_data, void(*start_layout_free_data)(void *data), Evas_Object_Box_Layout end_layout, void *end_layout_data, void(*end_layout_free_data)(void *data), void(*transition_end_cb)(void *data), void *transition_end_data) EINA_ARG_NONNULL(2, 5);
+   /**
+    * Free a Elm_Box_Transition instance created with elm_box_transition_new().
+    *
+    * This function is mostly useful as the @c free_data parameter in
+    * elm_box_layout_set() when elm_box_layout_transition().
+    *
+    * @param data The Elm_Box_Transition instance to be freed.
+    *
+    * @see elm_box_transition_new
+    * @see elm_box_layout_transition
+    */
    EAPI void                elm_box_transition_free(void *data);
-   /* smart callbacks called:
+   /**
+    * @}
+    */
+
+   /* button */
+   /**
+    * @defgroup Button Button
+    *
+    * @image html  widget/button/preview-00.png
+    * @image html  widget/button/preview-01.png
+    * @image html  widget/button/preview-02.png
+    *
+    * This is a push-button. Press it and run some function. It can contain
+    * a simple label and icon object and it also has an autorepeat feature.
+    *
+    * This widgets emits the following signals:
+    * @li "clicked": the user clicked the button (press/release).
+    * @li "repeated": the user pressed the button without releasing it.
+    * @li "pressed": button was pressed.
+    * @li "unpressed": button was released after being pressed.
+    * In all three cases, the @c event parameter of the callback will be
+    * @c NULL.
+    *
+    * Also, defined in the default theme, the button has the following styles
+    * available:
+    * @li default: a normal button.
+    * @li anchor: Like default, but the button fades away when the mouse is not
+    * over it, leaving only the text or icon.
+    * @li hoversel_vertical: Internally used by @ref Hoversel to give a
+    * continuous look across its options.
+    * @li hoversel_vertical_entry: Another internal for @ref Hoversel.
+    *
+    * Follow through a complete example @ref button_example_01 "here".
+    * @{
     */
+
    typedef enum
      {
-       UIControlStateDefault,
-       UIControlStateHighlighted,
-       UIControlStateDisabled,
-       UIControlStateFocused,
-       UIControlStateReserved
+        UIControlStateDefault,
+        UIControlStateHighlighted,
+        UIControlStateDisabled,
+        UIControlStateFocused,
+        UIControlStateReserved
      } UIControlState;
 
- /* button */
+   /**
+    * Add a new button to the parent's canvas
+    *
+    * @param parent The parent object
+    * @return The new object or NULL if it cannot be created
+    */
    EAPI Evas_Object *elm_button_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
-   EAPI void         elm_button_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
-   EAPI void         elm_button_label_set_for_state(Evas_Object *obj, const char *label, UIControlState state);
-   EAPI const char  *elm_button_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI const char  *elm_button_label_get_for_state(const Evas_Object *obj, UIControlState state);
+   /**
+    * Set the label used in the button
+    *
+    * The passed @p label can be NULL to clean any existing text in it and
+    * leave the button as an icon only object.
+    *
+    * @param obj The button object
+    * @param label The text will be written on the button
+    * @deprecated use elm_object_text_set() instead.
+    */
+   EINA_DEPRECATED EAPI void         elm_button_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
+   /**
+    * Get the label set for the button
+    *
+    * The string returned is an internal pointer and should not be freed or
+    * altered. It will also become invalid when the button is destroyed.
+    * The string returned, if not NULL, is a stringshare, so if you need to
+    * keep it around even after the button is destroyed, you can use
+    * eina_stringshare_ref().
+    *
+    * @param obj The button object
+    * @return The text set to the label, or NULL if nothing is set
+    * @deprecated use elm_object_text_set() instead.
+    */
+   EINA_DEPRECATED EAPI const char  *elm_button_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Set the label for each state of button
+    *
+    * The passed @p label can be NULL to clean any existing text in it and
+    * leave the button as an icon only object for the state.
+    *
+    * @param obj The button object
+    * @param label The text will be written on the button
+    * @param state The state of button
+    *
+    * @ingroup Button
+    */
+   EINA_DEPRECATED EAPI void         elm_button_label_set_for_state(Evas_Object *obj, const char *label, UIControlState state) EINA_ARG_NONNULL(1);
+   /**
+    * Get the label of button for each state
+    *
+    * The string returned is an internal pointer and should not be freed or
+    * altered. It will also become invalid when the button is destroyed.
+    * The string returned, if not NULL, is a stringshare, so if you need to
+    * keep it around even after the button is destroyed, you can use
+    * eina_stringshare_ref().
+    *
+    * @param obj The button object
+    * @param state The state of button
+    * @return The title of button for state
+    *
+    * @ingroup Button
+    */
+   EINA_DEPRECATED EAPI const char  *elm_button_label_get_for_state(const Evas_Object *obj, UIControlState state) EINA_ARG_NONNULL(1);
+   /**
+    * Set the icon used for the button
+    *
+    * Setting a new icon will delete any other that was previously set, making
+    * any reference to them invalid. If you need to maintain the previous
+    * object alive, unset it first with elm_button_icon_unset().
+    *
+    * @param obj The button object
+    * @param icon The icon object for the button
+    */
    EAPI void         elm_button_icon_set(Evas_Object *obj, Evas_Object *icon) EINA_ARG_NONNULL(1);
+   /**
+    * Get the icon used for the button
+    *
+    * Return the icon object which is set for this widget. If the button is
+    * destroyed or another icon is set, the returned object will be deleted
+    * and any reference to it will be invalid.
+    *
+    * @param obj The button object
+    * @return The icon object that is being used
+    *
+    * @see elm_button_icon_unset()
+    */
    EAPI Evas_Object *elm_button_icon_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Remove the icon set without deleting it and return the object
+    *
+    * This function drops the reference the button holds of the icon object
+    * and returns this last object. It is used in case you want to remove any
+    * icon, or set another one, without deleting the actual object. The button
+    * will be left without an icon set.
+    *
+    * @param obj The button object
+    * @return The icon object that was being used
+    */
    EAPI Evas_Object *elm_button_icon_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_button_autorepeat_set(Evas_Object *obj, Eina_Bool on) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool    elm_button_autorepeat_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_button_autorepeat_initial_timeout_set(Evas_Object *obj, double t) EINA_ARG_NONNULL(1);
+   /**
+    * Turn on/off the autorepeat event generated when the button is kept pressed
+    *
+    * When off, no autorepeat is performed and buttons emit a normal @c clicked
+    * signal when they are clicked.
+    *
+    * When on, keeping a button pressed will continuously emit a @c repeated
+    * signal until the button is released. The time it takes until it starts
+    * emitting the signal is given by
+    * elm_button_autorepeat_initial_timeout_set(), and the time between each
+    * new emission by elm_button_autorepeat_gap_timeout_set().
+    *
+    * @param obj The button object
+    * @param on  A bool to turn on/off the event
+    */
+   EAPI void         elm_button_autorepeat_set(Evas_Object *obj, Eina_Bool on) EINA_ARG_NONNULL(1);
+   /**
+    * Get whether the autorepeat feature is enabled
+    *
+    * @param obj The button object
+    * @return EINA_TRUE if autorepeat is on, EINA_FALSE otherwise
+    *
+    * @see elm_button_autorepeat_set()
+    */
+   EAPI Eina_Bool    elm_button_autorepeat_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Set the initial timeout before the autorepeat event is generated
+    *
+    * Sets the timeout, in seconds, since the button is pressed until the
+    * first @c repeated signal is emitted. If @p t is 0.0 or less, there
+    * won't be any delay and the even will be fired the moment the button is
+    * pressed.
+    *
+    * @param obj The button object
+    * @param t   Timeout in seconds
+    *
+    * @see elm_button_autorepeat_set()
+    * @see elm_button_autorepeat_gap_timeout_set()
+    */
+   EAPI void         elm_button_autorepeat_initial_timeout_set(Evas_Object *obj, double t) EINA_ARG_NONNULL(1);
+   /**
+    * Get the initial timeout before the autorepeat event is generated
+    *
+    * @param obj The button object
+    * @return Timeout in seconds
+    *
+    * @see elm_button_autorepeat_initial_timeout_set()
+    */
    EAPI double       elm_button_autorepeat_initial_timeout_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Set the interval between each generated autorepeat event
+    *
+    * After the first @c repeated event is fired, all subsequent ones will
+    * follow after a delay of @p t seconds for each.
+    *
+    * @param obj The button object
+    * @param t   Interval in seconds
+    *
+    * @see elm_button_autorepeat_initial_timeout_set()
+    */
    EAPI void         elm_button_autorepeat_gap_timeout_set(Evas_Object *obj, double t) EINA_ARG_NONNULL(1);
-   EAPI double       elm_button_autorepeat_gap_timeout_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   /* available styles:
-    * default
-    * anchor
-    * hoversel_vertical
-    * hoversel_vertical_entry
+   /**
+    * Get the interval between each generated autorepeat event
+    *
+    * @param obj The button object
+    * @return Interval in seconds
     */
-   /* smart callbacks called:
-    * "clicked" - the user clicked the button
-    * "repeated" - the user pressed the button without releasing it
-    * "unpressed" - when the button is unpressed (released)
+   EAPI double       elm_button_autorepeat_gap_timeout_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * @}
     */
 
    /* fileselector */
    EAPI Evas_Object *elm_fileselector_button_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
-   EAPI void         elm_fileselector_button_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
-   EAPI const char  *elm_fileselector_button_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_fileselector_button_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI const char  *elm_fileselector_button_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void         elm_fileselector_button_icon_set(Evas_Object *obj, Evas_Object *icon) EINA_ARG_NONNULL(1);
    EAPI Evas_Object *elm_fileselector_button_icon_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI Evas_Object *elm_fileselector_button_icon_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
@@ -780,8 +2869,8 @@ extern "C" {
     */
 
    EAPI Evas_Object *elm_fileselector_entry_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
-   EAPI void         elm_fileselector_entry_button_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
-   EAPI const char  *elm_fileselector_entry_button_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_fileselector_entry_button_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI const char  *elm_fileselector_entry_button_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void         elm_fileselector_entry_button_icon_set(Evas_Object *obj, Evas_Object *icon) EINA_ARG_NONNULL(1);
    EAPI Evas_Object *elm_fileselector_entry_button_icon_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI Evas_Object *elm_fileselector_entry_button_icon_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
@@ -844,10 +2933,10 @@ extern "C" {
 
    /* label */
    EAPI Evas_Object *elm_label_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
-   EAPI void         elm_label_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
-   EAPI const char  *elm_label_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_label_line_wrap_set(Evas_Object *obj, Eina_Bool wrap) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool    elm_label_line_wrap_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void elm_label_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1); /* deprecated, use elm_object_text_set instead */
+   EINA_DEPRECATED EAPI const char *elm_label_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1); /* deprecated, use elm_object_text_get instead */
+   EAPI void         elm_label_line_wrap_set(Evas_Object *obj, Elm_Wrap_Type wrap) EINA_ARG_NONNULL(1);
+   EAPI Elm_Wrap_Type elm_label_line_wrap_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void         elm_label_wrap_width_set(Evas_Object *obj, Evas_Coord w) EINA_ARG_NONNULL(1);
    EAPI Evas_Coord   elm_label_wrap_width_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void         elm_label_wrap_height_set(Evas_Object *obj, Evas_Coord h) EINA_ARG_NONNULL(1);
@@ -857,11 +2946,11 @@ extern "C" {
    EAPI void         elm_label_text_align_set(Evas_Object *obj, const char *alignmode) EINA_ARG_NONNULL(1);
    EAPI void         elm_label_background_color_set(Evas_Object *obj, unsigned int r, unsigned int g, unsigned int b, unsigned int a) EINA_ARG_NONNULL(1);
    EAPI void         elm_label_ellipsis_set(Evas_Object *obj, Eina_Bool ellipsis) EINA_ARG_NONNULL(1);
-   EAPI void         elm_label_wrap_mode_set(Evas_Object *obj, Eina_Bool wrapmode) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void elm_label_wrap_mode_set(Evas_Object *obj, Eina_Bool wrapmode) EINA_ARG_NONNULL(1);
    EAPI void         elm_label_slide_set(Evas_Object *obj, Eina_Bool slide) EINA_ARG_NONNULL(1);
    EAPI Eina_Bool    elm_label_slide_get(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_label_slide_duration_set(Evas_Object *obj, int duration) EINA_ARG_NONNULL(1);
-   EAPI int          elm_label_slide_duration_get(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void         elm_label_slide_duration_set(Evas_Object *obj, double duration) EINA_ARG_NONNULL(1);
+   EAPI double       elm_label_slide_duration_get(Evas_Object *obj) EINA_ARG_NONNULL(1);
    /* available styles:
     * default
     * marker
@@ -871,8 +2960,8 @@ extern "C" {
 
    /* toggle */
    EAPI Evas_Object *elm_toggle_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
-   EAPI void         elm_toggle_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
-   EAPI const char  *elm_toggle_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_toggle_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI const char  *elm_toggle_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void         elm_toggle_icon_set(Evas_Object *obj, Evas_Object *icon) EINA_ARG_NONNULL(1);
    EAPI Evas_Object *elm_toggle_icon_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI Evas_Object *elm_toggle_icon_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
@@ -887,34 +2976,152 @@ extern "C" {
     *             by the cursor in the first place).
     */
 
-   /* frame */
+   /**
+    * @page tutorial_frame Frame example
+    * @dontinclude frame_example_01.c
+    *
+    * In this example we are going to create 4 Frames with different styles and
+    * add a rectangle of different color in each.
+    *
+    * We start we the usual setup code:
+    * @until show(bg)
+    *
+    * And then create one rectangle:
+    * @until show
+    *
+    * To add it in our first frame, which since it doesn't have it's style
+    * specifically set uses the default style:
+    * @until show
+    *
+    * And then create another rectangle:
+    * @until show
+    *
+    * To add it in our second frame, which uses the "pad_small" style, note that
+    * even tough we are setting a text for this frame it won't be show, only the
+    * default style shows the Frame's title:
+    * @until show
+    * @note The "pad_small", "pad_medium", "pad_large" and "pad_huge" styles are
+    * very similar, their only difference is the size of the empty area around
+    * the content of the frame.
+    *
+    * And then create yet another rectangle:
+    * @until show
+    *
+    * To add it in our third frame, which uses the "outdent_top" style, note
+    * that even tough we are setting a text for this frame it won't be show,
+    * only the default style shows the Frame's title:
+    * @until show
+    *
+    * And then create one last rectangle:
+    * @until show
+    *
+    * To add it in our fourth and final frame, which uses the "outdent_bottom"
+    * style, note that even tough we are setting a text for this frame it won't
+    * be show, only the default style shows the Frame's title:
+    * @until show
+    *
+    * And now we are left with just some more setup code:
+    * @until ELM_MAIN()
+    *
+    * Our example will look like this:
+    * @image html screenshots/frame_example_01.png
+    * @image latex screenshots/frame_example_01.eps
+    *
+    * @example frame_example_01.c
+    */
+   /**
+    * @defgroup Frame Frame
+    *
+    * @brief Frame is a widget that holds some content and has a title.
+    *
+    * The default look is a frame with a title, but Frame supports multple
+    * styles:
+    * @li default
+    * @li pad_small
+    * @li pad_medium
+    * @li pad_large
+    * @li pad_huge
+    * @li outdent_top
+    * @li outdent_bottom
+    *
+    * Of all this styles only default shows the title. Frame emits no signals.
+    *
+    * For a detailed example see the @ref tutorial_frame.
+    *
+    * @{
+    */
+   /**
+    * @brief Add a new frame to the parent
+    *
+    * @param parent The parent object
+    * @return The new object or NULL if it cannot be created
+    */
    EAPI Evas_Object *elm_frame_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
-   EAPI void         elm_frame_label_set(Evas_Object *obj, const char *label); EINA_ARG_NONNULL(1)
-   EAPI const char  *elm_frame_label_get(const Evas_Object *obj); EINA_ARG_NONNULL(1)
-   EAPI void         elm_frame_content_set(Evas_Object *obj, Evas_Object *content); EINA_ARG_NONNULL(1)
-   EAPI Evas_Object *elm_frame_content_get(const Evas_Object *obj); EINA_ARG_NONNULL(1)
-   EAPI Evas_Object *elm_frame_content_unset(Evas_Object *obj); EINA_ARG_NONNULL(1)
-   /* available styles:
-    * default
-    * pad_small
-    * pad_medium
-    * pad_large
-    * pad_huge
-    * outdent_top
-    * outdent_bottom
+   /**
+    * @brief Set the frame label
+    *
+    * @param obj The frame object
+    * @param label The label of this frame object
+    *
+    * @deprecated use elm_object_text_set() instead.
     */
-   /* smart callbacks called:
+   EINA_DEPRECATED EAPI void         elm_frame_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
+   /**
+    * @brief Get the frame label
+    *
+    * @param obj The frame object
+    *
+    * @return The label of this frame objet or NULL if unable to get frame
+    *
+    * @deprecated use elm_object_text_get() instead.
+    */
+   EINA_DEPRECATED EAPI const char  *elm_frame_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * @brief Set the content of the frame widget
+    *
+    * Once the content object is set, a previously set one will be deleted.
+    * If you want to keep that old content object, use the
+    * elm_frame_content_unset() function.
+    *
+    * @param obj The frame object
+    * @param content The content will be filled in this frame object
+    */
+   EAPI void         elm_frame_content_set(Evas_Object *obj, Evas_Object *content) EINA_ARG_NONNULL(1);
+   /**
+    * @brief Get the content of the frame widget
+    *
+    * Return the content object which is set for this widget
+    *
+    * @param obj The frame object
+    * @return The content that is being used
+    */
+   EAPI Evas_Object *elm_frame_content_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * @brief Unset the content of the frame widget
+    *
+    * Unparent and return the content object which was set for this widget
+    *
+    * @param obj The frame object
+    * @return The content that was being used
+    */
+   EAPI Evas_Object *elm_frame_content_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * @}
     */
 
    /* table */
    EAPI Evas_Object *elm_table_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
-   EAPI void         elm_table_homogenous_set(Evas_Object *obj, Eina_Bool homogenous) EINA_ARG_NONNULL(1);
+   EAPI void         elm_table_homogeneous_set(Evas_Object *obj, Eina_Bool homogeneous) EINA_ARG_NONNULL(1);
    EAPI Eina_Bool    elm_table_homogeneous_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void elm_table_homogenous_set(Evas_Object *obj, Eina_Bool homogenous) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI Eina_Bool elm_table_homogenous_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void         elm_table_padding_set(Evas_Object *obj, Evas_Coord horizontal, Evas_Coord vertical) EINA_ARG_NONNULL(1);
    EAPI void         elm_table_padding_get(const Evas_Object *obj, Evas_Coord *horizontal, Evas_Coord *vertical) EINA_ARG_NONNULL(1);
    EAPI void         elm_table_pack(Evas_Object *obj, Evas_Object *subobj, int x, int y, int w, int h) EINA_ARG_NONNULL(1);
    EAPI void         elm_table_unpack(Evas_Object *obj, Evas_Object *subobj) EINA_ARG_NONNULL(1);
    EAPI void         elm_table_clear(Evas_Object *obj, Eina_Bool clear) EINA_ARG_NONNULL(1);
+   EAPI void         elm_table_pack_set(Evas_Object *subobj, int x, int y, int w, int h) EINA_ARG_NONNULL(1);
+   EAPI void         elm_table_pack_get(Evas_Object *subobj, int *x, int *y, int *w, int *h) EINA_ARG_NONNULL(1);
 
    /* gengrid */
    typedef struct _Elm_Gengrid_Item_Class Elm_Gengrid_Item_Class;
@@ -954,8 +3161,10 @@ extern "C" {
    EAPI void               elm_gengrid_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_bounce) EINA_ARG_NONNULL(1);
    EAPI void               elm_gengrid_bounce_get(const Evas_Object *obj, Eina_Bool *h_bounce, Eina_Bool *v_bounce) EINA_ARG_NONNULL(1);
    EAPI void               elm_gengrid_page_relative_set(Evas_Object *obj, double h_pagerel, double v_pagerel) EINA_ARG_NONNULL(1);
+   EAPI void               elm_gengrid_page_relative_get(const Evas_Object *obj, double *h_pagerel, double *v_pagerel) EINA_ARG_NONNULL(1);
    EAPI void               elm_gengrid_page_size_set(Evas_Object *obj, Evas_Coord h_pagesize, Evas_Coord v_pagesize) EINA_ARG_NONNULL(1);
    EAPI void               elm_gengrid_horizontal_set(Evas_Object *obj, Eina_Bool setting) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool          elm_gengrid_horizontal_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
 
    EAPI Elm_Gengrid_Item  *elm_gengrid_first_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI Elm_Gengrid_Item  *elm_gengrid_last_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
@@ -965,6 +3174,8 @@ extern "C" {
    EAPI Evas_Object       *elm_gengrid_item_gengrid_get(const Elm_Gengrid_Item *item) EINA_ARG_NONNULL(1);
    EAPI void               elm_gengrid_item_del(Elm_Gengrid_Item *item) EINA_ARG_NONNULL(1);
    EAPI void               elm_gengrid_item_update(Elm_Gengrid_Item *item) EINA_ARG_NONNULL(1);
+   EAPI const Elm_Gengrid_Item_Class *elm_gengrid_item_item_class_get(const Elm_Gengrid_Item *item) EINA_ARG_NONNULL(1);
+   EAPI void               elm_gengrid_item_item_class_set(Elm_Gengrid_Item *item, const Elm_Gengrid_Item_Class *gic) EINA_ARG_NONNULL(1, 2);
    EAPI void              *elm_gengrid_item_data_get(const Elm_Gengrid_Item *item) EINA_ARG_NONNULL(1);
    EAPI void               elm_gengrid_item_data_set(Elm_Gengrid_Item *item, const void *data) EINA_ARG_NONNULL(1);
    EAPI void               elm_gengrid_item_pos_get(const Elm_Gengrid_Item *item, unsigned int *x, unsigned int *y) EINA_ARG_NONNULL(1);
@@ -997,13 +3208,15 @@ extern "C" {
    EAPI Elm_Gengrid_Item  *elm_gengrid_item_prepend(Evas_Object *obj, const Elm_Gengrid_Item_Class *gic, const void *data, Evas_Smart_Cb func, const void *func_data) EINA_ARG_NONNULL(1);
    EAPI Elm_Gengrid_Item  *elm_gengrid_item_insert_before(Evas_Object *obj, const Elm_Gengrid_Item_Class *gic, const void *data, Elm_Gengrid_Item *relative, Evas_Smart_Cb func, const void *func_data) EINA_ARG_NONNULL(1);
    EAPI Elm_Gengrid_Item  *elm_gengrid_item_insert_after(Evas_Object *obj, const Elm_Gengrid_Item_Class *gic, const void *data, Elm_Gengrid_Item *relative, Evas_Smart_Cb func, const void *func_data) EINA_ARG_NONNULL(1);
+   EAPI Elm_Gengrid_Item  *elm_gengrid_item_sorted_insert(Evas_Object *obj, const Elm_Gengrid_Item_Class *gic, const void *data, Eina_Compare_Cb comp, Evas_Smart_Cb func, const void *func_data) EINA_ARG_NONNULL(1);
+   EAPI Elm_Gengrid_Item  *elm_gengrid_item_direct_sorted_insert(Evas_Object *obj, const Elm_Gengrid_Item_Class *gic, const void *data, Eina_Compare_Cb comp, Evas_Smart_Cb func, const void *func_data);
    /* smart callbacks called:
     *
-    * selected - User has selected a item.
-    * unselected - User has unselected a item.
-    * clicked - User has double-clicked or pressed enter on a item.
-    * realized - An evas object for a item was built.
-    * unrealized - An evas object for a item was deleted.
+    * selected - User has selected an item.
+    * unselected - User has unselected an item.
+    * clicked,double - User has double-clicked or pressed enter on an item.
+    * realized - An evas object for an item was built.
+    * unrealized - An evas object for an item was deleted.
     * changed - An item has been added, removed, resized or moved,
     * or gengrid has been resized or horizontal property has been changed.
     * scroll - the content has been scrolled (moved).
@@ -1017,34 +3230,305 @@ extern "C" {
     * "drag,stop" - Gengrid is not being dragged.
     */
 
-   /* clock */
+   /**
+    * @defgroup Clock Clock
+    *
+    * This is a @b digital clock widget. In its default theme, it has a
+    * vintage "flipping numbers clock" appearance, which will animate
+    * sheets of individual algarisms individually as time goes by.
+    *
+    * A newly created clock will fetch system's time (already
+    * considering local time adjustments) to start with, and will tick
+    * accondingly. It may or may not show seconds.
+    *
+    * Clocks have an @b edition mode. When in it, the sheets will
+    * display extra arrow indications on the top and bottom and the
+    * user may click on them to raise or lower the time values. After
+    * it's told to exit edition mode, it will keep ticking with that
+    * new time set (it keeps the difference from local time).
+    *
+    * Also, when under edition mode, user clicks on the cited arrows
+    * which are @b held for some time will make the clock to flip the
+    * sheet, thus editing the time, continuosly and automatically for
+    * the user. The interval between sheet flips will keep growing in
+    * time, so that it helps the user to reach a time which is distant
+    * from the one set.
+    *
+    * The time display is, by default, in military mode (24h), but an
+    * am/pm indicator may be optionally shown, too, when it will
+    * switch to 12h.
+    *
+    * Smart callbacks one can register to:
+    * - "changed" - the clock's user changed the time
+    *
+    * Here is an example on its usage:
+    * @li @ref clock_example
+    */
+
+   /**
+    * @addtogroup Clock
+    * @{
+    */
+
+   /**
+    * Identifiers for which clock digits should be editable, when a
+    * clock widget is in edition mode. Values may be ORed together to
+    * make a mask, naturally.
+    *
+    * @see elm_clock_edit_set()
+    * @see elm_clock_digit_edit_set()
+    */
    typedef enum _Elm_Clock_Digedit
      {
-        ELM_CLOCK_NONE         = 0,
-        ELM_CLOCK_HOUR_DECIMAL = 1 << 0,
-        ELM_CLOCK_HOUR_UNIT    = 1 << 1,
-        ELM_CLOCK_MIN_DECIMAL  = 1 << 2,
-        ELM_CLOCK_MIN_UNIT     = 1 << 3,
-        ELM_CLOCK_SEC_DECIMAL  = 1 << 4,
-        ELM_CLOCK_SEC_UNIT     = 1 << 5,
-        ELM_CLOCK_ALL          = (1 << 6) - 1
+        ELM_CLOCK_NONE         = 0, /**< Default value. Means that all digits are editable, when in edition mode. */
+        ELM_CLOCK_HOUR_DECIMAL = 1 << 0, /**< Decimal algarism of hours value should be editable */
+        ELM_CLOCK_HOUR_UNIT    = 1 << 1, /**< Unit algarism of hours value should be editable */
+        ELM_CLOCK_MIN_DECIMAL  = 1 << 2, /**< Decimal algarism of minutes value should be editable */
+        ELM_CLOCK_MIN_UNIT     = 1 << 3, /**< Unit algarism of minutes value should be editable */
+        ELM_CLOCK_SEC_DECIMAL  = 1 << 4, /**< Decimal algarism of seconds value should be editable */
+        ELM_CLOCK_SEC_UNIT     = 1 << 5, /**< Unit algarism of seconds value should be editable */
+        ELM_CLOCK_ALL          = (1 << 6) - 1 /**< All digits should be editable */
      } Elm_Clock_Digedit;
 
+   /**
+    * Add a new clock widget to the given parent Elementary
+    * (container) object
+    *
+    * @param parent The parent object
+    * @return a new clock widget handle or @c NULL, on errors
+    *
+    * This function inserts a new clock widget on the canvas.
+    *
+    * @ingroup Clock
+    */
    EAPI Evas_Object      *elm_clock_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set a clock widget's time, programmatically
+    *
+    * @param obj The clock widget object
+    * @param hrs The hours to set
+    * @param min The minutes to set
+    * @param sec The secondes to set
+    *
+    * This function updates the time that is showed by the clock
+    * widget.
+    *
+    *  Values @b must be set within the following ranges:
+    * - 0 - 23, for hours
+    * - 0 - 59, for minutes
+    * - 0 - 59, for seconds,
+    *
+    * even if the clock is not in "military" mode.
+    *
+    * @warning The behavior for values set out of those ranges is @b
+    * indefined.
+    *
+    * @ingroup Clock
+    */
    EAPI void              elm_clock_time_set(Evas_Object *obj, int hrs, int min, int sec) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get a clock widget's time values
+    *
+    * @param obj The clock object
+    * @param[out] hrs Pointer to the variable to get the hours value
+    * @param[out] min Pointer to the variable to get the minutes value
+    * @param[out] sec Pointer to the variable to get the seconds value
+    *
+    * This function gets the time set for @p obj, returning
+    * it on the variables passed as the arguments to function
+    *
+    * @note Use @c NULL pointers on the time values you're not
+    * interested in: they'll be ignored by the function.
+    *
+    * @ingroup Clock
+    */
    EAPI void              elm_clock_time_get(const Evas_Object *obj, int *hrs, int *min, int *sec) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set whether a given clock widget is under <b>edition mode</b> or
+    * under (default) displaying-only mode.
+    *
+    * @param obj The clock object
+    * @param edit @c EINA_TRUE to put it in edition, @c EINA_FALSE to
+    * put it back to "displaying only" mode
+    *
+    * This function makes a clock's time to be editable or not <b>by
+    * user interaction</b>. When in edition mode, clocks @b stop
+    * ticking, until one brings them back to canonical mode. The
+    * elm_clock_digit_edit_set() function will influence which digits
+    * of the clock will be editable. By default, all of them will be
+    * (#ELM_CLOCK_NONE).
+    *
+    * @note am/pm sheets, if being shown, will @b always be editable
+    * under edition mode.
+    *
+    * @see elm_clock_edit_get()
+    *
+    * @ingroup Clock
+    */
    EAPI void              elm_clock_edit_set(Evas_Object *obj, Eina_Bool edit) EINA_ARG_NONNULL(1);
+
+   /**
+    * Retrieve whether a given clock widget is under <b>edition
+    * mode</b> or under (default) displaying-only mode.
+    *
+    * @param obj The clock object
+    * @param edit @c EINA_TRUE, if it's in edition mode, @c EINA_FALSE
+    * otherwise
+    *
+    * This function retrieves whether the clock's time can be edited
+    * or not by user interaction.
+    *
+    * @see elm_clock_edit_set() for more details
+    *
+    * @ingroup Clock
+    */
    EAPI Eina_Bool         elm_clock_edit_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set what digits of the given clock widget should be editable
+    * when in edition mode.
+    *
+    * @param obj The clock object
+    * @param digedit Bit mask indicating the digits to be editable
+    * (values in #Elm_Clock_Digedit).
+    *
+    * If the @p digedit param is #ELM_CLOCK_NONE, editing will be
+    * disabled on @p obj (same effect as elm_clock_edit_set(), with @c
+    * EINA_FALSE).
+    *
+    * @see elm_clock_digit_edit_get()
+    *
+    * @ingroup Clock
+    */
    EAPI void              elm_clock_digit_edit_set(Evas_Object *obj, Elm_Clock_Digedit digedit) EINA_ARG_NONNULL(1);
+
+   /**
+    * Retrieve what digits of the given clock widget should be
+    * editable when in edition mode.
+    *
+    * @param obj The clock object
+    * @return Bit mask indicating the digits to be editable
+    * (values in #Elm_Clock_Digedit).
+    *
+    * @see elm_clock_digit_edit_set() for more details
+    *
+    * @ingroup Clock
+    */
    EAPI Elm_Clock_Digedit elm_clock_digit_edit_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set if the given clock widget must show hours in military or
+    * am/pm mode
+    *
+    * @param obj The clock object
+    * @param am_pm @c EINA_TRUE to put it in am/pm mode, @c EINA_FALSE
+    * to military mode
+    *
+    * This function sets if the clock must show hours in military or
+    * am/pm mode. In some countries like Brazil the military mode
+    * (00-24h-format) is used, in opposition to the USA, where the
+    * am/pm mode is more commonly used.
+    *
+    * @see elm_clock_show_am_pm_get()
+    *
+    * @ingroup Clock
+    */
    EAPI void              elm_clock_show_am_pm_set(Evas_Object *obj, Eina_Bool am_pm) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get if the given clock widget shows hours in military or am/pm
+    * mode
+    *
+    * @param obj The clock object
+    * @return @c EINA_TRUE, if in am/pm mode, @c EINA_FALSE if in
+    * military
+    *
+    * This function gets if the clock shows hours in military or am/pm
+    * mode.
+    *
+    * @see elm_clock_show_am_pm_set() for more details
+    *
+    * @ingroup Clock
+    */
    EAPI Eina_Bool         elm_clock_show_am_pm_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set if the given clock widget must show time with seconds or not
+    *
+    * @param obj The clock object
+    * @param seconds @c EINA_TRUE to show seconds, @c EINA_FALSE otherwise
+    *
+    * This function sets if the given clock must show or not elapsed
+    * seconds. By default, they are @b not shown.
+    *
+    * @see elm_clock_show_seconds_get()
+    *
+    * @ingroup Clock
+    */
    EAPI void              elm_clock_show_seconds_set(Evas_Object *obj, Eina_Bool seconds) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get whether the given clock widget is showing time with seconds
+    * or not
+    *
+    * @param obj The clock object
+    * @return @c EINA_TRUE if it's showing seconds, @c EINA_FALSE otherwise
+    *
+    * This function gets whether @p obj is showing or not the elapsed
+    * seconds.
+    *
+    * @see elm_clock_show_seconds_set()
+    *
+    * @ingroup Clock
+    */
    EAPI Eina_Bool         elm_clock_show_seconds_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set the interval on time updates for an user mouse button hold
+    * on clock widgets' time edition.
+    *
+    * @param obj The clock object
+    * @param interval The (first) interval value in seconds
+    *
+    * This interval value is @b decreased while the user holds the
+    * mouse pointer either incrementing or decrementing a given the
+    * clock digit's value.
+    *
+    * This helps the user to get to a given time distant from the
+    * current one easier/faster, as it will start to flip quicker and
+    * quicker on mouse button holds.
+    *
+    * The calculation for the next flip interval value, starting from
+    * the one set with this call, is the previous interval divided by
+    * 1.05, so it decreases a little bit.
+    *
+    * The default starting interval value for automatic flips is
+    * @b 0.85 seconds.
+    *
+    * @see elm_clock_interval_get()
+    *
+    * @ingroup Clock
+    */
    EAPI void              elm_clock_interval_set(Evas_Object *obj, double interval) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get the interval on time updates for an user mouse button hold
+    * on clock widgets' time edition.
+    *
+    * @param obj The clock object
+    * @return The (first) interval value, in seconds, set on it
+    *
+    * @see elm_clock_interval_set() for more details
+    *
+    * @ingroup Clock
+    */
    EAPI double            elm_clock_interval_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   /* smart callbacks called:
-    * "changed" - the user changed the time
+
+   /**
+    * @}
     */
 
    /* layout */
@@ -1052,10 +3536,10 @@ extern "C" {
    EAPI Eina_Bool          elm_layout_file_set(Evas_Object *obj, const char *file, const char *group) EINA_ARG_NONNULL(1);
    EAPI Eina_Bool          elm_layout_theme_set(Evas_Object *obj, const char *clas, const char *group, const char *style) EINA_ARG_NONNULL(1);
    EAPI void               elm_layout_content_set(Evas_Object *obj, const char *swallow, Evas_Object *content) EINA_ARG_NONNULL(1);
-   EAPI const Evas_Object *elm_layout_content_get(const Evas_Object *obj, const char *swallow) EINA_ARG_NONNULL(1);
+   EAPI Evas_Object       *elm_layout_content_get(const Evas_Object *obj, const char *swallow) EINA_ARG_NONNULL(1);
    EAPI Evas_Object       *elm_layout_content_unset(Evas_Object *obj, const char *swallow) EINA_ARG_NONNULL(1);
-   EAPI void               elm_layout_text_set(Evas_Object *obj, const char *part, const char *text) EINA_ARG_NONNULL(1);
-   EAPI const char        *elm_layout_text_get(const Evas_Object *obj, const char *part) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void               elm_layout_text_set(Evas_Object *obj, const char *part, const char *text) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI const char        *elm_layout_text_get(const Evas_Object *obj, const char *part) EINA_ARG_NONNULL(1);
    EAPI void               elm_layout_box_append(Evas_Object *obj, const char *part, Evas_Object *child) EINA_ARG_NONNULL(1);
    EAPI void               elm_layout_box_prepend(Evas_Object *obj, const char *part, Evas_Object *child) EINA_ARG_NONNULL(1);
    EAPI void               elm_layout_box_insert_before(Evas_Object *obj, const char *part, Evas_Object *child, const Evas_Object *reference) EINA_ARG_NONNULL(1);
@@ -1133,6 +3617,7 @@ extern "C" {
  * Elementary naming convention for its parts.
  *
  * @ingroup Layout
+ * @deprecate use elm_object_text_* instead.
  */
 #define elm_layout_label_set(_ly, _txt) \
   elm_layout_text_set((_ly), "elm.text", (_txt))
@@ -1143,6 +3628,7 @@ extern "C" {
  * Elementary naming convention for its parts.
  *
  * @ingroup Layout
+ * @deprecate use elm_object_text_* instead.
  */
 #define elm_layout_label_get(_ly) \
   elm_layout_text_get((_ly), "elm.text")
@@ -1256,11 +3742,13 @@ extern "C" {
    EAPI Eina_Bool    elm_entry_password_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void         elm_entry_entry_set(Evas_Object *obj, const char *entry) EINA_ARG_NONNULL(1);
    EAPI const char  *elm_entry_entry_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void         elm_entry_entry_append(Evas_Object *obj, const char *entry) EINA_ARG_NONNULL(1);
    EAPI Eina_Bool    elm_entry_is_empty(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI const char  *elm_entry_selection_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void         elm_entry_entry_insert(Evas_Object *obj, const char *entry) EINA_ARG_NONNULL(1);
-   EAPI void         elm_entry_line_wrap_set(Evas_Object *obj, Eina_Bool wrap) EINA_ARG_NONNULL(1);
-   EAPI void         elm_entry_line_char_wrap_set(Evas_Object *obj, Eina_Bool wrap) EINA_ARG_NONNULL(1);
+   EAPI void         elm_entry_line_wrap_set(Evas_Object *obj, Elm_Wrap_Type wrap) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_entry_line_char_wrap_set(Evas_Object *obj, Eina_Bool wrap) EINA_ARG_NONNULL(1);
+   EAPI Elm_Wrap_Type elm_entry_line_wrap_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void         elm_entry_editable_set(Evas_Object *obj, Eina_Bool editable) EINA_ARG_NONNULL(1);
    EAPI Eina_Bool    elm_entry_editable_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void         elm_entry_select_none(Evas_Object *obj) EINA_ARG_NONNULL(1);
@@ -1296,29 +3784,26 @@ extern "C" {
    EAPI void         elm_entry_text_filter_remove(Evas_Object *obj, void (*func) (void *data, Evas_Object *entry, char **text), void *data) EINA_ARG_NONNULL(1, 2);
    EAPI char        *elm_entry_markup_to_utf8(const char *s) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
    EAPI char        *elm_entry_utf8_to_markup(const char *s) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
-   EINA_DEPRECATED EAPI void         elm_entry_wrap_width_set(Evas_Object *obj, Evas_Coord w);
-   EINA_DEPRECATED EAPI Evas_Coord   elm_entry_wrap_width_get(const Evas_Object *obj);
-   EINA_DEPRECATED EAPI void         elm_entry_fontsize_set(Evas_Object *obj, int fontsize);
-   EINA_DEPRECATED EAPI void         elm_entry_text_color_set(Evas_Object *obj, unsigned int r, unsigned int g, unsigned int b, unsigned int a);
-   EINA_DEPRECATED EAPI void         elm_entry_text_align_set(Evas_Object *obj, const char *alignmode);
-   EAPI void         elm_entry_background_color_set(Evas_Object *obj, unsigned int r, unsigned int g, unsigned int b, unsigned int a);
    EAPI void         elm_entry_file_set(Evas_Object *obj, const char *file, Elm_Text_Format format) EINA_ARG_NONNULL(1);
    EAPI void         elm_entry_file_get(const Evas_Object *obj, const char **file, Elm_Text_Format *format) EINA_ARG_NONNULL(1);
    EAPI void         elm_entry_file_save(Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void         elm_entry_autosave_set(Evas_Object *obj, Eina_Bool autosave) EINA_ARG_NONNULL(1);
    EAPI Eina_Bool    elm_entry_autosave_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void         elm_entry_cnp_textonly_set(Evas_Object *obj, Eina_Bool textonly) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool    elm_entry_cnp_textonly_get(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_entry_autocapitalization_set(Evas_Object *obj, Eina_Bool autocap);
-   EAPI void         elm_entry_autoperiod_set(Evas_Object *obj, Eina_Bool autoperiod);
-   EAPI void         elm_entry_autoenable_returnkey_set(Evas_Object *obj, Eina_Bool on);
-   EAPI void         elm_entry_input_panel_enabled_set(Evas_Object *obj, Eina_Bool enabled);
-   EAPI void         elm_entry_input_panel_layout_set(Evas_Object *obj, Elm_Input_Panel_Layout layout);
-   EAPI Ecore_IMF_Context *elm_entry_imf_context_get(Evas_Object *obj);
-   EAPI void         elm_entry_matchlist_set(Evas_Object *obj, Eina_List *match_list, Eina_Bool case_sensitive);
-   EAPI Eina_Bool    elm_entry_is_empty(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_entry_magnifier_type_set(Evas_Object *obj, int type) EINA_ARG_NONNULL(1);
-
+   EAPI Eina_Bool    elm_entry_cnp_textonly_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void         elm_entry_scrollable_set(Evas_Object *obj, Eina_Bool scroll);
+   EAPI Eina_Bool    elm_entry_scrollable_get(const Evas_Object *obj);
+   EAPI void         elm_entry_icon_set(Evas_Object *obj, Evas_Object *icon);
+   EAPI Evas_Object *elm_entry_icon_get(const Evas_Object *obj);
+   EAPI Evas_Object *elm_entry_icon_unset(Evas_Object *obj);
+   EAPI void         elm_entry_icon_visible_set(Evas_Object *obj, Eina_Bool setting);
+   EAPI void         elm_entry_end_set(Evas_Object *obj, Evas_Object *end);
+   EAPI Evas_Object *elm_entry_end_get(const Evas_Object *obj);
+   EAPI Evas_Object *elm_entry_end_unset(Evas_Object *obj);
+   EAPI void         elm_entry_end_visible_set(Evas_Object *obj, Eina_Bool setting);
+   EAPI void         elm_entry_scrollbar_policy_set(Evas_Object *obj, Elm_Scroller_Policy h, Elm_Scroller_Policy v);
+   EAPI void         elm_entry_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_bounce);
+   EAPI void         elm_entry_bounce_get(const Evas_Object *obj, Eina_Bool *h_bounce, Eina_Bool *v_bounce);
 
    /* pre-made filters for entries */
    typedef struct _Elm_Entry_Filter_Limit_Size Elm_Entry_Filter_Limit_Size;
@@ -1335,6 +3820,22 @@ extern "C" {
         const char *rejected;
      };
    EAPI void         elm_entry_filter_accept_set(void *data, Evas_Object *entry, char **text) EINA_ARG_NONNULL(1, 3);
+   EAPI void         elm_entry_background_color_set(Evas_Object *obj, unsigned int r, unsigned int g, unsigned int b, unsigned int a);
+   EAPI void         elm_entry_autocapitalization_set(Evas_Object *obj, Eina_Bool autocap);
+   EAPI void         elm_entry_autoperiod_set(Evas_Object *obj, Eina_Bool autoperiod);
+   EAPI void         elm_entry_autoenable_returnkey_set(Evas_Object *obj, Eina_Bool on);
+   EAPI void         elm_entry_input_panel_enabled_set(Evas_Object *obj, Eina_Bool enabled);
+   EAPI void         elm_entry_input_panel_layout_set(Evas_Object *obj, Elm_Input_Panel_Layout layout);
+   EAPI Ecore_IMF_Context *elm_entry_imf_context_get(Evas_Object *obj);
+   EAPI void         elm_entry_matchlist_set(Evas_Object *obj, Eina_List *match_list, Eina_Bool case_sensitive);
+   EAPI void         elm_entry_magnifier_type_set(Evas_Object *obj, int type) EINA_ARG_NONNULL(1);
+
+   EINA_DEPRECATED EAPI void         elm_entry_wrap_width_set(Evas_Object *obj, Evas_Coord w);
+   EINA_DEPRECATED EAPI Evas_Coord   elm_entry_wrap_width_get(const Evas_Object *obj);
+   EINA_DEPRECATED EAPI void         elm_entry_fontsize_set(Evas_Object *obj, int fontsize);
+   EINA_DEPRECATED EAPI void         elm_entry_text_color_set(Evas_Object *obj, unsigned int r, unsigned int g, unsigned int b, unsigned int a);
+   EINA_DEPRECATED EAPI void         elm_entry_text_align_set(Evas_Object *obj, const char *alignmode);
+
    /* smart callbacks called:
     * "changed" - the text content changed
     * "selection,start" - the user started selecting text
@@ -1358,89 +3859,737 @@ extern "C" {
     * in convenient packages that do more than basic stuff */
 
    /* anchorview */
+   /**
+    * @defgroup Anchorview Anchorview
+    *
+    * Anchorview is for displaying text that contains markup with anchors
+    * like <c>\<a href=1234\>something\</\></c> in it.
+    *
+    * Besides being styled differently, the anchorview widget provides the
+    * necessary functionality so that clicking on these anchors brings up a
+    * popup with user defined content such as "call", "add to contacts" or
+    * "open web page". This popup is provided using the @ref Hover widget.
+    *
+    * This widget is very similar to @ref Anchorblock, so refer to that
+    * widget for an example. The only difference Anchorview has is that the
+    * widget is already provided with scrolling functionality, so if the
+    * text set to it is too large to fit in the given space, it will scroll,
+    * whereas the @ref Anchorblock widget will keep growing to ensure all the
+    * text can be displayed.
+    *
+    * This widget emits the following signals:
+    * @li "anchor,clicked": will be called when an anchor is clicked. The
+    * @p event_info parameter on the callback will be a pointer of type
+    * ::Elm_Entry_Anchorview_Info.
+    *
+    * See @ref Anchorblock for an example on how to use both of them.
+    *
+    * @see Anchorblock
+    * @see Entry
+    * @see Hover
+    *
+    * @{
+    */
+   /**
+    * @typedef Elm_Entry_Anchorview_Info
+    *
+    * The info sent in the callback for "anchor,clicked" signals emitted by
+    * the Anchorview widget.
+    */
    typedef struct _Elm_Entry_Anchorview_Info Elm_Entry_Anchorview_Info;
+   /**
+    * @struct _Elm_Entry_Anchorview_Info
+    *
+    * The info sent in the callback for "anchor,clicked" signals emitted by
+    * the Anchorview widget.
+    */
    struct _Elm_Entry_Anchorview_Info
      {
-        const char     *name;
-        int             button;
-        Evas_Object    *hover;
+        const char     *name; /**< Name of the anchor, as indicated in its href
+                                   attribute */
+        int             button; /**< The mouse button used to click on it */
+        Evas_Object    *hover; /**< The hover object to use for the popup */
         struct {
              Evas_Coord    x, y, w, h;
-        } anchor, hover_parent;
-        Eina_Bool       hover_left : 1;
-        Eina_Bool       hover_right : 1;
-        Eina_Bool       hover_top : 1;
-        Eina_Bool       hover_bottom : 1;
+        } anchor, /**< Geometry selection of text used as anchor */
+          hover_parent; /**< Geometry of the object used as parent by the
+                             hover */
+        Eina_Bool       hover_left : 1; /**< Hint indicating if there's space
+                                             for content on the left side of
+                                             the hover. Before calling the
+                                             callback, the widget will make the
+                                             necessary calculations to check
+                                             which sides are fit to be set with
+                                             content, based on the position the
+                                             hover is activated and its distance
+                                             to the edges of its parent object
+                                             */
+        Eina_Bool       hover_right : 1; /**< Hint indicating content fits on
+                                              the right side of the hover.
+                                              See @ref hover_left */
+        Eina_Bool       hover_top : 1; /**< Hint indicating content fits on top
+                                            of the hover. See @ref hover_left */
+        Eina_Bool       hover_bottom : 1; /**< Hint indicating content fits
+                                               below the hover. See @ref
+                                               hover_left */
      };
+   /**
+    * Add a new Anchorview object
+    *
+    * @param parent The parent object
+    * @return The new object or NULL if it cannot be created
+    */
    EAPI Evas_Object *elm_anchorview_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
-   EAPI void         elm_anchorview_text_set(Evas_Object *obj, const char *text) EINA_ARG_NONNULL(1);
-   EAPI const char  *elm_anchorview_text_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-
-   EAPI void         elm_anchorview_hover_parent_set(Evas_Object *obj, Evas_Object *parent) EINA_ARG_NONNULL(1);
-   EAPI Evas_Object *elm_anchorview_hover_parent_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_anchorview_hover_style_set(Evas_Object *obj, const char *style) EINA_ARG_NONNULL(1);
-   EAPI const char  *elm_anchorview_hover_style_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_anchorview_hover_end(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_anchorview_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_bounce) EINA_ARG_NONNULL(1);
-   EAPI void         elm_anchorview_bounce_get(const Evas_Object *obj, Eina_Bool *h_bounce, Eina_Bool *v_bounce) EINA_ARG_NONNULL(1);
+   /**
+    * Set the text to show in the anchorview
+    *
+    * Sets the text of the anchorview to @p text. This text can include markup
+    * format tags, including <c>\<a href=anchorname\></c> to begin a segment of
+    * text that will be specially styled and react to click events, ended with
+    * either of \</a\> or \</\>. When clicked, the anchor will emit an
+    * "anchor,clicked" signal that you can attach a callback to with
+    * evas_object_smart_callback_add(). The name of the anchor given in the
+    * event info struct will be the one set in the href attribute, in this
+    * case, anchorname.
+    *
+    * Other markup can be used to style the text in different ways, but it's
+    * up to the style defined in the theme which tags do what.
+    * @deprecated use elm_object_text_set() instead.
+    */
+   EINA_DEPRECATED EAPI void         elm_anchorview_text_set(Evas_Object *obj, const char *text) EINA_ARG_NONNULL(1);
+   /**
+    * Get the markup text set for the anchorview
+    *
+    * Retrieves the text set on the anchorview, with markup tags included.
+    *
+    * @param obj The anchorview object
+    * @return The markup text set or @c NULL if nothing was set or an error
+    * occurred
+    * @deprecated use elm_object_text_set() instead.
+    */
+   EINA_DEPRECATED EAPI const char  *elm_anchorview_text_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Set the parent of the hover popup
+    *
+    * Sets the parent object to use by the hover created by the anchorview
+    * when an anchor is clicked. See @ref Hover for more details on this.
+    * If no parent is set, the same anchorview object will be used.
+    *
+    * @param obj The anchorview object
+    * @param parent The object to use as parent for the hover
+    */
+   EAPI void         elm_anchorview_hover_parent_set(Evas_Object *obj, Evas_Object *parent) EINA_ARG_NONNULL(1);
+   /**
+    * Get the parent of the hover popup
+    *
+    * Get the object used as parent for the hover created by the anchorview
+    * widget. See @ref Hover for more details on this.
+    *
+    * @param obj The anchorview object
+    * @return The object used as parent for the hover, NULL if none is set.
+    */
+   EAPI Evas_Object *elm_anchorview_hover_parent_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Set the style that the hover should use
+    *
+    * When creating the popup hover, anchorview will request that it's
+    * themed according to @p style.
+    *
+    * @param obj The anchorview object
+    * @param style The style to use for the underlying hover
+    *
+    * @see elm_object_style_set()
+    */
+   EAPI void         elm_anchorview_hover_style_set(Evas_Object *obj, const char *style) EINA_ARG_NONNULL(1);
+   /**
+    * Get the style that the hover should use
+    *
+    * Get the style the hover created by anchorview will use.
+    *
+    * @param obj The anchorview object
+    * @return The style to use by the hover. NULL means the default is used.
+    *
+    * @see elm_object_style_set()
+    */
+   EAPI const char  *elm_anchorview_hover_style_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Ends the hover popup in the anchorview
+    *
+    * When an anchor is clicked, the anchorview widget will create a hover
+    * object to use as a popup with user provided content. This function
+    * terminates this popup, returning the anchorview to its normal state.
+    *
+    * @param obj The anchorview object
+    */
+   EAPI void         elm_anchorview_hover_end(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Set bouncing behaviour when the scrolled content reaches an edge
+    *
+    * Tell the internal scroller object whether it should bounce or not
+    * when it reaches the respective edges for each axis.
+    *
+    * @param obj The anchorview object
+    * @param h_bounce Whether to bounce or not in the horizontal axis
+    * @param v_bounce Whether to bounce or not in the vertical axis
+    *
+    * @see elm_scroller_bounce_set()
+    */
+   EAPI void         elm_anchorview_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_bounce) EINA_ARG_NONNULL(1);
+   /**
+    * Get the set bouncing behaviour of the internal scroller
+    *
+    * Get whether the internal scroller should bounce when the edge of each
+    * axis is reached scrolling.
+    *
+    * @param obj The anchorview object
+    * @param h_bounce Pointer where to store the bounce state of the horizontal
+    *                 axis
+    * @param v_bounce Pointer where to store the bounce state of the vertical
+    *                 axis
+    *
+    * @see elm_scroller_bounce_get()
+    */
+   EAPI void         elm_anchorview_bounce_get(const Evas_Object *obj, Eina_Bool *h_bounce, Eina_Bool *v_bounce) EINA_ARG_NONNULL(1);
+   /**
+    * Appends a custom item provider to the given anchorview
+    *
+    * Appends the given function to the list of items providers. This list is
+    * called, one function at a time, with the given @p data pointer, the
+    * anchorview object and, in the @p item parameter, the item name as
+    * referenced in its href string. Following functions in the list will be
+    * called in order until one of them returns something different to NULL,
+    * which should be an Evas_Object which will be used in place of the item
+    * element.
+    *
+    * Items in the markup text take the form \<item relsize=16x16 vsize=full
+    * href=item/name\>\</item\>
+    *
+    * @param obj The anchorview object
+    * @param func The function to add to the list of providers
+    * @param data User data that will be passed to the callback function
+    *
+    * @see elm_entry_item_provider_append()
+    */
    EAPI void         elm_anchorview_item_provider_append(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorview, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
+   /**
+    * Prepend a custom item provider to the given anchorview
+    *
+    * Like elm_anchorview_item_provider_append(), but it adds the function
+    * @p func to the beginning of the list, instead of the end.
+    *
+    * @param obj The anchorview object
+    * @param func The function to add to the list of providers
+    * @param data User data that will be passed to the callback function
+    */
    EAPI void         elm_anchorview_item_provider_prepend(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorview, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
+   /**
+    * Remove a custom item provider from the list of the given anchorview
+    *
+    * Removes the function and data pairing that matches @p func and @p data.
+    * That is, unless the same function and same user data are given, the
+    * function will not be removed from the list. This allows us to add the
+    * same callback several times, with different @p data pointers and be
+    * able to remove them later without conflicts.
+    *
+    * @param obj The anchorview object
+    * @param func The function to remove from the list
+    * @param data The data matching the function to remove from the list
+    */
    EAPI void         elm_anchorview_item_provider_remove(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorview, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
-   /* smart callbacks called:
-    * "anchor,clicked" - achor called was clicked | event_info = Elm_Entry_Anchorview_Info
+   /**
+    * @}
     */
 
    /* anchorblock */
+   /**
+    * @defgroup Anchorblock Anchorblock
+    *
+    * Anchorblock is for displaying text that contains markup with anchors
+    * like <c>\<a href=1234\>something\</\></c> in it.
+    *
+    * Besides being styled differently, the anchorblock widget provides the
+    * necessary functionality so that clicking on these anchors brings up a
+    * popup with user defined content such as "call", "add to contacts" or
+    * "open web page". This popup is provided using the @ref Hover widget.
+    *
+    * This widget emits the following signals:
+    * @li "anchor,clicked": will be called when an anchor is clicked. The
+    * @p event_info parameter on the callback will be a pointer of type
+    * ::Elm_Entry_Anchorblock_Info.
+    *
+    * @see Anchorview
+    * @see Entry
+    * @see Hover
+    *
+    * Since examples are usually better than plain words, we might as well
+    * try @ref tutorial_anchorblock_example "one".
+    */
+   /**
+    * @page tutorial_anchorblock_example Anchorblock/Anchorview example
+    * This exampel will show both Anchorblock and @ref Anchorview,
+    * since both are very similar and it's easier to show them once and side
+    * by side, so the difference is more clear.
+    *
+    * We'll show the relevant snippets of the code here, but the full example
+    * can be found here... sorry, @ref anchorblock_example_01.c "here".
+    *
+    * As for the actual example, it's just a simple window with an anchorblock
+    * and an anchorview, both containing the same text. After including
+    * Elementary.h and declaring some functions we'll need, we jump to our
+    * elm_main (see ELM_MAIN) and create our window.
+    * @dontinclude anchorblock_example_01.c
+    * @skip int
+    * @until const char
+    * @until ;
+    *
+    * With the needed variables declared, we'll create the window and a box to
+    * hold our widgets, but we don't need to go through that here.
+    *
+    * In order to make clear where the anchorblock ends and the anchorview
+    * begins, they'll be each inside a @ref Frame. After creating the frame,
+    * the anchorblock follows.
+    * @skip elm_frame_add
+    * @until elm_frame_content_set
+    *
+    * Nothing out of the ordinary there. What's worth mentioning is the call
+    * to elm_anchorblock_hover_parent_set(). We are telling our widget that
+    * when an anchor is clicked, the hover for the popup will cover the entire
+    * window. This affects the area that will be obscured by the hover and
+    * where clicking will dismiss it, as well as the calculations it does to
+    * inform the best locations where to insert the popups content.
+    * Other than that, the code is pretty standard. We also need to set our
+    * callback for when an anchor is clicked, since it's our task to populate
+    * the popup. There's no default for it.
+    *
+    * The anchorview is no different, we only change a few things so it looks
+    * different.
+    * @until elm_frame_content_set
+    *
+    * Then we run, so stuff works and close our main function in the usual way.
+    * @until ELM_MAIN
+    *
+    * Now, a little note. Normally you would use either one of anchorblock or
+    * anchorview, set your one callback to clicks and do your stuff in there.
+    * In this example, however, there are a few tricks to make it easier to
+    * show both widgets in one go (and to save me some typing). So we have
+    * two callbacks, one per widget, that will call a common function to do
+    * the rest. The trick is using ::Elm_Entry_Anchorblock_Info for the
+    * anchorview too, since both are equal, and passing a callback to use
+    * for our buttons to end the hover, because each widget has a different
+    * function for it.
+    * @until _anchorview_clicked_cb
+    * @until }
+    *
+    * The meat of our popup is in the following function. We check what kind
+    * of menu we need to show, based on the name set to the anchor in the
+    * markup text. If there's no type (something went wrong, no valid contact
+    * in the address list) we are just putting a button that does nothing, but
+    * it's perfectly reasonable to just end the hover and call it quits.
+    *
+    * Our popup will consist of one main button in the middle of our hover,
+    * and possibly a secondary button and a list of other options. We'll create
+    * first our main button and check what kind of popup we need afterwards.
+    * @skip static void
+    * @skip static void
+    * @until eina_stringshare_add
+    * @until }
+    *
+    * Each button has two callbacks, one is our hack to close the hover
+    * properly based on which widget it belongs to, the other a simple
+    * printf that will show the action with the anchors own data. This is
+    * not how you would usually do it. Instead, the common case is to have
+    * one callback for the button that will know which function to call to end
+    * things, but since we are doing it this way it's worth noting that
+    * smart callbacks will be called in reverse in respect to the order they
+    * were added, and since our @c btn_end_cb will close the hover, and thus
+    * delete our buttons, the other callback wouldn't be called if we had
+    * added it before.
+    *
+    * After our telephone popup, there are a few others that are practically
+    * the same, so they won't be shown here.
+    *
+    * Once we are done with that, it's time to place our actions into our
+    * hover. Main button goes in the middle without much questioning, and then
+    * we see if we have a secondary button and a box of extra options.
+    * Because I said so, secondary button goes on either side and box of
+    * options either on top or below the main one, but to choose which
+    * exactly, we use the hints our callback info has, which saves us from
+    * having to do the math and see which side has more space available, with
+    * a little special case where we delete our extra stuff if there's nowhere
+    * to place it.
+    * @skip url:
+    * @skip }
+    * @skip evas_object_smart
+    * @until evas_object_del(box)
+    * @until }
+    * @until }
+    *
+    * The example will look like this:
+    * @image html screenshots/anchorblock_01.png
+    * @image latex screenshots/anchorblock_01.eps
+    *
+    * @example anchorblock_example_01.c
+    */
+   /**
+    * @addtogroup Anchorblock
+    * @{
+    */
+   /**
+    * @typedef Elm_Entry_Anchorblock_Info
+    *
+    * The info sent in the callback for "anchor,clicked" signals emitted by
+    * the Anchorblock widget.
+    */
    typedef struct _Elm_Entry_Anchorblock_Info Elm_Entry_Anchorblock_Info;
+   /**
+    * @struct _Elm_Entry_Anchorblock_Info
+    *
+    * The info sent in the callback for "anchor,clicked" signals emitted by
+    * the Anchorblock widget.
+    */
    struct _Elm_Entry_Anchorblock_Info
      {
-        const char     *name;
-        int             button;
-        Evas_Object    *hover;
+        const char     *name; /**< Name of the anchor, as indicated in its href
+                                   attribute */
+        int             button; /**< The mouse button used to click on it */
+        Evas_Object    *hover; /**< The hover object to use for the popup */
         struct {
              Evas_Coord    x, y, w, h;
-        } anchor, hover_parent;
-        Eina_Bool       hover_left : 1;
-        Eina_Bool       hover_right : 1;
-        Eina_Bool       hover_top : 1;
-        Eina_Bool       hover_bottom : 1;
+        } anchor, /**< Geometry selection of text used as anchor */
+          hover_parent; /**< Geometry of the object used as parent by the
+                             hover */
+        Eina_Bool       hover_left : 1; /**< Hint indicating if there's space
+                                             for content on the left side of
+                                             the hover. Before calling the
+                                             callback, the widget will make the
+                                             necessary calculations to check
+                                             which sides are fit to be set with
+                                             content, based on the position the
+                                             hover is activated and its distance
+                                             to the edges of its parent object
+                                             */
+        Eina_Bool       hover_right : 1; /**< Hint indicating content fits on
+                                              the right side of the hover.
+                                              See @ref hover_left */
+        Eina_Bool       hover_top : 1; /**< Hint indicating content fits on top
+                                            of the hover. See @ref hover_left */
+        Eina_Bool       hover_bottom : 1; /**< Hint indicating content fits
+                                               below the hover. See @ref
+                                               hover_left */
      };
+   /**
+    * Add a new Anchorblock object
+    *
+    * @param parent The parent object
+    * @return The new object or NULL if it cannot be created
+    */
    EAPI Evas_Object *elm_anchorblock_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
-   EAPI void         elm_anchorblock_text_set(Evas_Object *obj, const char *text) EINA_ARG_NONNULL(1);
-   EAPI const char  *elm_anchorblock_text_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Set the text to show in the anchorblock
+    *
+    * Sets the text of the anchorblock to @p text. This text can include markup
+    * format tags, including <c>\<a href=anchorname\></a></c> to begin a segment
+    * of text that will be specially styled and react to click events, ended
+    * with either of \</a\> or \</\>. When clicked, the anchor will emit an
+    * "anchor,clicked" signal that you can attach a callback to with
+    * evas_object_smart_callback_add(). The name of the anchor given in the
+    * event info struct will be the one set in the href attribute, in this
+    * case, anchorname.
+    *
+    * Other markup can be used to style the text in different ways, but it's
+    * up to the style defined in the theme which tags do what.
+    * @deprecated use elm_object_text_set() instead.
+    */
+   EINA_DEPRECATED EAPI void         elm_anchorblock_text_set(Evas_Object *obj, const char *text) EINA_ARG_NONNULL(1);
+   /**
+    * Get the markup text set for the anchorblock
+    *
+    * Retrieves the text set on the anchorblock, with markup tags included.
+    *
+    * @param obj The anchorblock object
+    * @return The markup text set or @c NULL if nothing was set or an error
+    * occurred
+    * @deprecated use elm_object_text_set() instead.
+    */
+   EINA_DEPRECATED EAPI const char  *elm_anchorblock_text_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Set the parent of the hover popup
+    *
+    * Sets the parent object to use by the hover created by the anchorblock
+    * when an anchor is clicked. See @ref Hover for more details on this.
+    *
+    * @param obj The anchorblock object
+    * @param parent The object to use as parent for the hover
+    */
    EAPI void         elm_anchorblock_hover_parent_set(Evas_Object *obj, Evas_Object *parent) EINA_ARG_NONNULL(1);
+   /**
+    * Get the parent of the hover popup
+    *
+    * Get the object used as parent for the hover created by the anchorblock
+    * widget. See @ref Hover for more details on this.
+    * If no parent is set, the same anchorblock object will be used.
+    *
+    * @param obj The anchorblock object
+    * @return The object used as parent for the hover, NULL if none is set.
+    */
    EAPI Evas_Object *elm_anchorblock_hover_parent_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Set the style that the hover should use
+    *
+    * When creating the popup hover, anchorblock will request that it's
+    * themed according to @p style.
+    *
+    * @param obj The anchorblock object
+    * @param style The style to use for the underlying hover
+    *
+    * @see elm_object_style_set()
+    */
    EAPI void         elm_anchorblock_hover_style_set(Evas_Object *obj, const char *style) EINA_ARG_NONNULL(1);
+   /**
+    * Get the style that the hover should use
+    *
+    * Get the style the hover created by anchorblock will use.
+    *
+    * @param obj The anchorblock object
+    * @return The style to use by the hover. NULL means the default is used.
+    *
+    * @see elm_object_style_set()
+    */
    EAPI const char  *elm_anchorblock_hover_style_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Ends the hover popup in the anchorblock
+    *
+    * When an anchor is clicked, the anchorblock widget will create a hover
+    * object to use as a popup with user provided content. This function
+    * terminates this popup, returning the anchorblock to its normal state.
+    *
+    * @param obj The anchorblock object
+    */
    EAPI void         elm_anchorblock_hover_end(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Appends a custom item provider to the given anchorblock
+    *
+    * Appends the given function to the list of items providers. This list is
+    * called, one function at a time, with the given @p data pointer, the
+    * anchorblock object and, in the @p item parameter, the item name as
+    * referenced in its href string. Following functions in the list will be
+    * called in order until one of them returns something different to NULL,
+    * which should be an Evas_Object which will be used in place of the item
+    * element.
+    *
+    * Items in the markup text take the form \<item relsize=16x16 vsize=full
+    * href=item/name\>\</item\>
+    *
+    * @param obj The anchorblock object
+    * @param func The function to add to the list of providers
+    * @param data User data that will be passed to the callback function
+    *
+    * @see elm_entry_item_provider_append()
+    */
    EAPI void         elm_anchorblock_item_provider_append(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorblock, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
+   /**
+    * Prepend a custom item provider to the given anchorblock
+    *
+    * Like elm_anchorblock_item_provider_append(), but it adds the function
+    * @p func to the beginning of the list, instead of the end.
+    *
+    * @param obj The anchorblock object
+    * @param func The function to add to the list of providers
+    * @param data User data that will be passed to the callback function
+    */
    EAPI void         elm_anchorblock_item_provider_prepend(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorblock, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
+   /**
+    * Remove a custom item provider from the list of the given anchorblock
+    *
+    * Removes the function and data pairing that matches @p func and @p data.
+    * That is, unless the same function and same user data are given, the
+    * function will not be removed from the list. This allows us to add the
+    * same callback several times, with different @p data pointers and be
+    * able to remove them later without conflicts.
+    *
+    * @param obj The anchorblock object
+    * @param func The function to remove from the list
+    * @param data The data matching the function to remove from the list
+    */
    EAPI void         elm_anchorblock_item_provider_remove(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorblock, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
-   /* smart callbacks called:
-    * "anchor,clicked" - achor called was clicked | event_info = Elm_Entry_Anchorblock_Info
+   /**
+    * @}
     */
 
-   /* bubble */
+   /**
+    * @defgroup Bubble Bubble
+    *
+    * @brief The Bubble is a widget to show text similarly to how speech is
+    * represented in comics.
+    *
+    * The bubble widget contains 5 important visual elements:
+    * @li The frame is a rectangle with rounded rectangles and an "arrow".
+    * @li The @p icon is an image to which the frame's arrow points to.
+    * @li The @p label is a text which appears to the right of the icon if the
+    * corner is "top_left" or "bottom_left" and is right aligned to the frame
+    * otherwise.
+    * @li The @p info is a text which appears to the right of the label. Info's
+    * font is of a ligther color than label.
+    * @li The @p content is an evas object that is shown inside the frame.
+    *
+    * The position of the arrow, icon, label and info depends on which corner is
+    * selected. The four available corners are:
+    * @li "top_left" - Default
+    * @li "top_right"
+    * @li "bottom_left"
+    * @li "bottom_right"
+    *
+    * Signals that you can add callbacks for are:
+    * @li "clicked" - This is called when a user has clicked the bubble.
+    *
+    * For an example of using a buble see @ref bubble_01_example_page "this".
+    *
+    * @{
+    */
+   /**
+    * Add a new bubble to the parent
+    *
+    * @param parent The parent object
+    * @return The new object or NULL if it cannot be created
+    *
+    * This function adds a text bubble to the given parent evas object.
+    */
    EAPI Evas_Object *elm_bubble_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
-   EAPI void         elm_bubble_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
-   EAPI const char  *elm_bubble_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_bubble_info_set(Evas_Object *obj, const char *info) EINA_ARG_NONNULL(1);
-   EAPI const char  *elm_bubble_info_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-
+   /**
+    * Set the label of the bubble
+    *
+    * @param obj The bubble object
+    * @param label The string to set in the label
+    *
+    * This function sets the title of the bubble. Where this appears depends on
+    * the selected corner.
+    * @deprecated use elm_object_text_set() instead.
+    */
+   EINA_DEPRECATED EAPI void         elm_bubble_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
+   /**
+    * Get the label of the bubble
+    *
+    * @param obj The bubble object
+    * @return The string of set in the label
+    *
+    * This function gets the title of the bubble.
+    * @deprecated use elm_object_text_set() instead.
+    */
+   EINA_DEPRECATED EAPI const char  *elm_bubble_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Set the info of the bubble
+    *
+    * @param obj The bubble object
+    * @param info The given info about the bubble
+    *
+    * This function sets the info of the bubble. Where this appears depends on
+    * the selected corner.
+    * @deprecated use elm_object_text_set() instead.
+    */
+   EINA_DEPRECATED EAPI void         elm_bubble_info_set(Evas_Object *obj, const char *info) EINA_ARG_NONNULL(1);
+   /**
+    * Get the info of the bubble
+    *
+    * @param obj The bubble object
+    *
+    * @return The "info" string of the bubble
+    *
+    * This function gets the info text.
+    * @deprecated use elm_object_text_set() instead.
+    */
+   EINA_DEPRECATED EAPI const char  *elm_bubble_info_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Set the content to be shown in the bubble
+    *
+    * Once the content object is set, a previously set one will be deleted.
+    * If you want to keep the old content object, use the
+    * elm_bubble_content_unset() function.
+    *
+    * @param obj The bubble object
+    * @param content The given content of the bubble
+    *
+    * This function sets the content shown on the middle of the bubble.
+    */
    EAPI void         elm_bubble_content_set(Evas_Object *obj, Evas_Object *content) EINA_ARG_NONNULL(1);
+   /**
+    * Get the content shown in the bubble
+    *
+    * Return the content object which is set for this widget.
+    *
+    * @param obj The bubble object
+    * @return The content that is being used
+    */
    EAPI Evas_Object *elm_bubble_content_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Unset the content shown in the bubble
+    *
+    * Unparent and return the content object which was set for this widget.
+    *
+    * @param obj The bubble object
+    * @return The content that was being used
+    */
    EAPI Evas_Object *elm_bubble_content_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Set the icon of the bubble
+    *
+    * Once the icon object is set, a previously set one will be deleted.
+    * If you want to keep the old content object, use the
+    * elm_icon_content_unset() function.
+    *
+    * @param obj The bubble object
+    * @param icon The given icon for the bubble
+    */
    EAPI void         elm_bubble_icon_set(Evas_Object *obj, Evas_Object *icon) EINA_ARG_NONNULL(1);
+   /**
+    * Get the icon of the bubble
+    *
+    * @param obj The bubble object
+    * @return The icon for the bubble
+    *
+    * This function gets the icon shown on the top left of bubble.
+    */
    EAPI Evas_Object *elm_bubble_icon_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Unset the icon of the bubble
+    *
+    * Unparent and return the icon object which was set for this widget.
+    *
+    * @param obj The bubble object
+    * @return The icon that was being used
+    */
    EAPI Evas_Object *elm_bubble_icon_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EINA_DEPRECATED EAPI void         elm_bubble_sweep_layout_set(Evas_Object *obj, Evas_Object *sweep) EINA_ARG_NONNULL(1);
-   EINA_DEPRECATED EAPI Evas_Object *elm_bubble_sweep_layout_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Set the corner of the bubble
+    *
+    * @param obj The bubble object.
+    * @param corner The given corner for the bubble.
+    *
+    * This function sets the corner of the bubble. The corner will be used to
+    * determine where the arrow in the frame points to and where label, icon and
+    * info arre shown.
+    *
+    * Possible values for corner are:
+    * @li "top_left" - Default
+    * @li "top_right"
+    * @li "bottom_left"
+    * @li "bottom_right"
+    */
    EAPI void         elm_bubble_corner_set(Evas_Object *obj, const char *corner) EINA_ARG_NONNULL(1, 2);
+   /**
+    * Get the corner of the bubble
+    *
+    * @param obj The bubble object.
+    * @return The given corner for the bubble.
+    *
+    * This function gets the selected corner of the bubble.
+    */
    EAPI const char  *elm_bubble_corner_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   /* smart callbacks called:
-    * "clicked" - the user clicked the bubble
-    * "sweep,left,right" - when bubble is sweeped from left to right, this signal is sent.
-    * "sweep,right,left" - when bubble is sweeped from right to left, this signal is sent.
+
+   EINA_DEPRECATED EAPI void         elm_bubble_sweep_layout_set(Evas_Object *obj, Evas_Object *sweep) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI Evas_Object *elm_bubble_sweep_layout_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * @}
     */
 
    /* photo */
@@ -1451,53 +4600,319 @@ extern "C" {
    EAPI void         elm_photo_editable_set(Evas_Object *obj, Eina_Bool set) EINA_ARG_NONNULL(1);
    /* smart callbacks called:
     * "clicked" - the user clicked the icon
-    * "drop" - Something was dropped on the widget
     * "drag,start" - Someone started dragging the image out of the object
     * "drag,end" - Dragged item was dropped (somewhere)
     */
 
-   /* thumb */
-   typedef enum _Elm_Thumb_Animation_Setting
+   /* gesture layer */
+   /** @defgroup Elm_Gesture_Layer Gesture Layer */
+   /**
+    * @enum _Elm_Gesture_Types
+    * Emum of supported gesture types.
+    * @ingroup Elm_Gesture_Layer
+    */
+   enum _Elm_Gesture_Types
      {
-        ELM_THUMB_ANIMATION_START = 0, /* Play animation once */
-        ELM_THUMB_ANIMATION_LOOP,      /* Keep playing animation until stop is requested */
-        ELM_THUMB_ANIMATION_STOP,
-        ELM_THUMB_ANIMATION_LAST
-     } Elm_Thumb_Animation_Setting;
+        ELM_GESTURE_FIRST = 0,
 
-   EAPI Evas_Object                 *elm_thumb_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
-   EAPI void                         elm_thumb_reload(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void                         elm_thumb_file_set(Evas_Object *obj, const char *file, const char *key) EINA_ARG_NONNULL(1);
-   EAPI void                         elm_thumb_file_get(const Evas_Object *obj, const char **file, const char **key) EINA_ARG_NONNULL(1);
-   EAPI void                         elm_thumb_path_get(const Evas_Object *obj, const char **file, const char **key) EINA_ARG_NONNULL(1);
-   EAPI void                         elm_thumb_animate_set(Evas_Object *obj, Elm_Thumb_Animation_Setting s) EINA_ARG_NONNULL(1);
-   EAPI Elm_Thumb_Animation_Setting  elm_thumb_animate_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void                        *elm_thumb_ethumb_client_get(void);
-   EAPI Eina_Bool                    elm_thumb_ethumb_client_connected(void);
-   EAPI Eina_Bool                    elm_thumb_editable_set(Evas_Object *obj, Eina_Bool edit) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool                    elm_thumb_editable_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   /* available styles:
-    * default
-    * noframe
-    */
-   /* smart callbacks called:
-    * "clicked" - This is called when a user has clicked the thumb without dragging around.
-    * "clicked,double" - This is called when a user has double-clicked the thumb.
-    * "press" - This is called when a user has pressed down the thumb.
-    * "generate,start" - The thumbnail generation started.
-    * "generate,stop" - The generation process stopped.
-    * "generate,error" - The generation failed.
-    * "load,error" - The thumbnail image loading failed.
+        ELM_GESTURE_N_TAPS, /**< N fingers single taps */
+        ELM_GESTURE_N_DOUBLE_TAPS, /**< N fingers double-single taps */
+        ELM_GESTURE_N_TRIPLE_TAPS, /**< N fingers triple-single taps */
+
+        ELM_GESTURE_MOMENTUM, /**< Reports momentum in the dircetion of move */
+
+        ELM_GESTURE_N_LINES, /**< N fingers line gesture */
+        ELM_GESTURE_N_FLICKS, /**< N fingers flick gesture */
+
+        ELM_GESTURE_ZOOM, /**< Zoom */
+        ELM_GESTURE_ROTATE, /**< Rotate */
+
+        ELM_GESTURE_LAST
+     };
+
+   /**
+    * @typedef Elm_Gesture_Types
+    * Type for Emum of supported gesture types.
+    * @ingroup Elm_Gesture_Layer
     */
+   typedef enum _Elm_Gesture_Types Elm_Gesture_Types;
 
-   /* hoversel */
+   /**
+    * @enum _Elm_Gesture_State
+    * Emum of gesture states.
+    * @ingroup Elm_Gesture_Layer
+    */
+   enum _Elm_Gesture_State
+     {
+        ELM_GESTURE_STATE_UNDEFINED = -1, /**< Gesture not STARTed */
+        ELM_GESTURE_STATE_START,          /**< Gesture STARTed     */
+        ELM_GESTURE_STATE_MOVE,           /**< Gesture is ongoing  */
+        ELM_GESTURE_STATE_END,            /**< Gesture completed   */
+        ELM_GESTURE_STATE_ABORT    /**< Onging gesture was ABORTed */
+     };
+   /**
+    * @typedef Elm_Gesture_State
+    * gesture states.
+    * @ingroup Elm_Gesture_Layer
+    */
+   typedef enum _Elm_Gesture_State Elm_Gesture_State;
+
+   /**
+    * @struct _Elm_Gesture_Taps_Info
+    * Struct holds taps info for user
+    * @ingroup Elm_Gesture_Layer
+    */
+   struct _Elm_Gesture_Taps_Info
+     {
+        Evas_Coord x, y;         /**< Holds center point between fingers */
+        unsigned int n;          /**< Number of fingers tapped           */
+        unsigned int timestamp;  /**< event timestamp       */
+     };
+
+   /**
+    * @typedef Elm_Gesture_Taps_Info
+    * holds taps info for user
+    * @ingroup Elm_Gesture_Layer
+    */
+   typedef struct _Elm_Gesture_Taps_Info Elm_Gesture_Taps_Info;
+
+   /**
+    * @struct _Elm_Gesture_Momentum_Info
+    * Struct holds momentum info for user
+    * x1 and y1 are not necessarily in sync
+    * x1 holds x value of x direction starting point
+    * and same holds for y1.
+    * This is noticeable when doing V-shape movement
+    * @ingroup Elm_Gesture_Layer
+    */
+   struct _Elm_Gesture_Momentum_Info
+     {  /* Report line ends, timestamps, and momentum computed        */
+        Evas_Coord x1; /**< Final-swipe direction starting point on X */
+        Evas_Coord y1; /**< Final-swipe direction starting point on Y */
+        Evas_Coord x2; /**< Final-swipe direction ending point on X   */
+        Evas_Coord y2; /**< Final-swipe direction ending point on Y   */
+
+        unsigned int tx; /**< Timestamp of start of final x-swipe */
+        unsigned int ty; /**< Timestamp of start of final y-swipe */
+
+        Evas_Coord mx; /**< Momentum on X */
+        Evas_Coord my; /**< Momentum on Y */
+     };
+
+   /**
+    * @typedef Elm_Gesture_Momentum_Info
+    * holds momentum info for user
+    * @ingroup Elm_Gesture_Layer
+    */
+    typedef struct _Elm_Gesture_Momentum_Info Elm_Gesture_Momentum_Info;
+
+   /**
+    * @struct _Elm_Gesture_Line_Info
+    * Struct holds line info for user
+    * @ingroup Elm_Gesture_Layer
+    */
+   struct _Elm_Gesture_Line_Info
+     {  /* Report line ends, timestamps, and momentum computed      */
+        Elm_Gesture_Momentum_Info momentum; /**< Line momentum info */
+        unsigned int n;            /**< Number of fingers (lines)   */
+        /* FIXME should be radians, bot degrees */
+        double angle;              /**< Angle (direction) of lines  */
+     };
+
+   /**
+    * @typedef _Elm_Gesture_Line_Info
+    * Holds line info for user
+    * @ingroup Elm_Gesture_Layer
+    */
+    typedef struct  _Elm_Gesture_Line_Info Elm_Gesture_Line_Info;
+
+   /**
+    * @struct _Elm_Gesture_Zoom_Info
+    * Struct holds zoom info for user
+    * @ingroup Elm_Gesture_Layer
+    */
+   struct _Elm_Gesture_Zoom_Info
+     {
+        Evas_Coord x, y;       /**< Holds zoom center point reported to user  */
+        Evas_Coord radius; /**< Holds radius between fingers reported to user */
+        float zoom;            /**< Zoom value: 1.0 means no zoom             */
+        float momentum;        /**< Zoom momentum: zoom growth per second (NOT YET SUPPORTED) */
+     };
+
+   /**
+    * @typedef Elm_Gesture_Zoom_Info
+    * Holds zoom info for user
+    * @ingroup Elm_Gesture_Layer
+    */
+   typedef struct _Elm_Gesture_Zoom_Info Elm_Gesture_Zoom_Info;
+
+   /**
+    * @struct _Elm_Gesture_Rotate_Info
+    * Struct holds rotation info for user
+    * @ingroup Elm_Gesture_Layer
+    */
+   struct _Elm_Gesture_Rotate_Info
+     {
+        Evas_Coord x, y;   /**< Holds zoom center point reported to user      */
+        Evas_Coord radius; /**< Holds radius between fingers reported to user */
+        double base_angle; /**< Holds start-angle */
+        double angle;      /**< Rotation value: 0.0 means no rotation         */
+        double momentum;   /**< Rotation momentum: rotation done per second (NOT YET SUPPORTED) */
+     };
+
+   /**
+    * @typedef Elm_Gesture_Rotate_Info
+    * Holds rotation info for user
+    * @ingroup Elm_Gesture_Layer
+    */
+   typedef struct _Elm_Gesture_Rotate_Info Elm_Gesture_Rotate_Info;
+
+   /**
+    * @typedef Elm_Gesture_Event_Cb
+    * User callback used to stream gesture info from gesture layer
+    * @param data user data
+    * @param event_info gesture report info
+    * Returns a flag field to be applied on the causing event.
+    * You should probably return EVAS_EVENT_FLAG_ON_HOLD if your widget acted
+    * upon the event, in an irreversible way.
+    *
+    * @ingroup Elm_Gesture_Layer
+    */
+   typedef Evas_Event_Flags (*Elm_Gesture_Event_Cb) (void *data, void *event_info);
+
+   /**
+    * Use function to set callbacks to be notified about
+    * change of state of gesture.
+    * When a user registers a callback with this function
+    * this means this gesture has to be tested.
+    *
+    * When ALL callbacks for a gesture are set to NULL
+    * it means user isn't interested in gesture-state
+    * and it will not be tested.
+    *
+    * @param obj Pointer to gesture-layer.
+    * @param idx The gesture you would like to track its state.
+    * @param cb callback function pointer.
+    * @param cb_type what event this callback tracks: START, MOVE, END, ABORT.
+    * @param data user info to be sent to callback (usually, Smart Data)
+    *
+    * @ingroup Elm_Gesture_Layer
+    */
+   EAPI void elm_gesture_layer_cb_set(Evas_Object *obj, Elm_Gesture_Types idx, Elm_Gesture_State cb_type, Elm_Gesture_Event_Cb cb, void *data) EINA_ARG_NONNULL(1);
+
+   /**
+    * Call this function to get repeat-events settings.
+    *
+    * @param obj Pointer to gesture-layer.
+    *
+    * @return repeat events settings.
+    * @see elm_gesture_layer_hold_events_set()
+    * @ingroup Elm_Gesture_Layer
+    */
+   EAPI Eina_Bool elm_gesture_layer_hold_events_get(Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * This function called in order to make gesture-layer repeat events.
+    * Set this of you like to get the raw events only if gestures were not detected.
+    * Clear this if you like gesture layer to fwd events as testing gestures.
+    *
+    * @param obj Pointer to gesture-layer.
+    * @param r Repeat: TRUE/FALSE
+    *
+    * @ingroup Elm_Gesture_Layer
+    */
+   EAPI void elm_gesture_layer_hold_events_set(Evas_Object *obj, Eina_Bool r) EINA_ARG_NONNULL(1);
+
+   /**
+    * This function sets step-value for zoom action.
+    * Set step to any positive value.
+    * Cancel step setting by setting to 0.0
+    *
+    * @param obj Pointer to gesture-layer.
+    * @param s new zoom step value.
+    *
+    * @ingroup Elm_Gesture_Layer
+    */
+   EAPI void elm_gesture_layer_zoom_step_set(Evas_Object *obj, double s) EINA_ARG_NONNULL(1);
+
+   /**
+    * This function sets step-value for rotate action.
+    * Set step to any positive value.
+    * Cancel step setting by setting to 0.0
+    *
+    * @param obj Pointer to gesture-layer.
+    * @param s new roatate step value.
+    *
+    * @ingroup Elm_Gesture_Layer
+    */
+   EAPI void elm_gesture_layer_rotate_step_set(Evas_Object *obj, double s) EINA_ARG_NONNULL(1);
+
+   /**
+    * This function called to attach gesture-layer to an Evas_Object.
+    * @param obj Pointer to gesture-layer.
+    * @param t Pointer to underlying object (AKA Target)
+    *
+    * @return TRUE, FALSE on success, failure.
+    *
+    * @ingroup Elm_Gesture_Layer
+    */
+   EAPI Eina_Bool elm_gesture_layer_attach(Evas_Object *obj, Evas_Object *t) EINA_ARG_NONNULL(1, 2);
+
+   /**
+    * Call this function to construct a new gesture-layer object.
+    * This does not activate the gesture layer. You have to
+    * call elm_gesture_layer_attach in order to 'activate' gesture-layer.
+    *
+    * @param parent the parent object.
+    *
+    * @return Pointer to new gesture-layer object.
+    *
+    * @ingroup Elm_Gesture_Layer
+    */
+   EAPI Evas_Object *elm_gesture_layer_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
+
+   /* thumb */
+   typedef enum _Elm_Thumb_Animation_Setting
+     {
+        ELM_THUMB_ANIMATION_START = 0, /* Play animation once */
+        ELM_THUMB_ANIMATION_LOOP,      /* Keep playing animation until stop is requested */
+        ELM_THUMB_ANIMATION_STOP,
+        ELM_THUMB_ANIMATION_LAST
+     } Elm_Thumb_Animation_Setting;
+
+   EAPI Evas_Object                 *elm_thumb_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
+   EAPI void                         elm_thumb_reload(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void                         elm_thumb_file_set(Evas_Object *obj, const char *file, const char *key) EINA_ARG_NONNULL(1);
+   EAPI void                         elm_thumb_file_get(const Evas_Object *obj, const char **file, const char **key) EINA_ARG_NONNULL(1);
+   EAPI void                         elm_thumb_path_get(const Evas_Object *obj, const char **file, const char **key) EINA_ARG_NONNULL(1);
+   EAPI void                         elm_thumb_animate_set(Evas_Object *obj, Elm_Thumb_Animation_Setting s) EINA_ARG_NONNULL(1);
+   EAPI Elm_Thumb_Animation_Setting  elm_thumb_animate_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void                        *elm_thumb_ethumb_client_get(void);
+   EAPI Eina_Bool                    elm_thumb_ethumb_client_connected(void);
+   EAPI Eina_Bool                    elm_thumb_editable_set(Evas_Object *obj, Eina_Bool edit) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool                    elm_thumb_editable_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /* available styles:
+    * default
+    * noframe
+    */
+   /* smart callbacks called:
+    * "clicked" - This is called when a user has clicked the thumb without dragging around.
+    * "clicked,double" - This is called when a user has double-clicked the thumb.
+    * "press" - This is called when a user has pressed down the thumb.
+    * "generate,start" - The thumbnail generation started.
+    * "generate,stop" - The generation process stopped.
+    * "generate,error" - The generation failed.
+    * "load,error" - The thumbnail image loading failed.
+    */
+
+   /* hoversel */
    EAPI Evas_Object       *elm_hoversel_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
    EAPI void               elm_hoversel_horizontal_set(Evas_Object *obj, Eina_Bool horizontal) EINA_ARG_NONNULL(1);
    EAPI Eina_Bool          elm_hoversel_horizontal_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void               elm_hoversel_hover_parent_set(Evas_Object *obj, Evas_Object *parent) EINA_ARG_NONNULL(1);
    EAPI Evas_Object       *elm_hoversel_hover_parent_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void               elm_hoversel_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
-   EAPI const char        *elm_hoversel_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void               elm_hoversel_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI const char        *elm_hoversel_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void               elm_hoversel_icon_set(Evas_Object *obj, Evas_Object *icon) EINA_ARG_NONNULL(1);
    EAPI Evas_Object       *elm_hoversel_icon_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI Evas_Object       *elm_hoversel_icon_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
@@ -1567,8 +4982,10 @@ extern "C" {
    EAPI Eina_Bool               elm_toolbar_item_separator_get(const Elm_Toolbar_Item *item) EINA_ARG_NONNULL(1);
    EAPI void                    elm_toolbar_mode_shrink_set(Evas_Object *obj, Elm_Toolbar_Shrink_Mode shrink_mode) EINA_ARG_NONNULL(1);
    EAPI Elm_Toolbar_Shrink_Mode elm_toolbar_mode_shrink_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void                    elm_toolbar_homogenous_set(Evas_Object *obj, Eina_Bool homogenous) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool               elm_toolbar_homogenous_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void                    elm_toolbar_homogeneous_set(Evas_Object *obj, Eina_Bool homogeneous) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool               elm_toolbar_homogeneous_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void    elm_toolbar_homogenous_set(Evas_Object *obj, Eina_Bool homogenous) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI Eina_Bool elm_toolbar_homogenous_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void                    elm_toolbar_menu_parent_set(Evas_Object *obj, Evas_Object *parent) EINA_ARG_NONNULL(1);
    EAPI Evas_Object            *elm_toolbar_menu_parent_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void                    elm_toolbar_align_set(Evas_Object *obj, double align) EINA_ARG_NONNULL(1);
@@ -1726,7 +5143,7 @@ extern "C" {
    EAPI void             elm_list_scroller_policy_set(Evas_Object *obj, Elm_Scroller_Policy policy_h, Elm_Scroller_Policy policy_v) EINA_ARG_NONNULL(1);
    EAPI void             elm_list_scroller_policy_get(const Evas_Object *obj, Elm_Scroller_Policy *policy_h, Elm_Scroller_Policy *policy_v) EINA_ARG_NONNULL(1);
    /* smart callbacks called:
-    * "clicked" - when the user double-clicked an item
+    * "clicked,double" - when the user double-clicked an item
     * "selected" - when the user selected an item
     * "unselected" - when the user selected an item
     * "longpressed" - an item in the hoversel list is long-pressed
@@ -1736,20 +5153,10 @@ extern "C" {
     * "scroll,edge,right" - the list is scrolled until the right edge
     */
 
-   // FIXME: incomplete - carousel. don't use this until this comment is removed
-   typedef struct _Elm_Carousel_Item Elm_Carousel_Item;
-   EAPI Evas_Object       *elm_carousel_add(Evas_Object *parent);
-   EAPI Elm_Carousel_Item *elm_carousel_item_add(Evas_Object *obj, Evas_Object *icon, const char *label, Evas_Smart_Cb func, const void *data);
-   EAPI void               elm_carousel_item_del(Elm_Carousel_Item *item);
-   EAPI void               elm_carousel_item_select(Elm_Carousel_Item *item);
-   /* smart callbacks called:
-    * "clicked" - when the user clicks on a carousel item and becomes selected
-    */
-
    /* slider */
    EAPI Evas_Object       *elm_slider_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
-   EAPI void               elm_slider_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
-   EAPI const char        *elm_slider_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void               elm_slider_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI const char        *elm_slider_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void               elm_slider_icon_set(Evas_Object *obj, Evas_Object *icon) EINA_ARG_NONNULL(1);
    EAPI Evas_Object       *elm_slider_icon_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI Evas_Object       *elm_slider_icon_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
@@ -1762,7 +5169,8 @@ extern "C" {
    EAPI const char        *elm_slider_unit_format_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void               elm_slider_indicator_format_set(Evas_Object *obj, const char *indicator) EINA_ARG_NONNULL(1);
    EAPI const char        *elm_slider_indicator_format_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void               elm_slider_indicator_format_function_set(Evas_Object *obj, const char *(*func)(double val)) EINA_ARG_NONNULL(1);
+  EAPI void                elm_slider_indicator_format_function_set(Evas_Object *obj, const char *(*func)(double val), void (*free_func)(const char *str)) EINA_ARG_NONNULL(1);
+  EAPI void                elm_slider_units_format_function_set(Evas_Object *obj, const char *(*func)(double val), void (*free_func)(const char *str)) EINA_ARG_NONNULL(1);
    EAPI void               elm_slider_horizontal_set(Evas_Object *obj, Eina_Bool horizontal) EINA_ARG_NONNULL(1);
    EAPI Eina_Bool          elm_slider_horizontal_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void               elm_slider_min_max_set(Evas_Object *obj, double min, double max) EINA_ARG_NONNULL(1);
@@ -1786,14 +5194,27 @@ extern "C" {
 
    /* actionslider */
 
-   typedef enum _Elm_Actionslider_Pos
-     {
-        ELM_ACTIONSLIDER_NONE = 0,
-        ELM_ACTIONSLIDER_LEFT = 1 << 0,
-        ELM_ACTIONSLIDER_CENTER = 1 << 1,
-        ELM_ACTIONSLIDER_RIGHT = 1 << 2,
-        ELM_ACTIONSLIDER_ALL = (1 << 3) -1
-     } Elm_Actionslider_Pos;
+   /**
+    * @addtogroup Actionslider Actionslider
+    *
+    * A actionslider is a switcher for 2 or 3 labels with customizable magnet
+    * properties. The indicator is the element the user drags to choose a label.
+    * When the position is set with magnet, when released the indicator will be
+    * moved to it if it's nearest the magnetized position.
+    *
+    * @note By default all positions are set as enabled.
+    *
+    * Signals that you can add callbacks for are:
+    *
+    * "selected" - when user selects an enabled position (the label is passed
+    *              as event info)".
+    * @n
+    * "pos_changed" - when the indicator reaches any of the positions("left",
+    *                 "right" or "center").
+    *
+    * See an example of actionslider usage @ref actionslider_example_page "here"
+    * @{
+    */
 
    typedef enum _Elm_Actionslider_Indicator_Pos
      {
@@ -1821,23 +5242,122 @@ extern "C" {
         ELM_ACTIONSLIDER_LABEL_BUTTON
      } Elm_Actionslider_Label_Pos;
 
-   EAPI Evas_Object                     *elm_actionslider_add(Evas_Object *parent);
-   EAPI void                             elm_actionslider_indicator_pos_set(Evas_Object *obj, Elm_Actionslider_Indicator_Pos pos);
-   EAPI Elm_Actionslider_Indicator_Pos   elm_actionslider_indicator_pos_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void                             elm_actionslider_magnet_pos_set(Evas_Object *obj, Elm_Actionslider_Magnet_Pos pos);
-   EAPI Elm_Actionslider_Magnet_Pos      elm_actionslider_magnet_pos_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void                             elm_actionslider_label_set(Evas_Object *obj, Elm_Actionslider_Label_Pos pos, const char *label);
-   EAPI void                             elm_actionslider_labels_get(const Evas_Object *obj, const char **left_label, const char **center_label, const char **right_label) EINA_ARG_NONNULL(1);
-   EAPI const char                      *elm_actionslider_selected_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void                             elm_actionslider_enabled_pos_set(Evas_Object *obj, Elm_Actionslider_Magnet_Pos pos) EINA_ARG_NONNULL(1);
-   EAPI Elm_Actionslider_Magnet_Pos      elm_actionslider_enabled_pos_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void                             elm_actionslider_indicator_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
-   EAPI const char                      *elm_actionslider_indicator_label_get(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void                             elm_actionslider_hold(Evas_Object *obj, Eina_Bool flag);
    /* smart callbacks called:
     * "indicator,position" - when a button reaches to the special position like "left", "right" and "center".
     */
 
+   /**
+    * Add a new actionslider to the parent.
+    *
+    * @param parent The parent object
+    * @return The new actionslider object or NULL if it cannot be created
+    */
+   EAPI Evas_Object          *elm_actionslider_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
+
+   /**
+   * Set actionslider label.
+   *
+   * @param[in] obj The actionslider object
+   * @param[in] pos The position of the label.
+   * (ELM_ACTIONSLIDER_LABEL_LEFT, ELM_ACTIONSLIDER_LABEL_RIGHT)
+   * @param label The label which is going to be set.
+   */
+   EAPI void               elm_actionslider_label_set(Evas_Object *obj, Elm_Actionslider_Label_Pos pos, const char *label) EINA_ARG_NONNULL(1);
+   /**
+    * Get actionslider labels.
+    *
+    * @param obj The actionslider object
+    * @param left_label A char** to place the left_label of @p obj into.
+    * @param center_label A char** to place the center_label of @p obj into.
+    * @param right_label A char** to place the right_label of @p obj into.
+    */
+   EAPI void                elm_actionslider_labels_get(const Evas_Object *obj, const char **left_label, const char **center_label, const char **right_label) EINA_ARG_NONNULL(1);
+   /**
+    * Get actionslider selected label.
+    *
+    * @param obj The actionslider object
+    * @return The selected label
+    */
+   EAPI const char           *elm_actionslider_selected_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Set actionslider indicator position.
+    *
+    * @param obj The actionslider object.
+    * @param pos The position of the indicator.
+    */
+   EAPI void                elm_actionslider_indicator_pos_set(Evas_Object *obj, Elm_Actionslider_Indicator_Pos pos) EINA_ARG_NONNULL(1);
+   /**
+    * Get actionslider indicator position.
+    *
+    * @param obj The actionslider object.
+    * @return The position of the indicator.
+    */
+   EAPI Elm_Actionslider_Indicator_Pos  elm_actionslider_indicator_pos_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Set actionslider magnet position. To make multiple positions magnets @c or
+    * them together(e.g.: ELM_ACTIONSLIDER_MAGNET_LEFT | ELM_ACTIONSLIDER_MAGNET_RIGHT)
+    *
+    * @param obj The actionslider object.
+    * @param pos Bit mask indicating the magnet positions.
+    */
+   EAPI void                elm_actionslider_magnet_pos_set(Evas_Object *obj, Elm_Actionslider_Magnet_Pos pos) EINA_ARG_NONNULL(1);
+   /**
+    * Get actionslider magnet position.
+    *
+    * @param obj The actionslider object.
+    * @return The positions with magnet property.
+    */
+   EAPI Elm_Actionslider_Magnet_Pos  elm_actionslider_magnet_pos_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Set actionslider enabled position. To set multiple positions as enabled @c or
+    * them together(e.g.: ELM_ACTIONSLIDER_MAGNET_LEFT | ELM_ACTIONSLIDER_MAGNET_RIGHT).
+    *
+    * @note All the positions are enabled by default.
+    *
+    * @param obj The actionslider object.
+    * @param pos Bit mask indicating the enabled positions.
+    */
+   EAPI void                  elm_actionslider_enabled_pos_set(Evas_Object *obj, Elm_Actionslider_Magnet_Pos pos) EINA_ARG_NONNULL(1);
+   /**
+    * Get actionslider enabled position.
+    *
+    * @param obj The actionslider object.
+    * @return The enabled positions.
+    */
+   EAPI Elm_Actionslider_Magnet_Pos  elm_actionslider_enabled_pos_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Set the label used on the indicator.
+    *
+    * @param obj The actionslider object
+    * @param label The label to be set on the indicator.
+    * @deprecated use elm_object_text_set() instead.
+    */
+   EINA_DEPRECATED EAPI void                  elm_actionslider_indicator_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
+   /**
+    * Get the label used on the indicator object.
+    *
+    * @param obj The actionslider object
+    * @return The indicator label
+    * @deprecated use elm_object_text_get() instead.
+    */
+   EINA_DEPRECATED EAPI const char           *elm_actionslider_indicator_label_get(Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+   * Hold actionslider object movement.
+   *
+   * @param[in] obj The actionslider object
+   * @param[in] flag Actionslider hold/release
+   * (EINA_TURE = hold/EIN_FALSE = release)
+   *
+   * @ingroup Actionslider
+   */
+   EAPI void                             elm_actionslider_hold(Evas_Object *obj, Eina_Bool flag) EINA_ARG_NONNULL(1);
+
+
+   /**
+    *
+    */
+
    /* genlist */
    typedef enum _Elm_Genlist_Item_Flags
      {
@@ -1950,9 +5470,15 @@ extern "C" {
    EAPI void               elm_genlist_item_cursor_engine_only_set(Elm_Genlist_Item *item, Eina_Bool engine_only) EINA_ARG_NONNULL(1);
    EAPI Eina_Bool          elm_genlist_item_cursor_engine_only_get(const Elm_Genlist_Item *item) EINA_ARG_NONNULL(1);
    EAPI void               elm_genlist_realized_items_update(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   /* smart callbacks called:
-    * "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.
+   EAPI void               elm_genlist_item_mode_set(Elm_Genlist_Item *it, const char *mode_type, Eina_Bool mode_set) EINA_ARG_NONNULL(1, 2);
+   EAPI const char        *elm_genlist_mode_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI const Elm_Genlist_Item *elm_genlist_mode_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   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.
     * "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
@@ -2026,30 +5552,162 @@ extern "C" {
    EAPI void               elm_genlist_pinch_zoom_set(Evas_Object *obj, Eina_Bool emode) EINA_ARG_NONNULL(1);
    EAPI void               elm_genlist_pinch_zoom_mode_set(Evas_Object *obj, Eina_Bool emode) EINA_ARG_NONNULL(1);
    EAPI Eina_Bool          elm_genlist_pinch_zoom_mode_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   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);
-   EAPI void               elm_genlist_item_mode_set(Elm_Genlist_Item *it, const char *mode_type, Eina_Bool mode_set) EINA_ARG_NONNULL(1, 2);
-   EAPI const char        *elm_genlist_mode_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI const Elm_Genlist_Item *elm_genlist_mode_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
 
-  /* check */
+   /**
+    * @page tutorial_check Check example
+    * @dontinclude check_example_01.c
+    *
+    * This example will show 2 checkboxes, one with just a label and the second
+    * one with both a label and an icon. This example also ilustrates how to
+    * have the checkbox change the value of a variable and how to react to those
+    * changes.
+    *
+    * We will start with the usual setup code:
+    * @until show(bg)
+    *
+    * And now we create our first checkbox, set its label, tell it to change
+    * the value of @p value when the checkbox stats is changed and ask to be
+    * notified of state changes:
+    * @until show
+    *
+    * For our second checkbox we are going to set an icon so we need to create
+    * and icon:
+    * @until show
+    * @note For simplicity we are using a rectangle as icon, but any evas object
+    * can be used.
+    *
+    * And for our second checkbox we set the label, icon and state to true:
+    * @until show
+    *
+    * We now do some more setup:
+    * @until ELM_MAIN
+    *
+    * And finally implement the callback that will be called when the first
+    * checkbox's state changes. This callback will use @p data to print a
+    * message:
+    * @until }
+    * @note This work because @p data is @p value(from the main function) and @p
+    * value is changed when the checkbox is changed.
+    *
+    * Our example will look like this:
+    * @image html screenshots/check_example_01.png
+    * @image latex screenshots/check_example_01.eps
+    *
+    * @example check_example_01.c
+    */
+   /**
+    * @defgroup Check Check
+    *
+    * @brief The check widget allows for toggling a value between true and
+    * false.
+    *
+    * Check objects are a lot like radio objects in layout and functionality
+    * except they do not work as a group, but independently and only toggle the
+    * value of a boolean from false to true (0 or 1). elm_check_state_set() sets
+    * the boolean state (1 for true, 0 for false), and elm_check_state_get()
+    * returns the current state. For convenience, like the radio objects, you
+    * can set a pointer to a boolean directly with elm_check_state_pointer_set()
+    * for it to modify.
+    *
+    * Signals that you can add callbacks for are:
+    * "changed" - This is called whenever the user changes the state of one of
+    *             the check object(event_info is NULL).
+    *
+    * @ref tutorial_check should give you a firm grasp of how to use this widget.
+    * @{
+    */
+   /**
+    * @brief Add a new Check object
+    *
+    * @param parent The parent object
+    * @return The new object or NULL if it cannot be created
+    */
    EAPI Evas_Object *elm_check_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
-   EAPI void         elm_check_label_set(Evas_Object *obj, const char *label); EINA_ARG_NONNULL(1)
-   EAPI const char  *elm_check_label_get(const Evas_Object *obj); EINA_ARG_NONNULL(1)
-   EAPI void         elm_check_icon_set(Evas_Object *obj, Evas_Object *icon); EINA_ARG_NONNULL(1)
-   EAPI Evas_Object *elm_check_icon_get(const Evas_Object *obj); EINA_ARG_NONNULL(1)
-   EAPI Evas_Object *elm_check_icon_unset(Evas_Object *obj); EINA_ARG_NONNULL(1)
-   EAPI void         elm_check_state_set(Evas_Object *obj, Eina_Bool state); EINA_ARG_NONNULL(1)
-   EAPI Eina_Bool    elm_check_state_get(const Evas_Object *obj); EINA_ARG_NONNULL(1)
-   EAPI void         elm_check_state_pointer_set(Evas_Object *obj, Eina_Bool *statep); EINA_ARG_NONNULL(1)
-   /* smart callbacks called:
-    * "changed" - This is called whenever the user changes the state of one of the check object.
+   /**
+    * @brief Set the text label of the check object
+    *
+    * @param obj The check object
+    * @param label The text label string in UTF-8
+    *
+    * @deprecated use elm_object_text_set() instead.
+    */
+   EINA_DEPRECATED EAPI void         elm_check_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
+   /**
+    * @brief Get the text label of the check object
+    *
+    * @param obj The check object
+    * @return The text label string in UTF-8
+    *
+    * @deprecated use elm_object_text_get() instead.
+    */
+   EINA_DEPRECATED EAPI const char  *elm_check_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * @brief Set the icon object of the check object
+    *
+    * @param obj The check object
+    * @param icon The icon object
+    *
+    * Once the icon object is set, a previously set one will be deleted.
+    * If you want to keep that old content object, use the
+    * elm_check_icon_unset() function.
+    */
+   EAPI void         elm_check_icon_set(Evas_Object *obj, Evas_Object *icon) EINA_ARG_NONNULL(1);
+   /**
+    * @brief Get the icon object of the check object
+    *
+    * @param obj The check object
+    * @return The icon object
+    */
+   EAPI Evas_Object *elm_check_icon_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * @brief Unset the icon used for the check object
+    *
+    * @param obj The check object
+    * @return The icon object that was being used
+    *
+    * Unparent and return the icon object which was set for this widget.
+    */
+   EAPI Evas_Object *elm_check_icon_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * @brief Set the on/off state of the check object
+    *
+    * @param obj The check object
+    * @param state The state to use (1 == on, 0 == off)
+    *
+    * This sets the state of the check. If set
+    * with elm_check_state_pointer_set() the state of that variable is also
+    * changed. Calling this @b doesn't cause the "changed" signal to be emited.
+    */
+   EAPI void         elm_check_state_set(Evas_Object *obj, Eina_Bool state) EINA_ARG_NONNULL(1);
+   /**
+    * @brief Get the state of the check object
+    *
+    * @param obj The check object
+    * @return The boolean state
+    */
+   EAPI Eina_Bool    elm_check_state_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * @brief Set a convenience pointer to a boolean to change
+    *
+    * @param obj The check object
+    * @param statep Pointer to the boolean to modify
+    *
+    * This sets a pointer to a boolean, that, in addition to the check objects
+    * state will also be modified directly. To stop setting the object pointed
+    * to simply use NULL as the @p statep parameter. If @p statep is not NULL,
+    * then when this is called, the check objects state will also be modified to
+    * reflect the value of the boolean @p statep points to, just like calling
+    * elm_check_state_set().
+    */
+   EAPI void         elm_check_state_pointer_set(Evas_Object *obj, Eina_Bool *statep) EINA_ARG_NONNULL(1);
+   /**
+    * @}
     */
 
    /* radio */
    EAPI Evas_Object *elm_radio_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
-   EAPI void         elm_radio_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
-   EAPI const char  *elm_radio_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_radio_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI const char  *elm_radio_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void         elm_radio_icon_set(Evas_Object *obj, Evas_Object *icon) EINA_ARG_NONNULL(1);
    EAPI Evas_Object *elm_radio_icon_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI Evas_Object *elm_radio_icon_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
@@ -2063,10 +5721,6 @@ extern "C" {
     * "changed" - when the radio status is changed
     */
 
-   EAPI Evas_Object *elm_page_control_add(Evas_Object *parent);
-   EAPI void         elm_page_control_page_count_set(Evas_Object *obj, unsigned int page_count);
-   EAPI        void         elm_page_control_page_id_set(Evas_Object *obj, unsigned int page_id);
-   EAPI unsigned int elm_page_control_page_id_get(Evas_Object *obj);
    /* pager */
    EAPI Evas_Object *elm_pager_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
    EAPI void         elm_pager_content_push(Evas_Object *obj, Evas_Object *content) EINA_ARG_NONNULL(1);
@@ -2104,6 +5758,7 @@ extern "C" {
 
    EAPI Evas_Object        *elm_slideshow_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
    EAPI Elm_Slideshow_Item *elm_slideshow_item_add(Evas_Object *obj, const Elm_Slideshow_Item_Class *itc, const void *data) EINA_ARG_NONNULL(1);
+   EAPI Elm_Slideshow_Item *elm_slideshow_item_sorted_insert(Evas_Object *obj, const Elm_Slideshow_Item_Class *itc, const void *data, Eina_Compare_Cb func) EINA_ARG_NONNULL(1);
    EAPI void                elm_slideshow_show(Elm_Slideshow_Item *item) EINA_ARG_NONNULL(1);
    EAPI void                elm_slideshow_next(Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void                elm_slideshow_previous(Evas_Object *obj) EINA_ARG_NONNULL(1);
@@ -2120,9 +5775,15 @@ extern "C" {
    EAPI void               *elm_slideshow_item_data_get(const Elm_Slideshow_Item *item) EINA_ARG_NONNULL(1);
    EAPI Elm_Slideshow_Item *elm_slideshow_item_current_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI Evas_Object*        elm_slideshow_item_object_get(const Elm_Slideshow_Item* item) EINA_ARG_NONNULL(1);
+   EAPI Elm_Slideshow_Item *elm_slideshow_item_nth_get(const Evas_Object *obj, unsigned int nth) EINA_ARG_NONNULL(1);
    EAPI const char         *elm_slideshow_layout_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void                elm_slideshow_layout_set(Evas_Object *obj, const char *layout) EINA_ARG_NONNULL(1);
    EAPI const Eina_List    *elm_slideshow_layouts_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void                elm_slideshow_cache_before_set(Evas_Object *obj, int count) EINA_ARG_NONNULL(1);
+   EAPI int                 elm_slideshow_cache_before_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void                elm_slideshow_cache_after_set(Evas_Object *obj, int count) EINA_ARG_NONNULL(1);
+   EAPI int                 elm_slideshow_cache_after_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI unsigned int        elm_slideshow_count_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    /* smart callbacks called:
     * "changed" - when the slideshow switch to another item
     */
@@ -2163,8 +5824,8 @@ extern "C" {
    EAPI void         elm_progressbar_pulse(Evas_Object *obj, Eina_Bool state) EINA_ARG_NONNULL(1);
    EAPI void         elm_progressbar_value_set(Evas_Object *obj, double val) EINA_ARG_NONNULL(1);
    EAPI double       elm_progressbar_value_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_progressbar_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
-   EAPI const char  *elm_progressbar_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_progressbar_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI const char  *elm_progressbar_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void         elm_progressbar_icon_set(Evas_Object *obj, Evas_Object *icon) EINA_ARG_NONNULL(1);
    EAPI Evas_Object *elm_progressbar_icon_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI Evas_Object *elm_progressbar_icon_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
@@ -2221,6 +5882,7 @@ extern "C" {
 
    EAPI Evas_Object    *elm_index_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
    EAPI void            elm_index_active_set(Evas_Object *obj, Eina_Bool active) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool       elm_index_active_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void            elm_index_item_level_set(Evas_Object *obj, int level) EINA_ARG_NONNULL(1);
    EAPI int             elm_index_item_level_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void           *elm_index_item_selected_get(const Evas_Object *obj, int level) EINA_ARG_NONNULL(1);
@@ -2237,7 +5899,7 @@ extern "C" {
    EAPI void            elm_index_item_data_set(Elm_Index_Item *it, const void *data) EINA_ARG_NONNULL(1);
    EAPI void            elm_index_item_del_cb_set(Elm_Index_Item *it, Evas_Smart_Cb func) EINA_ARG_NONNULL(1);
    EAPI const char     *elm_index_item_letter_get(const Elm_Index_Item *item) EINA_ARG_NONNULL(1);
-   EAPI void         elm_index_button_image_invisible_set(Evas_Object *obj, Eina_Bool invisible);
+   EAPI void            elm_index_button_image_invisible_set(Evas_Object *obj, Eina_Bool invisible) EINA_ARG_NONNULL(1);
    /* smart callbacks called:
     * "changed" - when the selected index item changes
     * "delay,changed" - when the selected index item changes, but after some small idle period
@@ -2278,8 +5940,8 @@ extern "C" {
     * "clicked,double" - when mouse/finger double-clicked
     * "load" - when photo load begins
     * "loaded" - when photo load done
-    * "load,details" - when detailed image load begins
-    * "loaded,details" - when detailed image load done
+    * "load,detail" - when detailed image load begins
+    * "loaded,detail" - when detailed image load done
     * "zoom,start" - when zooming started
     * "zoom,stop" - when zooming stopped
     * "zoom,change" - when auto zoom mode changed zoom level
@@ -2340,6 +6002,7 @@ extern "C" {
    typedef struct _Elm_Map_Group_Class     Elm_Map_Group_Class;
    typedef struct _Elm_Map_Route           Elm_Map_Route;
    typedef struct _Elm_Map_Name            Elm_Map_Name;
+   typedef struct _Elm_Map_Track           Elm_Map_Track;
 
    typedef Evas_Object *(*ElmMapMarkerGetFunc)      (Evas_Object *obj, Elm_Map_Marker *marker, void *data);
    typedef void         (*ElmMapMarkerDelFunc)      (Evas_Object *obj, Elm_Map_Marker *marker, void *data, Evas_Object *o);
@@ -2401,7 +6064,9 @@ extern "C" {
    EAPI const char           *elm_map_source_name_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void                  elm_map_route_source_set(Evas_Object *obj, Elm_Map_Route_Sources source) EINA_ARG_NONNULL(1);
    EAPI Elm_Map_Route_Sources elm_map_route_source_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void                  elm_map_source_zoom_min_set(Evas_Object *obj, int zoom) EINA_ARG_NONNULL(1);
    EAPI int                   elm_map_source_zoom_min_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void                  elm_map_source_zoom_max_set(Evas_Object *obj, int zoom) EINA_ARG_NONNULL(1);
    EAPI int                   elm_map_source_zoom_max_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void                  elm_map_user_agent_set(Evas_Object *obj, const char *user_agent) EINA_ARG_NONNULL(1, 2);
    EAPI const char           *elm_map_user_agent_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
@@ -2419,6 +6084,10 @@ extern "C" {
    EAPI void                  elm_map_rotate_get(const Evas_Object *obj, double *degree, Evas_Coord *cx, Evas_Coord *cy) EINA_ARG_NONNULL(1, 2, 3, 4);
    EAPI void                  elm_map_wheel_disabled_set(Evas_Object *obj, Eina_Bool disabled) EINA_ARG_NONNULL(1);
    EAPI Eina_Bool             elm_map_wheel_disabled_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+#ifdef ELM_EMAP
+   EAPI Evas_Object          *elm_map_track_add(Evas_Object *obj, EMap_Route *emap) EINA_ARG_NONNULL(1);
+#endif
+   EAPI void                  elm_map_track_remove(Evas_Object *obj, Evas_Object *route) EINA_ARG_NONNULL(1);
 
    /* smart callbacks called:
     * "clicked" - when image clicked
@@ -2437,6 +6106,17 @@ extern "C" {
     * "scroll,drag,stop" - dragging the contents around has stopped
     */
 
+   /* Route */
+   EAPI Evas_Object *elm_route_add(Evas_Object *parent);
+#ifdef ELM_EMAP
+   EAPI void elm_route_emap_set(Evas_Object *obj, EMap_Route *emap);
+#endif
+   EAPI double elm_route_lon_min_get(Evas_Object *obj);
+   EAPI double elm_route_lat_min_get(Evas_Object *obj);
+   EAPI double elm_route_lon_max_get(Evas_Object *obj);
+   EAPI double elm_route_lat_max_get(Evas_Object *obj);
+
+
    /* panel */
    typedef enum _Elm_Panel_Orient
      {
@@ -2487,8 +6167,26 @@ extern "C" {
         ELM_FLIP_CUBE_LEFT,
         ELM_FLIP_CUBE_RIGHT,
         ELM_FLIP_CUBE_UP,
-        ELM_FLIP_CUBE_DOWN
+        ELM_FLIP_CUBE_DOWN,
+        ELM_FLIP_PAGE_LEFT,
+        ELM_FLIP_PAGE_RIGHT,
+        ELM_FLIP_PAGE_UP,
+        ELM_FLIP_PAGE_DOWN
      } Elm_Flip_Mode;
+   typedef enum _Elm_Flip_Interaction
+     {
+        ELM_FLIP_INTERACTION_NONE,
+        ELM_FLIP_INTERACTION_ROTATE,
+        ELM_FLIP_INTERACTION_CUBE,
+        ELM_FLIP_INTERACTION_PAGE
+     } Elm_Flip_Interaction;
+   typedef enum _Elm_Flip_Direction
+     {
+        ELM_FLIP_DIRECTION_UP,
+        ELM_FLIP_DIRECTION_DOWN,
+        ELM_FLIP_DIRECTION_LEFT,
+        ELM_FLIP_DIRECTION_RIGHT
+     } Elm_Flip_Direction;
 
    EAPI Evas_Object *elm_flip_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
    EAPI void         elm_flip_content_front_set(Evas_Object *obj, Evas_Object *content) EINA_ARG_NONNULL(1);
@@ -2500,83 +6198,93 @@ extern "C" {
    EAPI Eina_Bool    elm_flip_front_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void         elm_flip_perspective_set(Evas_Object *obj, Evas_Coord foc, Evas_Coord x, Evas_Coord y) EINA_ARG_NONNULL(1);
    EAPI void         elm_flip_go(Evas_Object *obj, Elm_Flip_Mode mode) EINA_ARG_NONNULL(1);
+   EAPI void         elm_flip_interaction_set(Evas_Object *obj, Elm_Flip_Interaction mode);
+   EAPI Elm_Flip_Interaction elm_flip_interaction_get(const Evas_Object *obj);
+   EAPI void         elm_flip_interacton_direction_enabled_set(Evas_Object *obj, Elm_Flip_Direction dir, Eina_Bool enabled);
+   EAPI Eina_Bool    elm_flip_interacton_direction_enabled_get(Evas_Object *obj, Elm_Flip_Direction dir);
+   EAPI void         elm_flip_interacton_direction_hitsize_set(Evas_Object *obj, Elm_Flip_Direction dir, double hitsize);
+   EAPI double       elm_flip_interacton_direction_hitsize_get(Evas_Object *obj, Elm_Flip_Direction dir);
    /* smart callbacks called:
+    * "animate,begin" - when a flip animation was started
     * "animate,done" - when a flip animation is finished
     */
 
    /* scrolledentry */
-   EAPI Evas_Object *elm_scrolled_entry_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_single_line_set(Evas_Object *obj, Eina_Bool single_line) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool    elm_scrolled_entry_single_line_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_password_set(Evas_Object *obj, Eina_Bool password) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool    elm_scrolled_entry_password_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_entry_set(Evas_Object *obj, const char *entry) EINA_ARG_NONNULL(1);
-   EAPI const char  *elm_scrolled_entry_entry_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool    elm_scrolled_entry_is_empty(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI const char  *elm_scrolled_entry_selection_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_entry_insert(Evas_Object *obj, const char *entry) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_line_wrap_set(Evas_Object *obj, Eina_Bool wrap) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_line_char_wrap_set(Evas_Object *obj, Eina_Bool wrap) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_editable_set(Evas_Object *obj, Eina_Bool editable) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool    elm_scrolled_entry_editable_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_select_none(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_select_all(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool    elm_scrolled_entry_cursor_next(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool    elm_scrolled_entry_cursor_prev(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool    elm_scrolled_entry_cursor_up(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool    elm_scrolled_entry_cursor_down(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_cursor_begin_set(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_cursor_end_set(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_cursor_line_begin_set(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_cursor_line_end_set(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_cursor_selection_begin(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_cursor_selection_end(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool    elm_scrolled_entry_cursor_is_format_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool    elm_scrolled_entry_cursor_is_visible_format_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI const char  *elm_scrolled_entry_cursor_content_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_selection_cut(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_selection_copy(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_selection_paste(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_context_menu_clear(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_context_menu_item_add(Evas_Object *obj, const char *label, const char *icon_file, Elm_Icon_Type icon_type, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_context_menu_disabled_set(Evas_Object *obj, Eina_Bool disabled) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool    elm_scrolled_entry_context_menu_disabled_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_scrollbar_policy_set(Evas_Object *obj, Elm_Scroller_Policy h, Elm_Scroller_Policy v) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_bounce) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_bounce_get(const Evas_Object *obj, Eina_Bool *h_bounce, Eina_Bool *v_bounce) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_icon_set(Evas_Object *obj, Evas_Object *icon) EINA_ARG_NONNULL(1, 2);
-   EAPI Evas_Object *elm_scrolled_entry_icon_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI Evas_Object *elm_scrolled_entry_icon_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_icon_visible_set(Evas_Object *obj, Eina_Bool setting) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_end_set(Evas_Object *obj, Evas_Object *end) EINA_ARG_NONNULL(1, 2);
-   EAPI Evas_Object *elm_scrolled_entry_end_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI Evas_Object *elm_scrolled_entry_end_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_end_visible_set(Evas_Object *obj, Eina_Bool setting) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_item_provider_append(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *entry, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
-   EAPI void         elm_scrolled_entry_item_provider_prepend(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *entry, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
-   EAPI void         elm_scrolled_entry_item_provider_remove(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *entry, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
-   EAPI void         elm_scrolled_entry_text_filter_append(Evas_Object *obj, void (*func) (void *data, Evas_Object *entry, char **text), void *data) EINA_ARG_NONNULL(1, 2);
-   EAPI void         elm_scrolled_entry_text_filter_prepend(Evas_Object *obj, void (*func) (void *data, Evas_Object *entry, char **text), void *data) EINA_ARG_NONNULL(1, 2);
-   EAPI void         elm_scrolled_entry_text_filter_remove(Evas_Object *obj, void (*func) (void *data, Evas_Object *entry, char **text), void *data) EINA_ARG_NONNULL(1, 2);
-   EAPI void         elm_scrolled_entry_file_set(Evas_Object *obj, const char *file, Elm_Text_Format format) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_file_get(const Evas_Object *obj, const char **file, Elm_Text_Format *format) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_file_save(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_autosave_set(Evas_Object *obj, Eina_Bool autosave) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool    elm_scrolled_entry_autosave_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_cnp_textonly_set(Evas_Object *obj, Eina_Bool textonly) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool    elm_scrolled_entry_cnp_textonly_get(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void         elm_scrolled_entry_input_panel_enabled_set(Evas_Object *obj, Eina_Bool enabled);
-   EAPI void         elm_scrolled_entry_input_panel_layout_set(Evas_Object *obj, Elm_Input_Panel_Layout layout);
-   EAPI Ecore_IMF_Context *elm_scrolled_entry_imf_context_get(Evas_Object *obj);
-   EAPI void         elm_scrolled_entry_autocapitalization_set(Evas_Object *obj, Eina_Bool autocap);
-   EAPI void         elm_scrolled_entry_autoperiod_set(Evas_Object *obj, Eina_Bool autoperiod);
+   EINA_DEPRECATED EAPI Evas_Object *elm_scrolled_entry_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_single_line_set(Evas_Object *obj, Eina_Bool single_line) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI Eina_Bool    elm_scrolled_entry_single_line_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_password_set(Evas_Object *obj, Eina_Bool password) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI Eina_Bool    elm_scrolled_entry_password_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_entry_set(Evas_Object *obj, const char *entry) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI const char  *elm_scrolled_entry_entry_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_entry_append(Evas_Object *obj, const char *entry) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI Eina_Bool    elm_scrolled_entry_is_empty(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI const char  *elm_scrolled_entry_selection_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_entry_insert(Evas_Object *obj, const char *entry) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_line_wrap_set(Evas_Object *obj, Elm_Wrap_Type wrap) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_editable_set(Evas_Object *obj, Eina_Bool editable) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI Eina_Bool    elm_scrolled_entry_editable_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_select_none(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_select_all(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI Eina_Bool    elm_scrolled_entry_cursor_next(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI Eina_Bool    elm_scrolled_entry_cursor_prev(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI Eina_Bool    elm_scrolled_entry_cursor_up(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI Eina_Bool    elm_scrolled_entry_cursor_down(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_cursor_begin_set(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_cursor_end_set(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_cursor_line_begin_set(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_cursor_line_end_set(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_cursor_selection_begin(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_cursor_selection_end(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI Eina_Bool    elm_scrolled_entry_cursor_is_format_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI Eina_Bool    elm_scrolled_entry_cursor_is_visible_format_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI const char  *elm_scrolled_entry_cursor_content_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_cursor_pos_set(Evas_Object *obj, int pos) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI int          elm_scrolled_entry_cursor_pos_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_selection_cut(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_selection_copy(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_selection_paste(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_context_menu_clear(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_context_menu_item_add(Evas_Object *obj, const char *label, const char *icon_file, Elm_Icon_Type icon_type, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_context_menu_disabled_set(Evas_Object *obj, Eina_Bool disabled) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI Eina_Bool    elm_scrolled_entry_context_menu_disabled_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_scrollbar_policy_set(Evas_Object *obj, Elm_Scroller_Policy h, Elm_Scroller_Policy v) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_bounce) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_bounce_get(const Evas_Object *obj, Eina_Bool *h_bounce, Eina_Bool *v_bounce) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_icon_set(Evas_Object *obj, Evas_Object *icon) EINA_ARG_NONNULL(1, 2);
+   EINA_DEPRECATED EAPI Evas_Object *elm_scrolled_entry_icon_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI Evas_Object *elm_scrolled_entry_icon_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_icon_visible_set(Evas_Object *obj, Eina_Bool setting) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_end_set(Evas_Object *obj, Evas_Object *end) EINA_ARG_NONNULL(1, 2);
+   EINA_DEPRECATED EAPI Evas_Object *elm_scrolled_entry_end_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI Evas_Object *elm_scrolled_entry_end_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_end_visible_set(Evas_Object *obj, Eina_Bool setting) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_item_provider_append(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *entry, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_item_provider_prepend(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *entry, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_item_provider_remove(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *entry, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_text_filter_append(Evas_Object *obj, void (*func) (void *data, Evas_Object *entry, char **text), void *data) EINA_ARG_NONNULL(1, 2);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_text_filter_prepend(Evas_Object *obj, void (*func) (void *data, Evas_Object *entry, char **text), void *data) EINA_ARG_NONNULL(1, 2);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_text_filter_remove(Evas_Object *obj, void (*func) (void *data, Evas_Object *entry, char **text), void *data) EINA_ARG_NONNULL(1, 2);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_file_set(Evas_Object *obj, const char *file, Elm_Text_Format format) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_file_get(const Evas_Object *obj, const char **file, Elm_Text_Format *format) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_file_save(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_autosave_set(Evas_Object *obj, Eina_Bool autosave) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI Eina_Bool    elm_scrolled_entry_autosave_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_cnp_textonly_set(Evas_Object *obj, Eina_Bool textonly) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI Eina_Bool    elm_scrolled_entry_cnp_textonly_get(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_line_char_wrap_set(Evas_Object *obj, Eina_Bool wrap) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_input_panel_enabled_set(Evas_Object *obj, Eina_Bool enabled);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_input_panel_layout_set(Evas_Object *obj, Elm_Input_Panel_Layout layout);
+   EINA_DEPRECATED EAPI Ecore_IMF_Context *elm_scrolled_entry_imf_context_get(Evas_Object *obj);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_autocapitalization_set(Evas_Object *obj, Eina_Bool autocap);
+   EINA_DEPRECATED EAPI void         elm_scrolled_entry_autoperiod_set(Evas_Object *obj, Eina_Bool autoperiod);
 
    /* conformant */
    EAPI Evas_Object *elm_conformant_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
    EAPI void         elm_conformant_content_set(Evas_Object *obj, Evas_Object *content) EINA_ARG_NONNULL(1);
    EAPI Evas_Object *elm_conformant_content_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI Evas_Object *elm_conformant_content_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI Evas_Object *elm_conformant_content_area_get(Evas_Object *obj); EINA_ARG_NONNULL(1);
+   EAPI Evas_Object *elm_conformant_content_area_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
 
    /* mapbuf */
    EAPI Evas_Object *elm_mapbuf_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
@@ -2590,157 +6298,1784 @@ extern "C" {
    EAPI void         elm_mapbuf_alpha_set(Evas_Object *obj, Eina_Bool alpha) EINA_ARG_NONNULL(1);
    EAPI Eina_Bool    elm_mapbuf_alpha_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
 
-   /* flipselector */
-   typedef struct _Elm_Flipselector_Item Elm_Flipselector_Item;
+   /**
+    * @defgroup Flipselector Flip Selector
+    *
+    * A flip selector is a widget to show a set of @b text items, one
+    * at a time, with the same sheet switching style as the @ref Clock
+    * "clock" widget, when one changes the current displaying sheet
+    * (thus, the "flip" in the name).
+    *
+    * User clicks to flip sheets which are @b held for some time will
+    * make the flip selector to flip continuosly and automatically for
+    * the user. The interval between flips will keep growing in time,
+    * so that it helps the user to reach an item which is distant from
+    * the current selection.
+    *
+    * Smart callbacks one can register to:
+    * - @c "selected" - when the widget's selected text item is changed
+    * - @c "overflowed" - when the widget's current selection is changed
+    *   from the first item in its list to the last
+    * - @c "underflowed" - when the widget's current selection is changed
+    *   from the last item in its list to the first
+    *
+    * Available styles for it:
+    * - @c "default"
+    *
+    * Here is an example on its usage:
+    * @li @ref flipselector_example
+    */
+
+   /**
+    * @addtogroup Flipselector
+    * @{
+    */
+
+   typedef struct _Elm_Flipselector_Item Elm_Flipselector_Item; /**< Item handle for a flip selector widget. */
 
+   /**
+    * Add a new flip selector widget to the given parent Elementary
+    * (container) widget
+    *
+    * @param parent The parent object
+    * @return a new flip selector widget handle or @c NULL, on errors
+    *
+    * This function inserts a new flip selector widget on the canvas.
+    *
+    * @ingroup Flipselector
+    */
    EAPI Evas_Object               *elm_flipselector_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
+
+   /**
+    * Programmatically select the next item of a flip selector widget
+    *
+    * @param obj The flipselector object
+    *
+    * @note The selection will be animated. Also, if it reaches the
+    * end of its list of member items, it will continue with the first
+    * one onwards.
+    *
+    * @ingroup Flipselector
+    */
    EAPI void                       elm_flipselector_flip_next(Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Programmatically select the previous item of a flip selector
+    * widget
+    *
+    * @param obj The flipselector object
+    *
+    * @note The selection will be animated.  Also, if it reaches the
+    * beginning of its list of member items, it will continue with the
+    * last one backwards.
+    *
+    * @ingroup Flipselector
+    */
    EAPI void                       elm_flipselector_flip_prev(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI Elm_Flipselector_Item     *elm_flipselector_item_append(Evas_Object *obj, const char *label, void (*func)(void *data, Evas_Object *obj, void *event_info), void *data) EINA_ARG_NONNULL(1);
-   EAPI Elm_Flipselector_Item     *elm_flipselector_item_prepend(Evas_Object *obj, const char *label, void (*func)(void *data, Evas_Object *obj, void *event_info), void *data) EINA_ARG_NONNULL(1);
+
+   /**
+    * Append a (text) item to a flip selector widget
+    *
+    * @param obj The flipselector object
+    * @param label The (text) label of the new item
+    * @param func Convenience callback function to take place when
+    * item is selected
+    * @param data Data passed to @p func, above
+    * @return A handle to the item added or @c NULL, on errors
+    *
+    * The widget's list of labels to show will be appended with the
+    * given value. If the user wishes so, a callback function pointer
+    * can be passed, which will get called when this same item is
+    * selected.
+    *
+    * @note The current selection @b won't be modified by appending an
+    * element to the list.
+    *
+    * @note The maximum length of the text label is going to be
+    * determined <b>by the widget's theme</b>. Strings larger than
+    * that value are going to be @b truncated.
+    *
+    * @ingroup Flipselector
+    */
+   EAPI Elm_Flipselector_Item     *elm_flipselector_item_append(Evas_Object *obj, const char *label, Evas_Smart_Cb func, void *data) EINA_ARG_NONNULL(1);
+
+   /**
+    * Prepend a (text) item to a flip selector widget
+    *
+    * @param obj The flipselector object
+    * @param label The (text) label of the new item
+    * @param func Convenience callback function to take place when
+    * item is selected
+    * @param data Data passed to @p func, above
+    * @return A handle to the item added or @c NULL, on errors
+    *
+    * The widget's list of labels to show will be prepended with the
+    * given value. If the user wishes so, a callback function pointer
+    * can be passed, which will get called when this same item is
+    * selected.
+    *
+    * @note The current selection @b won't be modified by prepending
+    * an element to the list.
+    *
+    * @note The maximum length of the text label is going to be
+    * determined <b>by the widget's theme</b>. Strings larger than
+    * that value are going to be @b truncated.
+    *
+    * @ingroup Flipselector
+    */
+   EAPI Elm_Flipselector_Item     *elm_flipselector_item_prepend(Evas_Object *obj, const char *label, Evas_Smart_Cb func, void *data) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get the internal list of items in a given flip selector widget.
+    *
+    * @param obj The flipselector object
+    * @return The list of items (#Elm_Flipselector_Item as data) or @c
+    * NULL on errors.
+    *
+    * This list is @b not to be modified in any way and must not be
+    * freed. Use the list members with functions like
+    * elm_flipselector_item_label_set(),
+    * elm_flipselector_item_label_get(), elm_flipselector_item_del(),
+    * elm_flipselector_item_del(),
+    * elm_flipselector_item_selected_get(),
+    * elm_flipselector_item_selected_set().
+    *
+    * @warning This list is only valid until @p obj object's internal
+    * items list is changed. It should be fetched again with another
+    * call to this function when changes happen.
+    *
+    * @ingroup Flipselector
+    */
    EAPI const Eina_List           *elm_flipselector_items_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get the first item in the given flip selector widget's list of
+    * items.
+    *
+    * @param obj The flipselector object
+    * @return The first item or @c NULL, if it has no items (and on
+    * errors)
+    *
+    * @see elm_flipselector_item_append()
+    * @see elm_flipselector_last_item_get()
+    *
+    * @ingroup Flipselector
+    */
    EAPI Elm_Flipselector_Item     *elm_flipselector_first_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get the last item in the given flip selector widget's list of
+    * items.
+    *
+    * @param obj The flipselector object
+    * @return The last item or @c NULL, if it has no items (and on
+    * errors)
+    *
+    * @see elm_flipselector_item_prepend()
+    * @see elm_flipselector_first_item_get()
+    *
+    * @ingroup Flipselector
+    */
    EAPI Elm_Flipselector_Item     *elm_flipselector_last_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get the currently selected item in a flip selector widget.
+    *
+    * @param obj The flipselector object
+    * @return The selected item or @c NULL, if the widget has no items
+    * (and on erros)
+    *
+    * @ingroup Flipselector
+    */
    EAPI Elm_Flipselector_Item     *elm_flipselector_selected_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set whether a given flip selector widget's item should be the
+    * currently selected one.
+    *
+    * @param item The flip selector item
+    * @param selected @c EINA_TRUE to select it, @c EINA_FALSE to unselect.
+    *
+    * This sets whether @p item is or not the selected (thus, under
+    * display) one. If @p item is different than one under display,
+    * the latter will be unselected. If the @p item is set to be
+    * unselected, on the other hand, the @b first item in the widget's
+    * internal members list will be the new selected one.
+    *
+    * @see elm_flipselector_item_selected_get()
+    *
+    * @ingroup Flipselector
+    */
    EAPI void                       elm_flipselector_item_selected_set(Elm_Flipselector_Item *item, Eina_Bool selected) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get whether a given flip selector widget's item is the currently
+    * selected one.
+    *
+    * @param item The flip selector item
+    * @return @c EINA_TRUE, if it's selected, @c EINA_FALSE otherwise
+    * (or on errors).
+    *
+    * @see elm_flipselector_item_selected_set()
+    *
+    * @ingroup Flipselector
+    */
    EAPI Eina_Bool                  elm_flipselector_item_selected_get(const Elm_Flipselector_Item *item) EINA_ARG_NONNULL(1);
+
+   /**
+    * Delete a given item from a flip selector widget.
+    *
+    * @param item The item to delete
+    *
+    * @ingroup Flipselector
+    */
    EAPI void                       elm_flipselector_item_del(Elm_Flipselector_Item *item) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get the label of a given flip selector widget's item.
+    *
+    * @param item The item to get label from
+    * @return The text label of @p item or @c NULL, on errors
+    *
+    * @see elm_flipselector_item_label_set()
+    *
+    * @ingroup Flipselector
+    */
    EAPI const char                *elm_flipselector_item_label_get(const Elm_Flipselector_Item *item) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set the label of a given flip selector widget's item.
+    *
+    * @param item The item to set label on
+    * @param label The text label string, in UTF-8 encoding
+    *
+    * @see elm_flipselector_item_label_get()
+    *
+    * @ingroup Flipselector
+    */
    EAPI void                       elm_flipselector_item_label_set(Elm_Flipselector_Item *item, const char *label) EINA_ARG_NONNULL(1);
+
+   /**
+    * Gets the item before @p item in a flip selector widget's
+    * internal list of items.
+    *
+    * @param item The item to fetch previous from
+    * @return The item before the @p item, in its parent's list. If
+    *         there is no previous item for @p item or there's an
+    *         error, @c NULL is returned.
+    *
+    * @see elm_flipselector_item_next_get()
+    *
+    * @ingroup Flipselector
+    */
    EAPI Elm_Flipselector_Item     *elm_flipselector_item_prev_get(Elm_Flipselector_Item *item) EINA_ARG_NONNULL(1);
+
+   /**
+    * Gets the item after @p item in a flip selector widget's
+    * internal list of items.
+    *
+    * @param item The item to fetch next from
+    * @return The item after the @p item, in its parent's list. If
+    *         there is no next item for @p item or there's an
+    *         error, @c NULL is returned.
+    *
+    * @see elm_flipselector_item_next_get()
+    *
+    * @ingroup Flipselector
+    */
    EAPI Elm_Flipselector_Item     *elm_flipselector_item_next_get(Elm_Flipselector_Item *item) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set the interval on time updates for an user mouse button hold
+    * on a flip selector widget.
+    *
+    * @param obj The flip selector object
+    * @param interval The (first) interval value in seconds
+    *
+    * This interval value is @b decreased while the user holds the
+    * mouse pointer either flipping up or flipping doww a given flip
+    * selector.
+    *
+    * This helps the user to get to a given item distant from the
+    * current one easier/faster, as it will start to flip quicker and
+    * quicker on mouse button holds.
+    *
+    * The calculation for the next flip interval value, starting from
+    * the one set with this call, is the previous interval divided by
+    * 1.05, so it decreases a little bit.
+    *
+    * The default starting interval value for automatic flips is
+    * @b 0.85 seconds.
+    *
+    * @see elm_flipselector_interval_get()
+    *
+    * @ingroup Flipselector
+    */
    EAPI void                       elm_flipselector_interval_set(Evas_Object *obj, double interval) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get the interval on time updates for an user mouse button hold
+    * on a flip selector widget.
+    *
+    * @param obj The flip selector object
+    * @return The (first) interval value, in seconds, set on it
+    *
+    * @see elm_flipselector_interval_set() for more details
+    *
+    * @ingroup Flipselector
+    */
    EAPI double                     elm_flipselector_interval_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   /* smart callbacks called:
-    * "selected" - when flipselector selected item is changed
-    * "overflowed" - when flipselector item is changed to first item
-    *                from last item
-    * "underflowed" - when flipselector item is changed to last item
-    *                 from first item.
+
+   /**
+    * @}
     */
-   /* available styles:
-    * default
+
+   /**
+    * @addtogroup Animator Animator
+    * @ingroup Elementary
+    *
+    * @brief Functions to ease creation of animations.
+    *
+    * elm_animator is designed to provide an easy way to create animations.
+    * Creating an animation with elm_animator is as simple as setting a
+    * duration, an operating callback and telling it to run the animation.
+    * However that is not the full extent of elm_animator's ability, animations
+    * can be paused and resumed, reversed and the animation need not be linear.
+    *
+    * To run an animation you must specify at least a duration and operation
+    * callback, not setting any other properties will create a linear animation
+    * that runs once and is not reversed.
+    *
+    * @ref elm_animator_example_page_01 "This" example should make all of that
+    * very clear.
+    *
+    * @warning elm_animator is @b not a widget.
+    * @{
+    */
+   /**
+    * @brief Type of curve desired for animation.
+    *
+    * The speed in which an animation happens doesn't have to be linear, some
+    * animations will look better if they're accelerating or decelerating, so
+    * elm_animator provides four options in this regard:
+    * @image html elm_animator_curve_style.png
+    * @image latex elm_animator_curve_style.eps width=\textwidth
+    * As can be seen in the image the speed of the animation will be:
+    * @li ELM_ANIMATOR_CURVE_LINEAR constant
+    * @li ELM_ANIMATOR_CURVE_IN_OUT start slow, speed up and then slow down
+    * @li ELM_ANIMATOR_CURVE_IN start slow and then speed up
+    * @li ELM_ANIMATOR_CURVE_OUT start fast and then slow down
+    */
+   typedef enum
+     {
+        ELM_ANIMATOR_CURVE_LINEAR,
+        ELM_ANIMATOR_CURVE_IN_OUT,
+        ELM_ANIMATOR_CURVE_IN,
+        ELM_ANIMATOR_CURVE_OUT
+     } Elm_Animator_Curve_Style;
+   typedef struct _Elm_Animator Elm_Animator;
+  /**
+   * Called back per loop of an elementary animators cycle
+   * @param data user-data given to elm_animator_operation_callback_set()
+   * @param animator the animator being run
+   * @param double the position in the animation
+   */
+   typedef void (*Elm_Animator_Operation_Cb) (void *data, Elm_Animator *animator, double frame);
+  /**
+   * Called back when an elementary animator finishes
+   * @param data user-data given to elm_animator_completion_callback_set()
+   */
+   typedef void (*Elm_Animator_Completion_Cb) (void *data);
+
+   /**
+    * @brief Create a new animator.
+    *
+    * @param[in] parent Parent object
+    *
+    * The @a parent argument can be set to NULL for no parent. If a parent is set
+    * there is no need to call elm_animator_del(), when the parent is deleted it
+    * will delete the animator.
+    * @deprecated Use @ref Transit instead.
+
+    */
+   EINA_DEPRECATED EAPI Elm_Animator*            elm_animator_add(Evas_Object *parent);
+   /**
+    * Deletes the animator freeing any resources it used. If the animator was
+    * created with a NULL parent this must be called, otherwise it will be
+    * automatically called when the parent is deleted.
+    *
+    * @param[in] animator Animator object
+    * @deprecated Use @ref Transit instead.
+    */
+   EINA_DEPRECATED EAPI void                     elm_animator_del(Elm_Animator *animator) EINA_ARG_NONNULL(1);
+   /**
+    * Set the duration of the animation.
+    *
+    * @param[in] animator Animator object
+    * @param[in] duration Duration in second
+    * @deprecated Use @ref Transit instead.
+    */
+   EINA_DEPRECATED EAPI void                     elm_animator_duration_set(Elm_Animator *animator, double duration) EINA_ARG_NONNULL(1);
+   /**
+    * @brief Set the callback function for animator operation.
+    *
+    * @param[in] animator Animator object
+    * @param[in] func @ref Elm_Animator_Operation_Cb "Callback" function pointer
+    * @param[in] data Callback function user argument
+    *
+    * The @p func callback will be called with a frame value in range [0, 1] which
+    * indicates how far along the animation should be. It is the job of @p func to
+    * actually change the state of any object(or objects) that are being animated.
+    * @deprecated Use @ref Transit instead.
+    */
+   EINA_DEPRECATED EAPI void                     elm_animator_operation_callback_set(Elm_Animator *animator, Elm_Animator_Operation_Cb func, void *data) EINA_ARG_NONNULL(1);
+   /**
+    * Set the callback function for the when the animation ends.
+    *
+    * @param[in]  animator Animator object
+    * @param[in]  func   Callback function pointe
+    * @param[in]  data Callback function user argument
+    *
+    * @warning @a func will not be executed if elm_animator_stop() is called.
+    * @deprecated Use @ref Transit instead.
+    */
+   EINA_DEPRECATED EAPI void                     elm_animator_completion_callback_set(Elm_Animator *animator, Elm_Animator_Completion_Cb func, void *data) EINA_ARG_NONNULL(1);
+   /**
+    * @brief Stop animator.
+    *
+    * @param[in] animator Animator object
+    *
+    * If called before elm_animator_animate() it does nothing. If there is an
+    * animation in progress the animation will be stopped(the operation callback
+    * will not be executed again) and it can't be restarted using
+    * elm_animator_resume().
+    * @deprecated Use @ref Transit instead.
     */
+   EINA_DEPRECATED EAPI void                     elm_animator_stop(Elm_Animator *animator) EINA_ARG_NONNULL(1);
+   /**
+    * Set the animator repeat count.
+    *
+    * @param[in]  animator Animator object
+    * @param[in]  repeat_cnt Repeat count
+    * @deprecated Use @ref Transit instead.
+    */
+   EINA_DEPRECATED EAPI void                     elm_animator_repeat_set(Elm_Animator *animator, unsigned int repeat_cnt) EINA_ARG_NONNULL(1);
+   /**
+    * @brief Start animation.
+    *
+    * @param[in] animator Animator object
+    *
+    * This function starts the animation if the nescessary properties(duration
+    * and operation callback) have been set. Once started the animation will
+    * run until complete or elm_animator_stop() is called.
+    * @deprecated Use @ref Transit instead.
+    */
+   EINA_DEPRECATED EAPI void                     elm_animator_animate(Elm_Animator *animator) EINA_ARG_NONNULL(1);
+   /**
+    * Sets the animation @ref Elm_Animator_Curve_Style "acceleration style".
+    *
+    * @param[in] animator Animator object
+    * @param[in] cs Curve style. Default is ELM_ANIMATOR_CURVE_LINEAR
+    * @deprecated Use @ref Transit instead.
+    */
+   EINA_DEPRECATED EAPI void                     elm_animator_curve_style_set(Elm_Animator *animator, Elm_Animator_Curve_Style cs) EINA_ARG_NONNULL(1);
+   /**
+    * Gets the animation @ref Elm_Animator_Curve_Style "acceleration style".
+    *
+    * @param[in] animator Animator object
+    * @param[in] cs Curve style. Default is ELM_ANIMATOR_CURVE_LINEAR
+    * @deprecated Use @ref Transit instead.
+    */
+   EINA_DEPRECATED EAPI Elm_Animator_Curve_Style elm_animator_curve_style_get(const Elm_Animator *animator) EINA_ARG_NONNULL(1);
+   /**
+    * @brief Sets wether the animation should be automatically reversed.
+    *
+    * @param[in] animator Animator object
+    * @param[in] reverse Reverse or not
+    *
+    * This controls wether the animation will be run on reverse imediately after
+    * running forward. When this is set together with repetition the animation
+    * will run in reverse once for each time it ran forward.@n
+    * Runnin an animation in reverse is accomplished by calling the operation
+    * callback with a frame value starting at 1 and diminshing until 0.
+    * @deprecated Use @ref Transit instead.
+    */
+   EINA_DEPRECATED EAPI void                     elm_animator_auto_reverse_set(Elm_Animator *animator, Eina_Bool reverse) EINA_ARG_NONNULL(1);
+   /**
+    * Gets wether the animation will automatically reversed
+    *
+    * @param[in] animator Animator object
+    * @deprecated Use @ref Transit instead.
+    */
+   EINA_DEPRECATED EAPI Eina_Bool                elm_animator_auto_reverse_get(const Elm_Animator *animator) EINA_ARG_NONNULL(1);
+   /**
+    * Gets the status for the animator operation. The status of the animator @b
+    * doesn't take in to account elm_animator_pause() or elm_animator_resume(), it
+    * only informs if the animation was started and has not ended(either normally
+    * or through elm_animator_stop()).
+    *
+    * @param[in] animator Animator object
+    * @deprecated Use @ref Transit instead.
+    */
+   EINA_DEPRECATED EAPI Eina_Bool                elm_animator_operating_get(const Elm_Animator *animator) EINA_ARG_NONNULL(1);
+   /**
+    * Gets how many times the animation will be repeated
+    *
+    * @param[in] animator Animator object
+    * @deprecated Use @ref Transit instead.
+    */
+   EINA_DEPRECATED EAPI unsigned int             elm_animator_repeat_get(const Elm_Animator *animator) EINA_ARG_NONNULL(1);
+   /**
+    * Pause the animator.
+    *
+    * @param[in]  animator Animator object
+    *
+    * This causes the animation to be temporarily stopped(the operation callback
+    * will not be called). If the animation is not yet running this is a no-op.
+    * Once an animation has been paused with this function it can be resumed
+    * using elm_animator_resume().
+    * @deprecated Use @ref Transit instead.
+    */
+   EINA_DEPRECATED EAPI void                     elm_animator_pause(Elm_Animator *animator) EINA_ARG_NONNULL(1);
+   /**
+    * @brief Resumes the animator.
+    *
+    * @param[in]  animator Animator object
+    *
+    * Resumes an animation that was paused using elm_animator_pause(), after
+    * calling this function calls to the operation callback will happen
+    * normally. If an animation is stopped by means of elm_animator_stop it
+    * @b can't be restarted with this function.@n
+    *
+    * @warning When an animation is resumed it doesn't start from where it was paused, it
+    * will go to where it would have been if it had not been paused. If an
+    * animation with a duration of 3 seconds is paused after 1 second for 1 second
+    * it will resume as if it had ben animating for 2 seconds, the operating
+    * callback will be called with a frame value of aproximately 2/3.
+    * @deprecated Use @ref Transit instead.
+    */
+   EINA_DEPRECATED EAPI void                     elm_animator_resume(Elm_Animator *animator) EINA_ARG_NONNULL(1);
+   /**
+    * @}
+    */
+
+   /* calendar */
+   typedef enum
+     {
+        ELM_CALENDAR_UNIQUE,
+        ELM_CALENDAR_DAILY,
+        ELM_CALENDAR_WEEKLY,
+        ELM_CALENDAR_MONTHLY,
+        ELM_CALENDAR_ANNUALLY
+     } Elm_Calendar_Mark_Repeat;
+   typedef struct _Elm_Calendar_Mark Elm_Calendar_Mark;
+
+   EAPI Evas_Object       *elm_calendar_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
+   EAPI const char       **elm_calendar_weekdays_names_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void               elm_calendar_weekdays_names_set(Evas_Object *obj, const char *weekdays[]) EINA_ARG_NONNULL(1, 2);
+   EAPI double             elm_calendar_interval_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void               elm_calendar_interval_set(Evas_Object *obj, double interval) EINA_ARG_NONNULL(1);
+   EAPI void               elm_calendar_min_max_year_get(const Evas_Object *obj, int *min, int *max) EINA_ARG_NONNULL(1);
+   EAPI void               elm_calendar_min_max_year_set(Evas_Object *obj, int min, int max) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool          elm_calendar_day_selection_enabled_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void               elm_calendar_day_selection_enabled_set(Evas_Object *obj, Eina_Bool enabled) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool          elm_calendar_selected_time_get(const Evas_Object *obj, struct tm *selected_time) EINA_ARG_NONNULL(1, 2);
+   EAPI void               elm_calendar_selected_time_set(Evas_Object *obj, struct tm *selected_time) EINA_ARG_NONNULL(1);
+   EAPI void               elm_calendar_format_function_set(Evas_Object *obj, char * (*format_function) (struct tm *stime)) EINA_ARG_NONNULL(1);
+   EAPI Elm_Calendar_Mark *elm_calendar_mark_add(Evas_Object *obj, const char *mark_type, struct tm *mark_time, Elm_Calendar_Mark_Repeat repeat) EINA_ARG_NONNULL(1);
+   EAPI void               elm_calendar_mark_del(Elm_Calendar_Mark *mark) EINA_ARG_NONNULL(1);
+   EAPI void               elm_calendar_marks_clear(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI const Eina_List   *elm_calendar_marks_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void               elm_calendar_marks_draw(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void               elm_calendar_text_saturday_color_set(Evas_Object *obj, int pos) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void               elm_calendar_text_sunday_color_set(Evas_Object *obj, int pos) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void               elm_calendar_text_weekday_color_set(Evas_Object *obj, int pos) EINA_ARG_NONNULL(1);
+   /* smart callbacks called:
+    * changed - emitted when the user select a day or change the displayed
+    * month.
+    */
+
+   /* diskselector */
+   typedef struct _Elm_Diskselector_Item Elm_Diskselector_Item;
+
+   EAPI Evas_Object           *elm_diskselector_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool              elm_diskselector_round_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void                   elm_diskselector_round_set(Evas_Object *obj, Eina_Bool round) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI int    elm_diskselector_side_label_lenght_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI void   elm_diskselector_side_label_lenght_set(Evas_Object *obj, int len) EINA_ARG_NONNULL(1);
+   EAPI int                    elm_diskselector_side_label_length_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void                   elm_diskselector_side_label_length_set(Evas_Object *obj, int len) EINA_ARG_NONNULL(1);
+   EAPI void                   elm_diskselector_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_bounce) EINA_ARG_NONNULL(1);
+   EAPI void                   elm_diskselector_bounce_get(const Evas_Object *obj, Eina_Bool *h_bounce, Eina_Bool *v_bounce) EINA_ARG_NONNULL(1);
+   EAPI void                   elm_diskselector_scroller_policy_get(const Evas_Object *obj, Elm_Scroller_Policy *policy_h, Elm_Scroller_Policy *policy_v) EINA_ARG_NONNULL(1);
+   EAPI void                   elm_diskselector_scroller_policy_set(Evas_Object *obj, Elm_Scroller_Policy policy_h, Elm_Scroller_Policy policy_v) EINA_ARG_NONNULL(1);
+   EAPI void                   elm_diskselector_clear(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI const Eina_List       *elm_diskselector_items_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI Elm_Diskselector_Item *elm_diskselector_item_append(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1);
+   EAPI void                   elm_diskselector_item_del(Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
+   EAPI void                   elm_diskselector_item_del_cb_set(Elm_Diskselector_Item *item, Evas_Smart_Cb func) EINA_ARG_NONNULL(1);
+   EAPI void                  *elm_diskselector_item_data_get(const Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
+   EAPI Evas_Object           *elm_diskselector_item_icon_get(const Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
+   EAPI void                   elm_diskselector_item_icon_set(Elm_Diskselector_Item *item, Evas_Object *icon) EINA_ARG_NONNULL(1);
+   EAPI const char            *elm_diskselector_item_label_get(const Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
+   EAPI void                   elm_diskselector_item_label_set(Elm_Diskselector_Item *item, const char *label) EINA_ARG_NONNULL(1);
+   EAPI Elm_Diskselector_Item *elm_diskselector_selected_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void                   elm_diskselector_item_selected_set(Elm_Diskselector_Item *item, Eina_Bool selected) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool              elm_diskselector_item_selected_get(const Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
+   EAPI Elm_Diskselector_Item *elm_diskselector_first_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI Elm_Diskselector_Item *elm_diskselector_last_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI Elm_Diskselector_Item *elm_diskselector_item_prev_get(const Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
+   EAPI Elm_Diskselector_Item *elm_diskselector_item_next_get(const Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
+   EAPI void                   elm_diskselector_item_tooltip_text_set(Elm_Diskselector_Item *item, const char *text) EINA_ARG_NONNULL(1);
+   EAPI void                   elm_diskselector_item_tooltip_content_cb_set(Elm_Diskselector_Item *item, Elm_Tooltip_Item_Content_Cb func, const void *data, Evas_Smart_Cb del_cb) EINA_ARG_NONNULL(1);
+   EAPI void                   elm_diskselector_item_tooltip_unset(Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
+   EAPI void                   elm_diskselector_item_tooltip_style_set(Elm_Diskselector_Item *item, const char *style) EINA_ARG_NONNULL(1);
+   EAPI const char            *elm_diskselector_item_tooltip_style_get(const Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
+   EAPI void                   elm_diskselector_item_cursor_set(Elm_Diskselector_Item *item, const char *cursor) EINA_ARG_NONNULL(1);
+   EAPI const char            *elm_diskselector_item_cursor_get(const Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
+   EAPI void                   elm_diskselector_item_cursor_unset(Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
+   EAPI void                   elm_diskselector_item_cursor_style_set(Elm_Diskselector_Item *item, const char *style) EINA_ARG_NONNULL(1);
+   EAPI const char            *elm_diskselector_item_cursor_style_get(const Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
+   EAPI void                   elm_diskselector_item_cursor_engine_only_set(Elm_Diskselector_Item *item, Eina_Bool engine_only) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool              elm_diskselector_item_cursor_engine_only_get(const Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
+   EAPI void                   elm_diskselector_display_item_num_set(Evas_Object *obj, int num) EINA_ARG_NONNULL(1);
+   /* smart callbacks called:
+    * "selected" - when item is selected (scroller stops)
+    */
+
+   /**
+    * @page tutorial_colorselector Color selector example
+    * @dontinclude colorselector_example_01.c
+    *
+    * This example shows how to change the color of a rectangle using a color
+    * selector. We aren't going to explain a lot of the code since it's the
+    * usual setup code:
+    * @until show(rect)
+    *
+    * Now that we have a window with background and a rectangle we can create
+    * our color_selector and set it's initial color to fully opaque blue:
+    * @until show
+    *
+    * Next we tell ask to be notified whenever the color changes:
+    * @until changed
+    *
+    * We follow that we some more run of the mill setup code:
+    * @until ELM_MAIN()
+    *
+    * And now get to the callback that sets the color of the rectangle:
+    * @until }
+    *
+    * This example will look like this:
+    * @image html screenshots/colorselector_example_01.png
+    * @image latex screenshots/colorselector_example_01.eps
+    *
+    * @example colorselector_example_01.c
+    */
+   /**
+    * @defgroup Colorselector Colorselector
+    *
+    * @{
+    *
+    * @brief Widget for user to select a color.
+    *
+    * Signals that you can add callbacks for are:
+    * "changed" - When the color value changes(event_info is NULL).
+    *
+    * See @ref tutorial_colorselector.
+    */
+   /**
+    * @brief Add a new colorselector to the parent
+    *
+    * @param parent The parent object
+    * @return The new object or NULL if it cannot be created
+    *
+    * @ingroup Colorselector
+    */
+   EAPI Evas_Object *elm_colorselector_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
+   /**
+    * Set a color for the colorselector
+    *
+    * @param obj   Colorselector object
+    * @param r     r-value of color
+    * @param g     g-value of color
+    * @param b     b-value of color
+    * @param a     a-value of color
+    *
+    * @ingroup Colorselector
+    */
+   EAPI void         elm_colorselector_color_set(Evas_Object *obj, int r, int g , int b, int a) EINA_ARG_NONNULL(1);
+   /**
+    * Get a color from the colorselector
+    *
+    * @param obj   Colorselector object
+    * @param r     integer pointer for r-value of color
+    * @param g     integer pointer for g-value of color
+    * @param b     integer pointer for b-value of color
+    * @param a     integer pointer for a-value of color
+    *
+    * @ingroup Colorselector
+    */
+   EAPI void         elm_colorselector_color_get(const Evas_Object *obj, int *r, int *g , int *b, int *a) EINA_ARG_NONNULL(1);
+   /**
+    * @}
+    */
+
+   /* Contextual Popup */
+   typedef struct _Elm_Ctxpopup_Item Elm_Ctxpopup_Item;
+
+   typedef enum _Elm_Ctxpopup_Direction
+     {
+        ELM_CTXPOPUP_DIRECTION_DOWN,
+        ELM_CTXPOPUP_DIRECTION_RIGHT,
+        ELM_CTXPOPUP_DIRECTION_LEFT,
+        ELM_CTXPOPUP_DIRECTION_UP,
+     } Elm_Ctxpopup_Direction;
+
+   EAPI Evas_Object  *elm_ctxpopup_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
+   EAPI Evas_Object  *elm_ctxpopup_item_icon_get(const Elm_Ctxpopup_Item *item) EINA_ARG_NONNULL(1);
+   EAPI void          elm_ctxpopup_item_icon_set(Elm_Ctxpopup_Item *item, Evas_Object *icon) EINA_ARG_NONNULL(1);
+   EAPI const char   *elm_ctxpopup_item_label_get(const Elm_Ctxpopup_Item *item) EINA_ARG_NONNULL(1);
+   EAPI void          elm_ctxpopup_item_label_set(Elm_Ctxpopup_Item *item, const char *label) EINA_ARG_NONNULL(1);
+   EAPI void          elm_ctxpopup_hover_parent_set(Evas_Object *obj, Evas_Object *parent) EINA_ARG_NONNULL(1, 2);
+   EAPI Evas_Object  *elm_ctxpopup_hover_parent_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void          elm_ctxpopup_clear(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void          elm_ctxpopup_horizontal_set(Evas_Object *obj, Eina_Bool horizontal) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool     elm_ctxpopup_horizontal_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   Elm_Ctxpopup_Item *elm_ctxpopup_item_append(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1);
+   EAPI void          elm_ctxpopup_item_del(Elm_Ctxpopup_Item *item) EINA_ARG_NONNULL(1);
+   EAPI void          elm_ctxpopup_item_disabled_set(Elm_Ctxpopup_Item *item, Eina_Bool disabled) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool     elm_ctxpopup_item_disabled_get(const Elm_Ctxpopup_Item *item) EINA_ARG_NONNULL(1);
+   EAPI void          elm_ctxpopup_content_set(Evas_Object *obj, Evas_Object *content) EINA_ARG_NONNULL(1, 2);
+   EAPI Evas_Object  *elm_ctxpopup_content_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void          elm_ctxpopup_direction_priority_set(Evas_Object *obj, Elm_Ctxpopup_Direction first, Elm_Ctxpopup_Direction second, Elm_Ctxpopup_Direction third, Elm_Ctxpopup_Direction fourth) EINA_ARG_NONNULL(1);
+   EAPI void          elm_ctxpopup_direction_priority_get(Evas_Object *obj, Elm_Ctxpopup_Direction *first, Elm_Ctxpopup_Direction *second, Elm_Ctxpopup_Direction *third, Elm_Ctxpopup_Direction *fourth) EINA_ARG_NONNULL(1);
+   /* smart callbacks called:
+    * "dismissed" - the ctxpopup was dismissed
+    */
+
+   /* transit */
+   /**
+    *
+    * @defgroup Transit Transit
+    * @ingroup Elementary
+    *
+    * Transit is designed to apply various animated transition effects to @c
+    * Evas_Object, such like translation, rotation, etc. For using these
+    * effects, create an @ref Elm_Transit and add the desired transition effects.
+    *
+    * Once the effects are added into transit, they will be automatically
+    * managed (their callback will be called until the duration is ended, and
+    * they will be deleted on completion).
+    *
+    * Example:
+    * @code
+    * Elm_Transit *trans = elm_transit_add();
+    * elm_transit_object_add(trans, obj);
+    * elm_transit_effect_translation_add(trans, 0, 0, 280, 280
+    * elm_transit_duration_set(transit, 1);
+    * elm_transit_auto_reverse_set(transit, EINA_TRUE);
+    * elm_transit_tween_mode_set(transit, ELM_TRANSIT_TWEEN_MODE_DECELERATE);
+    * elm_transit_repeat_times_set(transit, 3);
+    * @endcode
+    *
+    * Some transition effects are used to change the properties of objects. They
+    * are:
+    * @li @ref elm_transit_effect_translation_add
+    * @li @ref elm_transit_effect_color_add
+    * @li @ref elm_transit_effect_rotation_add
+    * @li @ref elm_transit_effect_wipe_add
+    * @li @ref elm_transit_effect_zoom_add
+    * @li @ref elm_transit_effect_resizing_add
+    *
+    * Other transition effects are used to make one object disappear and another
+    * object appear on its old place. These effects are:
+    *
+    * @li @ref elm_transit_effect_flip_add
+    * @li @ref elm_transit_effect_resizable_flip_add
+    * @li @ref elm_transit_effect_fade_add
+    * @li @ref elm_transit_effect_blend_add
+    *
+    * It's also possible to make a transition chain with @ref
+    * elm_transit_chain_transit_add.
+    *
+    * @warning We strongly recommend to use elm_transit just when edje can not do
+    * the trick. Edje has more advantage than Elm_Transit, it has more flexibility and
+    * animations can be manipulated inside the theme.
+    *
+    * List of examples:
+    * @li @ref transit_example_01_explained
+    * @li @ref transit_example_02_explained
+    * @li @ref transit_example_03_c
+    * @li @ref transit_example_04_c
+    *
+    * @{
+    */
+
+   /**
+    * @enum Elm_Transit_Tween_Mode
+    *
+    * The type of acceleration used in the transition.
+    */
+   typedef enum
+     {
+        ELM_TRANSIT_TWEEN_MODE_LINEAR, /**< Constant speed */
+        ELM_TRANSIT_TWEEN_MODE_SINUSOIDAL, /**< Starts slow, increase speed
+                                             over time, then decrease again
+                                             and stop slowly */
+        ELM_TRANSIT_TWEEN_MODE_DECELERATE, /**< Starts fast and decrease
+                                             speed over time */
+        ELM_TRANSIT_TWEEN_MODE_ACCELERATE /**< Starts slow and increase speed
+                                            over time */
+     } Elm_Transit_Tween_Mode;
+
+   /**
+    * @enum Elm_Transit_Effect_Flip_Axis
+    *
+    * The axis where flip effect should be applied.
+    */
+   typedef enum
+     {
+        ELM_TRANSIT_EFFECT_FLIP_AXIS_X, /**< Flip on X axis */
+        ELM_TRANSIT_EFFECT_FLIP_AXIS_Y /**< Flip on Y axis */
+     } Elm_Transit_Effect_Flip_Axis;
+   /**
+    * @enum Elm_Transit_Effect_Wipe_Dir
+    *
+    * The direction where the wipe effect should occur.
+    */
+   typedef enum
+     {
+        ELM_TRANSIT_EFFECT_WIPE_DIR_LEFT, /**< Wipe to the left */
+        ELM_TRANSIT_EFFECT_WIPE_DIR_RIGHT, /**< Wipe to the right */
+        ELM_TRANSIT_EFFECT_WIPE_DIR_UP, /**< Wipe up */
+        ELM_TRANSIT_EFFECT_WIPE_DIR_DOWN /**< Wipe down */
+     } Elm_Transit_Effect_Wipe_Dir;
+   /** @enum Elm_Transit_Effect_Wipe_Type
+    *
+    * Whether the wipe effect should show or hide the object.
+    */
+   typedef enum
+     {
+        ELM_TRANSIT_EFFECT_WIPE_TYPE_HIDE, /**< Hide the object during the
+                                             animation */
+        ELM_TRANSIT_EFFECT_WIPE_TYPE_SHOW /**< Show the object during the
+                                            animation */
+     } Elm_Transit_Effect_Wipe_Type;
+
+   /**
+    * @typedef Elm_Transit
+    *
+    * The Transit created with elm_transit_add(). This type has the information
+    * about the objects which the transition will be applied, and the
+    * transition effects that will be used. It also contains info about
+    * duration, number of repetitions, auto-reverse, etc.
+    */
+   typedef struct _Elm_Transit Elm_Transit;
+   typedef void Elm_Transit_Effect;
+   /**
+    * @typedef Elm_Transit_Effect_Transition_Cb
+    *
+    * Transition callback called for this effect on each transition iteration.
+    */
+   typedef void (*Elm_Transit_Effect_Transition_Cb) (Elm_Transit_Effect *effect, Elm_Transit *transit, double progress);
+   /**
+    * Elm_Transit_Effect_End_Cb
+    *
+    * Transition callback called for this effect when the transition is over.
+    */
+   typedef void (*Elm_Transit_Effect_End_Cb) (Elm_Transit_Effect *effect, Elm_Transit *transit);
+
+   /**
+    * Elm_Transit_Del_Cb
+    *
+    * A callback called when the transit is deleted.
+    */
+   typedef void (*Elm_Transit_Del_Cb) (void *data, Elm_Transit *transit);
+
+   /**
+    * Add new transit.
+    *
+    * @note Is not necessary to delete the transit object, it will be deleted at
+    * the end of its operation.
+    * @note The transit will start playing when the program enter in the main loop, is not
+    * necessary to give a start to the transit.
+    *
+    * @return The transit object.
+    *
+    * @ingroup Transit
+    */
+   EAPI Elm_Transit                *elm_transit_add(void);
+
+   /**
+    * Stops the animation and delete the @p transit object.
+    *
+    * Call this function if you wants to stop the animation before the duration
+    * time. Make sure the @p transit object is still alive with
+    * elm_transit_del_cb_set() function.
+    * All added effects will be deleted, calling its repective data_free_cb
+    * functions. The function setted by elm_transit_del_cb_set() will be called.
+    *
+    * @see elm_transit_del_cb_set()
+    *
+    * @param transit The transit object to be deleted.
+    *
+    * @ingroup Transit
+    * @warning Just call this function if you are sure the transit is alive.
+    */
+   EAPI void                        elm_transit_del(Elm_Transit *transit) EINA_ARG_NONNULL(1);
+
+   /**
+    * Add a new effect to the transit.
+    *
+    * @note The cb function and the data are the key to the effect. If you try to
+    * add an already added effect, nothing is done.
+    * @note After the first addition of an effect in @p transit, if its
+    * effect list become empty again, the @p transit will be killed by
+    * elm_transit_del(transit) function.
+    *
+    * Exemple:
+    * @code
+    * Elm_Transit *transit = elm_transit_add();
+    * elm_transit_effect_add(transit,
+    *                        elm_transit_effect_blend_op,
+    *                        elm_transit_effect_blend_context_new(),
+    *                        elm_transit_effect_blend_context_free);
+    * @endcode
+    *
+    * @param transit The transit object.
+    * @param transition_cb The operation function. It is called when the
+    * animation begins, it is the function that actually performs the animation.
+    * It is called with the @p data, @p transit and the time progression of the
+    * animation (a double value between 0.0 and 1.0).
+    * @param effect The context data of the effect.
+    * @param end_cb The function to free the context data, it will be called
+    * at the end of the effect, it must finalize the animation and free the
+    * @p data.
+    *
+    * @ingroup Transit
+    * @warning The transit free the context data at the and of the transition with
+    * the data_free_cb function, do not use the context data in another transit.
+    */
+   EAPI void                        elm_transit_effect_add(Elm_Transit *transit, Elm_Transit_Effect_Transition_Cb transition_cb, Elm_Transit_Effect *effect, Elm_Transit_Effect_End_Cb end_cb) EINA_ARG_NONNULL(1, 2);
+
+   /**
+    * Delete an added effect.
+    *
+    * This function will remove the effect from the @p transit, calling the
+    * data_free_cb to free the @p data.
+    *
+    * @see elm_transit_effect_add()
+    *
+    * @note If the effect is not found, nothing is done.
+    * @note If the effect list become empty, this function will call
+    * elm_transit_del(transit), that is, it will kill the @p transit.
+    *
+    * @param transit The transit object.
+    * @param transition_cb The operation function.
+    * @param effect The context data of the effect.
+    *
+    * @ingroup Transit
+    */
+   EAPI void                        elm_transit_effect_del(Elm_Transit *transit, Elm_Transit_Effect_Transition_Cb transition_cb, Elm_Transit_Effect *effect) EINA_ARG_NONNULL(1, 2);
+
+   /**
+    * Add new object to apply the effects.
+    *
+    * @note After the first addition of an object in @p transit, if its
+    * object list become empty again, the @p transit will be killed by
+    * elm_transit_del(transit) function.
+    * @note If the @p obj belongs to another transit, the @p obj will be
+    * removed from it and it will only belong to the @p transit. If the old
+    * transit stays without objects, it will die.
+    * @note When you add an object into the @p transit, its state from
+    * evas_object_pass_events_get(obj) is saved, and it is applied when the
+    * transit ends, if you change this state whith evas_object_pass_events_set()
+    * after add the object, this state will change again when @p transit stops to
+    * run.
+    *
+    * @param transit The transit object.
+    * @param obj Object to be animated.
+    *
+    * @ingroup Transit
+    * @warning It is not allowed to add a new object after transit begins to go.
+    */
+   EAPI void                        elm_transit_object_add(Elm_Transit *transit, Evas_Object *obj) EINA_ARG_NONNULL(1, 2);
+
+   /**
+    * Removes an added object from the transit.
+    *
+    * @note If the @p obj is not in the @p transit, nothing is done.
+    * @note If the list become empty, this function will call
+    * elm_transit_del(transit), that is, it will kill the @p transit.
+    *
+    * @param transit The transit object.
+    * @param obj Object to be removed from @p transit.
+    *
+    * @ingroup Transit
+    * @warning It is not allowed to remove objects after transit begins to go.
+    */
+   EAPI void                        elm_transit_object_remove(Elm_Transit *transit, Evas_Object *obj) EINA_ARG_NONNULL(1, 2);
+
+   /**
+    * Get the objects of the transit.
+    *
+    * @param transit The transit object.
+    * @return a Eina_List with the objects from the transit.
+    *
+    * @ingroup Transit
+    */
+   EAPI const Eina_List            *elm_transit_objects_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
+
+   /**
+    * Enable/disable keeping up the objects states.
+    * If it is not kept, the objects states will be reset when transition ends.
+    *
+    * @note @p transit can not be NULL.
+    * @note One state includes geometry, color, map data.
+    *
+    * @param transit The transit object.
+    * @param state_keep Keeping or Non Keeping.
+    *
+    * @ingroup Transit
+    */
+   EAPI void                        elm_transit_objects_final_state_keep_set(Elm_Transit *transit, Eina_Bool state_keep) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get a value whether the objects states will be reset or not.
+    *
+    * @note @p transit can not be NULL
+    *
+    * @see elm_transit_objects_final_state_keep_set()
+    *
+    * @param transit The transit object.
+    * @return EINA_TRUE means the states of the objects will be reset.
+    * If @p transit is NULL, EINA_FALSE is returned
+    *
+    * @ingroup Transit
+    */
+   EAPI Eina_Bool                   elm_transit_objects_final_state_keep_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set the event enabled when transit is operating.
+    *
+    * If @p enabled is EINA_TRUE, the objects of the transit will receives
+    * events from mouse and keyboard during the animation.
+    * @note When you add an object with elm_transit_object_add(), its state from
+    * evas_object_pass_events_get(obj) is saved, and it is applied when the
+    * transit ends, if you change this state with evas_object_pass_events_set()
+    * after adding the object, this state will change again when @p transit stops
+    * to run.
+    *
+    * @param transit The transit object.
+    * @param enabled Events are received when enabled is @c EINA_TRUE, and
+    * ignored otherwise.
+    *
+    * @ingroup Transit
+    */
+   EAPI void                        elm_transit_event_enabled_set(Elm_Transit *transit, Eina_Bool enabled) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get the value of event enabled status.
+    *
+    * @see elm_transit_event_enabled_set()
+    *
+    * @param transit The Transit object
+    * @return EINA_TRUE, when event is enabled. If @p transit is NULL
+    * EINA_FALSE is returned
+    *
+    * @ingroup Transit
+    */
+   EAPI Eina_Bool                   elm_transit_event_enabled_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set the user-callback function when the transit is deleted.
+    *
+    * @note Using this function twice will overwrite the first function setted.
+    * @note the @p transit object will be deleted after call @p cb function.
+    *
+    * @param transit The transit object.
+    * @param cb Callback function pointer. This function will be called before
+    * the deletion of the transit.
+    * @param data Callback funtion user data. It is the @p op parameter.
+    *
+    * @ingroup Transit
+    */
+   EAPI void                        elm_transit_del_cb_set(Elm_Transit *transit, Elm_Transit_Del_Cb cb, void *data) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set reverse effect automatically.
+    *
+    * If auto reverse is setted, after running the effects with the progress
+    * parameter from 0 to 1, it will call the effecs again with the progress
+    * from 1 to 0. The transit will last for a time iqual to (2 * duration * repeat),
+    * where the duration was setted with the function elm_transit_add and
+    * the repeat with the function elm_transit_repeat_times_set().
+    *
+    * @param transit The transit object.
+    * @param reverse EINA_TRUE means the auto_reverse is on.
+    *
+    * @ingroup Transit
+    */
+   EAPI void                        elm_transit_auto_reverse_set(Elm_Transit *transit, Eina_Bool reverse) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get if the auto reverse is on.
+    *
+    * @see elm_transit_auto_reverse_set()
+    *
+    * @param transit The transit object.
+    * @return EINA_TRUE means auto reverse is on. If @p transit is NULL
+    * EINA_FALSE is returned
+    *
+    * @ingroup Transit
+    */
+   EAPI Eina_Bool                   elm_transit_auto_reverse_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set the transit repeat count. Effect will be repeated by repeat count.
+    *
+    * This function sets the number of repetition the transit will run after
+    * the first one, that is, if @p repeat is 1, the transit will run 2 times.
+    * If the @p repeat is a negative number, it will repeat infinite times.
+    *
+    * @note If this function is called during the transit execution, the transit
+    * will run @p repeat times, ignoring the times it already performed.
+    *
+    * @param transit The transit object
+    * @param repeat Repeat count
+    *
+    * @ingroup Transit
+    */
+   EAPI void                        elm_transit_repeat_times_set(Elm_Transit *transit, int repeat) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get the transit repeat count.
+    *
+    * @see elm_transit_repeat_times_set()
+    *
+    * @param transit The Transit object.
+    * @return The repeat count. If @p transit is NULL
+    * 0 is returned
+    *
+    * @ingroup Transit
+    */
+   EAPI int                         elm_transit_repeat_times_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set the transit animation acceleration type.
+    *
+    * This function sets the tween mode of the transit that can be:
+    * ELM_TRANSIT_TWEEN_MODE_LINEAR - The default mode.
+    * ELM_TRANSIT_TWEEN_MODE_SINUSOIDAL - Starts in accelerate mode and ends decelerating.
+    * ELM_TRANSIT_TWEEN_MODE_DECELERATE - The animation will be slowed over time.
+    * ELM_TRANSIT_TWEEN_MODE_ACCELERATE - The animation will accelerate over time.
+    *
+    * @param transit The transit object.
+    * @param tween_mode The tween type.
+    *
+    * @ingroup Transit
+    */
+   EAPI void                        elm_transit_tween_mode_set(Elm_Transit *transit, Elm_Transit_Tween_Mode tween_mode) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get the transit animation acceleration type.
+    *
+    * @note @p transit can not be NULL
+    *
+    * @param transit The transit object.
+    * @return The tween type. If @p transit is NULL
+    * ELM_TRANSIT_TWEEN_MODE_LINEAR is returned.
+    *
+    * @ingroup Transit
+    */
+   EAPI Elm_Transit_Tween_Mode      elm_transit_tween_mode_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set the transit animation time
+    *
+    * @note @p transit can not be NULL
+    *
+    * @param transit The transit object.
+    * @param duration The animation time.
+    *
+    * @ingroup Transit
+    */
+   EAPI void                        elm_transit_duration_set(Elm_Transit *transit, double duration) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get the transit animation time
+    *
+    * @note @p transit can not be NULL
+    *
+    * @param transit The transit object.
+    *
+    * @return The transit animation time.
+    *
+    * @ingroup Transit
+    */
+   EAPI double                      elm_transit_duration_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
+
+   /**
+    * Starts the transition.
+    * Once this API is called, the transit begins to measure the time.
+    *
+    * @note @p transit can not be NULL
+    *
+    * @param transit The transit object.
+    *
+    * @ingroup Transit
+    */
+   EAPI void                        elm_transit_go(Elm_Transit *transit) EINA_ARG_NONNULL(1);
+
+   /**
+    * Pause/Resume the transition.
+    *
+    * If you call elm_transit_go again, the transit will be started from the
+    * beginning, and will be unpaused.
+    *
+    * @note @p transit can not be NULL
+    *
+    * @param transit The transit object.
+    * @param paused Whether the transition should be paused or not.
+    *
+    * @ingroup Transit
+    */
+   EAPI void                        elm_transit_paused_set(Elm_Transit *transit, Eina_Bool paused) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get the value of paused status.
+    *
+    * @see elm_transit_paused_set()
+    *
+    * @note @p transit can not be NULL
+    *
+    * @param transit The transit object.
+    * @return EINA_TRUE means transition is paused. If @p transit is NULL
+    * EINA_FALSE is returned
+    *
+    * @ingroup Transit
+    */
+   EAPI Eina_Bool                   elm_transit_paused_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get the time progression of the animation (a double value between 0.0 and 1.0).
+    *
+    * The value returned is a fraction (current time / total time). It
+    * represents the progression position relative to the total.
+    *
+    * @note @p transit can not be NULL
+    *
+    * @param transit The transit object.
+    *
+    * @return The time progression value. If @p transit is NULL
+    * 0 is returned
+    *
+    * @ingroup Transit
+    */
+   EAPI double                      elm_transit_progress_value_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
+
+   /**
+    * Makes the chain relationship between two transits.
+    *
+    * @note @p transit can not be NULL. Transit would have multiple chain transits.
+    * @note @p chain_transit can not be NULL. Chain transits could be chained to the only one transit.
+    *
+    * @param transit The transit object.
+    * @param chain_transit The chain transit object. This transit will be operated
+    *        after transit is done.
+    *
+    * This function adds @p chain_transit transition to a chain after the @p
+    * transit, and will be started as soon as @p transit ends. See @ref
+    * transit_example_02_explained for a full example.
+    *
+    * @ingroup Transit
+    */
+   EAPI void                        elm_transit_chain_transit_add(Elm_Transit *transit, Elm_Transit *chain_transit) EINA_ARG_NONNULL(1, 2);
+
+   /**
+    * Cut off the chain relationship between two transits.
+    *
+    * @note @p transit can not be NULL. Transit would have the chain relationship with @p chain transit.
+    * @note @p chain_transit can not be NULL. Chain transits should be chained to the @p transit.
+    *
+    * @param transit The transit object.
+    * @param chain_transit The chain transit object.
+    *
+    * This function remove the @p chain_transit transition from the @p transit.
+    *
+    * @ingroup Transit
+    */
+   EAPI void                        elm_transit_chain_transit_del(Elm_Transit *transit, Elm_Transit *chain_transit) EINA_ARG_NONNULL(1,2);
+
+   /**
+    * Get the current chain transit list.
+    *
+    * @note @p transit can not be NULL.
+    *
+    * @param transit The transit object.
+    * @return chain transit list.
+    *
+    * @ingroup Transit
+    */
+   EAPI Eina_List                  *elm_transit_chain_transits_get(const Elm_Transit *transit);
+
+   /**
+    * Add the Resizing Effect to Elm_Transit.
+    *
+    * @note This API is one of the facades. It creates resizing effect context
+    * and add it's required APIs to elm_transit_effect_add.
+    *
+    * @see elm_transit_effect_add()
+    *
+    * @param transit Transit object.
+    * @param from_w Object width size when effect begins.
+    * @param from_h Object height size when effect begins.
+    * @param to_w Object width size when effect ends.
+    * @param to_h Object height size when effect ends.
+    * @return Resizing effect context data.
+    *
+    * @ingroup Transit
+    */
+   EAPI Elm_Transit_Effect *elm_transit_effect_resizing_add(Elm_Transit* transit, Evas_Coord from_w, Evas_Coord from_h, Evas_Coord to_w, Evas_Coord to_h);
+
+   /**
+    * Add the Translation Effect to Elm_Transit.
+    *
+    * @note This API is one of the facades. It creates translation effect context
+    * and add it's required APIs to elm_transit_effect_add.
+    *
+    * @see elm_transit_effect_add()
+    *
+    * @param transit Transit object.
+    * @param from_dx X Position variation when effect begins.
+    * @param from_dy Y Position variation when effect begins.
+    * @param to_dx X Position variation when effect ends.
+    * @param to_dy Y Position variation when effect ends.
+    * @return Translation effect context data.
+    *
+    * @ingroup Transit
+    * @warning It is highly recommended just create a transit with this effect when
+    * the window that the objects of the transit belongs has already been created.
+    * This is because this effect needs the geometry information about the objects,
+    * and if the window was not created yet, it can get a wrong information.
+    */
+   EAPI Elm_Transit_Effect *elm_transit_effect_translation_add(Elm_Transit* transit, Evas_Coord from_dx, Evas_Coord from_dy, Evas_Coord to_dx, Evas_Coord to_dy);
+
+   /**
+    * Add the Zoom Effect to Elm_Transit.
+    *
+    * @note This API is one of the facades. It creates zoom effect context
+    * and add it's required APIs to elm_transit_effect_add.
+    *
+    * @see elm_transit_effect_add()
+    *
+    * @param transit Transit object.
+    * @param from_rate Scale rate when effect begins (1 is current rate).
+    * @param to_rate Scale rate when effect ends.
+    * @return Zoom effect context data.
+    *
+    * @ingroup Transit
+    * @warning It is highly recommended just create a transit with this effect when
+    * the window that the objects of the transit belongs has already been created.
+    * This is because this effect needs the geometry information about the objects,
+    * and if the window was not created yet, it can get a wrong information.
+    */
+   EAPI Elm_Transit_Effect *elm_transit_effect_zoom_add(Elm_Transit *transit, float from_rate, float to_rate);
+
+   /**
+    * Add the Flip Effect to Elm_Transit.
+    *
+    * @note This API is one of the facades. It creates flip effect context
+    * and add it's required APIs to elm_transit_effect_add.
+    * @note This effect is applied to each pair of objects in the order they are listed
+    * in the transit list of objects. The first object in the pair will be the
+    * "front" object and the second will be the "back" object.
+    *
+    * @see elm_transit_effect_add()
+    *
+    * @param transit Transit object.
+    * @param axis Flipping Axis(X or Y).
+    * @param cw Flipping Direction. EINA_TRUE is clock-wise.
+    * @return Flip effect context data.
+    *
+    * @ingroup Transit
+    * @warning It is highly recommended just create a transit with this effect when
+    * the window that the objects of the transit belongs has already been created.
+    * This is because this effect needs the geometry information about the objects,
+    * and if the window was not created yet, it can get a wrong information.
+    */
+   EAPI Elm_Transit_Effect *elm_transit_effect_flip_add(Elm_Transit *transit, Elm_Transit_Effect_Flip_Axis axis, Eina_Bool cw);
+
+   /**
+    * Add the Resizable Flip Effect to Elm_Transit.
+    *
+    * @note This API is one of the facades. It creates resizable flip effect context
+    * and add it's required APIs to elm_transit_effect_add.
+    * @note This effect is applied to each pair of objects in the order they are listed
+    * in the transit list of objects. The first object in the pair will be the
+    * "front" object and the second will be the "back" object.
+    *
+    * @see elm_transit_effect_add()
+    *
+    * @param transit Transit object.
+    * @param axis Flipping Axis(X or Y).
+    * @param cw Flipping Direction. EINA_TRUE is clock-wise.
+    * @return Resizable flip effect context data.
+    *
+    * @ingroup Transit
+    * @warning It is highly recommended just create a transit with this effect when
+    * the window that the objects of the transit belongs has already been created.
+    * This is because this effect needs the geometry information about the objects,
+    * and if the window was not created yet, it can get a wrong information.
+    */
+   EAPI Elm_Transit_Effect *elm_transit_effect_resizable_flip_add(Elm_Transit *transit, Elm_Transit_Effect_Flip_Axis axis, Eina_Bool cw);
+
+   /**
+    * Add the Wipe Effect to Elm_Transit.
+    *
+    * @note This API is one of the facades. It creates wipe effect context
+    * and add it's required APIs to elm_transit_effect_add.
+    *
+    * @see elm_transit_effect_add()
+    *
+    * @param transit Transit object.
+    * @param type Wipe type. Hide or show.
+    * @param dir Wipe Direction.
+    * @return Wipe effect context data.
+    *
+    * @ingroup Transit
+    * @warning It is highly recommended just create a transit with this effect when
+    * the window that the objects of the transit belongs has already been created.
+    * This is because this effect needs the geometry information about the objects,
+    * and if the window was not created yet, it can get a wrong information.
+    */
+   EAPI Elm_Transit_Effect *elm_transit_effect_wipe_add(Elm_Transit *transit, Elm_Transit_Effect_Wipe_Type type, Elm_Transit_Effect_Wipe_Dir dir);
+
+   /**
+    * Add the Color Effect to Elm_Transit.
+    *
+    * @note This API is one of the facades. It creates color effect context
+    * and add it's required APIs to elm_transit_effect_add.
+    *
+    * @see elm_transit_effect_add()
+    *
+    * @param transit        Transit object.
+    * @param  from_r        RGB R when effect begins.
+    * @param  from_g        RGB G when effect begins.
+    * @param  from_b        RGB B when effect begins.
+    * @param  from_a        RGB A when effect begins.
+    * @param  to_r          RGB R when effect ends.
+    * @param  to_g          RGB G when effect ends.
+    * @param  to_b          RGB B when effect ends.
+    * @param  to_a          RGB A when effect ends.
+    * @return               Color effect context data.
+    *
+    * @ingroup Transit
+    */
+   EAPI Elm_Transit_Effect *elm_transit_effect_color_add(Elm_Transit *transit, unsigned int from_r, unsigned int from_g, unsigned int from_b, unsigned int from_a, unsigned int to_r, unsigned int to_g, unsigned int to_b, unsigned int to_a);
+
+   /**
+    * Add the Fade Effect to Elm_Transit.
+    *
+    * @note This API is one of the facades. It creates fade effect context
+    * and add it's required APIs to elm_transit_effect_add.
+    * @note This effect is applied to each pair of objects in the order they are listed
+    * in the transit list of objects. The first object in the pair will be the
+    * "before" object and the second will be the "after" object.
+    *
+    * @see elm_transit_effect_add()
+    *
+    * @param transit Transit object.
+    * @return Fade effect context data.
+    *
+    * @ingroup Transit
+    * @warning It is highly recommended just create a transit with this effect when
+    * the window that the objects of the transit belongs has already been created.
+    * This is because this effect needs the color information about the objects,
+    * and if the window was not created yet, it can get a wrong information.
+    */
+   EAPI Elm_Transit_Effect *elm_transit_effect_fade_add(Elm_Transit *transit);
+
+   /**
+    * Add the Blend Effect to Elm_Transit.
+    *
+    * @note This API is one of the facades. It creates blend effect context
+    * and add it's required APIs to elm_transit_effect_add.
+    * @note This effect is applied to each pair of objects in the order they are listed
+    * in the transit list of objects. The first object in the pair will be the
+    * "before" object and the second will be the "after" object.
+    *
+    * @see elm_transit_effect_add()
+    *
+    * @param transit Transit object.
+    * @return Blend effect context data.
+    *
+    * @ingroup Transit
+    * @warning It is highly recommended just create a transit with this effect when
+    * the window that the objects of the transit belongs has already been created.
+    * This is because this effect needs the color information about the objects,
+    * and if the window was not created yet, it can get a wrong information.
+    */
+   EAPI Elm_Transit_Effect *elm_transit_effect_blend_add(Elm_Transit *transit);
+
+   /**
+    * Add the Rotation Effect to Elm_Transit.
+    *
+    * @note This API is one of the facades. It creates rotation effect context
+    * and add it's required APIs to elm_transit_effect_add.
+    *
+    * @see elm_transit_effect_add()
+    *
+    * @param transit Transit object.
+    * @param from_degree Degree when effect begins.
+    * @param to_degree Degree when effect is ends.
+    * @return Rotation effect context data.
+    *
+    * @ingroup Transit
+    * @warning It is highly recommended just create a transit with this effect when
+    * the window that the objects of the transit belongs has already been created.
+    * This is because this effect needs the geometry information about the objects,
+    * and if the window was not created yet, it can get a wrong information.
+    */
+   EAPI Elm_Transit_Effect *elm_transit_effect_rotation_add(Elm_Transit *transit, float from_degree, float to_degree);
+
+   /**
+    * Add the ImageAnimation Effect to Elm_Transit.
+    *
+    * @note This API is one of the facades. It creates image animation effect context
+    * and add it's required APIs to elm_transit_effect_add.
+    * The @p images parameter is a list images paths. This list and
+    * its contents will be deleted at the end of the effect by
+    * elm_transit_effect_image_animation_context_free() function.
+    *
+    * Example:
+    * @code
+    * char buf[PATH_MAX];
+    * Eina_List *images = NULL;
+    * Elm_Transit *transi = elm_transit_add();
+    *
+    * snprintf(buf, sizeof(buf), "%s/images/icon_11.png", PACKAGE_DATA_DIR);
+    * images = eina_list_append(images, eina_stringshare_add(buf));
+    *
+    * snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
+    * images = eina_list_append(images, eina_stringshare_add(buf));
+    * elm_transit_effect_image_animation_add(transi, images);
+    *
+    * @endcode
+    *
+    * @see elm_transit_effect_add()
+    *
+    * @param transit Transit object.
+    * @param images Eina_List of images file paths. This list and
+    * its contents will be deleted at the end of the effect by
+    * elm_transit_effect_image_animation_context_free() function.
+    * @return Image Animation effect context data.
+    *
+    * @ingroup Transit
+    */
+   EAPI Elm_Transit_Effect *elm_transit_effect_image_animation_add(Elm_Transit *transit, Eina_List *images);
+   /**
+    * @}
+    */
+
+   /* Store */
+   typedef struct _Elm_Store                      Elm_Store;
+   typedef struct _Elm_Store_DBsystem             Elm_Store_DBsystem;
+   typedef struct _Elm_Store_Filesystem           Elm_Store_Filesystem;
+   typedef struct _Elm_Store_Item                 Elm_Store_Item;
+   typedef struct _Elm_Store_Item_DBsystem        Elm_Store_Item_DBsystem;
+   typedef struct _Elm_Store_Item_Filesystem      Elm_Store_Item_Filesystem;
+   typedef struct _Elm_Store_Item_Info            Elm_Store_Item_Info;
+   typedef struct _Elm_Store_Item_Info_Filesystem Elm_Store_Item_Info_Filesystem;
+   typedef struct _Elm_Store_Item_Mapping         Elm_Store_Item_Mapping;
+   typedef struct _Elm_Store_Item_Mapping_Empty   Elm_Store_Item_Mapping_Empty;
+   typedef struct _Elm_Store_Item_Mapping_Icon    Elm_Store_Item_Mapping_Icon;
+   typedef struct _Elm_Store_Item_Mapping_Photo   Elm_Store_Item_Mapping_Photo;
+   typedef struct _Elm_Store_Item_Mapping_Custom  Elm_Store_Item_Mapping_Custom;
+
+   typedef Eina_Bool (*Elm_Store_Item_List_Cb) (void *data, Elm_Store_Item_Info *info);
+   typedef void      (*Elm_Store_Item_Fetch_Cb) (void *data, Elm_Store_Item *sti, Elm_Store_Item_Info *info);
+   typedef void      (*Elm_Store_Item_Unfetch_Cb) (void *data, Elm_Store_Item *sti, Elm_Store_Item_Info *info);
+   typedef void      (*Elm_Store_Item_Select_Cb) (void *data, Elm_Store_Item *sti);
+   typedef int       (*Elm_Store_Item_Sort_Cb) (void *data, Elm_Store_Item_Info *info1, Elm_Store_Item_Info *info2);
+   typedef void      (*Elm_Store_Item_Free_Cb) (void *data, Elm_Store_Item_Info *info);
+   typedef void     *(*Elm_Store_Item_Mapping_Cb) (void *data, Elm_Store_Item *sti, const char *part);
+
+   typedef enum
+     {
+        ELM_STORE_ITEM_MAPPING_NONE = 0,
+        ELM_STORE_ITEM_MAPPING_LABEL, // const char * -> label
+        ELM_STORE_ITEM_MAPPING_STATE, // Eina_Bool -> state
+        ELM_STORE_ITEM_MAPPING_ICON, // char * -> icon path
+        ELM_STORE_ITEM_MAPPING_PHOTO, // char * -> photo path
+        ELM_STORE_ITEM_MAPPING_CUSTOM, // item->custom(it->data, it, part) -> void * (-> any)
+        // can add more here as needed by common apps
+        ELM_STORE_ITEM_MAPPING_LAST
+     } Elm_Store_Item_Mapping_Type;
+
+   struct _Elm_Store_Item_Mapping_Icon
+     {
+        // FIXME: allow edje file icons
+        int                   w, h;
+        Elm_Icon_Lookup_Order lookup_order;
+        Eina_Bool             standard_name : 1;
+        Eina_Bool             no_scale : 1;
+        Eina_Bool             smooth : 1;
+        Eina_Bool             scale_up : 1;
+        Eina_Bool             scale_down : 1;
+     };
+
+   struct _Elm_Store_Item_Mapping_Empty
+     {
+        Eina_Bool             dummy;
+     };
+
+   struct _Elm_Store_Item_Mapping_Photo
+     {
+        int                   size;
+     };
+
+   struct _Elm_Store_Item_Mapping_Custom
+     {
+        Elm_Store_Item_Mapping_Cb func;
+     };
 
-   /* animator */
-   typedef enum
+   struct _Elm_Store_Item_Mapping
      {
-        ELM_ANIMATOR_CURVE_LINEAR,
-        ELM_ANIMATOR_CURVE_IN_OUT,
-        ELM_ANIMATOR_CURVE_IN,
-        ELM_ANIMATOR_CURVE_OUT
-     } Elm_Animator_Curve_Style;
-   typedef struct _Elm_Animator Elm_Animator;
-  /**
-   * Called back per loop of an elementary animators cycle
-   * @param data user-data given to elm_animator_operation_callback_set()
-   * @param animator the animator being run
-   * @param double the position in the animation
-   */
-   typedef void (*Elm_Animator_Operation_Cb) (void *data, Elm_Animator *animator, double frame);
-  /**
-   * Called back when an elementary animator finishes
-   * @param data user-data given to elm_animator_completion_callback_set()
-   */
-   typedef void (*Elm_Animator_Completion_Cb) (void *data);
+        Elm_Store_Item_Mapping_Type     type;
+        const char                     *part;
+        int                             offset;
+        union {
+             Elm_Store_Item_Mapping_Empty  empty;
+             Elm_Store_Item_Mapping_Icon   icon;
+             Elm_Store_Item_Mapping_Photo  photo;
+             Elm_Store_Item_Mapping_Custom custom;
+             // add more types here
+        } details;
+     };
 
-   EAPI Elm_Animator*            elm_animator_add(Evas_Object *parent);
-   EAPI void                     elm_animator_del(Elm_Animator *animator) EINA_ARG_NONNULL(1);
-   EAPI void                     elm_animator_duration_set(Elm_Animator *animator, double duration) EINA_ARG_NONNULL(1);
-   EAPI void                     elm_animator_operation_callback_set(Elm_Animator *animator, Elm_Animator_Operation_Cb func, void *data) EINA_ARG_NONNULL(1);
-   EAPI void                     elm_animator_completion_callback_set(Elm_Animator *animator, Elm_Animator_Completion_Cb func, void *data) EINA_ARG_NONNULL(1);
-   EAPI void                     elm_animator_stop(Elm_Animator *animator) EINA_ARG_NONNULL(1);
-   EAPI void                     elm_animator_repeat_set(Elm_Animator *animator, unsigned int repeat_cnt) EINA_ARG_NONNULL(1);
-   EAPI void                     elm_animator_animate(Elm_Animator *animator) EINA_ARG_NONNULL(1);
-   EAPI void                     elm_animator_curve_style_set(Elm_Animator *animator, Elm_Animator_Curve_Style cs) EINA_ARG_NONNULL(1);
-   EAPI Elm_Animator_Curve_Style elm_animator_curve_style_get(const Elm_Animator *animator); EINA_ARG_NONNULL(1);
-   EAPI void                     elm_animator_auto_reverse_set(Elm_Animator *animator, Eina_Bool reverse) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool                elm_animator_auto_reverse_get(const Elm_Animator *animator) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool                elm_animator_operating_get(const Elm_Animator *animator) EINA_ARG_NONNULL(1);
-   EAPI unsigned int             elm_animator_repeat_get(const Elm_Animator *animator) EINA_ARG_NONNULL(1);
-   EAPI void                     elm_animator_pause(Elm_Animator *animator) EINA_ARG_NONNULL(1);
-   EAPI void                     elm_animator_resume(Elm_Animator *animator) EINA_ARG_NONNULL(1);
+   struct _Elm_Store_Item_Info
+     {
+        int                           index;
+        int                           item_type;
+        int                           group_index;
+        Eina_Bool                     rec_item;
+        int                           pre_group_index;
 
-   /* calendar */
-   typedef enum
+        Elm_Genlist_Item_Class       *item_class;
+        const Elm_Store_Item_Mapping *mapping;
+        void                         *data;
+        char                         *sort_id;
+     };
+
+   struct _Elm_Store_Item_Info_Filesystem
      {
-        ELM_CALENDAR_UNIQUE,
-        ELM_CALENDAR_DAILY,
-        ELM_CALENDAR_WEEKLY,
-        ELM_CALENDAR_MONTHLY,
-        ELM_CALENDAR_ANNUALLY
-     } Elm_Calendar_Mark_Repeat;
-   typedef struct _Elm_Calendar_Mark Elm_Calendar_Mark;
+        Elm_Store_Item_Info  base;
+        char                *path;
+     };
 
-   EAPI Evas_Object       *elm_calendar_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
-   EAPI const char       **elm_calendar_weekdays_names_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void               elm_calendar_weekdays_names_set(Evas_Object *obj, const char *weekdays[]) EINA_ARG_NONNULL(1, 2);
-   EAPI double             elm_calendar_interval_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void               elm_calendar_interval_set(Evas_Object *obj, double interval) EINA_ARG_NONNULL(1);
-   EAPI void               elm_calendar_min_max_year_get(const Evas_Object *obj, int *min, int *max) EINA_ARG_NONNULL(1);
-   EAPI void               elm_calendar_min_max_year_set(Evas_Object *obj, int min, int max) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool          elm_calendar_day_selection_enabled_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void               elm_calendar_day_selection_enabled_set(Evas_Object *obj, Eina_Bool enabled) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool          elm_calendar_selected_time_get(const Evas_Object *obj, struct tm *selected_time) EINA_ARG_NONNULL(1, 2);
-   EAPI void               elm_calendar_selected_time_set(Evas_Object *obj, struct tm *selected_time) EINA_ARG_NONNULL(1);
-   EAPI void               elm_calendar_format_function_set(Evas_Object *obj, char * (*format_function) (struct tm *stime)) EINA_ARG_NONNULL(1);
-   EAPI Elm_Calendar_Mark *elm_calendar_mark_add(Evas_Object *obj, const char *mark_type, struct tm *mark_time, Elm_Calendar_Mark_Repeat repeat) EINA_ARG_NONNULL(1);
-   EAPI void               elm_calendar_mark_del(Elm_Calendar_Mark *mark) EINA_ARG_NONNULL(1);
-   EAPI void               elm_calendar_marks_clear(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI const Eina_List   *elm_calendar_marks_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void               elm_calendar_marks_draw(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EINA_DEPRECATED EAPI void               elm_calendar_text_saturday_color_set(Evas_Object *obj, int pos) EINA_ARG_NONNULL(1);
-   EINA_DEPRECATED EAPI void               elm_calendar_text_sunday_color_set(Evas_Object *obj, int pos) EINA_ARG_NONNULL(1);
-   EINA_DEPRECATED EAPI void               elm_calendar_text_weekday_color_set(Evas_Object *obj, int pos) EINA_ARG_NONNULL(1);
+#define ELM_STORE_ITEM_MAPPING_END { ELM_STORE_ITEM_MAPPING_NONE, NULL, 0, { .empty = { EINA_TRUE } } }
+#define ELM_STORE_ITEM_MAPPING_OFFSET(st, it) offsetof(st, it)
+
+   EAPI Elm_Store              *elm_store_dbsystem_new(void);
+   EAPI void                    elm_store_item_count_set(Elm_Store *st, int count) EINA_ARG_NONNULL(1);
+   EAPI void                    elm_store_item_select_func_set(Elm_Store *st, Elm_Store_Item_Select_Cb func, const void *data) EINA_ARG_NONNULL(1);
+   EAPI void                    elm_store_item_sort_func_set(Elm_Store *st, Elm_Store_Item_Sort_Cb func, const void *data) EINA_ARG_NONNULL(1);
+   EAPI void                    elm_store_item_free_func_set(Elm_Store *st, Elm_Store_Item_Free_Cb func, const void *data) EINA_ARG_NONNULL(1);
+   EAPI int                     elm_store_item_data_index_get(const Elm_Store_Item *sti) EINA_ARG_NONNULL(1);
+   EAPI void                   *elm_store_dbsystem_db_get(const Elm_Store_Item *sti) EINA_ARG_NONNULL(1);
+   EAPI void                    elm_store_dbsystem_db_set(Elm_Store *store, void *pDB) EINA_ARG_NONNULL(1);
+   EAPI int                     elm_store_item_index_get(const Elm_Store_Item *sti) EINA_ARG_NONNULL(1);
+   EAPI Elm_Store_Item         *elm_store_item_add(Elm_Store *st, Elm_Store_Item_Info *info) EINA_ARG_NONNULL(1);
+   EAPI void                    elm_store_item_update(Elm_Store_Item *sti) EINA_ARG_NONNULL(1);
+   EAPI void                    elm_store_visible_items_update(Elm_Store *st) EINA_ARG_NONNULL(1);
+   EAPI void                    elm_store_item_del(Elm_Store_Item *sti) EINA_ARG_NONNULL(1);
+   EAPI void                    elm_store_free(Elm_Store *st);
+   EAPI Elm_Store              *elm_store_filesystem_new(void);
+   EAPI void                    elm_store_filesystem_directory_set(Elm_Store *st, const char *dir) EINA_ARG_NONNULL(1);
+   EAPI const char             *elm_store_filesystem_directory_get(const Elm_Store *st) EINA_ARG_NONNULL(1);
+   EAPI const char             *elm_store_item_filesystem_path_get(const Elm_Store_Item *sti) EINA_ARG_NONNULL(1);
+   EAPI void                    elm_store_target_genlist_set(Elm_Store *st, Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void                    elm_store_cache_set(Elm_Store *st, int max) EINA_ARG_NONNULL(1);
+   EAPI int                     elm_store_cache_get(const Elm_Store *st) EINA_ARG_NONNULL(1);
+   EAPI void                    elm_store_list_func_set(Elm_Store *st, Elm_Store_Item_List_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
+   EAPI void                    elm_store_fetch_func_set(Elm_Store *st, Elm_Store_Item_Fetch_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
+   EAPI void                    elm_store_fetch_thread_set(Elm_Store *st, Eina_Bool use_thread) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool               elm_store_fetch_thread_get(const Elm_Store *st) EINA_ARG_NONNULL(1);
+   EAPI void                    elm_store_unfetch_func_set(Elm_Store *st, Elm_Store_Item_Unfetch_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
+   EAPI void                    elm_store_sorted_set(Elm_Store *st, Eina_Bool sorted) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool               elm_store_sorted_get(const Elm_Store *st) EINA_ARG_NONNULL(1);
+   EAPI void                    elm_store_item_data_set(Elm_Store_Item *sti, void *data) EINA_ARG_NONNULL(1);
+   EAPI void                   *elm_store_item_data_get(Elm_Store_Item *sti) EINA_ARG_NONNULL(1);
+   EAPI const Elm_Store        *elm_store_item_store_get(const Elm_Store_Item *sti) EINA_ARG_NONNULL(1);
+   EAPI const Elm_Genlist_Item *elm_store_item_genlist_item_get(const Elm_Store_Item *sti) EINA_ARG_NONNULL(1);
+
+   /* SegmentControl */
+   typedef struct _Elm_Segment_Item Elm_Segment_Item;
+   EAPI Evas_Object      *elm_segment_control_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
+   EAPI Elm_Segment_Item *elm_segment_control_item_add(Evas_Object *obj, Evas_Object *icon, const char *label) EINA_ARG_NONNULL(1);
+   EAPI Elm_Segment_Item *elm_segment_control_item_insert_at(Evas_Object *obj, Evas_Object *icon, const char *label, int index) EINA_ARG_NONNULL(1);
+   EAPI void              elm_segment_control_item_del(Elm_Segment_Item *it) EINA_ARG_NONNULL(1);
+   EAPI void              elm_segment_control_item_del_at(Evas_Object *obj, int index) EINA_ARG_NONNULL(1);
+   EAPI int               elm_segment_control_item_count_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI Elm_Segment_Item *elm_segment_control_item_get(const Evas_Object *obj, int index) EINA_ARG_NONNULL(1);
+   EAPI const char       *elm_segment_control_item_label_get(const Evas_Object *obj, int index) EINA_ARG_NONNULL(1);
+   EAPI void              elm_segment_control_item_label_set(Elm_Segment_Item* it, const char* label) EINA_ARG_NONNULL(1);
+   EAPI Evas_Object      *elm_segment_control_item_icon_get(const Evas_Object *obj, int index) EINA_ARG_NONNULL(1);
+   EAPI void              elm_segment_control_item_icon_set(Elm_Segment_Item *it, Evas_Object *icon) EINA_ARG_NONNULL(1);
+   EAPI int               elm_segment_control_item_index_get(const Elm_Segment_Item *it) EINA_ARG_NONNULL(1);
+   EAPI Evas_Object      *elm_segment_control_item_object_get(const Elm_Segment_Item *it) EINA_ARG_NONNULL(1);
+   EAPI Elm_Segment_Item *elm_segment_control_item_selected_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void              elm_segment_control_item_selected_set(Elm_Segment_Item *it, Eina_Bool select) EINA_ARG_NONNULL(1);
    /* smart callbacks called:
-    * changed - emitted when the user select a day or change the displayed
-    * month.
+    * "changed" -when the user clicks on a segment item which is not previously
+    *            selected and get selected. The event_info parameter is the
+    *            segment item index.
     */
 
-   /* diskselector */
-   typedef struct _Elm_Diskselector_Item Elm_Diskselector_Item;
+   EAPI Evas_Object *elm_grid_add(Evas_Object *parent);
+   EAPI void         elm_grid_size_set(Evas_Object *obj, int w, int h);
+   EAPI void         elm_grid_size_get(Evas_Object *obj, int *w, int *h);
+   EAPI void         elm_grid_pack(Evas_Object *obj, Evas_Object *subobj, int x, int y, int w, int h);
+   EAPI void         elm_grid_unpack(Evas_Object *obj, Evas_Object *subobj);
+   EAPI void         elm_grid_clear(Evas_Object *obj, Eina_Bool clear);
+   EAPI void         elm_grid_pack_set(Evas_Object *subobj, int x, int y, int w, int h);
+   EAPI void         elm_grid_pack_get(Evas_Object *subobj, int *x, int *y, int *w, int *h);
+
+   EAPI Evas_Object *elm_genscroller_add(Evas_Object *parent);
+   EAPI void         elm_genscroller_world_size_set(Evas_Object *obj, Evas_Coord w, Evas_Coord h);
+
+   EAPI Evas_Object *elm_video_add(Evas_Object *parent);
+   EAPI void elm_video_file_set(Evas_Object *video, const char *filename);
+   EAPI void elm_video_uri_set(Evas_Object *video, const char *uri);
+   EAPI Evas_Object *elm_video_emotion_get(Evas_Object *video);
+   EAPI void elm_video_play(Evas_Object *video);
+   EAPI void elm_video_pause(Evas_Object *video);
+   EAPI void elm_video_stop(Evas_Object *video);
+   EAPI Eina_Bool elm_video_is_playing(Evas_Object *video);
+   EAPI Eina_Bool elm_video_is_seekable(Evas_Object *video);
+   EAPI Eina_Bool elm_video_audio_mute_get(Evas_Object *video);
+   EAPI void elm_video_audio_mute_set(Evas_Object *video, Eina_Bool mute);
+   EAPI double elm_video_audio_level_get(Evas_Object *video);
+   EAPI void elm_video_audio_level_set(Evas_Object *video, double volume);
+   EAPI double elm_video_play_position_get(Evas_Object *video);
+   EAPI void elm_video_play_position_set(Evas_Object *video, double position);
+   EAPI double elm_video_play_length_get(Evas_Object *video);
+   EAPI void elm_video_remember_position_set(Evas_Object *video, Eina_Bool remember);
+   EAPI Eina_Bool elm_video_remember_position_get(Evas_Object *video);
+   EAPI const char *elm_video_title_get(Evas_Object *video);
+
+   EAPI Evas_Object *elm_player_add(Evas_Object *parent);
+   EAPI void elm_player_video_set(Evas_Object *player, Evas_Object *video);
 
-   EAPI Evas_Object           *elm_diskselector_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool              elm_diskselector_round_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void                   elm_diskselector_round_set(Evas_Object *obj, Eina_Bool round) EINA_ARG_NONNULL(1);
-   EAPI int                    elm_diskselector_side_label_lenght_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void                   elm_diskselector_side_label_lenght_set(Evas_Object *obj, int len) EINA_ARG_NONNULL(1);
-   EAPI void                   elm_diskselector_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_bounce) EINA_ARG_NONNULL(1);
-   EAPI void                   elm_diskselector_bounce_get(const Evas_Object *obj, Eina_Bool *h_bounce, Eina_Bool *v_bounce) EINA_ARG_NONNULL(1);
-   EAPI void                   elm_diskselector_scroller_policy_get(const Evas_Object *obj, Elm_Scroller_Policy *policy_h, Elm_Scroller_Policy *policy_v) EINA_ARG_NONNULL(1);
-   EAPI void                   elm_diskselector_scroller_policy_set(Evas_Object *obj, Elm_Scroller_Policy policy_h, Elm_Scroller_Policy policy_v) EINA_ARG_NONNULL(1);
-   EAPI void                   elm_diskselector_clear(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI const Eina_List       *elm_diskselector_items_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI Elm_Diskselector_Item *elm_diskselector_item_append(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1);
-   EAPI void                   elm_diskselector_item_del(Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
-   EAPI void                   elm_diskselector_item_del_cb_set(Elm_Diskselector_Item *item, Evas_Smart_Cb func) EINA_ARG_NONNULL(1);
-   EAPI void                  *elm_diskselector_item_data_get(const Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
-   EAPI Evas_Object           *elm_diskselector_item_icon_get(const Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
-   EAPI void                   elm_diskselector_item_icon_set(Elm_Diskselector_Item *item, Evas_Object *icon) EINA_ARG_NONNULL(1);
-   EAPI const char            *elm_diskselector_item_label_get(const Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
-   EAPI void                   elm_diskselector_item_label_set(Elm_Diskselector_Item *item, const char *label) EINA_ARG_NONNULL(1);
-   EAPI Elm_Diskselector_Item *elm_diskselector_selected_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void                   elm_diskselector_item_selected_set(Elm_Diskselector_Item *item, Eina_Bool selected) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool              elm_diskselector_item_selected_get(const Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
-   EAPI Elm_Diskselector_Item *elm_diskselector_first_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI Elm_Diskselector_Item *elm_diskselector_last_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI Elm_Diskselector_Item *elm_diskselector_item_prev_get(const Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
-   EAPI Elm_Diskselector_Item *elm_diskselector_item_next_get(const Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
-   EAPI void                   elm_diskselector_item_tooltip_text_set(Elm_Diskselector_Item *item, const char *text) EINA_ARG_NONNULL(1);
-   EAPI void                   elm_diskselector_item_tooltip_content_cb_set(Elm_Diskselector_Item *item, Elm_Tooltip_Item_Content_Cb func, const void *data, Evas_Smart_Cb del_cb) EINA_ARG_NONNULL(1);
-   EAPI void                   elm_diskselector_item_tooltip_unset(Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
-   EAPI void                   elm_diskselector_item_tooltip_style_set(Elm_Diskselector_Item *item, const char *style) EINA_ARG_NONNULL(1);
-   EAPI const char            *elm_diskselector_item_tooltip_style_get(const Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
-   EAPI void                   elm_diskselector_item_cursor_set(Elm_Diskselector_Item *item, const char *cursor) EINA_ARG_NONNULL(1);
-   EAPI const char            *elm_diskselector_item_cursor_get(const Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
-   EAPI void                   elm_diskselector_item_cursor_unset(Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
-   EAPI void                   elm_diskselector_item_cursor_style_set(Elm_Diskselector_Item *item, const char *style) EINA_ARG_NONNULL(1);
-   EAPI const char            *elm_diskselector_item_cursor_style_get(const Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
-   EAPI void                   elm_diskselector_item_cursor_engine_only_set(Elm_Diskselector_Item *item, Eina_Bool engine_only) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool              elm_diskselector_item_cursor_engine_only_get(const Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
-   EAPI void                   elm_diskselector_display_item_num_set(Evas_Object *obj, int num) EINA_ARG_NONNULL(1);
+   // FIXME: incomplete - carousel. don't use this until this comment is removed
+   typedef struct _Elm_Carousel_Item Elm_Carousel_Item;
+   EAPI Evas_Object       *elm_carousel_add(Evas_Object *parent);
+   EAPI Elm_Carousel_Item *elm_carousel_item_add(Evas_Object *obj, Evas_Object *icon, const char *label, Evas_Smart_Cb func, const void *data);
+   EAPI void               elm_carousel_item_del(Elm_Carousel_Item *item);
+   EAPI void               elm_carousel_item_select(Elm_Carousel_Item *item);
    /* smart callbacks called:
-    * "selected" - when item is selected (scroller stops)
+    * "clicked" - when the user clicks on a carousel item and becomes selected
     */
 
    /* datefield */
@@ -2821,6 +8156,9 @@ extern "C" {
    EAPI int          elm_popup_run(Evas_Object *obj);
 
    /* NavigationBar */
+   #define NAVIBAR_TITLEOBJ_INSTANT_HIDE "elm,state,hide,noanimate,title", "elm"
+   #define NAVIBAR_TITLEOBJ_INSTANT_SHOW "elm,state,show,noanimate,title", "elm"
+
    typedef enum
      {
         ELM_NAVIGATIONBAR_FUNCTION_BUTTON1,
@@ -2836,6 +8174,7 @@ extern "C" {
    EAPI void         elm_navigationbar_title_label_set(Evas_Object *obj, Evas_Object *content, const char *title);
    EAPI const char  *elm_navigationbar_title_label_get(Evas_Object *obj, Evas_Object *content);
    EAPI void         elm_navigationbar_title_object_add(Evas_Object *obj, Evas_Object *content, Evas_Object *title_obj);
+   EAPI Evas_Object *elm_navigationbar_title_object_get(Evas_Object *obj, Evas_Object *content);
    EAPI Eina_List   *elm_navigationbar_title_object_list_get(Evas_Object *obj, Evas_Object *content);
    EAPI Evas_Object *elm_navigationbar_content_top_get(Evas_Object *obj);
    EAPI Evas_Object *elm_navigationbar_content_bottom_get(Evas_Object *obj);
@@ -2851,7 +8190,10 @@ extern "C" {
    EAPI void         elm_navigationbar_title_icon_set(Evas_Object *obj, Evas_Object *content, Evas_Object *icon);
    EAPI Evas_Object *elm_navigationbar_title_icon_get(Evas_Object *obj, Evas_Object *content);
 
-     /* NavigationBar */
+   /* NavigationBar */
+   #define NAVIBAR_EX_TITLEOBJ_INSTANT_HIDE "elm,state,hide,noanimate,title", "elm"
+   #define NAVIBAR_EX_TITLEOBJ_INSTANT_SHOW "elm,state,show,noanimate,title", "elm"
+
    typedef enum
      {
         ELM_NAVIGATIONBAR_EX_BACK_BUTTON,
@@ -2891,6 +8233,23 @@ extern "C" {
    EAPI void         elm_navigationbar_ex_title_object_visible_set(Elm_Navigationbar_ex_Item* item, Eina_Bool visible);
    Eina_Bool         elm_navigationbar_ex_title_object_visible_get(Elm_Navigationbar_ex_Item* item);
 
+  /* naviframe */
+  #define ELM_NAVIFRAME_ITEM_ICON "elm.swallow.icon"
+  #define ELM_NAVIFRAME_ITEM_OPTIONHEADER "elm.swallow.optionheader"
+  #define ELM_NAVIFRAME_ITEM_TITLE_LABEL "elm.text.title"
+  #define ELM_NAVIFRAME_ITEM_PREV_BTN "elm.swallow.prev_btn"
+
+   EAPI Evas_Object        *elm_naviframe_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
+   EAPI Elm_Object_Item    *elm_naviframe_item_push(Evas_Object *obj, const char *title_label, Evas_Object *prev_btn, Evas_Object *next_btn, Evas_Object *content, const char *item_style) EINA_ARG_NONNULL(1, 5);
+   EAPI Evas_Object        *elm_naviframe_item_pop(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void                elm_naviframe_content_preserve_on_pop_set(Evas_Object *obj, Eina_Bool preserve) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool           elm_naviframe_content_preserve_on_pop_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI Elm_Object_Item    *elm_naviframe_top_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI Elm_Object_Item    *elm_naviframe_bottom_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void                elm_naviframe_item_style_set(Elm_Object_Item *it, const char *item_style) EINA_ARG_NONNULL(1);
+   EAPI const char         *elm_naviframe_item_style_get(const Elm_Object_Item *it) EINA_ARG_NONNULL(1);
+   EAPI void                elm_naviframe_item_title_visible_set(Elm_Object_Item *it, Eina_Bool visible) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool           elm_naviframe_item_title_visible_get(const Elm_Object_Item *it) EINA_ARG_NONNULL(1);
 
    /* Control Bar */
    #define CONTROLBAR_SYSTEM_ICON_ALBUMS "controlbar_albums"
@@ -2915,7 +8274,6 @@ extern "C" {
      } Elm_Controlbar_Mode_Type;
 
    typedef struct _Elm_Controlbar_Item Elm_Controlbar_Item;
-
    EAPI Evas_Object *elm_controlbar_add(Evas_Object *parent);
    EAPI Elm_Controlbar_Item *elm_controlbar_tab_item_append(Evas_Object *obj, const char *icon_path, const char *label, Evas_Object *view);
    EAPI Elm_Controlbar_Item *elm_controlbar_tab_item_prepend(Evas_Object *obj, const char *icon_path, const char *label, Evas_Object *view);
@@ -2936,147 +8294,90 @@ extern "C" {
    EAPI Eina_Bool    elm_controlbar_item_visible_get(const Elm_Controlbar_Item * it);
    EAPI void         elm_controlbar_item_disabled_set(Elm_Controlbar_Item * it, Eina_Bool disabled);
    EAPI Eina_Bool    elm_controlbar_item_disabled_get(const Elm_Controlbar_Item * it);
-   EAPI void         elm_controlbar_item_icon_set(Elm_Controlbar_Item *it, const char *icon_path);
-   EAPI Evas_Object *elm_controlbar_item_icon_get(const Elm_Controlbar_Item *it);
-   EAPI void         elm_controlbar_item_label_set(Elm_Controlbar_Item *it, const char *label);
-   EAPI const char  *elm_controlbar_item_label_get(const Elm_Controlbar_Item *it);
-   EAPI Elm_Controlbar_Item *elm_controlbar_selected_item_get(const Evas_Object *obj);
-   EAPI Elm_Controlbar_Item *elm_controlbar_first_item_get(const Evas_Object *obj);
-   EAPI Elm_Controlbar_Item *elm_controlbar_last_item_get(const Evas_Object *obj);
-   EAPI const Eina_List   *elm_controlbar_items_get(const Evas_Object *obj);
-   EAPI Elm_Controlbar_Item *elm_controlbar_item_prev(Elm_Controlbar_Item *it);
-   EAPI Elm_Controlbar_Item *elm_controlbar_item_next(Elm_Controlbar_Item *it);
-   EAPI void         elm_controlbar_item_view_set(Elm_Controlbar_Item *it, Evas_Object * view);
-   EAPI Evas_Object *elm_controlbar_item_view_get(const Elm_Controlbar_Item *it);
-   EAPI Evas_Object *elm_controlbar_item_view_unset(Elm_Controlbar_Item *it);
-   EAPI Evas_Object *elm_controlbar_item_button_get(const Elm_Controlbar_Item *it);
-   EAPI void         elm_controlbar_mode_set(Evas_Object *obj, int mode);
-   EAPI void         elm_controlbar_alpha_set(Evas_Object *obj, int alpha);
-   EAPI void         elm_controlbar_item_auto_align_set(Evas_Object *obj, Eina_Bool auto_align);
-   EAPI void         elm_controlbar_vertical_set(Evas_Object *obj, Eina_Bool vertical);
-
-   /* SearchBar */
-   EAPI Evas_Object *elm_searchbar_add(Evas_Object *parent);
-   EAPI void         elm_searchbar_text_set(Evas_Object *obj, const char *entry);
-   EAPI const char  *elm_searchbar_text_get(Evas_Object *obj);
-   EAPI Evas_Object *elm_searchbar_entry_get(Evas_Object *obj);
-   EAPI void         elm_searchbar_cancel_button_animation_set(Evas_Object *obj, Eina_Bool cancel_btn_ani_flag);
-   EAPI void         elm_searchbar_cancel_button_set(Evas_Object *obj, Eina_Bool visible);
-   EAPI void         elm_searchbar_clear(Evas_Object *obj);
-   EAPI void         elm_searchbar_boundary_rect_set(Evas_Object *obj, Eina_Bool boundary);
-
-   /* colorselector */
-   EAPI Evas_Object *elm_colorselector_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
-   EAPI void         elm_colorselector_color_set(Evas_Object *obj, int r, int g , int b, int a) EINA_ARG_NONNULL(1);
-   EAPI void         elm_colorselector_color_get(const Evas_Object *obj, int *r, int *g , int *b, int *a) EINA_ARG_NONNULL(1);
-   /* smart callbacks called:
-    * "changed" - when the color value changes
-    */
-
-   /* Contextual Popup */
-   typedef struct _Elm_Ctxpopup_Item Elm_Ctxpopup_Item;
-
-   typedef enum _Elm_Ctxpopup_Direction
-     {
-        ELM_CTXPOPUP_DIRECTION_DOWN,
-        ELM_CTXPOPUP_DIRECTION_RIGHT,
-        ELM_CTXPOPUP_DIRECTION_LEFT,
-        ELM_CTXPOPUP_DIRECTION_UP,
-     } Elm_Ctxpopup_Direction;
-
-   EAPI Evas_Object  *elm_ctxpopup_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
-   EAPI Evas_Object  *elm_ctxpopup_item_icon_get(const Elm_Ctxpopup_Item *item) EINA_ARG_NONNULL(1);
-   EAPI void          elm_ctxpopup_item_icon_set(Elm_Ctxpopup_Item *item, Evas_Object *icon) EINA_ARG_NONNULL(1);
-   EAPI const char   *elm_ctxpopup_item_label_get(const Elm_Ctxpopup_Item *item) EINA_ARG_NONNULL(1);
-   EAPI void          elm_ctxpopup_item_label_set(Elm_Ctxpopup_Item *item, const char *label) EINA_ARG_NONNULL(1);
-   EAPI void          elm_ctxpopup_hover_parent_set(Evas_Object *obj, Evas_Object *parent) EINA_ARG_NONNULL(1, 2);
-   EAPI Evas_Object  *elm_ctxpopup_hover_parent_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void          elm_ctxpopup_clear(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void          elm_ctxpopup_horizontal_set(Evas_Object *obj, Eina_Bool horizontal) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool     elm_ctxpopup_horizontal_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   Elm_Ctxpopup_Item *elm_ctxpopup_item_append(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1);
-   EAPI void          elm_ctxpopup_item_del(Elm_Ctxpopup_Item *item) EINA_ARG_NONNULL(1);
-   EAPI void          elm_ctxpopup_item_disabled_set(Elm_Ctxpopup_Item *item, Eina_Bool disabled) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool     elm_ctxpopup_item_disabled_get(const Elm_Ctxpopup_Item *item) EINA_ARG_NONNULL(1);
-   EAPI void          elm_ctxpopup_content_set(Evas_Object *obj, Evas_Object *content) EINA_ARG_NONNULL(1, 2);
-   EAPI Evas_Object  *elm_ctxpopup_content_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void          elm_ctxpopup_direction_priority_set(Evas_Object *obj, Elm_Ctxpopup_Direction first, Elm_Ctxpopup_Direction second, Elm_Ctxpopup_Direction third, Elm_Ctxpopup_Direction fourth) EINA_ARG_NONNULL(1);
-   EAPI void          elm_ctxpopup_direction_priority_get(Evas_Object *obj, Elm_Ctxpopup_Direction *first, Elm_Ctxpopup_Direction *second, Elm_Ctxpopup_Direction *third, Elm_Ctxpopup_Direction *fourth) EINA_ARG_NONNULL(1);
-   /* smart callbacks called:
-    * "dismissed" - the ctxpopup was dismissed
-    */
+   EAPI void         elm_controlbar_item_icon_set(Elm_Controlbar_Item *it, const char *icon_path);
+   EAPI Evas_Object *elm_controlbar_item_icon_get(const Elm_Controlbar_Item *it);
+   EAPI void         elm_controlbar_item_label_set(Elm_Controlbar_Item *it, const char *label);
+   EAPI const char  *elm_controlbar_item_label_get(const Elm_Controlbar_Item *it);
+   EAPI Elm_Controlbar_Item *elm_controlbar_selected_item_get(const Evas_Object *obj);
+   EAPI Elm_Controlbar_Item *elm_controlbar_first_item_get(const Evas_Object *obj);
+   EAPI Elm_Controlbar_Item *elm_controlbar_last_item_get(const Evas_Object *obj);
+   EAPI const Eina_List   *elm_controlbar_items_get(const Evas_Object *obj);
+   EAPI Elm_Controlbar_Item *elm_controlbar_item_prev(Elm_Controlbar_Item *it);
+   EAPI Elm_Controlbar_Item *elm_controlbar_item_next(Elm_Controlbar_Item *it);
+   EAPI void         elm_controlbar_item_view_set(Elm_Controlbar_Item *it, Evas_Object * view);
+   EAPI Evas_Object *elm_controlbar_item_view_get(const Elm_Controlbar_Item *it);
+   EAPI Evas_Object *elm_controlbar_item_view_unset(Elm_Controlbar_Item *it);
+   EAPI Evas_Object *elm_controlbar_item_button_get(const Elm_Controlbar_Item *it);
+   EAPI void         elm_controlbar_mode_set(Evas_Object *obj, int mode);
+   EAPI void         elm_controlbar_alpha_set(Evas_Object *obj, int alpha);
+   EAPI void         elm_controlbar_item_auto_align_set(Evas_Object *obj, Eina_Bool auto_align);
+   EAPI void         elm_controlbar_vertical_set(Evas_Object *obj, Eina_Bool vertical);
 
-   /* tansit */
-   typedef enum
-     {
-        ELM_TRANSIT_TWEEN_MODE_LINEAR,
-        ELM_TRANSIT_TWEEN_MODE_SINUSOIDAL,
-        ELM_TRANSIT_TWEEN_MODE_DECELERATE,
-        ELM_TRANSIT_TWEEN_MODE_ACCELERATE
-     } Elm_Transit_Tween_Mode;
-   typedef enum
-     {
-        ELM_TRANSIT_EFFECT_FLIP_AXIS_X,
-        ELM_TRANSIT_EFFECT_FLIP_AXIS_Y
-     } Elm_Transit_Effect_Flip_Axis;
-   typedef enum
-     {
-        ELM_TRANSIT_EFFECT_WIPE_DIR_LEFT,
-        ELM_TRANSIT_EFFECT_WIPE_DIR_RIGHT,
-        ELM_TRANSIT_EFFECT_WIPE_DIR_UP,
-        ELM_TRANSIT_EFFECT_WIPE_DIR_DOWN
-     } Elm_Transit_Effect_Wipe_Dir;
-   typedef enum
-     {
-        ELM_TRANSIT_EFFECT_WIPE_TYPE_HIDE,
-        ELM_TRANSIT_EFFECT_WIPE_TYPE_SHOW
-     } Elm_Transit_Effect_Wipe_Type;
+   /* SearchBar */
+   EAPI Evas_Object *elm_searchbar_add(Evas_Object *parent);
+   EAPI void         elm_searchbar_text_set(Evas_Object *obj, const char *entry);
+   EAPI const char  *elm_searchbar_text_get(Evas_Object *obj);
+   EAPI Evas_Object *elm_searchbar_entry_get(Evas_Object *obj);
+   EAPI Evas_Object *elm_searchbar_editfield_get(Evas_Object *obj);
+   EAPI void         elm_searchbar_cancel_button_animation_set(Evas_Object *obj, Eina_Bool cancel_btn_ani_flag);
+   EAPI void         elm_searchbar_cancel_button_set(Evas_Object *obj, Eina_Bool visible);
+   EAPI void         elm_searchbar_clear(Evas_Object *obj);
+   EAPI void         elm_searchbar_boundary_rect_set(Evas_Object *obj, Eina_Bool boundary);
 
-   typedef struct _Elm_Transit Elm_Transit;
-   typedef void Elm_Transit_Effect;
-   typedef void (*Elm_Transit_Effect_Transition_Cb) (Elm_Transit_Effect *effect, Elm_Transit *transit, double progress);
-   typedef void (*Elm_Transit_Effect_End_Cb) (Elm_Transit_Effect *effect, Elm_Transit *transit);
+   EAPI Evas_Object *elm_page_control_add(Evas_Object *parent);
+   EAPI void         elm_page_control_page_count_set(Evas_Object *obj, unsigned int page_count);
+   EAPI        void         elm_page_control_page_id_set(Evas_Object *obj, unsigned int page_id);
+   EAPI unsigned int elm_page_control_page_id_get(Evas_Object *obj);
 
-   EAPI Elm_Transit                *elm_transit_add(void);
-   EAPI void                        elm_transit_del(Elm_Transit *transit) EINA_ARG_NONNULL(1);
-   EAPI void                        elm_transit_effect_add(Elm_Transit *transit, Elm_Transit_Effect_Transition_Cb transition_cb, Elm_Transit_Effect *effect, Elm_Transit_Effect_End_Cb end_cb) EINA_ARG_NONNULL(1, 2);
-   EAPI void                        elm_transit_effect_del(Elm_Transit *transit, Elm_Transit_Effect_Transition_Cb transition_cb, Elm_Transit_Effect *effect) EINA_ARG_NONNULL(1, 2);
-   EAPI void                        elm_transit_object_add(Elm_Transit *transit, Evas_Object *obj) EINA_ARG_NONNULL(1, 2);
-   EAPI void                        elm_transit_object_remove(Elm_Transit *transit, Evas_Object *obj) EINA_ARG_NONNULL(1, 2);
-   EAPI const Eina_List            *elm_transit_objects_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
-   EAPI void                        elm_transit_objects_final_state_keep_set(Elm_Transit *transit, Eina_Bool state_keep) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool                   elm_transit_objects_final_state_keep_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
-   EINA_DEPRECATED EAPI void                elm_transit_event_block_set(Elm_Transit *transit, Eina_Bool disabled) EINA_ARG_NONNULL(1);
-   EINA_DEPRECATED EAPI Eina_Bool           elm_transit_event_block_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
-   EAPI void                        elm_transit_event_enabled_set(Elm_Transit *transit, Eina_Bool enabled) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool                   elm_transit_event_enabled_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
-   EAPI void                        elm_transit_del_cb_set(Elm_Transit *transit, void (*cb)(void *data, Elm_Transit* transit), void *data) EINA_ARG_NONNULL(1);
-   EAPI void                        elm_transit_auto_reverse_set(Elm_Transit *transit, Eina_Bool reverse) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool                   elm_transit_auto_reverse_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
-   EAPI void                        elm_transit_repeat_times_set(Elm_Transit *transit, int repeat) EINA_ARG_NONNULL(1);
-   EAPI int                         elm_transit_repeat_times_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
-   EAPI void                        elm_transit_tween_mode_set(Elm_Transit *transit, Elm_Transit_Tween_Mode tween_mode) EINA_ARG_NONNULL(1);
-   EAPI Elm_Transit_Tween_Mode      elm_transit_tween_mode_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
-   EAPI void                        elm_transit_duration_set(Elm_Transit *transit, double duration) EINA_ARG_NONNULL(1);
-   EAPI double                      elm_transit_duration_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
-   EAPI void                        elm_transit_go(Elm_Transit *transit) EINA_ARG_NONNULL(1);
-   EAPI void                        elm_transit_paused_set(Elm_Transit *transit, Eina_Bool paused) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool                   elm_transit_paused_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
-   EAPI double                      elm_transit_progress_value_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
-   EAPI void                        elm_transit_chain_transit_add(Elm_Transit *transit, Elm_Transit *chain_transit) EINA_ARG_NONNULL(1, 2);
-   EAPI Eina_List                  *elm_transit_chain_transits_get(const Elm_Transit *transit);
+   /* NoContents */
+   EAPI Evas_Object *elm_nocontents_add(Evas_Object *parent);
+   EAPI void         elm_nocontents_label_set(Evas_Object *obj, const char *label);
+   EAPI const char  *elm_nocontents_label_get(const Evas_Object *obj);
+   EAPI void         elm_nocontents_custom_set(const Evas_Object *obj, Evas_Object *custom);
+   EAPI Evas_Object *elm_nocontents_custom_get(const Evas_Object *obj);
 
-   EAPI Elm_Transit_Effect *elm_transit_effect_resizing_add(Elm_Transit* transit, Evas_Coord from_w, Evas_Coord from_h, Evas_Coord to_w, Evas_Coord to_h);
-   EAPI Elm_Transit_Effect *elm_transit_effect_translation_add(Elm_Transit* transit, Evas_Coord from_dx, Evas_Coord dy, Evas_Coord to_dx, Evas_Coord to_dy);
-   EAPI Elm_Transit_Effect *elm_transit_effect_zoom_add(Elm_Transit *transit, float from_rate, float to_rate);
-   EAPI Elm_Transit_Effect *elm_transit_effect_flip_add(Elm_Transit *transit, Elm_Transit_Effect_Flip_Axis axis, Eina_Bool cw);
-   EAPI Elm_Transit_Effect *elm_transit_effect_resizable_flip_add(Elm_Transit *transit, Elm_Transit_Effect_Flip_Axis axis, Eina_Bool cw);
-   EAPI Elm_Transit_Effect *elm_transit_effect_wipe_add(Elm_Transit *transit, Elm_Transit_Effect_Wipe_Type type, Elm_Transit_Effect_Wipe_Dir dir);
-   EAPI Elm_Transit_Effect *elm_transit_effect_color_add(Elm_Transit *transit, unsigned int from_r, unsigned int from_g, unsigned int from_b, unsigned int from_a, unsigned int to_r, unsigned int to_g, unsigned int to_b, unsigned int to_a);
-   EAPI Elm_Transit_Effect *elm_transit_effect_fade_add(Elm_Transit *transit);
-   EAPI Elm_Transit_Effect *elm_transit_effect_blend_add(Elm_Transit *transit);
-   EAPI Elm_Transit_Effect *elm_transit_effect_rotation_add(Elm_Transit *transit, float from_degree, float to_degree);
-   EAPI Elm_Transit_Effect *elm_transit_effect_image_animation_add(Elm_Transit *transit, Eina_List *images);
+/* TickerNoti */
+typedef enum
+  {
+     ELM_TICKERNOTI_DEFAULT,
+     ELM_TICKERNOTI_DETAILVIEW
+  } Elm_Tickernoti_Mode;
+
+typedef enum
+  {
+     ELM_TICKERNOTI_ORIENT_TOP,
+     ELM_TICKERNOTI_ORIENT_BOTTOM
+  } Elm_Tickernoti_Orient;
+
+   EAPI Evas_Object              *elm_tickernoti_add (Evas_Object *parent);
+   EAPI void                      elm_tickernoti_icon_set (Evas_Object *obj, Evas_Object *icon) EINA_ARG_NONNULL(1);
+   EAPI Evas_Object              *elm_tickernoti_icon_get (const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void                      elm_tickernoti_label_set (Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
+   EAPI const char               *elm_tickernoti_label_get (const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void                      elm_tickernoti_button_set (Evas_Object *obj, Evas_Object *button) EINA_ARG_NONNULL(1);
+   EAPI Evas_Object              *elm_tickernoti_button_get (const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void                      elm_tickernoti_orientation_set (Evas_Object *obj, Elm_Tickernoti_Orient orient) EINA_ARG_NONNULL(1);
+   EAPI Elm_Tickernoti_Orient     elm_tickernoti_orientation_get (const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI int                       elm_tickernoti_rotation_get (const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void                      elm_tickernoti_rotation_set (Evas_Object *obj, int angle) EINA_ARG_NONNULL(1);
+   /* #### Below APIs are going to be deprecated, announcment will be made soon ####*/
+   EAPI Evas_Object              *elm_tickernoti_win_get (const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void                      elm_tickernoti_detailview_label_set (Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
+   EAPI const char               *elm_tickernoti_detailview_label_get (const Evas_Object *obj)EINA_ARG_NONNULL(1);
+   EAPI void                      elm_tickernoti_detailview_button_set (Evas_Object *obj, Evas_Object *button) EINA_ARG_NONNULL(2);
+   EAPI Evas_Object              *elm_tickernoti_detailview_button_get (const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void                      elm_tickernoti_detailview_icon_set (Evas_Object *obj, Evas_Object *icon) EINA_ARG_NONNULL(1);
+   EAPI Evas_Object              *elm_tickernoti_detailview_icon_get (const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI Evas_Object              *elm_tickernoti_detailview_get (const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void                      elm_tickernoti_mode_set (Evas_Object *obj, Elm_Tickernoti_Mode mode) EINA_ARG_NONNULL(1);
+   EAPI Elm_Tickernoti_Mode       elm_tickernoti_mode_get (const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /* ############################################################################### */
+   /* smart callbacks called:
+    * @li "clicked" - emitted when tickernoti is clicked, except at the
+    * swallow/button region, if any.
+    * @li "hide" - emitted when the tickernoti is completelyhidden. In case of
+    * any hide animation, this signal is raised after the animation.
+    */
 
    /* colorpalette */
    typedef struct _Colorpalette_Color Elm_Colorpalette_Color;
@@ -3129,12 +8430,12 @@ extern "C" {
         double x, y;
      } Elm_SlidingDrawer_Drag_Value;
 
-   EAPI Evas_Object *elm_slidingdrawer_add(Evas_Object *parent);
-   EAPI void         elm_slidingdrawer_content_set (Evas_Object *obj, Evas_Object *content);
-   EAPI Evas_Object *elm_slidingdrawer_content_unset(Evas_Object *obj);
-   EAPI void         elm_slidingdrawer_pos_set(Evas_Object *obj, Elm_SlidingDrawer_Pos pos);
-   EAPI void         elm_slidingdrawer_max_drag_value_set(Evas_Object *obj, double dw,  double dh);
-   EAPI void         elm_slidingdrawer_drag_value_set(Evas_Object *obj, double dx, double dy);
+   EINA_DEPRECATED EAPI Evas_Object *elm_slidingdrawer_add(Evas_Object *parent);
+   EINA_DEPRECATED EAPI void         elm_slidingdrawer_content_set (Evas_Object *obj, Evas_Object *content);
+   EINA_DEPRECATED EAPI Evas_Object *elm_slidingdrawer_content_unset(Evas_Object *obj);
+   EINA_DEPRECATED EAPI void         elm_slidingdrawer_pos_set(Evas_Object *obj, Elm_SlidingDrawer_Pos pos);
+   EINA_DEPRECATED EAPI void         elm_slidingdrawer_max_drag_value_set(Evas_Object *obj, double dw,  double dh);
+   EINA_DEPRECATED EAPI void         elm_slidingdrawer_drag_value_set(Evas_Object *obj, double dx, double dy);
 
    /* multibuttonentry */
    typedef struct _Multibuttonentry_Item Elm_Multibuttonentry_Item;
@@ -3250,37 +8551,6 @@ extern "C" {
    EAPI Eina_Bool    elm_dayselector_check_state_get(Evas_Object *obj, Elm_DaySelector_Day day);
    EAPI void         elm_dayselector_check_state_set(Evas_Object *obj, Elm_DaySelector_Day day, Eina_Bool checked);
 
-   /* NoContents */
-   EAPI Evas_Object *elm_nocontents_add(Evas_Object *parent);
-   EAPI void         elm_nocontents_label_set(Evas_Object *obj, const char *label);
-   EAPI const char  *elm_nocontents_label_get(const Evas_Object *obj);
-   EAPI void         elm_nocontents_custom_set(const Evas_Object *obj, Evas_Object *custom);
-   EAPI Evas_Object *elm_nocontents_custom_get(const Evas_Object *obj);
-
-   /* TickerNoti */
-   typedef enum
-     {
-        ELM_TICKERNOTI_DEFAULT,
-        ELM_TICKERNOTI_DETAILVIEW
-     } Elm_Tickernoti_Mode;
-
-   EAPI Evas_Object         *elm_tickernoti_add (Evas_Object *parent);
-   EAPI void                 elm_tickernoti_icon_set (const Evas_Object *obj, Evas_Object *icon);
-   EAPI Evas_Object         *elm_tickernoti_icon_get (const Evas_Object *obj);
-   EAPI void                 elm_tickernoti_label_set (Evas_Object *obj, const char *label);
-   EAPI const char          *elm_tickernoti_label_get (const Evas_Object *obj);
-   EAPI void                elm_tickernoti_detailview_label_set (Evas_Object *obj, const char *label);
-   EAPI const char          *elm_tickernoti_detailview_label_get (const Evas_Object *obj);
-   EAPI void                 elm_tickernoti_detailview_button_set (const Evas_Object *obj, Evas_Object *button);
-   EAPI Evas_Object         *elm_tickernoti_detailview_button_get (const Evas_Object *obj);
-   EAPI void                 elm_tickernoti_detailview_icon_set (const Evas_Object *obj, Evas_Object *icon);
-   EAPI Evas_Object         *elm_tickernoti_detailview_icon_get (const Evas_Object *obj);
-   EAPI Evas_Object         *elm_tickernoti_detailview_get (const Evas_Object *obj);
-   EAPI int                  elm_tickernoti_rotation_get (const Evas_Object *obj);
-   EAPI void                 elm_tickernoti_rotation_set (const Evas_Object *obj, int angle);
-   EAPI void                 elm_tickernoti_mode_set (const Evas_Object *obj, Elm_Tickernoti_Mode mode);
-   EAPI Elm_Tickernoti_Mode  elm_tickernoti_mode_get (const Evas_Object *obj);
-
    /* Image Slider */
    typedef struct _Imageslider_Item Elm_Imageslider_Item;
    typedef void (*Elm_Imageslider_Cb)(void *data, Evas_Object *obj, void *event_info);
@@ -3299,162 +8569,6 @@ extern "C" {
    EAPI void                   elm_imageslider_next(Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void                   elm_imageslider_item_photo_file_set(Elm_Imageslider_Item *it, const char *photo_file) EINA_ARG_NONNULL(1,2);
    EAPI void                   elm_imageslider_item_update(Elm_Imageslider_Item *it) EINA_ARG_NONNULL(1);
-
-   /* Store */
-   typedef struct _Elm_Store                      Elm_Store;
-   typedef struct _Elm_Store_DBsystem             Elm_Store_DBsystem;
-   typedef struct _Elm_Store_Filesystem           Elm_Store_Filesystem;
-   typedef struct _Elm_Store_Item                 Elm_Store_Item;
-   typedef struct _Elm_Store_Item_DBsystem        Elm_Store_Item_DBsystem;
-   typedef struct _Elm_Store_Item_Filesystem      Elm_Store_Item_Filesystem;
-   typedef struct _Elm_Store_Item_Info            Elm_Store_Item_Info;
-   typedef struct _Elm_Store_Item_Info_Filesystem Elm_Store_Item_Info_Filesystem;
-   typedef struct _Elm_Store_Item_Mapping         Elm_Store_Item_Mapping;
-   typedef struct _Elm_Store_Item_Mapping_Empty   Elm_Store_Item_Mapping_Empty;
-   typedef struct _Elm_Store_Item_Mapping_Icon    Elm_Store_Item_Mapping_Icon;
-   typedef struct _Elm_Store_Item_Mapping_Photo   Elm_Store_Item_Mapping_Photo;
-   typedef struct _Elm_Store_Item_Mapping_Custom  Elm_Store_Item_Mapping_Custom;
-
-   typedef Eina_Bool (*Elm_Store_Item_List_Cb) (void *data, Elm_Store_Item_Info *info);
-   typedef void      (*Elm_Store_Item_Fetch_Cb) (void *data, Elm_Store_Item *sti, Elm_Store_Item_Info *info);
-   typedef void      (*Elm_Store_Item_Unfetch_Cb) (void *data, Elm_Store_Item *sti, Elm_Store_Item_Info *info);
-   typedef void      (*Elm_Store_Item_Select_Cb) (void *data, Elm_Store_Item *sti);
-   typedef int       (*Elm_Store_Item_Sort_Cb) (void *data, Elm_Store_Item_Info *info1, Elm_Store_Item_Info *info2);
-   typedef void      (*Elm_Store_Item_Free_Cb) (void *data, Elm_Store_Item_Info *info);
-   typedef void     *(*Elm_Store_Item_Mapping_Cb) (void *data, Elm_Store_Item *sti, const char *part);
-
-   typedef enum
-     {
-        ELM_STORE_ITEM_MAPPING_NONE = 0,
-        ELM_STORE_ITEM_MAPPING_LABEL, // const char * -> label
-        ELM_STORE_ITEM_MAPPING_STATE, // Eina_Bool -> state
-        ELM_STORE_ITEM_MAPPING_ICON, // char * -> icon path
-        ELM_STORE_ITEM_MAPPING_PHOTO, // char * -> photo path
-        ELM_STORE_ITEM_MAPPING_CUSTOM, // item->custom(it->data, it, part) -> void * (-> any)
-        // can add more here as needed by common apps
-        ELM_STORE_ITEM_MAPPING_LAST
-     } Elm_Store_Item_Mapping_Type;
-
-   struct _Elm_Store_Item_Mapping_Icon
-     {
-        // FIXME: allow edje file icons
-        int                   w, h;
-        Elm_Icon_Lookup_Order lookup_order;
-        Eina_Bool             standard_name : 1;
-        Eina_Bool             no_scale : 1;
-        Eina_Bool             smooth : 1;
-        Eina_Bool             scale_up : 1;
-        Eina_Bool             scale_down : 1;
-     };
-
-   struct _Elm_Store_Item_Mapping_Empty
-     {
-        Eina_Bool             dummy;
-     };
-
-   struct _Elm_Store_Item_Mapping_Photo
-     {
-        int                   size;
-     };
-
-   struct _Elm_Store_Item_Mapping_Custom
-     {
-        Elm_Store_Item_Mapping_Cb func;
-     };
-
-   struct _Elm_Store_Item_Mapping
-     {
-        Elm_Store_Item_Mapping_Type     type;
-        const char                     *part;
-        int                             offset;
-        union {
-             Elm_Store_Item_Mapping_Empty  empty;
-             Elm_Store_Item_Mapping_Icon   icon;
-             Elm_Store_Item_Mapping_Photo  photo;
-             Elm_Store_Item_Mapping_Custom custom;
-             // add more types here
-        } details;
-     };
-
-   struct _Elm_Store_Item_Info
-     {
-        int                           index;
-        int                           item_type;
-        int                           group_index;
-        Eina_Bool                     rec_item;
-        int                           pre_group_index;
-
-        Elm_Genlist_Item_Class       *item_class;
-        const Elm_Store_Item_Mapping *mapping;
-        void                         *data;
-        char                         *sort_id;
-     };
-
-   struct _Elm_Store_Item_Info_Filesystem
-     {
-        Elm_Store_Item_Info  base;
-        char                *path;
-     };
-
-#define ELM_STORE_ITEM_MAPPING_END { ELM_STORE_ITEM_MAPPING_NONE, NULL, 0, { .empty = { EINA_TRUE } } }
-#define ELM_STORE_ITEM_MAPPING_OFFSET(st, it) offsetof(st, it)
-
-   EAPI Elm_Store              *elm_store_dbsystem_new(void);
-   EAPI void                    elm_store_item_count_set(Elm_Store *st, int count) EINA_ARG_NONNULL(1);
-   EAPI void                    elm_store_item_select_func_set(Elm_Store *st, Elm_Store_Item_Select_Cb func, const void *data) EINA_ARG_NONNULL(1);
-   EAPI void                    elm_store_item_sort_func_set(Elm_Store *st, Elm_Store_Item_Sort_Cb func, const void *data) EINA_ARG_NONNULL(1);
-   EAPI void                    elm_store_item_free_func_set(Elm_Store *st, Elm_Store_Item_Free_Cb func, const void *data) EINA_ARG_NONNULL(1);
-   EAPI int                     elm_store_item_data_index_get(const Elm_Store_Item *sti) EINA_ARG_NONNULL(1);
-   EAPI void                   *elm_store_dbsystem_db_get(const Elm_Store_Item *sti) EINA_ARG_NONNULL(1);
-   EAPI void                    elm_store_dbsystem_db_set(Elm_Store *store, void *pDB) EINA_ARG_NONNULL(1);
-   EAPI int                     elm_store_item_index_get(const Elm_Store_Item *sti) EINA_ARG_NONNULL(1);
-   EAPI Elm_Store_Item         *elm_store_item_add(Elm_Store *st, Elm_Store_Item_Info *info) EINA_ARG_NONNULL(1);
-   EAPI void                    elm_store_item_update(Elm_Store_Item *sti) EINA_ARG_NONNULL(1);
-   EAPI void                    elm_store_visible_items_update(Elm_Store *st) EINA_ARG_NONNULL(1);
-   EAPI void                    elm_store_item_del(Elm_Store_Item *sti) EINA_ARG_NONNULL(1);
-   EAPI void                    elm_store_free(Elm_Store *st);
-   EAPI Elm_Store              *elm_store_filesystem_new(void);
-   EAPI void                    elm_store_filesystem_directory_set(Elm_Store *st, const char *dir) EINA_ARG_NONNULL(1);
-   EAPI const char             *elm_store_filesystem_directory_get(const Elm_Store *st) EINA_ARG_NONNULL(1);
-   EAPI const char             *elm_store_item_filesystem_path_get(const Elm_Store_Item *sti) EINA_ARG_NONNULL(1);
-   EAPI void                    elm_store_target_genlist_set(Elm_Store *st, Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void                    elm_store_cache_set(Elm_Store *st, int max) EINA_ARG_NONNULL(1);
-   EAPI int                     elm_store_cache_get(const Elm_Store *st) EINA_ARG_NONNULL(1);
-   EAPI void                    elm_store_list_func_set(Elm_Store *st, Elm_Store_Item_List_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
-   EAPI void                    elm_store_fetch_func_set(Elm_Store *st, Elm_Store_Item_Fetch_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
-   EAPI void                    elm_store_fetch_thread_set(Elm_Store *st, Eina_Bool use_thread) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool               elm_store_fetch_thread_get(const Elm_Store *st) EINA_ARG_NONNULL(1);
-   EAPI void                    elm_store_unfetch_func_set(Elm_Store *st, Elm_Store_Item_Unfetch_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
-   EAPI void                    elm_store_sorted_set(Elm_Store *st, Eina_Bool sorted) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool               elm_store_sorted_get(const Elm_Store *st) EINA_ARG_NONNULL(1);
-   EAPI void                    elm_store_item_data_set(Elm_Store_Item *sti, void *data) EINA_ARG_NONNULL(1);
-   EAPI void                   *elm_store_item_data_get(Elm_Store_Item *sti) EINA_ARG_NONNULL(1);
-   EAPI const Elm_Store        *elm_store_item_store_get(const Elm_Store_Item *sti) EINA_ARG_NONNULL(1);
-   EAPI const Elm_Genlist_Item *elm_store_item_genlist_item_get(const Elm_Store_Item *sti) EINA_ARG_NONNULL(1);
-
-   /* SegmentControl */
-   typedef struct _Elm_Segment_Item Elm_Segment_Item;
-   EAPI Evas_Object      *elm_segment_control_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
-   EAPI Elm_Segment_Item *elm_segment_control_item_add(Evas_Object *obj, Evas_Object *icon, const char *label) EINA_ARG_NONNULL(1);
-   EAPI Elm_Segment_Item *elm_segment_control_item_insert_at(Evas_Object *obj, Evas_Object *icon, const char *label, int index) EINA_ARG_NONNULL(1);
-   EAPI void              elm_segment_control_item_del(Elm_Segment_Item *it) EINA_ARG_NONNULL(1);
-   EAPI void              elm_segment_control_item_del_at(Evas_Object *obj, int index) EINA_ARG_NONNULL(1);
-   EAPI int               elm_segment_control_item_count_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI Elm_Segment_Item *elm_segment_control_item_get(const Evas_Object *obj, int index) EINA_ARG_NONNULL(1);
-   EAPI const char       *elm_segment_control_item_label_get(const Evas_Object *obj, int index) EINA_ARG_NONNULL(1);
-   EAPI void              elm_segment_control_item_label_set(Elm_Segment_Item* it, const char* label) EINA_ARG_NONNULL(1);
-   EAPI Evas_Object      *elm_segment_control_item_icon_get(const Evas_Object *obj, int index) EINA_ARG_NONNULL(1);
-   EAPI void              elm_segment_control_item_icon_set(Elm_Segment_Item *it, Evas_Object *icon) EINA_ARG_NONNULL(1);
-   EAPI int               elm_segment_control_item_index_get(const Elm_Segment_Item *it) EINA_ARG_NONNULL(1);
-   EAPI Evas_Object      *elm_segment_control_item_object_get(const Elm_Segment_Item *it) EINA_ARG_NONNULL(1);
-   EAPI Elm_Segment_Item *elm_segment_control_item_selected_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void              elm_segment_control_item_selected_set(Elm_Segment_Item *it, Eina_Bool select) EINA_ARG_NONNULL(1);
-   /* smart callbacks called:
-    * "changed" -when the user clicks on a segment item which is not previously
-    *            selected and get selected. The event_info parameter is the
-    *            segment item index.
-    */
-
 #ifdef __cplusplus
 }
 #endif