elementary/toolbar - trivial changes
[framework/uifw/elementary.git] / src / lib / Elementary.h.in
index b0e663c..2653a9e 100644 (file)
@@ -11,7 +11,7 @@
 /**
 @mainpage Elementary
 @image html  elementary.png
-@version @PACKAGE_VERSION@
+@version 0.7.0
 @date 2008-2011
 
 @section intro What is Elementary?
@@ -22,6 +22,8 @@ applications (yet). Small simple ones with simple needs.
 It is meant to make the programmers work almost brainless but give them lots
 of flexibility.
 
+@li @ref Start - Go here to quickly get started with writing Apps
+
 @section organization Organization
 
 One can divide Elemementary into three main groups:
@@ -42,6 +44,211 @@ gender, race or nationality - and that is really tough. So thanks to people and
 organisations behind this, as listed in the @ref authors page.
 */
 
+
+/**
+ * @defgroup Start Getting Started
+ *
+ * To write an Elementary app, you can get started with the following:
+ *
+@code
+#include <Elementary.h>
+EAPI_MAIN int
+elm_main(int argc, char **argv)
+{
+   // create window(s) here and do any application init
+   elm_run(); // run main loop
+   elm_shutdown(); // after mainloop finishes running, shutdown
+   return 0; // exit 0 for exit code
+}
+ELM_MAIN()
+@endcode
+ *
+ * To use autotools (which helps in many ways in the long run, like being able
+ * to immediately create releases of your software directly from your tree
+ * and ensure everything needed to build it is there) you will need a
+ * configure.ac, Makefile.am and autogen.sh file.
+ *
+ * configure.ac:
+ *
+@verbatim
+AC_INIT(myapp, 0.0.0, myname@mydomain.com)
+AC_PREREQ(2.52)
+AC_CONFIG_SRCDIR(configure.ac)
+AM_CONFIG_HEADER(config.h)
+AC_PROG_CC
+AM_INIT_AUTOMAKE(1.6 dist-bzip2)
+PKG_CHECK_MODULES([ELEMENTARY], elementary)
+AC_OUTPUT(Makefile)
+@endverbatim
+ *
+ * Makefile.am:
+ *
+@verbatim
+AUTOMAKE_OPTIONS = 1.4 foreign
+MAINTAINERCLEANFILES = Makefile.in aclocal.m4 config.h.in configure depcomp install-sh missing
+
+INCLUDES = -I$(top_srcdir)
+
+bin_PROGRAMS = myapp
+
+myapp_SOURCES = main.c
+myapp_LDADD = @ELEMENTARY_LIBS@
+myapp_CFLAGS = @ELEMENTARY_CFLAGS@
+@endverbatim
+ *
+ * autogen.sh:
+ *
+@verbatim
+#!/bin/sh
+echo "Running aclocal..." ; aclocal $ACLOCAL_FLAGS || exit 1
+echo "Running autoheader..." ; autoheader || exit 1
+echo "Running autoconf..." ; autoconf || exit 1
+echo "Running automake..." ; automake --add-missing --copy --gnu || exit 1
+./configure "$@"
+@endverbatim
+ *
+ * To generate all the things needed to bootstrap just run:
+ *
+@verbatim
+./autogen.sh
+@endverbatim
+ *
+ * This will generate Makefile.in's, the confgure script and everything else.
+ * After this it works like all normal autotools projects:
+@verbatim
+./configure
+make
+sudo make install
+@endverbatim
+ *
+ * Note sudo was assumed to get root permissions, as this would install in
+ * /usr/local which is system-owned. Use any way you like to gain root, or
+ * specify a different prefix with configure:
+ *
+@verbatim
+./confiugre --prefix=$HOME/mysoftware
+@endverbatim
+ *
+ * Also remember that autotools buys you some useful commands like:
+@verbatim
+make uninstall
+@endverbatim
+ *
+ * This uninstalls the software after it was installed with "make install".
+ * It is very useful to clear up what you built if you wish to clean the
+ * system.
+ *
+@verbatim
+make distcheck
+@endverbatim
+ *
+ * This firstly checks if your build tree is "clean" and ready for
+ * distribution. It also builds a tarball (myapp-0.0.0.tar.gz) that is
+ * ready to upload and distribute to the world, that contains the generated
+ * Makefile.in's and configure script. The users do not need to run
+ * autogen.sh - just configure and on. They don't need autotools installed.
+ * This tarball also builds cleanly, has all the sources it needs to build
+ * included (that is sources for your application, not libraries it depends
+ * on like Elementary). It builds cleanly in a buildroot and does not
+ * contain any files that are temporarily generated like binaries and other
+ * build-generated files, so the tarball is clean, and no need to worry
+ * about cleaning up your tree before packaging.
+ *
+@verbatim
+make clean
+@endverbatim
+ *
+ * This cleans up all build files (binaries, objects etc.) from the tree.
+ *
+@verbatim
+make distclean
+@endverbatim
+ *
+ * This cleans out all files from the build and from configure's output too.
+ *
+@verbatim
+make maintainer-clean
+@endverbatim
+ *
+ * This deletes all the files autogen.sh will produce so the tree is clean
+ * to be put into a revision-control system (like CVS, SVN or GIT for example).
+ *
+ * There is a more advanced way of making use of the quicklaunch infrastructure
+ * in Elementary (which will not be covered here due to its more advanced
+ * nature).
+ *
+ * Now let's actually create an interactive "Hello World" gui that you can
+ * click the ok button to exit. It's more code because this now does something
+ * much more significant, but it's still very simple:
+ *
+@code
+#include <Elementary.h>
+
+static void
+on_done(void *data, Evas_Object *obj, void *event_info)
+{
+   // quit the mainloop (elm_run function will return)
+   elm_exit();
+}
+
+EAPI_MAIN int
+elm_main(int argc, char **argv)
+{
+   Evas_Object *win, *bg, *box, *lab, *btn;
+
+   // new window - do the usual and give it a name, title and delete handler
+   win = elm_win_add(NULL, "hello", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Hello");
+   // when the user clicks "close" on a window there is a request to delete
+   evas_object_smart_callback_add(win, "delete,request", on_done, NULL);
+
+   // add a standard bg
+   bg = elm_bg_add(win);
+   // add object as a resize object for the window (controls window minimum
+   // size as well as gets resized if window is resized)
+   elm_win_resize_object_add(win, bg);
+   evas_object_show(bg);
+
+   // add a box object - default is vertical. a box holds children in a row,
+   // either horizontally or vertically. nothing more.
+   box = elm_box_add(win);
+   // make the box hotizontal
+   elm_box_horizontal_set(box, EINA_TRUE);
+   // add object as a resize object for the window (controls window minimum
+   // size as well as gets resized if window is resized)
+   elm_win_resize_object_add(win, box);
+   evas_object_show(box);
+
+   // add a label widget, set the text and put it in the pad frame
+   lab = elm_label_add(win);
+   // set default text of the label
+   elm_object_text_set(lab, "Hello out there world!");
+   // pack the label at the end of the box
+   elm_box_pack_end(box, lab);
+   evas_object_show(lab);
+
+   // add an ok button
+   btn = elm_button_add(win);
+   // set default text of button to "OK"
+   elm_object_text_set(btn, "OK");
+   // pack the button at the end of the box
+   elm_box_pack_end(box, btn);
+   evas_object_show(btn);
+   // call on_done when button is clicked
+   evas_object_smart_callback_add(btn, "clicked", on_done, NULL);
+
+   // now we are done, show the window
+   evas_object_show(win);
+
+   // run the mainloop and process events and callbacks
+   elm_run();
+   return 0;
+}
+ELM_MAIN()
+@endcode
+   *
+   */
+
 /**
 @page authors Authors
 @author Carsten Haitzler <raster@@rasterman.com>
@@ -86,6 +293,13 @@ organisations behind this, as listed in the @ref authors page.
 @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>
+@author Sung W. Park <sungwoo@gmail.com>
+@author Thierry el Borgi <thierry@substantiel.fr>
+@author Shilpa Singh <shilpa.singh@samsung.com> <shilpasingh.o@gmail.com>
+@author Chanwook Jung <joey.jung@samsung.com>
+@author Hyoyoung Chang <hyoyoung.chang@samsung.com>
+@author Guillaume "Kuri" Friloux <guillaume.friloux@asp64.com>
+@author Kim Yunhan <spbear@gmail.com>
 
 Please contact <enlightenment-devel@lists.sourceforge.net> to get in
 contact with the developers and maintainers.
@@ -107,6 +321,7 @@ contact with the developers and maintainers.
 @ELM_EDBUS_DEF@ ELM_EDBUS
 @ELM_EFREET_DEF@ ELM_EFREET
 @ELM_ETHUMB_DEF@ ELM_ETHUMB
+@ELM_WEB_DEF@ ELM_WEB
 @ELM_EMAP_DEF@ ELM_EMAP
 @ELM_DEBUG_DEF@ ELM_DEBUG
 @ELM_ALLOCA_H_DEF@ ELM_ALLOCA_H
@@ -209,6 +424,11 @@ contact with the developers and maintainers.
 # endif
 #endif /* ! _WIN32 */
 
+#ifdef _WIN32
+# define EAPI_MAIN
+#else
+# define EAPI_MAIN EAPI
+#endif
 
 /* allow usage from c++ */
 #ifdef __cplusplus
@@ -300,7 +520,7 @@ extern "C" {
     */
     typedef enum _Elm_Policy
     {
-        ELM_POLICY_QUIT, /**< under which circunstances the application
+        ELM_POLICY_QUIT, /**< under which circumstances the application
                           * should quit automatically. @see
                           * Elm_Policy_Quit.
                           */
@@ -341,6 +561,19 @@ extern "C" {
         ELM_WRAP_LAST
      } Elm_Wrap_Type;
 
+   typedef enum
+     {
+        ELM_INPUT_PANEL_LAYOUT_NORMAL,          /**< Default layout */
+        ELM_INPUT_PANEL_LAYOUT_NUMBER,          /**< Number layout */
+        ELM_INPUT_PANEL_LAYOUT_EMAIL,           /**< Email layout */
+        ELM_INPUT_PANEL_LAYOUT_URL,             /**< URL layout */
+        ELM_INPUT_PANEL_LAYOUT_PHONENUMBER,     /**< Phone Number layout */
+        ELM_INPUT_PANEL_LAYOUT_IP,              /**< IP layout */
+        ELM_INPUT_PANEL_LAYOUT_MONTH,           /**< Month layout */
+        ELM_INPUT_PANEL_LAYOUT_NUMBERONLY,      /**< Number Only layout */
+        ELM_INPUT_PANEL_LAYOUT_INVALID
+     } Elm_Input_Panel_Layout;
+
    /**
     * @typedef Elm_Object_Item
     * An Elementary Object item handle.
@@ -367,7 +600,7 @@ extern "C" {
     */
    typedef Evas_Object *(*Elm_Tooltip_Item_Content_Cb) (void *data, Evas_Object *obj, Evas_Object *tooltip, void *item);
 
-   typedef Eina_Bool (*Elm_Event_Cb) (void *data, Evas_Object *obj, Evas_Object *src, Evas_Callback_Type type, void *event_info);
+   typedef Eina_Bool (*Elm_Event_Cb) (void *data, Evas_Object *obj, Evas_Object *src, Evas_Callback_Type type, void *event_info); /**< Function prototype definition for callbacks on input events happening on Elementary widgets. @a data will receive the user data pointer passed to elm_object_event_callback_add(). @a src will be a pointer to the widget on which the input event took place. @a type will get the type of this event and @a event_info, the struct with details on this event. */
 
 #ifndef ELM_LIB_QUICKLAUNCH
 #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 */
@@ -386,7 +619,7 @@ extern "C" {
     * @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.
+    * the number of calls to it. It returns 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
@@ -664,9 +897,24 @@ extern "C" {
 
    EAPI Eina_Bool    elm_need_efreet(void);
    EAPI Eina_Bool    elm_need_e_dbus(void);
+
+   /**
+    * This must be called before any other function that handle with
+    * elm_thumb objects or ethumb_client instances.
+    *
+    * @ingroup Thumb
+    */
    EAPI Eina_Bool    elm_need_ethumb(void);
 
    /**
+    * This must be called before any other function that handle with
+    * elm_web objects or ewk_view instances.
+    *
+    * @ingroup Web
+    */
+   EAPI Eina_Bool    elm_need_web(void);
+
+   /**
     * Set a new policy's value (for a given policy group/identifier).
     *
     * @param policy policy identifier, as in @ref Elm_Policy.
@@ -777,7 +1025,7 @@ extern "C" {
     * Set 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)
+    * @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
@@ -799,9 +1047,9 @@ extern "C" {
     *
     * @ingroup General
     */
-   EAPI Evas_Object *elm_object_item_content_part_get(const Elm_Object_Item *it, const char *item);
+   EAPI Evas_Object *elm_object_item_content_part_get(const Elm_Object_Item *it, const char *part);
 
-#define elm_object_item_content_get(it, content) elm_object_item_content_part_get((it), NULL, (content))
+#define elm_object_item_content_get(it) elm_object_item_content_part_get((it), NULL)
 
    /**
     * Unset a content of an object item
@@ -815,7 +1063,7 @@ extern "C" {
     */
    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))
+#define elm_object_item_content_unset(it) elm_object_item_content_part_unset((it), NULL)
 
    /**
     * Set a label of an objec itemt
@@ -845,34 +1093,309 @@ extern "C" {
     */
    EAPI const char *elm_object_item_text_part_get(const Elm_Object_Item *it, const char *part);
 
-#define elm_object_item_text_get(it) elm_object_item_part_text_get((it), NULL)
+   /**
+    * 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);
+
+   /**
+    * Send a signal to the edje object of the widget item.
+    *
+    * This function sends a signal to the edje object of the obj item. An
+    * edje program can respond to a signal by specifying matching
+    * 'signal' and 'source' fields.
+    *
+    * @param it The Elementary object item
+    * @param emission The signal's name.
+    * @param source The signal's source.
+    * @ingroup General
+    */
+   EAPI void             elm_object_item_signal_emit(Elm_Object_Item *it, const char *emission, const char *source) EINA_ARG_NONNULL(1);
 
    /**
     * @}
     */
 
+   /**
+    * @defgroup Caches Caches
+    *
+    * These are functions which let one fine-tune some cache values for
+    * Elementary applications, thus allowing for performance adjustments.
+    *
+    * @{
+    */
+
+   /**
+    * @brief Flush all caches.
+    *
+    * Frees all data that was in cache and is not currently being used to reduce
+    * memory usage. This frees Edje's, Evas' and Eet's cache. This is equivalent
+    * to calling all of the following functions:
+    * @li edje_file_cache_flush()
+    * @li edje_collection_cache_flush()
+    * @li eet_clearcache()
+    * @li evas_image_cache_flush()
+    * @li evas_font_cache_flush()
+    * @li evas_render_dump()
+    * @note Evas caches are flushed for every canvas associated with a window.
+    *
+    * @ingroup Caches
+    */
    EAPI void         elm_all_flush(void);
+
+   /**
+    * Get the configured cache flush interval time
+    *
+    * This gets the globally configured cache flush interval time, in
+    * ticks
+    *
+    * @return The cache flush interval time
+    * @ingroup Caches
+    *
+    * @see elm_all_flush()
+    */
    EAPI int          elm_cache_flush_interval_get(void);
+
+   /**
+    * Set the configured cache flush interval time
+    *
+    * This sets the globally configured cache flush interval time, in ticks
+    *
+    * @param size The cache flush interval time
+    * @ingroup Caches
+    *
+    * @see elm_all_flush()
+    */
    EAPI void         elm_cache_flush_interval_set(int size);
+
+   /**
+    * Set the configured cache flush interval time for all applications on the
+    * display
+    *
+    * This sets the globally configured cache flush interval time -- in ticks
+    * -- for all applications on the display.
+    *
+    * @param size The cache flush interval time
+    * @ingroup Caches
+    */
    EAPI void         elm_cache_flush_interval_all_set(int size);
+
+   /**
+    * Get the configured cache flush enabled state
+    *
+    * This gets the globally configured cache flush state - if it is enabled
+    * or not. When cache flushing is enabled, elementary will regularly
+    * (see elm_cache_flush_interval_get() ) flush caches and dump data out of
+    * memory and allow usage to re-seed caches and data in memory where it
+    * can do so. An idle application will thus minimise its memory usage as
+    * data will be freed from memory and not be re-loaded as it is idle and
+    * not rendering or doing anything graphically right now.
+    *
+    * @return The cache flush state
+    * @ingroup Caches
+    *
+    * @see elm_all_flush()
+    */
    EAPI Eina_Bool    elm_cache_flush_enabled_get(void);
+
+   /**
+    * Set the configured cache flush enabled state
+    *
+    * This sets the globally configured cache flush enabled state
+    *
+    * @param size The cache flush enabled state
+    * @ingroup Caches
+    *
+    * @see elm_all_flush()
+    */
    EAPI void         elm_cache_flush_enabled_set(Eina_Bool enabled);
+
+   /**
+    * Set the configured cache flush enabled state for all applications on the
+    * display
+    *
+    * This sets the globally configured cache flush enabled state for all
+    * applications on the display.
+    *
+    * @param size The cache flush enabled state
+    * @ingroup Caches
+    */
    EAPI void         elm_cache_flush_enabled_all_set(Eina_Bool enabled);
+
+   /**
+    * Get the configured font cache size
+    *
+    * This gets the globally configured font cache size, in bytes
+    *
+    * @return The font cache size
+    * @ingroup Caches
+    */
    EAPI int          elm_font_cache_get(void);
+
+   /**
+    * Set the configured font cache size
+    *
+    * This sets the globally configured font cache size, in bytes
+    *
+    * @param size The font cache size
+    * @ingroup Caches
+    */
    EAPI void         elm_font_cache_set(int size);
+
+   /**
+    * Set the configured font cache size for all applications on the
+    * display
+    *
+    * This sets the globally configured font cache size -- in bytes
+    * -- for all applications on the display.
+    *
+    * @param size The font cache size
+    * @ingroup Caches
+    */
    EAPI void         elm_font_cache_all_set(int size);
+
+   /**
+    * Get the configured image cache size
+    *
+    * This gets the globally configured image cache size, in bytes
+    *
+    * @return The image cache size
+    * @ingroup Caches
+    */
    EAPI int          elm_image_cache_get(void);
+
+   /**
+    * Set the configured image cache size
+    *
+    * This sets the globally configured image cache size, in bytes
+    *
+    * @param size The image cache size
+    * @ingroup Caches
+    */
    EAPI void         elm_image_cache_set(int size);
+
+   /**
+    * Set the configured image cache size for all applications on the
+    * display
+    *
+    * This sets the globally configured image cache size -- in bytes
+    * -- for all applications on the display.
+    *
+    * @param size The image cache size
+    * @ingroup Caches
+    */
    EAPI void         elm_image_cache_all_set(int size);
+
+   /**
+    * Get the configured edje file cache size.
+    *
+    * This gets the globally configured edje file cache size, in number
+    * of files.
+    *
+    * @return The edje file cache size
+    * @ingroup Caches
+    */
    EAPI int          elm_edje_file_cache_get(void);
+
+   /**
+    * Set the configured edje file cache size
+    *
+    * This sets the globally configured edje file cache size, in number
+    * of files.
+    *
+    * @param size The edje file cache size
+    * @ingroup Caches
+    */
    EAPI void         elm_edje_file_cache_set(int size);
+
+   /**
+    * Set the configured edje file cache size for all applications on the
+    * display
+    *
+    * This sets the globally configured edje file cache size -- in number
+    * of files -- for all applications on the display.
+    *
+    * @param size The edje file cache size
+    * @ingroup Caches
+    */
    EAPI void         elm_edje_file_cache_all_set(int size);
+
+   /**
+    * Get the configured edje collections (groups) cache size.
+    *
+    * This gets the globally configured edje collections cache size, in
+    * number of collections.
+    *
+    * @return The edje collections cache size
+    * @ingroup Caches
+    */
    EAPI int          elm_edje_collection_cache_get(void);
+
+   /**
+    * Set the configured edje collections (groups) cache size
+    *
+    * This sets the globally configured edje collections cache size, in
+    * number of collections.
+    *
+    * @param size The edje collections cache size
+    * @ingroup Caches
+    */
    EAPI void         elm_edje_collection_cache_set(int size);
+
+   /**
+    * Set the configured edje collections (groups) cache size for all
+    * applications on the display
+    *
+    * This sets the globally configured edje collections cache size -- in
+    * number of collections -- for all applications on the display.
+    *
+    * @param size The edje collections cache size
+    * @ingroup Caches
+    */
    EAPI void         elm_edje_collection_cache_all_set(int size);
 
    /**
-    * @defgroup Scaling Selective Widget Scaling
+    * @}
+    */
+
+   /**
+    * @defgroup Scaling Widget Scaling
     *
     * Different widgets can be scaled independently. These functions
     * allow you to manipulate this scaling on a per-widget basis. The
@@ -887,6 +1410,38 @@ extern "C" {
     */
 
    /**
+    * Get the global scaling factor
+    *
+    * This gets the globally configured scaling factor that is applied to all
+    * objects.
+    *
+    * @return The scaling factor
+    * @ingroup Scaling
+    */
+   EAPI double       elm_scale_get(void);
+
+   /**
+    * Set the global scaling factor
+    *
+    * This sets the globally configured scaling factor that is applied to all
+    * objects.
+    *
+    * @param scale The scaling factor to set
+    * @ingroup Scaling
+    */
+   EAPI void         elm_scale_set(double scale);
+
+   /**
+    * Set the global scaling factor for all applications on the display
+    *
+    * This sets the globally configured scaling factor that is applied to all
+    * objects for all applications.
+    * @param scale The scaling factor to set
+    * @ingroup Scaling
+    */
+   EAPI void         elm_scale_all_set(double scale);
+
+   /**
     * Set the scaling factor for a given Elementary object
     *
     * @param obj The Elementary to operate on
@@ -906,56 +1461,172 @@ extern "C" {
     * @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);
+
    /**
-    * Set the style to use by a widget
+    * @defgroup Password_last_show Password last input show
     *
-    * 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.
+    * 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.
     *
-    * @param obj The Elementary widget to style
-    * @param style The style name to use
+    * @{
+    */
+
+   /**
+    * Get show last setting of password mode.
     *
-    * @see elm_theme_extension_add()
-    * @see elm_theme_overlay_add()
+    * This gets the show last input setting of password mode which might be
+    * enabled or disabled.
     *
-    * @ingroup Theme
+    * @return @c EINA_TRUE, if the last input show setting is enabled, @c EINA_FALSE
+    *            if it's disabled.
+    * @ingroup Password_last_show
     */
-   EAPI void         elm_object_style_set(Evas_Object *obj, const char *style) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool elm_password_show_last_get(void);
+
    /**
-    * Get the style used by the widget
+    * Set show last setting in password mode.
     *
-    * 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.
+    * This enables or disables show last setting of password mode.
     *
-    * @param obj The Elementary widget to query for its style
-    * @return The style name used
+    * @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.
     *
-    * @see elm_object_style_set()
+    * This gets the time out value for which the last input entered in password
+    * mode will be visible.
     *
-    * @ingroup Theme
+    * @return The timeout value of last show password mode.
+    * @ingroup Password_last_show
     */
-   EAPI const char  *elm_object_style_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI double elm_password_show_last_timeout_get(void);
 
    /**
-    * @defgroup Styles Styles
+    * Set's the timeout value in last show password mode.
     *
-    * 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).
+    * This sets the time out value for which the last input entered in password
+    * mode will be visible.
     *
-    * @ref general_functions_example_page "This" example contemplates
-    * some of these functions.
+    * @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);
 
    /**
-    * Set the disabled state of an Elementary object.
-    *
+    * @}
+    */
+
+   /**
+    * @defgroup UI-Mirroring Selective Widget mirroring
+    *
+    * These functions allow you to set ui-mirroring on specific
+    * widgets or the whole interface. Widgets can be in one of two
+    * modes, automatic and manual.  Automatic means they'll be changed
+    * according to the system mirroring mode and manual means only
+    * explicit changes will matter. You are not supposed to change
+    * mirroring state of a widget set to automatic, will mostly work,
+    * but the behavior is not really defined.
+    *
+    * @{
+    */
+
+   EAPI Eina_Bool    elm_mirrored_get(void);
+   EAPI void         elm_mirrored_set(Eina_Bool mirrored);
+
+   /**
+    * Get the system mirrored mode. This determines the default mirrored mode
+    * of widgets.
+    *
+    * @return EINA_TRUE if mirrored is set, EINA_FALSE otherwise
+    */
+   EAPI Eina_Bool    elm_object_mirrored_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set the system mirrored mode. This determines the default mirrored mode
+    * of widgets.
+    *
+    * @param mirrored EINA_TRUE to set mirrored mode, EINA_FALSE to unset it.
+    */
+   EAPI void         elm_object_mirrored_set(Evas_Object *obj, Eina_Bool mirrored) EINA_ARG_NONNULL(1);
+
+   /**
+    * Returns the widget's mirrored mode setting.
+    *
+    * @param obj The widget.
+    * @return mirrored mode setting of the object.
+    *
+    **/
+   EAPI Eina_Bool    elm_object_mirrored_automatic_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Sets the widget's mirrored mode setting.
+    * When widget in automatic mode, it follows the system mirrored mode set by
+    * elm_mirrored_set().
+    * @param obj The widget.
+    * @param automatic EINA_TRUE for auto mirrored mode. EINA_FALSE for manual.
+    */
+   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_extension_del()
+    * @see elm_theme_overlay_add()
+    * @see elm_theme_overlay_del()
+    *
+    * @ingroup Styles
+    */
+   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 Styles
+    */
+   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
@@ -997,6 +1668,14 @@ extern "C" {
     * some of these functions.
     */
 
+   /**
+    * Check if the given Evas Object is an Elementary widget.
+    *
+    * @param obj the object to query.
+    * @return @c EINA_TRUE if it is an elementary widget variant,
+    *         @c EINA_FALSE otherwise
+    * @ingroup WidgetNavigation
+    */
    EAPI Eina_Bool    elm_object_widget_check(const Evas_Object *obj) EINA_ARG_NONNULL(1);
 
    /**
@@ -1018,30 +1697,243 @@ extern "C" {
     * @ingroup WidgetNavigation
     */
    EAPI Evas_Object *elm_object_parent_widget_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get the top level parent of an Elementary widget.
+    *
+    * @param obj The object to query.
+    * @return The top level Elementary widget, or @c NULL if parent cannot be
+    * found.
+    * @ingroup WidgetNavigation
+    */
    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);
+   /**
+    * Get the string that represents this Elementary widget.
+    *
+    * @note Elementary is weird and exposes itself as a single
+    *       Evas_Object_Smart_Class of type "elm_widget", so
+    *       evas_object_type_get() always return that, making debug and
+    *       language bindings hard. This function tries to mitigate this
+    *       problem, but the solution is to change Elementary to use
+    *       proper inheritance.
+    *
+    * @param obj the object to query.
+    * @return Elementary widget name, or @c NULL if not a valid widget.
+    * @ingroup WidgetNavigation
+    */
+   EAPI const char  *elm_object_widget_type_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
 
-   EAPI Eina_Bool    elm_mirrored_get(void);
-   EAPI void         elm_mirrored_set(Eina_Bool mirrored);
+   /**
+    * @defgroup Config Elementary Config
+    *
+    * Elementary configuration is formed by a set options bounded to a
+    * given @ref Profile profile, like @ref Theme theme, @ref Fingers
+    * "finger size", etc. These are functions with which one syncronizes
+    * changes made to those values to the configuration storing files, de
+    * facto. You most probably don't want to use the functions in this
+    * group unlees you're writing an elementary configuration manager.
+    *
+    * @{
+    */
 
+   /**
+    * Save back Elementary's configuration, so that it will persist on
+    * future sessions.
+    *
+    * @return @c EINA_TRUE, when sucessful. @c EINA_FALSE, otherwise.
+    * @ingroup Config
+    *
+    * This function will take effect -- thus, do I/O -- immediately. Use
+    * it when you want to apply all configuration changes at once. The
+    * current configuration set will get saved onto the current profile
+    * configuration file.
+    *
+    */
    EAPI Eina_Bool    elm_config_save(void);
+
+   /**
+    * Reload Elementary's configuration, bounded to current selected
+    * profile.
+    *
+    * @return @c EINA_TRUE, when sucessful. @c EINA_FALSE, otherwise.
+    * @ingroup Config
+    *
+    * Useful when you want to force reloading of configuration values for
+    * a profile. If one removes user custom configuration directories,
+    * for example, it will force a reload with system values insted.
+    *
+    */
    EAPI void         elm_config_reload(void);
 
+   /**
+    * @}
+    */
+
+   /**
+    * @defgroup Profile Elementary Profile
+    *
+    * Profiles are pre-set options that affect the whole look-and-feel of
+    * Elementary-based applications. There are, for example, profiles
+    * aimed at desktop computer applications and others aimed at mobile,
+    * touchscreen-based ones. You most probably don't want to use the
+    * functions in this group unlees you're writing an elementary
+    * configuration manager.
+    *
+    * @{
+    */
+
+   /**
+    * Get Elementary's profile in use.
+    *
+    * This gets the global profile that is applied to all Elementary
+    * applications.
+    *
+    * @return The profile's name
+    * @ingroup Profile
+    */
    EAPI const char  *elm_profile_current_get(void);
+
+   /**
+    * Get an Elementary's profile directory path in the filesystem. One
+    * may want to fetch a system profile's dir or an user one (fetched
+    * inside $HOME).
+    *
+    * @param profile The profile's name
+    * @param is_user Whether to lookup for an user profile (@c EINA_TRUE)
+    *                or a system one (@c EINA_FALSE)
+    * @return The profile's directory path.
+    * @ingroup Profile
+    *
+    * @note You must free it with elm_profile_dir_free().
+    */
    EAPI const char  *elm_profile_dir_get(const char *profile, Eina_Bool is_user);
+
+   /**
+    * Free an Elementary's profile directory path, as returned by
+    * elm_profile_dir_get().
+    *
+    * @param p_dir The profile's path
+    * @ingroup Profile
+    *
+    */
    EAPI void         elm_profile_dir_free(const char *p_dir);
+
+   /**
+    * Get Elementary's list of available profiles.
+    *
+    * @return The profiles list. List node data are the profile name
+    *         strings.
+    * @ingroup Profile
+    *
+    * @note One must free this list, after usage, with the function
+    *       elm_profile_list_free().
+    */
    EAPI Eina_List   *elm_profile_list_get(void);
+
+   /**
+    * Free Elementary's list of available profiles.
+    *
+    * @param l The profiles list, as returned by elm_profile_list_get().
+    * @ingroup Profile
+    *
+    */
    EAPI void         elm_profile_list_free(Eina_List *l);
+
+   /**
+    * Set Elementary's profile.
+    *
+    * This sets the global profile that is applied to Elementary
+    * applications. Just the process the call comes from will be
+    * affected.
+    *
+    * @param profile The profile's name
+    * @ingroup Profile
+    *
+    */
    EAPI void         elm_profile_set(const char *profile);
+
+   /**
+    * Set Elementary's profile.
+    *
+    * This sets the global profile that is applied to all Elementary
+    * applications. All running Elementary windows will be affected.
+    *
+    * @param profile The profile's name
+    * @ingroup Profile
+    *
+    */
    EAPI void         elm_profile_all_set(const char *profile);
 
+   /**
+    * @}
+    */
+
+   /**
+    * @defgroup Engine Elementary Engine
+    *
+    * These are functions setting and querying which rendering engine
+    * Elementary will use for drawing its windows' pixels.
+    *
+    * The following are the available engines:
+    * @li "software_x11"
+    * @li "fb"
+    * @li "directfb"
+    * @li "software_16_x11"
+    * @li "software_8_x11"
+    * @li "xrender_x11"
+    * @li "opengl_x11"
+    * @li "software_gdi"
+    * @li "software_16_wince_gdi"
+    * @li "sdl"
+    * @li "software_16_sdl"
+    * @li "opengl_sdl"
+    * @li "buffer"
+    *
+    * @{
+    */
+
+   /**
+    * @brief Get Elementary's rendering engine in use.
+    *
+    * @return The rendering engine's name
+    * @note there's no need to free the returned string, here.
+    *
+    * This gets the global rendering engine that is applied to all Elementary
+    * applications.
+    *
+    * @see elm_engine_set()
+    */
    EAPI const char  *elm_engine_current_get(void);
+
+   /**
+    * @brief Set Elementary's rendering engine for use.
+    *
+    * @param engine The rendering engine's name
+    *
+    * This sets global rendering engine that is applied to all Elementary
+    * applications. Note that it will take effect only to Elementary windows
+    * created after this is called.
+    *
+    * @see elm_win_add()
+    */
    EAPI void         elm_engine_set(const char *engine);
 
+   /**
+    * @}
+    */
+
+   /**
+    * @defgroup Fonts Elementary Fonts
+    *
+    * These are functions dealing with font rendering, selection and the
+    * like for Elementary applications. One might fetch which system
+    * fonts are there to use and set custom fonts for individual classes
+    * of UI items containing text (text classes).
+    *
+    * @{
+    */
+
   typedef struct _Elm_Text_Class
     {
        const char *name;
@@ -1061,58 +1953,232 @@ extern "C" {
        Eina_List  *styles;
     } Elm_Font_Properties;
 
+   /**
+    * Get Elementary's list of supported text classes.
+    *
+    * @return The text classes list, with @c Elm_Text_Class blobs as data.
+    * @ingroup Fonts
+    *
+    * Release the list with elm_text_classes_list_free().
+    */
    EAPI const Eina_List     *elm_text_classes_list_get(void);
+
+   /**
+    * Free Elementary's list of supported text classes.
+    *
+    * @ingroup Fonts
+    *
+    * @see elm_text_classes_list_get().
+    */
    EAPI void                 elm_text_classes_list_free(const Eina_List *list);
 
+   /**
+    * Get Elementary's list of font overlays, set with
+    * elm_font_overlay_set().
+    *
+    * @return The font overlays list, with @c Elm_Font_Overlay blobs as
+    * data.
+    *
+    * @ingroup Fonts
+    *
+    * For each text class, one can set a <b>font overlay</b> for it,
+    * overriding the default font properties for that class coming from
+    * the theme in use. There is no need to free this list.
+    *
+    * @see elm_font_overlay_set() and elm_font_overlay_unset().
+    */
    EAPI const Eina_List     *elm_font_overlay_list_get(void);
-   EAPI void                 elm_font_overlay_set(const char *text_class, const char *font, Evas_Font_Size size);
-   EAPI void                 elm_font_overlay_unset(const char *text_class);
-   EAPI void                 elm_font_overlay_apply(void);
-   EAPI void                 elm_font_overlay_all_apply(void);
 
-   EAPI Elm_Font_Properties *elm_font_properties_get(const char *font) EINA_ARG_NONNULL(1);
-   EAPI void                 elm_font_properties_free(Elm_Font_Properties *efp) EINA_ARG_NONNULL(1);
-   EAPI const char          *elm_font_fontconfig_name_get(const char *name, const char *style) EINA_ARG_NONNULL(1);
-   EAPI void                 elm_font_fontconfig_name_free(const char *name) EINA_ARG_NONNULL(1);
-   EAPI Eina_Hash           *elm_font_available_hash_add(Eina_List *list);
-   EAPI void                 elm_font_available_hash_del(Eina_Hash *hash);
+   /**
+    * Set a font overlay for a given Elementary text class.
+    *
+    * @param text_class Text class name
+    * @param font Font name and style string
+    * @param size Font size
+    *
+    * @ingroup Fonts
+    *
+    * @p font has to be in the format returned by
+    * elm_font_fontconfig_name_get(). @see elm_font_overlay_list_get()
+    * and elm_font_overlay_unset().
+    */
+   EAPI void                 elm_font_overlay_set(const char *text_class, const char *font, Evas_Font_Size size);
 
    /**
-    * @defgroup Fingers Fingers
+    * Unset a font overlay for a given Elementary text class.
     *
-    * 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.
+    * @param text_class Text class name
     *
-    * Different profiles may have pre-set values for finger sizes.
+    * @ingroup Fonts
     *
-    * @ref general_functions_example_page "This" example contemplates
-    * some of these functions.
+    * This will bring back text elements belonging to text class
+    * @p text_class back to their default font settings.
     */
+   EAPI void                 elm_font_overlay_unset(const char *text_class);
 
    /**
-    * Get the configured "finger size"
+    * Apply the changes made with elm_font_overlay_set() and
+    * elm_font_overlay_unset() on the current Elementary window.
     *
-    * @return The finger size
+    * @ingroup Fonts
     *
-    * This gets the globally configured finger size, <b>in pixels</b>
+    * This applies all font overlays set to all objects in the UI.
+    */
+   EAPI void                 elm_font_overlay_apply(void);
+
+   /**
+    * Apply the changes made with elm_font_overlay_set() and
+    * elm_font_overlay_unset() on all Elementary application windows.
     *
-    * @ingroup Fingers
+    * @ingroup Fonts
+    *
+    * This applies all font overlays set to all objects in the UI.
     */
-   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);
+   EAPI void                 elm_font_overlay_all_apply(void);
 
    /**
-    * @defgroup Focus Focus
+    * Translate a font (family) name string in fontconfig's font names
+    * syntax into an @c Elm_Font_Properties struct.
     *
-    * 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.
+    * @param font The font name and styles string
+    * @return the font properties struct
+    *
+    * @ingroup Fonts
+    *
+    * @note The reverse translation can be achived with
+    * elm_font_fontconfig_name_get(), for one style only (single font
+    * instance, not family).
+    */
+   EAPI Elm_Font_Properties *elm_font_properties_get(const char *font) EINA_ARG_NONNULL(1);
+
+   /**
+    * Free font properties return by elm_font_properties_get().
+    *
+    * @param efp the font properties struct
+    *
+    * @ingroup Fonts
+    */
+   EAPI void                 elm_font_properties_free(Elm_Font_Properties *efp) EINA_ARG_NONNULL(1);
+
+   /**
+    * Translate a font name, bound to a style, into fontconfig's font names
+    * syntax.
+    *
+    * @param name The font (family) name
+    * @param style The given style (may be @c NULL)
+    *
+    * @return the font name and style string
+    *
+    * @ingroup Fonts
+    *
+    * @note The reverse translation can be achived with
+    * elm_font_properties_get(), for one style only (single font
+    * instance, not family).
+    */
+   EAPI const char          *elm_font_fontconfig_name_get(const char *name, const char *style) EINA_ARG_NONNULL(1);
+
+   /**
+    * Free the font string return by elm_font_fontconfig_name_get().
+    *
+    * @param efp the font properties struct
+    *
+    * @ingroup Fonts
+    */
+   EAPI void                 elm_font_fontconfig_name_free(const char *name) EINA_ARG_NONNULL(1);
+
+   /**
+    * Create a font hash table of available system fonts.
+    *
+    * One must call it with @p list being the return value of
+    * evas_font_available_list(). The hash will be indexed by font
+    * (family) names, being its values @c Elm_Font_Properties blobs.
+    *
+    * @param list The list of available system fonts, as returned by
+    * evas_font_available_list().
+    * @return the font hash.
+    *
+    * @ingroup Fonts
+    *
+    * @note The user is supposed to get it populated at least with 3
+    * default font families (Sans, Serif, Monospace), which should be
+    * present on most systems.
+    */
+   EAPI Eina_Hash           *elm_font_available_hash_add(Eina_List *list);
+
+   /**
+    * Free the hash return by elm_font_available_hash_add().
+    *
+    * @param hash the hash to be freed.
+    *
+    * @ingroup Fonts
+    */
+   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);
+
+   /**
+    * Set the configured finger size
+    *
+    * This sets the globally configured finger size in pixels
+    *
+    * @param size The finger size
+    * @ingroup Fingers
+    */
+   EAPI void             elm_finger_size_set(Evas_Coord size);
+
+   /**
+    * Set the configured finger size for all applications on the display
+    *
+    * This sets the globally configured finger size in pixels for all
+    * applications on the display
+    *
+    * @param size The finger size
+    * @ingroup Fingers
+    */
+   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
@@ -1139,9 +2205,40 @@ extern "C" {
     * some of these functions.
     */
 
+   /**
+    * Get the enable status of the focus highlight
+    *
+    * This gets whether the highlight on focused objects is enabled or not
+    * @ingroup Focus
+    */
    EAPI Eina_Bool        elm_focus_highlight_enabled_get(void);
+
+   /**
+    * Set the enable status of the focus highlight
+    *
+    * Set whether to show or not the highlight on focused objects
+    * @param enable Enable highlight if EINA_TRUE, disable otherwise
+    * @ingroup Focus
+    */
    EAPI void             elm_focus_highlight_enabled_set(Eina_Bool enable);
+
+   /**
+    * Get the enable status of the highlight animation
+    *
+    * Get whether the focus highlight, if enabled, will animate its switch from
+    * one object to the next
+    * @ingroup Focus
+    */
    EAPI Eina_Bool        elm_focus_highlight_animate_get(void);
+
+   /**
+    * Set the enable status of the highlight animation
+    *
+    * Set whether the focus highlight, if enabled, will animate its switch from
+    * one object to the next
+    * @param animate Enable animation if EINA_TRUE, disable otherwise
+    * @ingroup Focus
+    */
    EAPI void             elm_focus_highlight_animate_set(Eina_Bool animate);
 
    /**
@@ -1151,7 +2248,7 @@ extern "C" {
     * @return @c EINA_TRUE, if the object is focused, @c EINA_FALSE if
     *            not (and on errors).
     *
-    * @see elm_object_focus()
+    * @see elm_object_focus_set()
     *
     * @ingroup Focus
     */
@@ -1240,16 +2337,102 @@ extern "C" {
     */
    EAPI Eina_Bool        elm_object_focus_allow_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
 
+   /**
+    * Set custom focus chain.
+    *
+    * This function overwrites any previous custom focus chain within
+    * the list of objects. The previous list will be deleted and this list
+    * will be managed by elementary. After it is set, don't modify it.
+    *
+    * @note On focus cycle, only will be evaluated children of this container.
+    *
+    * @param obj The container object
+    * @param objs Chain of objects to pass focus
+    * @ingroup Focus
+    */
    EAPI void             elm_object_focus_custom_chain_set(Evas_Object *obj, Eina_List *objs) EINA_ARG_NONNULL(1);
+
+   /**
+    * Unset a custom focus chain on a given Elementary widget
+    *
+    * @param obj The container object to remove focus chain from
+    *
+    * Any focus chain previously set on @p obj (for its child objects)
+    * is removed entirely after this call.
+    *
+    * @ingroup Focus
+    */
    EAPI void             elm_object_focus_custom_chain_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get custom focus chain
+    *
+    * @param obj The container object
+    * @ingroup Focus
+    */
    EAPI const Eina_List *elm_object_focus_custom_chain_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Append object to custom focus chain.
+    *
+    * @note If relative_child equal to NULL or not in custom chain, the object
+    * will be added in end.
+    *
+    * @note On focus cycle, only will be evaluated children of this container.
+    *
+    * @param obj The container object
+    * @param child The child to be added in custom chain
+    * @param relative_child The relative object to position the child
+    * @ingroup Focus
+    */
    EAPI void             elm_object_focus_custom_chain_append(Evas_Object *obj, Evas_Object *child, Evas_Object *relative_child) EINA_ARG_NONNULL(1, 2);
+
+   /**
+    * Prepend object to custom focus chain.
+    *
+    * @note If relative_child equal to NULL or not in custom chain, the object
+    * will be added in begin.
+    *
+    * @note On focus cycle, only will be evaluated children of this container.
+    *
+    * @param obj The container object
+    * @param child The child to be added in custom chain
+    * @param relative_child The relative object to position the child
+    * @ingroup Focus
+    */
    EAPI void             elm_object_focus_custom_chain_prepend(Evas_Object *obj, Evas_Object *child, Evas_Object *relative_child) EINA_ARG_NONNULL(1, 2);
+
+   /**
+    * Give focus to next object in object tree.
+    *
+    * Give focus to next object in focus chain of one object sub-tree.
+    * If the last object of chain already have focus, the focus will go to the
+    * first object of chain.
+    *
+    * @param obj The object root of sub-tree
+    * @param dir Direction to cycle the focus
+    *
+    * @ingroup Focus
+    */
    EAPI void             elm_object_focus_cycle(Evas_Object *obj, Elm_Focus_Direction dir) EINA_ARG_NONNULL(1);
+
+   /**
+    * Give focus to near object in one direction.
+    *
+    * Give focus to near object in direction of one object.
+    * If none focusable object in given direction, the focus will not change.
+    *
+    * @param obj The reference object
+    * @param x Horizontal component of direction to focus
+    * @param y Vertical component of direction to focus
+    *
+    * @ingroup Focus
+    */
    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).
+    * 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,
@@ -1282,51 +2465,595 @@ extern "C" {
     */
    EAPI Eina_Bool        elm_object_tree_unfocusable_get(const Evas_Object *obj); EINA_ARG_NONNULL(1);
 
+   /**
+    * @defgroup Scrolling Scrolling
+    *
+    * These are functions setting how scrollable views in Elementary
+    * widgets should behave on user interaction.
+    *
+    * @{
+    */
+
+   /**
+    * Get whether scrollers should bounce when they reach their
+    * viewport's edge during a scroll.
+    *
+    * @return the thumb scroll bouncing state
+    *
+    * This is the default behavior for touch screens, in general.
+    * @ingroup Scrolling
+    */
    EAPI Eina_Bool        elm_scroll_bounce_enabled_get(void);
+
+   /**
+    * Set whether scrollers should bounce when they reach their
+    * viewport's edge during a scroll.
+    *
+    * @param enabled the thumb scroll bouncing state
+    *
+    * @see elm_thumbscroll_bounce_enabled_get()
+    * @ingroup Scrolling
+    */
    EAPI void             elm_scroll_bounce_enabled_set(Eina_Bool enabled);
+
+   /**
+    * Set whether scrollers should bounce when they reach their
+    * viewport's edge during a scroll, for all Elementary application
+    * windows.
+    *
+    * @param enabled the thumb scroll bouncing state
+    *
+    * @see elm_thumbscroll_bounce_enabled_get()
+    * @ingroup Scrolling
+    */
    EAPI void             elm_scroll_bounce_enabled_all_set(Eina_Bool enabled);
+
+   /**
+    * Get the amount of inertia a scroller will impose at bounce
+    * animations.
+    *
+    * @return the thumb scroll bounce friction
+    *
+    * @ingroup Scrolling
+    */
    EAPI double           elm_scroll_bounce_friction_get(void);
+
+   /**
+    * Set the amount of inertia a scroller will impose at bounce
+    * animations.
+    *
+    * @param friction the thumb scroll bounce friction
+    *
+    * @see elm_thumbscroll_bounce_friction_get()
+    * @ingroup Scrolling
+    */
    EAPI void             elm_scroll_bounce_friction_set(double friction);
+
+   /**
+    * Set the amount of inertia a scroller will impose at bounce
+    * animations, for all Elementary application windows.
+    *
+    * @param friction the thumb scroll bounce friction
+    *
+    * @see elm_thumbscroll_bounce_friction_get()
+    * @ingroup Scrolling
+    */
    EAPI void             elm_scroll_bounce_friction_all_set(double friction);
+
+   /**
+    * Get the amount of inertia a <b>paged</b> scroller will impose at
+    * page fitting animations.
+    *
+    * @return the page scroll friction
+    *
+    * @ingroup Scrolling
+    */
    EAPI double           elm_scroll_page_scroll_friction_get(void);
+
+   /**
+    * Set the amount of inertia a <b>paged</b> scroller will impose at
+    * page fitting animations.
+    *
+    * @param friction the page scroll friction
+    *
+    * @see elm_thumbscroll_page_scroll_friction_get()
+    * @ingroup Scrolling
+    */
    EAPI void             elm_scroll_page_scroll_friction_set(double friction);
+
+   /**
+    * Set the amount of inertia a <b>paged</b> scroller will impose at
+    * page fitting animations, for all Elementary application windows.
+    *
+    * @param friction the page scroll friction
+    *
+    * @see elm_thumbscroll_page_scroll_friction_get()
+    * @ingroup Scrolling
+    */
    EAPI void             elm_scroll_page_scroll_friction_all_set(double friction);
+
+   /**
+    * Get the amount of inertia a scroller will impose at region bring
+    * animations.
+    *
+    * @return the bring in scroll friction
+    *
+    * @ingroup Scrolling
+    */
    EAPI double           elm_scroll_bring_in_scroll_friction_get(void);
+
+   /**
+    * Set the amount of inertia a scroller will impose at region bring
+    * animations.
+    *
+    * @param friction the bring in scroll friction
+    *
+    * @see elm_thumbscroll_bring_in_scroll_friction_get()
+    * @ingroup Scrolling
+    */
    EAPI void             elm_scroll_bring_in_scroll_friction_set(double friction);
+
+   /**
+    * Set the amount of inertia a scroller will impose at region bring
+    * animations, for all Elementary application windows.
+    *
+    * @param friction the bring in scroll friction
+    *
+    * @see elm_thumbscroll_bring_in_scroll_friction_get()
+    * @ingroup Scrolling
+    */
    EAPI void             elm_scroll_bring_in_scroll_friction_all_set(double friction);
+
+   /**
+    * Get the amount of inertia scrollers will impose at animations
+    * triggered by Elementary widgets' zooming API.
+    *
+    * @return the zoom friction
+    *
+    * @ingroup Scrolling
+    */
    EAPI double           elm_scroll_zoom_friction_get(void);
+
+   /**
+    * Set the amount of inertia scrollers will impose at animations
+    * triggered by Elementary widgets' zooming API.
+    *
+    * @param friction the zoom friction
+    *
+    * @see elm_thumbscroll_zoom_friction_get()
+    * @ingroup Scrolling
+    */
    EAPI void             elm_scroll_zoom_friction_set(double friction);
+
+   /**
+    * Set the amount of inertia scrollers will impose at animations
+    * triggered by Elementary widgets' zooming API, for all Elementary
+    * application windows.
+    *
+    * @param friction the zoom friction
+    *
+    * @see elm_thumbscroll_zoom_friction_get()
+    * @ingroup Scrolling
+    */
    EAPI void             elm_scroll_zoom_friction_all_set(double friction);
+
+   /**
+    * Get whether scrollers should be draggable from any point in their
+    * views.
+    *
+    * @return the thumb scroll state
+    *
+    * @note This is the default behavior for touch screens, in general.
+    * @note All other functions namespaced with "thumbscroll" will only
+    *       have effect if this mode is enabled.
+    *
+    * @ingroup Scrolling
+    */
    EAPI Eina_Bool        elm_scroll_thumbscroll_enabled_get(void);
+
+   /**
+    * Set whether scrollers should be draggable from any point in their
+    * views.
+    *
+    * @param enabled the thumb scroll state
+    *
+    * @see elm_thumbscroll_enabled_get()
+    * @ingroup Scrolling
+    */
    EAPI void             elm_scroll_thumbscroll_enabled_set(Eina_Bool enabled);
-   EAPI void             elm_scroll_thumbscroll_enabled_all_set(Eina_Bool enabled);
-   EAPI unsigned int     elm_scroll_thumbscroll_threshold_get(void);
-   EAPI void             elm_scroll_thumbscroll_threshold_set(unsigned int threshold);
+
+   /**
+    * Set whether scrollers should be draggable from any point in their
+    * views, for all Elementary application windows.
+    *
+    * @param enabled the thumb scroll state
+    *
+    * @see elm_thumbscroll_enabled_get()
+    * @ingroup Scrolling
+    */
+   EAPI void             elm_scroll_thumbscroll_enabled_all_set(Eina_Bool enabled);
+
+   /**
+    * Get the number of pixels one should travel while dragging a
+    * scroller's view to actually trigger scrolling.
+    *
+    * @return the thumb scroll threshould
+    *
+    * One would use higher values for touch screens, in general, because
+    * of their inherent imprecision.
+    * @ingroup Scrolling
+    */
+   EAPI unsigned int     elm_scroll_thumbscroll_threshold_get(void);
+
+   /**
+    * Set the number of pixels one should travel while dragging a
+    * scroller's view to actually trigger scrolling.
+    *
+    * @param threshold the thumb scroll threshould
+    *
+    * @see elm_thumbscroll_threshould_get()
+    * @ingroup Scrolling
+    */
+   EAPI void             elm_scroll_thumbscroll_threshold_set(unsigned int threshold);
+
+   /**
+    * Set the number of pixels one should travel while dragging a
+    * scroller's view to actually trigger scrolling, for all Elementary
+    * application windows.
+    *
+    * @param threshold the thumb scroll threshould
+    *
+    * @see elm_thumbscroll_threshould_get()
+    * @ingroup Scrolling
+    */
    EAPI void             elm_scroll_thumbscroll_threshold_all_set(unsigned int threshold);
+
+   /**
+    * Get the minimum speed of mouse cursor movement which will trigger
+    * list self scrolling animation after a mouse up event
+    * (pixels/second).
+    *
+    * @return the thumb scroll momentum threshould
+    *
+    * @ingroup Scrolling
+    */
    EAPI double           elm_scroll_thumbscroll_momentum_threshold_get(void);
+
+   /**
+    * Set the minimum speed of mouse cursor movement which will trigger
+    * list self scrolling animation after a mouse up event
+    * (pixels/second).
+    *
+    * @param threshold the thumb scroll momentum threshould
+    *
+    * @see elm_thumbscroll_momentum_threshould_get()
+    * @ingroup Scrolling
+    */
    EAPI void             elm_scroll_thumbscroll_momentum_threshold_set(double threshold);
+
+   /**
+    * Set the minimum speed of mouse cursor movement which will trigger
+    * list self scrolling animation after a mouse up event
+    * (pixels/second), for all Elementary application windows.
+    *
+    * @param threshold the thumb scroll momentum threshould
+    *
+    * @see elm_thumbscroll_momentum_threshould_get()
+    * @ingroup Scrolling
+    */
    EAPI void             elm_scroll_thumbscroll_momentum_threshold_all_set(double threshold);
+
+   /**
+    * Get the amount of inertia a scroller will impose at self scrolling
+    * animations.
+    *
+    * @return the thumb scroll friction
+    *
+    * @ingroup Scrolling
+    */
    EAPI double           elm_scroll_thumbscroll_friction_get(void);
+
+   /**
+    * Set the amount of inertia a scroller will impose at self scrolling
+    * animations.
+    *
+    * @param friction the thumb scroll friction
+    *
+    * @see elm_thumbscroll_friction_get()
+    * @ingroup Scrolling
+    */
    EAPI void             elm_scroll_thumbscroll_friction_set(double friction);
+
+   /**
+    * Set the amount of inertia a scroller will impose at self scrolling
+    * animations, for all Elementary application windows.
+    *
+    * @param friction the thumb scroll friction
+    *
+    * @see elm_thumbscroll_friction_get()
+    * @ingroup Scrolling
+    */
    EAPI void             elm_scroll_thumbscroll_friction_all_set(double friction);
+
+   /**
+    * Get the amount of lag between your actual mouse cursor dragging
+    * movement and a scroller's view movement itself, while pushing it
+    * into bounce state manually.
+    *
+    * @return the thumb scroll border friction
+    *
+    * @ingroup Scrolling
+    */
    EAPI double           elm_scroll_thumbscroll_border_friction_get(void);
+
+   /**
+    * Set the amount of lag between your actual mouse cursor dragging
+    * movement and a scroller's view movement itself, while pushing it
+    * into bounce state manually.
+    *
+    * @param friction the thumb scroll border friction. @c 0.0 for
+    *        perfect synchrony between two movements, @c 1.0 for maximum
+    *        lag.
+    *
+    * @see elm_thumbscroll_border_friction_get()
+    * @note parameter value will get bound to 0.0 - 1.0 interval, always
+    *
+    * @ingroup Scrolling
+    */
    EAPI void             elm_scroll_thumbscroll_border_friction_set(double friction);
+
+   /**
+    * Set the amount of lag between your actual mouse cursor dragging
+    * movement and a scroller's view movement itself, while pushing it
+    * into bounce state manually, for all Elementary application windows.
+    *
+    * @param friction the thumb scroll border friction. @c 0.0 for
+    *        perfect synchrony between two movements, @c 1.0 for maximum
+    *        lag.
+    *
+    * @see elm_thumbscroll_border_friction_get()
+    * @note parameter value will get bound to 0.0 - 1.0 interval, always
+    *
+    * @ingroup Scrolling
+    */
    EAPI void             elm_scroll_thumbscroll_border_friction_all_set(double friction);
 
+   /**
+    * @}
+    */
+
+   /**
+    * @defgroup Scrollhints Scrollhints
+    *
+    * Objects when inside a scroller can scroll, but this may not always be
+    * desirable in certain situations. This allows an object to hint to itself
+    * and parents to "not scroll" in one of 2 ways. If any child object of a
+    * scroller has pushed a scroll freeze or hold then it affects all parent
+    * scrollers until all children have released them.
+    *
+    * 1. To hold on scrolling. This means just flicking and dragging may no
+    * longer scroll, but pressing/dragging near an edge of the scroller will
+    * still scroll. This is automatically used by the entry object when
+    * selecting text.
+    *
+    * 2. To totally freeze scrolling. This means it stops. until
+    * popped/released.
+    *
+    * @{
+    */
+
+   /**
+    * Push the scroll hold by 1
+    *
+    * This increments the scroll hold count by one. If it is more than 0 it will
+    * take effect on the parents of the indicated object.
+    *
+    * @param obj The object
+    * @ingroup Scrollhints
+    */
    EAPI void             elm_object_scroll_hold_push(Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Pop the scroll hold by 1
+    *
+    * This decrements the scroll hold count by one. If it is more than 0 it will
+    * take effect on the parents of the indicated object.
+    *
+    * @param obj The object
+    * @ingroup Scrollhints
+    */
    EAPI void             elm_object_scroll_hold_pop(Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Push the scroll freeze by 1
+    *
+    * This increments the scroll freeze count by one. If it is more
+    * than 0 it will take effect on the parents of the indicated
+    * object.
+    *
+    * @param obj The object
+    * @ingroup Scrollhints
+    */
    EAPI void             elm_object_scroll_freeze_push(Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Pop the scroll freeze by 1
+    *
+    * This decrements the scroll freeze count by one. If it is more
+    * than 0 it will take effect on the parents of the indicated
+    * object.
+    *
+    * @param obj The object
+    * @ingroup Scrollhints
+    */
    EAPI void             elm_object_scroll_freeze_pop(Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Lock the scrolling of the given widget (and thus all parents)
+    *
+    * This locks the given object from scrolling in the X axis (and implicitly
+    * also locks all parent scrollers too from doing the same).
+    *
+    * @param obj The object
+    * @param lock The lock state (1 == locked, 0 == unlocked)
+    * @ingroup Scrollhints
+    */
    EAPI void             elm_object_scroll_lock_x_set(Evas_Object *obj, Eina_Bool lock) EINA_ARG_NONNULL(1);
+
+   /**
+    * Lock the scrolling of the given widget (and thus all parents)
+    *
+    * This locks the given object from scrolling in the Y axis (and implicitly
+    * also locks all parent scrollers too from doing the same).
+    *
+    * @param obj The object
+    * @param lock The lock state (1 == locked, 0 == unlocked)
+    * @ingroup Scrollhints
+    */
    EAPI void             elm_object_scroll_lock_y_set(Evas_Object *obj, Eina_Bool lock) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get the scrolling lock of the given widget
+    *
+    * This gets the lock for X axis scrolling.
+    *
+    * @param obj The object
+    * @ingroup Scrollhints
+    */
    EAPI Eina_Bool        elm_object_scroll_lock_x_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get the scrolling lock of the given widget
+    *
+    * This gets the lock for X axis scrolling.
+    *
+    * @param obj The object
+    * @ingroup Scrollhints
+    */
    EAPI Eina_Bool        elm_object_scroll_lock_y_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
 
+   /**
+    * @}
+    */
+
+   /**
+    * Send a signal to the widget edje object.
+    *
+    * This function sends a signal to the edje object of the obj. An
+    * edje program can respond to a signal by specifying matching
+    * 'signal' and 'source' fields.
+    *
+    * @param obj The object
+    * @param emission The signal's name.
+    * @param source The signal's source.
+    * @ingroup General
+    */
    EAPI void             elm_object_signal_emit(Evas_Object *obj, const char *emission, const char *source) EINA_ARG_NONNULL(1);
+
+   /**
+    * Add a callback for a signal emitted by widget edje object.
+    *
+    * This function connects a callback function to a signal emitted by the
+    * edje object of the obj.
+    * Globs can occur in either the emission or source name.
+    *
+    * @param obj The object
+    * @param emission The signal's name.
+    * @param source The signal's source.
+    * @param func The callback function to be executed when the signal is
+    * emitted.
+    * @param data A pointer to data to pass in to the callback function.
+    * @ingroup General
+    */
    EAPI void             elm_object_signal_callback_add(Evas_Object *obj, const char *emission, const char *source, Edje_Signal_Cb func, void *data) EINA_ARG_NONNULL(1, 4);
+
+   /**
+    * Remove a signal-triggered callback from a widget edje object.
+    *
+    * This function removes a callback, previoulsy attached to a
+    * signal emitted by the edje object of the obj.  The parameters
+    * emission, source and func must match exactly those passed to a
+    * previous call to elm_object_signal_callback_add(). The data
+    * pointer that was passed to this call will be returned.
+    *
+    * @param obj The object
+    * @param emission The signal's name.
+    * @param source The signal's source.
+    * @param func The callback function to be executed when the signal is
+    * emitted.
+    * @return The data pointer
+    * @ingroup General
+    */
    EAPI void            *elm_object_signal_callback_del(Evas_Object *obj, const char *emission, const char *source, Edje_Signal_Cb func) EINA_ARG_NONNULL(1, 4);
 
+   /**
+    * Add a callback for input events (key up, key down, mouse wheel)
+    * on a given Elementary widget
+    *
+    * @param obj The widget to add an event callback on
+    * @param func The callback function to be executed when the event
+    * happens
+    * @param data Data to pass in to @p func
+    *
+    * Every widget in an Elementary interface set to receive focus,
+    * with elm_object_focus_allow_set(), will propagate @b all of its
+    * key up, key down and mouse wheel input events up to its parent
+    * object, and so on. All of the focusable ones in this chain which
+    * had an event callback set, with this call, will be able to treat
+    * those events. There are two ways of making the propagation of
+    * these event upwards in the tree of widgets to @b cease:
+    * - Just return @c EINA_TRUE on @p func. @c EINA_FALSE will mean
+    *   the event was @b not processed, so the propagation will go on.
+    * - The @c event_info pointer passed to @p func will contain the
+    *   event's structure and, if you OR its @c event_flags inner
+    *   value to @c EVAS_EVENT_FLAG_ON_HOLD, you're telling Elementary
+    *   one has already handled it, thus killing the event's
+    *   propagation, too.
+    *
+    * @note Your event callback will be issued on those events taking
+    * place only if no other child widget of @obj has consumed the
+    * event already.
+    *
+    * @note Not to be confused with @c
+    * evas_object_event_callback_add(), which will add event callbacks
+    * per type on general Evas objects (no event propagation
+    * infrastructure taken in account).
+    *
+    * @note Not to be confused with @c
+    * elm_object_signal_callback_add(), which will add callbacks to @b
+    * signals coming from a widget's theme, not input events.
+    *
+    * @note Not to be confused with @c
+    * edje_object_signal_callback_add(), which does the same as
+    * elm_object_signal_callback_add(), but directly on an Edje
+    * object.
+    *
+    * @note Not to be confused with @c
+    * evas_object_smart_callback_add(), which adds callbacks to smart
+    * objects' <b>smart events</b>, and not input events.
+    *
+    * @see elm_object_event_callback_del()
+    *
+    * @ingroup General
+    */
    EAPI void             elm_object_event_callback_add(Evas_Object *obj, Elm_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
+
+   /**
+    * Remove an event callback from a widget.
+    *
+    * This function removes a callback, previoulsy attached to event emission
+    * by the @p obj.
+    * The parameters func and data must match exactly those passed to
+    * a previous call to elm_object_event_callback_add(). The data pointer that
+    * was passed to this call will be returned.
+    *
+    * @param obj The object
+    * @param func The callback function to be executed when the event is
+    * emitted.
+    * @param data Data to pass in to the callback function.
+    * @return The data pointer
+    * @ingroup General
+    */
    EAPI void            *elm_object_event_callback_del(Evas_Object *obj, Elm_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
 
    /**
@@ -1353,17 +3080,50 @@ extern "C" {
     */
    EAPI void             elm_coords_finger_size_adjust(int times_w, Evas_Coord *w, int times_h, Evas_Coord *h);
 
+   /**
+    * Get the duration for occuring long press event.
+    *
+    * @return Timeout for long press event
+    * @ingroup Longpress
+    */
    EAPI double           elm_longpress_timeout_get(void);
+
+   /**
+    * Set the duration for occuring long press event.
+    *
+    * @param lonpress_timeout Timeout for long press event
+    * @ingroup Longpress
+    */
    EAPI void             elm_longpress_timeout_set(double longpress_timeout);
 
-   /* debug
+   /**
+    * @defgroup Debug Debug
     * don't use it unless you are sure
+    *
+    * @{
+    */
+
+   /**
+    * Print Tree object hierarchy in stdout
+    *
+    * @param obj The root object
+    * @ingroup Debug
     */
    EAPI void             elm_object_tree_dump(const Evas_Object *top);
+
+   /**
+    * Print Elm Objects tree hierarchy in file as dot(graphviz) syntax.
+    *
+    * @param obj The root object
+    * @param file The path of output file
+    * @ingroup Debug
+    */
    EAPI void             elm_object_tree_dot_dump(const Evas_Object *top, const char *file);
 
+   /**
+    * @}
+    */
 
-   /* theme */
    /**
     * @defgroup Theme Theme
     *
@@ -1705,6 +3465,18 @@ extern "C" {
     * for more information.
     */
    EAPI Elm_Theme       *elm_object_theme_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get a data item from a theme
+    *
+    * @param th The theme, or NULL for default theme
+    * @param key The data key to search with
+    * @return The data value, or NULL on failure
+    *
+    * This function is used to return data items from edc in @p th, an overlay, or an extension.
+    * It works the same way as edje_file_data_get() except that the return is stringshared.
+    */
+   EAPI const char      *elm_theme_data_get(Elm_Theme *th, const char *key) EINA_ARG_NONNULL(2);
    /**
     * @}
     */
@@ -2568,7 +4340,18 @@ extern "C" {
     * @}
     */
    /* X specific calls - won't work on non-x engines (return 0) */
+
+   /**
+    * Get the Ecore_X_Window of an Evas_Object
+    *
+    * @param obj The object
+    *
+    * @return The Ecore_X_Window of @p obj
+    *
+    * @ingroup Win
+    */
    EAPI Ecore_X_Window elm_win_xwindow_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
    /* smart callbacks called:
     * "delete,request" - the user requested to delete the window
     * "focus,in" - window got focus
@@ -2909,7 +4692,7 @@ extern "C" {
     * @ingroup Icon
     */
    EAPI void                  elm_icon_file_get(const Evas_Object *obj, const char **file, const char **group) EINA_ARG_NONNULL(1);
-   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_thumb_set(Evas_Object *obj, const char *file, const char *group) EINA_ARG_NONNULL(1, 2);
    /**
     * Set the icon by icon standards names.
     *
@@ -3012,12 +4795,12 @@ extern "C" {
     */
    EAPI Eina_Bool             elm_icon_no_scale_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    /**
-    * Set if the object is (up/down) resizeable.
+    * Set if the object is (up/down) resizable.
     *
     * @param obj The icon object
-    * @param scale_up A bool to set if the object is resizeable up. Default is
+    * @param scale_up A bool to set if the object is resizable up. Default is
     * @c EINA_TRUE.
-    * @param scale_down A bool to set if the object is resizeable down. Default
+    * @param scale_down A bool to set if the object is resizable down. Default
     * is @c EINA_TRUE.
     *
     * This function limits the icon object resize ability. If @p scale_up is set to
@@ -3030,11 +4813,11 @@ extern "C" {
     */
    EAPI void                  elm_icon_scale_set(Evas_Object *obj, Eina_Bool scale_up, Eina_Bool scale_down) EINA_ARG_NONNULL(1);
    /**
-    * Get if the object is (up/down) resizeable.
+    * Get if the object is (up/down) resizable.
     *
     * @param obj The icon object
-    * @param scale_up A bool to set if the object is resizeable up
-    * @param scale_down A bool to set if the object is resizeable down
+    * @param scale_up A bool to set if the object is resizable up
+    * @param scale_down A bool to set if the object is resizable down
     *
     * @see elm_icon_scale_set()
     *
@@ -3147,6 +4930,70 @@ extern "C" {
     * @ingroup Icon
     */
    EAPI Elm_Icon_Lookup_Order elm_icon_order_lookup_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Get if the icon supports animation or not.
+    *
+    * @param obj The icon object
+    * @return @c EINA_TRUE if the icon supports animation,
+    *         @c EINA_FALSE otherwise.
+    *
+    * Return if this elm icon's image can be animated. Currently Evas only
+    * supports gif animation. If the return value is EINA_FALSE, other
+    * elm_icon_animated_XXX APIs won't work.
+    * @ingroup Icon
+    */
+   EAPI Eina_Bool           elm_icon_animated_available_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Set animation mode of the icon.
+    *
+    * @param obj The icon object
+    * @param anim @c EINA_TRUE if the object do animation job,
+    * @c EINA_FALSE otherwise. Default is @c EINA_FALSE.
+    *
+    * Even though elm icon's file can be animated,
+    * sometimes appication developer want to just first page of image.
+    * In that time, don't call this function, because default value is EINA_FALSE
+    * Only when you want icon support anition,
+    * use this function and set animated to EINA_TURE
+    * @ingroup Icon
+    */
+   EAPI void                elm_icon_animated_set(Evas_Object *obj, Eina_Bool animated) EINA_ARG_NONNULL(1);
+   /**
+    * Get animation mode of the icon.
+    *
+    * @param obj The icon object
+    * @return The animation mode of the icon object
+    * @see elm_icon_animated_set
+    * @ingroup Icon
+    */
+   EAPI Eina_Bool           elm_icon_animated_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Set animation play mode of the icon.
+    *
+    * @param obj The icon object
+    * @param play @c EINA_TRUE the object play animation images,
+    * @c EINA_FALSE otherwise. Default is @c EINA_FALSE.
+    *
+    * If you want to play elm icon's animation, you set play to EINA_TURE.
+    * For example, you make gif player using this set/get API and click event.
+    *
+    * 1. Click event occurs
+    * 2. Check play flag using elm_icon_animaged_play_get
+    * 3. If elm icon was playing, set play to EINA_FALSE.
+    *    Then animation will be stopped and vice versa
+    * @ingroup Icon
+    */
+   EAPI void                elm_icon_animated_play_set(Evas_Object *obj, Eina_Bool play) EINA_ARG_NONNULL(1);
+   /**
+    * Get animation play mode of the icon.
+    *
+    * @param obj The icon object
+    * @return The play mode of the icon object
+    *
+    * @see elm_icon_animated_lay_get
+    * @ingroup Icon
+    */
+   EAPI Eina_Bool           elm_icon_animated_play_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
 
    /**
     * @}
@@ -3157,6 +5004,7 @@ extern "C" {
     *
     * @image html img/widget/image/preview-00.png
     * @image latex img/widget/image/preview-00.eps
+
     *
     * An object that allows one to load an image file to it. It can be used
     * anywhere like any other elementary widget.
@@ -3320,12 +5168,12 @@ extern "C" {
     */
    EAPI Eina_Bool        elm_image_no_scale_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    /**
-    * Set if the object is (up/down) resizeable.
+    * Set if the object is (up/down) resizable.
     *
     * @param obj The image object
-    * @param scale_up A bool to set if the object is resizeable up. Default is
+    * @param scale_up A bool to set if the object is resizable up. Default is
     * @c EINA_TRUE.
-    * @param scale_down A bool to set if the object is resizeable down. Default
+    * @param scale_down A bool to set if the object is resizable down. Default
     * is @c EINA_TRUE.
     *
     * This function limits the image resize ability. If @p scale_up is set to
@@ -3338,11 +5186,11 @@ extern "C" {
     */
    EAPI void             elm_image_scale_set(Evas_Object *obj, Eina_Bool scale_up, Eina_Bool scale_down) EINA_ARG_NONNULL(1);
    /**
-    * Get if the object is (up/down) resizeable.
+    * Get if the object is (up/down) resizable.
     *
     * @param obj The image object
-    * @param scale_up A bool to set if the object is resizeable up
-    * @param scale_down A bool to set if the object is resizeable down
+    * @param scale_up A bool to set if the object is resizable up
+    * @param scale_down A bool to set if the object is resizable down
     *
     * @see elm_image_scale_set()
     *
@@ -3520,10 +5368,6 @@ extern "C" {
     */
    EAPI Eina_Bool        elm_image_aspect_ratio_retained_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
 
-   /* smart callbacks called:
-    * "clicked" - the user clicked the image
-    */
-
    /**
     * @}
     */
@@ -3555,25 +5399,170 @@ extern "C" {
         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_Cb func) EINA_ARG_NONNULL(1);
-   EAPI void             elm_glview_del_func_set(Evas_Object *obj, Elm_GLView_Func_Cb func) EINA_ARG_NONNULL(1);
-   EAPI void             elm_glview_resize_func_set(Evas_Object *obj, Elm_GLView_Func_Cb func) EINA_ARG_NONNULL(1);
-   EAPI void             elm_glview_render_func_set(Evas_Object *obj, Elm_GLView_Func_Cb func) EINA_ARG_NONNULL(1);
-   EAPI void             elm_glview_changed_set(Evas_Object *obj) EINA_ARG_NONNULL(1);
-
-   /* box */
    /**
-    * @defgroup Box Box
+    * @defgroup GLView
     *
-    * @image html img/widget/box/preview-00.png
+    * A simple GLView widget that allows GL rendering.
+    *
+    * Signals that you can add callbacks for are:
+    *
+    * @{
+    */
+
+   /**
+    * Add a new glview to the parent
+    *
+    * @param parent The parent object
+    * @return The new object or NULL if it cannot be created
+    *
+    * @ingroup GLView
+    */
+   EAPI Evas_Object     *elm_glview_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
+
+   /**
+    * Sets the size of the glview
+    *
+    * @param obj The glview object
+    * @param width width of the glview object
+    * @param height height of the glview object
+    *
+    * @ingroup GLView
+    */
+   EAPI void             elm_glview_size_set(Evas_Object *obj, Evas_Coord width, Evas_Coord height) EINA_ARG_NONNULL(1);
+
+   /**
+    * Gets the size of the glview.
+    *
+    * @param obj The glview object
+    * @param width width of the glview object
+    * @param height height of the glview object
+    *
+    * Note that this function returns the actual image size of the
+    * glview.  This means that when the scale policy is set to
+    * ELM_GLVIEW_RESIZE_POLICY_SCALE, it'll return the non-scaled
+    * size.
+    *
+    * @ingroup GLView
+    */
+   EAPI void             elm_glview_size_get(const Evas_Object *obj, Evas_Coord *width, Evas_Coord *height) EINA_ARG_NONNULL(1);
+
+   /**
+    * Gets the gl api struct for gl rendering
+    *
+    * @param obj The glview object
+    * @return The api object or NULL if it cannot be created
+    *
+    * @ingroup GLView
+    */
+   EAPI Evas_GL_API     *elm_glview_gl_api_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set the mode of the GLView. Supports Three simple modes.
+    *
+    * @param obj The glview object
+    * @param mode The mode Options OR'ed enabling Alpha, Depth, Stencil.
+    * @return True if set properly.
+    *
+    * @ingroup GLView
+    */
+   EAPI Eina_Bool        elm_glview_mode_set(Evas_Object *obj, Elm_GLView_Mode mode) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set the resize policy for the glview object.
+    *
+    * @param obj The glview object.
+    * @param policy The scaling policy.
+    *
+    * By default, the resize policy is set to
+    * ELM_GLVIEW_RESIZE_POLICY_RECREATE.  When resize is called it
+    * destroys the previous surface and recreates the newly specified
+    * size. If the policy is set to ELM_GLVIEW_RESIZE_POLICY_SCALE,
+    * however, glview only scales the image object and not the underlying
+    * GL Surface.
+    *
+    * @ingroup GLView
+    */
+   EAPI Eina_Bool        elm_glview_resize_policy_set(Evas_Object *obj, Elm_GLView_Resize_Policy policy) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set the render policy for the glview object.
+    *
+    * @param obj The glview object.
+    * @param policy The render policy.
+    *
+    * By default, the render policy is set to
+    * ELM_GLVIEW_RENDER_POLICY_ON_DEMAND.  This policy is set such
+    * that during the render loop, glview is only redrawn if it needs
+    * to be redrawn. (i.e. When it is visible) If the policy is set to
+    * ELM_GLVIEWW_RENDER_POLICY_ALWAYS, it redraws regardless of
+    * whether it is visible/need redrawing or not.
+    *
+    * @ingroup GLView
+    */
+   EAPI Eina_Bool        elm_glview_render_policy_set(Evas_Object *obj, Elm_GLView_Render_Policy policy) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set the init function that runs once in the main loop.
+    *
+    * @param obj The glview object.
+    * @param func The init function to be registered.
+    *
+    * The registered init function gets called once during the render loop.
+    *
+    * @ingroup GLView
+    */
+   EAPI void             elm_glview_init_func_set(Evas_Object *obj, Elm_GLView_Func_Cb func) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set the render function that runs in the main loop.
+    *
+    * @param obj The glview object.
+    * @param func The delete function to be registered.
+    *
+    * The registered del function gets called when GLView object is deleted.
+    *
+    * @ingroup GLView
+    */
+   EAPI void             elm_glview_del_func_set(Evas_Object *obj, Elm_GLView_Func_Cb func) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set the resize function that gets called when resize happens.
+    *
+    * @param obj The glview object.
+    * @param func The resize function to be registered.
+    *
+    * @ingroup GLView
+    */
+   EAPI void             elm_glview_resize_func_set(Evas_Object *obj, Elm_GLView_Func_Cb func) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set the render function that runs in the main loop.
+    *
+    * @param obj The glview object.
+    * @param func The render function to be registered.
+    *
+    * @ingroup GLView
+    */
+   EAPI void             elm_glview_render_func_set(Evas_Object *obj, Elm_GLView_Func_Cb func) EINA_ARG_NONNULL(1);
+
+   /**
+    * Notifies that there has been changes in the GLView.
+    *
+    * @param obj The glview object.
+    *
+    * @ingroup GLView
+    */
+   EAPI void             elm_glview_changed_set(Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * @}
+    */
+
+   /* box */
+   /**
+    * @defgroup Box Box
+    *
+    * @image html img/widget/box/preview-00.png
     * @image latex img/widget/box/preview-00.eps width=\textwidth
     *
     * @image html img/box.png
@@ -3880,6 +5869,19 @@ extern "C" {
    EAPI void                elm_box_align_get(const Evas_Object *obj, double *horizontal, double *vertical) EINA_ARG_NONNULL(1);
 
    /**
+    * Force the box to recalculate its children packing.
+    *
+    * If any children was added or removed, box will not calculate the
+    * values immediately rather leaving it to the next main loop
+    * iteration. While this is great as it would save lots of
+    * recalculation, whenever you need to get the position of a just
+    * added item you must force recalculate before doing so.
+    *
+    * @param obj The box object.
+    */
+   EAPI void                 elm_box_recalculate(Evas_Object *obj);
+
+   /**
     * Set the layout defining function to be used by the box
     *
     * Whenever anything changes that requires the box in @p obj to recalculate
@@ -4970,7 +6972,7 @@ extern "C" {
     * @param policy_v Vertical scrollbar policy
     *
     * This sets the scrollbar visibility policy for the given scroller.
-    * ELM_SCROLLER_POLICY_AUTO means the scrollber is made visible if it is
+    * ELM_SCROLLER_POLICY_AUTO means the scrollbar is made visible if it is
     * needed, and otherwise kept hidden. ELM_SCROLLER_POLICY_ON turns it on all
     * the time, and ELM_SCROLLER_POLICY_OFF always keeps it off. This applies
     * respectively for the horizontal and vertical scrollbars.
@@ -5070,6 +7072,84 @@ extern "C" {
     */
    EAPI void         elm_scroller_page_size_set(Evas_Object *obj, Evas_Coord h_pagesize, Evas_Coord v_pagesize) EINA_ARG_NONNULL(1);
    /**
+    * @brief Get scroll current page number.
+    *
+    * @param obj The scroller object
+    * @param h_pagenumber The horizontal page number
+    * @param v_pagenumber The vertical page number
+    *
+    * The page number starts from 0. 0 is the first page.
+    * Current page means the page which meet the top-left of the viewport.
+    * If there are two or more pages in the viewport, it returns the number of page
+    * which meet the top-left of the viewport.
+    *
+    * @see elm_scroller_last_page_get()
+    * @see elm_scroller_page_show()
+    * @see elm_scroller_page_brint_in()
+    */
+   EAPI void         elm_scroller_current_page_get(const Evas_Object *obj, int *h_pagenumber, int *v_pagenumber) EINA_ARG_NONNULL(1);
+   /**
+    * @brief Get scroll last page number.
+    *
+    * @param obj The scroller object
+    * @param h_pagenumber The horizontal page number
+    * @param v_pagenumber The vertical page number
+    *
+    * The page number starts from 0. 0 is the first page.
+    * This returns the last page number among the pages.
+    *
+    * @see elm_scroller_current_page_get()
+    * @see elm_scroller_page_show()
+    * @see elm_scroller_page_brint_in()
+    */
+   EAPI void         elm_scroller_last_page_get(const Evas_Object *obj, int *h_pagenumber, int *v_pagenumber) EINA_ARG_NONNULL(1);
+   /**
+    * Show a specific virtual region within the scroller content object by page number.
+    *
+    * @param obj The scroller object
+    * @param h_pagenumber The horizontal page number
+    * @param v_pagenumber The vertical page number
+    *
+    * 0, 0 of the indicated page is located at the top-left of the viewport.
+    * This will jump to the page directly without animation.
+    *
+    * Example of usage:
+    *
+    * @code
+    * sc = elm_scroller_add(win);
+    * elm_scroller_content_set(sc, content);
+    * elm_scroller_page_relative_set(sc, 1, 0);
+    * elm_scroller_current_page_get(sc, &h_page, &v_page);
+    * elm_scroller_page_show(sc, h_page + 1, v_page);
+    * @endcode
+    *
+    * @see elm_scroller_page_bring_in()
+    */
+   EAPI void         elm_scroller_page_show(Evas_Object *obj, int h_pagenumber, int v_pagenumber) EINA_ARG_NONNULL(1);
+   /**
+    * Show a specific virtual region within the scroller content object by page number.
+    *
+    * @param obj The scroller object
+    * @param h_pagenumber The horizontal page number
+    * @param v_pagenumber The vertical page number
+    *
+    * 0, 0 of the indicated page is located at the top-left of the viewport.
+    * This will slide to the page with animation.
+    *
+    * Example of usage:
+    *
+    * @code
+    * sc = elm_scroller_add(win);
+    * elm_scroller_content_set(sc, content);
+    * elm_scroller_page_relative_set(sc, 1, 0);
+    * elm_scroller_last_page_get(sc, &h_page, &v_page);
+    * elm_scroller_page_bring_in(sc, h_page, v_page);
+    * @endcode
+    *
+    * @see elm_scroller_page_show()
+    */
+   EAPI void         elm_scroller_page_bring_in(Evas_Object *obj, int h_pagenumber, int v_pagenumber) EINA_ARG_NONNULL(1);
+   /**
     * @brief Show a specific virtual region within the scroller content object.
     *
     * @param obj The scroller object
@@ -5729,7 +7809,7 @@ extern "C" {
     * of the existing text parts in the Edje group implementing the
     * item's theme. This function @b must return a strdup'()ed string,
     * as the caller will free() it when done. See
-    * #GridItemLabelGetFunc.
+    * #Elm_Gengrid_Item_Label_Get_Cb.
     * - @c func.icon_get - This function is called when an item object
     * is actually created. The @c data parameter will point to the
     * same data passed to elm_gengrid_item_append() and related item
@@ -5739,7 +7819,7 @@ extern "C" {
     * item's theme. It must return @c NULL, when no icon is desired,
     * or a valid object handle, otherwise. The object will be deleted
     * by the gengrid on its deletion or when the item is "unrealized".
-    * See #GridItemIconGetFunc.
+    * See #Elm_Gengrid_Item_Icon_Get_Cb.
     * - @c func.state_get - This function is called when an item
     * object is actually created. The @c data parameter will point to
     * the same data passed to elm_gengrid_item_append() and related
@@ -5751,12 +7831,12 @@ extern "C" {
     * with @c "elm,state,XXX,active" and @c "elm" as "emission" and
     * "source" arguments, respectively, when the state is true (the
     * default is false), where @c XXX is the name of the (state) part.
-    * See #GridItemStateGetFunc.
+    * See #Elm_Gengrid_Item_State_Get_Cb.
     * - @c func.del - This is called when elm_gengrid_item_del() is
     * called on an item or elm_gengrid_clear() is called on the
     * gengrid. This is intended for use when gengrid items are
     * deleted, so any data attached to the item (e.g. its data
-    * parameter on creation) can be deleted. See #GridItemDelFunc.
+    * parameter on creation) can be deleted. See #Elm_Gengrid_Item_Del_Cb.
     *
     * @section Gengrid_Usage_Hints Usage hints
     *
@@ -5806,6 +7886,8 @@ extern "C" {
     *   is the gengrid item that was activated.
     * - @c "clicked,double" - The user has double-clicked an item.
     *   The @c event_info parameter is the gengrid item that was double-clicked.
+    * - @c "longpressed" - This is called when the item is pressed for a certain
+    *   amount of time. By default it's 1 second.
     * - @c "selected" - The user has made an item selected. The
     *   @c event_info parameter is the gengrid item that was selected.
     * - @c "unselected" - The user has made an item unselected. The
@@ -5823,6 +7905,10 @@ extern "C" {
     * - @c "changed" - Called when an item is added, removed, resized
     *   or moved and when the gengrid is resized or gets "horizontal"
     *   property changes.
+    * - @c "scroll,anim,start" - This is called when scrolling animation has
+    *   started.
+    * - @c "scroll,anim,stop" - This is called when scrolling animation has
+    *   stopped.
     * - @c "drag,start,up" - Called when the item in the gengrid has
     *   been dragged (not scrolled) up.
     * - @c "drag,start,down" - Called when the item in the gengrid has
@@ -5841,8 +7927,16 @@ extern "C" {
     *   started.
     * - @c "scroll,drag,stop" - called when dragging the content has
     *   stopped.
+    * - @c "scroll,edge,top" - This is called when the gengrid is scrolled until
+    *   the top edge.
+    * - @c "scroll,edge,bottom" - This is called when the gengrid is scrolled
+    *   until the bottom edge.
+    * - @c "scroll,edge,left" - This is called when the gengrid is scrolled
+    *   until the left edge.
+    * - @c "scroll,edge,right" - This is called when the gengrid is scrolled
+    *   until the right edge.
     *
-    * List of gendrid examples:
+    * List of gengrid examples:
     * @li @ref gengrid_example
     */
 
@@ -5854,10 +7948,15 @@ extern "C" {
    typedef struct _Elm_Gengrid_Item_Class Elm_Gengrid_Item_Class; /**< Gengrid item class definition structs */
    typedef struct _Elm_Gengrid_Item_Class_Func Elm_Gengrid_Item_Class_Func; /**< Class functions for gengrid item classes. */
    typedef struct _Elm_Gengrid_Item Elm_Gengrid_Item; /**< Gengrid item handles */
-   typedef char        *(*GridItemLabelGetFunc) (void *data, Evas_Object *obj, const char *part); /**< Label fetching class function for gengrid item classes. */
-   typedef Evas_Object *(*GridItemIconGetFunc)  (void *data, Evas_Object *obj, const char *part); /**< Icon fetching class function for gengrid item classes. */
-   typedef Eina_Bool    (*GridItemStateGetFunc) (void *data, Evas_Object *obj, const char *part); /**< State fetching class function for gengrid item classes. */
-   typedef void         (*GridItemDelFunc)      (void *data, Evas_Object *obj); /**< Deletion class function for gengrid item classes. */
+   typedef char        *(*Elm_Gengrid_Item_Label_Get_Cb) (void *data, Evas_Object *obj, const char *part); /**< Label fetching class function for gengrid item classes. */
+   typedef Evas_Object *(*Elm_Gengrid_Item_Icon_Get_Cb)  (void *data, Evas_Object *obj, const char *part); /**< Icon fetching class function for gengrid item classes. */
+   typedef Eina_Bool    (*Elm_Gengrid_Item_State_Get_Cb) (void *data, Evas_Object *obj, const char *part); /**< State fetching class function for gengrid item classes. */
+   typedef void         (*Elm_Gengrid_Item_Del_Cb)      (void *data, Evas_Object *obj); /**< Deletion class function for gengrid item classes. */
+
+   typedef char        *(*GridItemLabelGetFunc) (void *data, Evas_Object *obj, const char *part) EINA_DEPRECATED; /** DEPRECATED. Use Elm_Gengrid_Item_Label_Get_Cb. */
+   typedef Evas_Object *(*GridItemIconGetFunc)  (void *data, Evas_Object *obj, const char *part) EINA_DEPRECATED; /** DEPRECATED. Use Elm_Gengrid_Item_Icon_Get_Cb. */
+   typedef Eina_Bool    (*GridItemStateGetFunc) (void *data, Evas_Object *obj, const char *part) EINA_DEPRECATED; /** DEPRECATED. Use Elm_Gengrid_Item_State_Get_Cb. */
+   typedef void         (*GridItemDelFunc)      (void *data, Evas_Object *obj) EINA_DEPRECATED; /** DEPRECATED. Use Elm_Gengrid_Item_Del_Cb. */
 
    /**
     * @struct _Elm_Gengrid_Item_Class
@@ -5870,10 +7969,10 @@ extern "C" {
         const char             *item_style;
         struct _Elm_Gengrid_Item_Class_Func
           {
-             GridItemLabelGetFunc  label_get;
-             GridItemIconGetFunc   icon_get;
-             GridItemStateGetFunc  state_get;
-             GridItemDelFunc       del;
+             Elm_Gengrid_Item_Label_Get_Cb label_get;
+             Elm_Gengrid_Item_Icon_Get_Cb  icon_get;
+             Elm_Gengrid_Item_State_Get_Cb state_get;
+             Elm_Gengrid_Item_Del_Cb       del;
           } func;
      }; /**< #Elm_Gengrid_Item_Class member definitions */
 
@@ -5887,6 +7986,7 @@ extern "C" {
     * This function inserts a new gengrid widget on the canvas.
     *
     * @see elm_gengrid_item_size_set()
+    * @see elm_gengrid_group_item_size_set()
     * @see elm_gengrid_horizontal_set()
     * @see elm_gengrid_item_append()
     * @see elm_gengrid_item_del()
@@ -5932,6 +8032,41 @@ extern "C" {
    EAPI void               elm_gengrid_item_size_get(const Evas_Object *obj, Evas_Coord *w, Evas_Coord *h) EINA_ARG_NONNULL(1);
 
    /**
+    * Set the size for the group items of a given gengrid widget
+    *
+    * @param obj The gengrid object.
+    * @param w The group items' width.
+    * @param h The group items' height;
+    *
+    * A gengrid, after creation, has still no information on the size
+    * to give to each of its cells. So, you most probably will end up
+    * with squares one @ref Fingers "finger" wide, the default
+    * size. Use this function to force a custom size for you group items,
+    * making them as big as you wish.
+    *
+    * @see elm_gengrid_group_item_size_get()
+    *
+    * @ingroup Gengrid
+    */
+   EAPI void               elm_gengrid_group_item_size_set(Evas_Object *obj, Evas_Coord w, Evas_Coord h) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get the size set for the group items of a given gengrid widget
+    *
+    * @param obj The gengrid object.
+    * @param w Pointer to a variable where to store the group items' width.
+    * @param h Pointer to a variable where to store the group items' height.
+    *
+    * @note Use @c NULL pointers on the size values you're not
+    * interested in: they'll be ignored by the function.
+    *
+    * @see elm_gengrid_group_item_size_get() for more details
+    *
+    * @ingroup Gengrid
+    */
+   EAPI void               elm_gengrid_group_item_size_get(const Evas_Object *obj, Evas_Coord *w, Evas_Coord *h) EINA_ARG_NONNULL(1);
+
+   /**
     * Set the items grid's alignment within a given gengrid widget
     *
     * @param obj The gengrid object.
@@ -6149,7 +8284,7 @@ extern "C" {
     * @c EINA_FALSE otherwise
     *
     * This will make items in @p obj selectable or not. In the latter
-    * case, any user interacion on the gendrid items will neither make
+    * case, any user interaction on the gengrid items will neither make
     * them appear selected nor them call their selection callback
     * functions.
     *
@@ -6326,6 +8461,88 @@ extern "C" {
    EAPI void               elm_gengrid_page_size_set(Evas_Object *obj, Evas_Coord h_pagesize, Evas_Coord v_pagesize) EINA_ARG_NONNULL(1);
 
    /**
+    * @brief Get gengrid current page number.
+    *
+    * @param obj The gengrid object
+    * @param h_pagenumber The horizontal page number
+    * @param v_pagenumber The vertical page number
+    *
+    * The page number starts from 0. 0 is the first page.
+    * Current page means the page which meet the top-left of the viewport.
+    * If there are two or more pages in the viewport, it returns the number of page
+    * which meet the top-left of the viewport.
+    *
+    * @see elm_gengrid_last_page_get()
+    * @see elm_gengrid_page_show()
+    * @see elm_gengrid_page_brint_in()
+    */
+   EAPI void         elm_gengrid_current_page_get(const Evas_Object *obj, int *h_pagenumber, int *v_pagenumber) EINA_ARG_NONNULL(1);
+
+   /**
+    * @brief Get scroll last page number.
+    *
+    * @param obj The gengrid object
+    * @param h_pagenumber The horizontal page number
+    * @param v_pagenumber The vertical page number
+    *
+    * The page number starts from 0. 0 is the first page.
+    * This returns the last page number among the pages.
+    *
+    * @see elm_gengrid_current_page_get()
+    * @see elm_gengrid_page_show()
+    * @see elm_gengrid_page_brint_in()
+    */
+   EAPI void         elm_gengrid_last_page_get(const Evas_Object *obj, int *h_pagenumber, int *v_pagenumber) EINA_ARG_NONNULL(1);
+
+   /**
+    * Show a specific virtual region within the gengrid content object by page number.
+    *
+    * @param obj The gengrid object
+    * @param h_pagenumber The horizontal page number
+    * @param v_pagenumber The vertical page number
+    *
+    * 0, 0 of the indicated page is located at the top-left of the viewport.
+    * This will jump to the page directly without animation.
+    *
+    * Example of usage:
+    *
+    * @code
+    * sc = elm_gengrid_add(win);
+    * elm_gengrid_content_set(sc, content);
+    * elm_gengrid_page_relative_set(sc, 1, 0);
+    * elm_gengrid_current_page_get(sc, &h_page, &v_page);
+    * elm_gengrid_page_show(sc, h_page + 1, v_page);
+    * @endcode
+    *
+    * @see elm_gengrid_page_bring_in()
+    */
+   EAPI void         elm_gengrid_page_show(const Evas_Object *obj, int h_pagenumber, int v_pagenumber) EINA_ARG_NONNULL(1);
+
+   /**
+    * Show a specific virtual region within the gengrid content object by page number.
+    *
+    * @param obj The gengrid object
+    * @param h_pagenumber The horizontal page number
+    * @param v_pagenumber The vertical page number
+    *
+    * 0, 0 of the indicated page is located at the top-left of the viewport.
+    * This will slide to the page with animation.
+    *
+    * Example of usage:
+    *
+    * @code
+    * sc = elm_gengrid_add(win);
+    * elm_gengrid_content_set(sc, content);
+    * elm_gengrid_page_relative_set(sc, 1, 0);
+    * elm_gengrid_last_page_get(sc, &h_page, &v_page);
+    * elm_gengrid_page_bring_in(sc, h_page, v_page);
+    * @endcode
+    *
+    * @see elm_gengrid_page_show()
+    */
+    EAPI void         elm_gengrid_page_bring_in(const Evas_Object *obj, int h_pagenumber, int v_pagenumber) EINA_ARG_NONNULL(1);
+
+   /**
     * Set for what direction a given gengrid widget will expand while
     * placing its items.
     *
@@ -7761,13 +9978,102 @@ extern "C" {
     * @ingroup Layout
     */
    EAPI void               elm_layout_sizing_eval(Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Sets a specific cursor for an edje part.
+    *
+    * @param obj The layout object.
+    * @param part_name a part from loaded edje group.
+    * @param cursor cursor name to use, see Elementary_Cursor.h
+    *
+    * @return EINA_TRUE on success or EINA_FALSE on failure, that may be
+    *         part not exists or it has "mouse_events: 0".
+    *
+    * @ingroup Layout
+    */
    EAPI Eina_Bool          elm_layout_part_cursor_set(Evas_Object *obj, const char *part_name, const char *cursor) EINA_ARG_NONNULL(1, 2);
+
+   /**
+    * Get the cursor to be shown when mouse is over an edje part
+    *
+    * @param obj The layout object.
+    * @param part_name a part from loaded edje group.
+    * @return the cursor name.
+    *
+    * @ingroup Layout
+    */
    EAPI const char        *elm_layout_part_cursor_get(const Evas_Object *obj, const char *part_name) EINA_ARG_NONNULL(1, 2);
+
+   /**
+    * Unsets a cursor previously set with elm_layout_part_cursor_set().
+    *
+    * @param obj The layout object.
+    * @param part_name a part from loaded edje group, that had a cursor set
+    *        with elm_layout_part_cursor_set().
+    *
+    * @ingroup Layout
+    */
    EAPI void               elm_layout_part_cursor_unset(Evas_Object *obj, const char *part_name) EINA_ARG_NONNULL(1, 2);
+
+   /**
+    * Sets a specific cursor style for an edje part.
+    *
+    * @param obj The layout object.
+    * @param part_name a part from loaded edje group.
+    * @param style the theme style to use (default, transparent, ...)
+    *
+    * @return EINA_TRUE on success or EINA_FALSE on failure, that may be
+    *         part not exists or it did not had a cursor set.
+    *
+    * @ingroup Layout
+    */
    EAPI Eina_Bool          elm_layout_part_cursor_style_set(Evas_Object *obj, const char *part_name, const char *style) EINA_ARG_NONNULL(1, 2);
+
+   /**
+    * Gets a specific cursor style for an edje part.
+    *
+    * @param obj The layout object.
+    * @param part_name a part from loaded edje group.
+    *
+    * @return the theme style in use, defaults to "default". If the
+    *         object does not have a cursor set, then NULL is returned.
+    *
+    * @ingroup Layout
+    */
    EAPI const char        *elm_layout_part_cursor_style_get(const Evas_Object *obj, const char *part_name) EINA_ARG_NONNULL(1, 2);
+
+   /**
+    * Sets if the cursor set should be searched on the theme or should use
+    * the provided by the engine, only.
+    *
+    * @note before you set if should look on theme you should define a
+    * cursor with elm_layout_part_cursor_set(). By default it will only
+    * look for cursors provided by the engine.
+    *
+    * @param obj The layout object.
+    * @param part_name a part from loaded edje group.
+    * @param engine_only if cursors should be just provided by the engine
+    *        or should also search on widget's theme as well
+    *
+    * @return EINA_TRUE on success or EINA_FALSE on failure, that may be
+    *         part not exists or it did not had a cursor set.
+    *
+    * @ingroup Layout
+    */
    EAPI Eina_Bool          elm_layout_part_cursor_engine_only_set(Evas_Object *obj, const char *part_name, Eina_Bool engine_only) EINA_ARG_NONNULL(1, 2);
-   EAPI Eina_Bool          elm_layout_part_cursor_engine_only_get(const Evas_Object *obj, const char *part_name) EINA_ARG_NONNULL(1, 2);
+
+   /**
+    * Gets a specific cursor engine_only for an edje part.
+    *
+    * @param obj The layout object.
+    * @param part_name a part from loaded edje group.
+    *
+    * @return whenever the cursor is just provided by engine or also from theme.
+    *
+    * @ingroup Layout
+    */
+   EAPI Eina_Bool          elm_layout_part_cursor_engine_only_get(const Evas_Object *obj, const char *part_name) EINA_ARG_NONNULL(1, 2);
+
 /**
  * @def elm_layout_icon_set
  * Convienience macro to set the icon object in a layout that follows the
@@ -9228,6 +11534,22 @@ extern "C" {
     */
    EAPI void         elm_entry_filter_accept_set(void *data, Evas_Object *entry, char **text) EINA_ARG_NONNULL(1, 3);
    /**
+    * Set the input panel layout of the entry
+    *
+    * @param obj The entry object
+    * @param layout layout type
+    */
+   EAPI void elm_entry_input_panel_layout_set(Evas_Object *obj, Elm_Input_Panel_Layout layout) EINA_ARG_NONNULL(1);
+   /**
+    * Get the input panel layout of the entry
+    *
+    * @param obj The entry object
+    * @return layout type
+    *
+    * @see elm_entry_input_panel_layout_set
+    */
+   EAPI Elm_Input_Panel_Layout elm_entry_input_panel_layout_get(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
     * @}
     */
 
@@ -9756,7 +12078,7 @@ extern "C" {
     * @return The string of set in the label
     *
     * This function gets the title of the bubble.
-    * @deprecated use elm_object_text_set() instead.
+    * @deprecated use elm_object_text_get() instead.
     */
    EINA_DEPRECATED EAPI const char  *elm_bubble_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    /**
@@ -9767,7 +12089,7 @@ extern "C" {
     *
     * This function sets the info of the bubble. Where this appears depends on
     * the selected corner.
-    * @deprecated use elm_object_text_set() instead.
+    * @deprecated use elm_object_text_part_set() instead. (with "info" as the parameter).
     */
    EINA_DEPRECATED EAPI void         elm_bubble_info_set(Evas_Object *obj, const char *info) EINA_ARG_NONNULL(1);
    /**
@@ -9778,7 +12100,7 @@ extern "C" {
     * @return The "info" string of the bubble
     *
     * This function gets the info text.
-    * @deprecated use elm_object_text_set() instead.
+    * @deprecated use elm_object_text_part_get() instead. (with "info" as the parameter).
     */
    EINA_DEPRECATED EAPI const char  *elm_bubble_info_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
    /**
@@ -9871,16 +12193,88 @@ extern "C" {
     * @}
     */
 
-   /* photo */
+   /**
+    * @defgroup Photo Photo
+    *
+    * For displaying the photo of a person (contact). Simple yet
+    * with a very specific purpose.
+    *
+    * Signals that you can add callbacks for are:
+    *
+    * "clicked" - This is called when a user has clicked the photo
+    * "drag,start" - Someone started dragging the image out of the object
+    * "drag,end" - Dragged item was dropped (somewhere)
+    *
+    * @{
+    */
+
+   /**
+    * Add a new photo to the parent
+    *
+    * @param parent The parent object
+    * @return The new object or NULL if it cannot be created
+    *
+    * @ingroup Photo
+    */
    EAPI Evas_Object *elm_photo_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set the file that will be used as photo
+    *
+    * @param obj The photo object
+    * @param file The path to file that will be used as photo
+    *
+    * @return (1 = success, 0 = error)
+    *
+    * @ingroup Photo
+    */
    EAPI Eina_Bool    elm_photo_file_set(Evas_Object *obj, const char *file) EINA_ARG_NONNULL(1);
+
+    /**
+    * Set the file that will be used as thumbnail in the photo.
+    *
+    * @param obj The photo object.
+    * @param file The path to file that will be used as thumb.
+    * @param group The key used in case of an EET file.
+    *
+    * @ingroup Photo
+    */
+   EAPI void         elm_photo_thumb_set(const Evas_Object *obj, const char *file, const char *group) EINA_ARG_NONNULL(1, 2);
+
+   /**
+    * Set the size that will be used on the photo
+    *
+    * @param obj The photo object
+    * @param size The size that the photo will be
+    *
+    * @ingroup Photo
+    */
    EAPI void         elm_photo_size_set(Evas_Object *obj, int size) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set if the photo should be completely visible or not.
+    *
+    * @param obj The photo object
+    * @param fill if true the photo will be completely visible
+    *
+    * @ingroup Photo
+    */
    EAPI void         elm_photo_fill_inside_set(Evas_Object *obj, Eina_Bool fill) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set editability of the photo.
+    *
+    * An editable photo can be dragged to or from, and can be cut or
+    * pasted too.  Note that pasting an image or dropping an item on
+    * the image will delete the existing content.
+    *
+    * @param obj The photo object.
+    * @param set To set of clear editablity.
+    */
    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
-    * "drag,start" - Someone started dragging the image out of the object
-    * "drag,end" - Dragged item was dropped (somewhere)
+
+   /**
+    * @}
     */
 
    /* gesture layer */
@@ -9929,7 +12323,17 @@ extern "C" {
     * @ref Elm_Gesture_Zoom_Info is the info reported for @ref ELM_GESTURE_ZOOM gesture.
     *
     * @ref Elm_Gesture_Rotate_Info is the info reported for @ref ELM_GESTURE_ROTATE gesture.
-    * */
+    *
+    *
+    * Gesture Layer Tweaks:
+    *
+    * Note that line, flick, gestures can start without the need to remove fingers from surface.
+    * When user fingers rests on same-spot gesture is ended and starts again when fingers moved.
+    *
+    * Setting glayer_continues_enable to false in @ref Config will change this behavior
+    * so gesture starts when user touches (a *DOWN event) touch-surface
+    * and ends when no fingers touches surface (a *UP event).
+    */
 
    /**
     * @enum _Elm_Gesture_Types
@@ -10311,141 +12715,932 @@ extern "C" {
    /**
     * Get the image or video path and key used to generate the thumbnail.
     *
-    * @param obj The thumb object.
-    * @param file Pointer to filename.
-    * @param key Pointer to key.
+    * @param obj The thumb object.
+    * @param file Pointer to filename.
+    * @param key Pointer to key.
+    *
+    * @see elm_thumb_file_set()
+    * @see elm_thumb_path_get()
+    *
+    * @ingroup Thumb
+    */
+   EAPI void                         elm_thumb_file_get(const Evas_Object *obj, const char **file, const char **key) EINA_ARG_NONNULL(1);
+   /**
+    * Get the path and key to the image or video generated by ethumb.
+    *
+    * One just need to make sure that the thumbnail was generated before getting
+    * its path; otherwise, the path will be NULL. One way to do that is by asking
+    * for the path when/after the "generate,stop" smart callback is called.
+    *
+    * @param obj The thumb object.
+    * @param file Pointer to thumb path.
+    * @param key Pointer to thumb key.
+    *
+    * @see elm_thumb_file_get()
+    *
+    * @ingroup Thumb
+    */
+   EAPI void                         elm_thumb_path_get(const Evas_Object *obj, const char **file, const char **key) EINA_ARG_NONNULL(1);
+   /**
+    * Set the animation state for the thumb object. If its content is an animated
+    * video, you may start/stop the animation or tell it to play continuously and
+    * looping.
+    *
+    * @param obj The thumb object.
+    * @param setting The animation setting.
+    *
+    * @see elm_thumb_file_set()
+    *
+    * @ingroup Thumb
+    */
+   EAPI void                         elm_thumb_animate_set(Evas_Object *obj, Elm_Thumb_Animation_Setting s) EINA_ARG_NONNULL(1);
+   /**
+    * Get the animation state for the thumb object.
+    *
+    * @param obj The thumb object.
+    * @return getting The animation setting or @c ELM_THUMB_ANIMATION_LAST,
+    * on errors.
+    *
+    * @see elm_thumb_animate_set()
+    *
+    * @ingroup Thumb
+    */
+   EAPI Elm_Thumb_Animation_Setting  elm_thumb_animate_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * Get the ethumb_client handle so custom configuration can be made.
+    *
+    * @return Ethumb_Client instance or NULL.
+    *
+    * This must be called before the objects are created to be sure no object is
+    * visible and no generation started.
+    *
+    * Example of usage:
+    *
+    * @code
+    * #include <Elementary.h>
+    * #ifndef ELM_LIB_QUICKLAUNCH
+    * EAPI_MAIN int
+    * elm_main(int argc, char **argv)
+    * {
+    *    Ethumb_Client *client;
+    *
+    *    elm_need_ethumb();
+    *
+    *    // ... your code
+    *
+    *    client = elm_thumb_ethumb_client_get();
+    *    if (!client)
+    *      {
+    *         ERR("could not get ethumb_client");
+    *         return 1;
+    *      }
+    *    ethumb_client_size_set(client, 100, 100);
+    *    ethumb_client_crop_align_set(client, 0.5, 0.5);
+    *    // ... your code
+    *
+    *    // Create elm_thumb objects here
+    *
+    *    elm_run();
+    *    elm_shutdown();
+    *    return 0;
+    * }
+    * #endif
+    * ELM_MAIN()
+    * @endcode
+    *
+    * @note There's only one client handle for Ethumb, so once a configuration
+    * change is done to it, any other request for thumbnails (for any thumbnail
+    * object) will use that configuration. Thus, this configuration is global.
+    *
+    * @ingroup Thumb
+    */
+   EAPI void                        *elm_thumb_ethumb_client_get(void);
+   /**
+    * Get the ethumb_client connection state.
+    *
+    * @return EINA_TRUE if the client is connected to the server or EINA_FALSE
+    * otherwise.
+    */
+   EAPI Eina_Bool                    elm_thumb_ethumb_client_connected(void);
+   /**
+    * Make the thumbnail 'editable'.
+    *
+    * @param obj Thumb object.
+    * @param set Turn on or off editability. Default is @c EINA_FALSE.
+    *
+    * This means the thumbnail is a valid drag target for drag and drop, and can be
+    * cut or pasted too.
+    *
+    * @see elm_thumb_editable_get()
+    *
+    * @ingroup Thumb
+    */
+   EAPI Eina_Bool                    elm_thumb_editable_set(Evas_Object *obj, Eina_Bool edit) EINA_ARG_NONNULL(1);
+   /**
+    * Make the thumbnail 'editable'.
+    *
+    * @param obj Thumb object.
+    * @return Editability.
+    *
+    * This means the thumbnail is a valid drag target for drag and drop, and can be
+    * cut or pasted too.
+    *
+    * @see elm_thumb_editable_set()
+    *
+    * @ingroup Thumb
+    */
+   EAPI Eina_Bool                    elm_thumb_editable_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * @}
+    */
+
+   /**
+    * @defgroup Web Web
+    *
+    * @image html img/widget/web/preview-00.png
+    * @image latex img/widget/web/preview-00.eps
+    *
+    * A web object is used for displaying web pages (HTML/CSS/JS)
+    * using WebKit-EFL. You must have compiled Elementary with
+    * ewebkit support.
+    *
+    * Signals that you can add callbacks for are:
+    * @li "download,request": A file download has been requested. Event info is
+    * a pointer to a Elm_Web_Download
+    * @li "editorclient,contents,changed": Editor client's contents changed
+    * @li "editorclient,selection,changed": Editor client's selection changed
+    * @li "frame,created": A new frame was created. Event info is an
+    * Evas_Object which can be handled with WebKit's ewk_frame API
+    * @li "icon,received": An icon was received by the main frame
+    * @li "inputmethod,changed": Input method changed. Event info is an
+    * Eina_Bool indicating whether it's enabled or not
+    * @li "js,windowobject,clear": JS window object has been cleared
+    * @li "link,hover,in": Mouse cursor is hovering over a link. Event info
+    * is a char *link[2], where the first string contains the URL the link
+    * points to, and the second one the title of the link
+    * @li "link,hover,out": Mouse cursor left the link
+    * @li "load,document,finished": Loading of a document finished. Event info
+    * is the frame that finished loading
+    * @li "load,error": Load failed. Event info is a pointer to
+    * Elm_Web_Frame_Load_Error
+    * @li "load,finished": Load finished. Event info is NULL on success, on
+    * error it's a pointer to Elm_Web_Frame_Load_Error
+    * @li "load,newwindow,show": A new window was created and is ready to be
+    * shown
+    * @li "load,progress": Overall load progress. Event info is a pointer to
+    * a double containing a value between 0.0 and 1.0
+    * @li "load,provisional": Started provisional load
+    * @li "load,started": Loading of a document started
+    * @li "menubar,visible,get": Queries if the menubar is visible. Event info
+    * is a pointer to Eina_Bool where the callback should set EINA_TRUE if
+    * the menubar is visible, or EINA_FALSE in case it's not
+    * @li "menubar,visible,set": Informs menubar visibility. Event info is
+    * an Eina_Bool indicating the visibility
+    * @li "popup,created": A dropdown widget was activated, requesting its
+    * popup menu to be created. Event info is a pointer to Elm_Web_Menu
+    * @li "popup,willdelete": The web object is ready to destroy the popup
+    * object created. Event info is a pointer to Elm_Web_Menu
+    * @li "ready": Page is fully loaded
+    * @li "scrollbars,visible,get": Queries visibility of scrollbars. Event
+    * info is a pointer to Eina_Bool where the visibility state should be set
+    * @li "scrollbars,visible,set": Informs scrollbars visibility. Event info
+    * is an Eina_Bool with the visibility state set
+    * @li "statusbar,text,set": Text of the statusbar changed. Even info is
+    * a string with the new text
+    * @li "statusbar,visible,get": Queries visibility of the status bar.
+    * Event info is a pointer to Eina_Bool where the visibility state should be
+    * set.
+    * @li "statusbar,visible,set": Informs statusbar visibility. Event info is
+    * an Eina_Bool with the visibility value
+    * @li "title,changed": Title of the main frame changed. Event info is a
+    * string with the new title
+    * @li "toolbars,visible,get": Queries visibility of toolbars. Event info
+    * is a pointer to Eina_Bool where the visibility state should be set
+    * @li "toolbars,visible,set": Informs the visibility of toolbars. Event
+    * info is an Eina_Bool with the visibility state
+    * @li "tooltip,text,set": Show and set text of a tooltip. Event info is
+    * a string with the text to show
+    * @li "uri,changed": URI of the main frame changed. Event info is a string
+    * with the new URI
+    * @li "view,resized": The web object internal's view changed sized
+    * @li "windows,close,request": A JavaScript request to close the current
+    * window was requested
+    * @li "zoom,animated,end": Animated zoom finished
+    *
+    * available styles:
+    * - default
+    *
+    * An example of use of web:
+    *
+    * - @ref web_example_01 TBD
+    */
+
+   /**
+    * @addtogroup Web
+    * @{
+    */
+
+   /**
+    * Structure used to report load errors.
+    *
+    * Load errors are reported as signal by elm_web. All the strings are
+    * temporary references and should @b not be used after the signal
+    * callback returns. If it's required, make copies with strdup() or
+    * eina_stringshare_add() (they are not even guaranteed to be
+    * stringshared, so must use eina_stringshare_add() and not
+    * eina_stringshare_ref()).
+    */
+   typedef struct _Elm_Web_Frame_Load_Error Elm_Web_Frame_Load_Error;
+   /**
+    * Structure used to report load errors.
+    *
+    * Load errors are reported as signal by elm_web. All the strings are
+    * temporary references and should @b not be used after the signal
+    * callback returns. If it's required, make copies with strdup() or
+    * eina_stringshare_add() (they are not even guaranteed to be
+    * stringshared, so must use eina_stringshare_add() and not
+    * eina_stringshare_ref()).
+    */
+   struct _Elm_Web_Frame_Load_Error
+     {
+        int code; /**< Numeric error code */
+        Eina_Bool is_cancellation; /**< Error produced by cancelling a request */
+        const char *domain; /**< Error domain name */
+        const char *description; /**< Error description (already localized) */
+        const char *failing_url; /**< The URL that failed to load */
+        Evas_Object *frame; /**< Frame object that produced the error */
+     };
+
+   /**
+    * The possibles types that the items in a menu can be
+    */
+   typedef enum _Elm_Web_Menu_Item_Type Elm_Web_Menu_Item_Type;
+   /**
+    * The possibles types that the items in a menu can be
+    */
+   enum _Elm_Web_Menu_Item_Type
+     {
+        ELM_WEB_MENU_SEPARATOR,
+        ELM_WEB_MENU_GROUP,
+        ELM_WEB_MENU_OPTION
+     };
+
+   /**
+    * Structure describing the items in a menu
+    */
+   typedef struct _Elm_Web_Menu_Item Elm_Web_Menu_Item;
+   /**
+    * Structure describing the items in a menu
+    */
+   struct _Elm_Web_Menu_Item
+     {
+        const char *text; /**< The text for the item */
+        Elm_Web_Menu_Item_Type type; /**< The type of the item */
+     };
+
+   /**
+    * Structure describing the menu of a popup
+    *
+    * This structure will be passed as the @c event_info for the "popup,create"
+    * signal, which is emitted when a dropdown menu is opened. Users wanting
+    * to handle these popups by themselves should listen to this signal and
+    * set the @c handled property of the struct to @c EINA_TRUE. Leaving this
+    * property as @c EINA_FALSE means that the user will not handle the popup
+    * and the default implementation will be used.
+    *
+    * When the popup is ready to be dismissed, a "popup,willdelete" signal
+    * will be emitted to notify the user that it can destroy any objects and
+    * free all data related to it.
+    *
+    * @see elm_web_popup_selected_set()
+    * @see elm_web_popup_destroy()
+    */
+   typedef struct _Elm_Web_Menu Elm_Web_Menu;
+   /**
+    * Structure describing the menu of a popup
+    *
+    * This structure will be passed as the @c event_info for the "popup,create"
+    * signal, which is emitted when a dropdown menu is opened. Users wanting
+    * to handle these popups by themselves should listen to this signal and
+    * set the @c handled property of the struct to @c EINA_TRUE. Leaving this
+    * property as @c EINA_FALSE means that the user will not handle the popup
+    * and the default implementation will be used.
+    *
+    * When the popup is ready to be dismissed, a "popup,willdelete" signal
+    * will be emitted to notify the user that it can destroy any objects and
+    * free all data related to it.
+    *
+    * @see elm_web_popup_selected_set()
+    * @see elm_web_popup_destroy()
+    */
+   struct _Elm_Web_Menu
+     {
+        Eina_List *items; /**< List of #Elm_Web_Menu_Item */
+        int x; /**< The X position of the popup, relative to the elm_web object */
+        int y; /**< The Y position of the popup, relative to the elm_web object */
+        int width; /**< Width of the popup menu */
+        int height; /**< Height of the popup menu */
+
+        Eina_Bool handled : 1; /**< Set to @c EINA_TRUE by the user to indicate that the popup has been handled and the default implementation should be ignored. Leave as @c EINA_FALSE otherwise. */
+     };
+
+   typedef struct _Elm_Web_Download Elm_Web_Download;
+   struct _Elm_Web_Download
+     {
+        const char *url;
+     };
+
+   /**
+    * Opaque handler containing the features (such as statusbar, menubar, etc)
+    * that are to be set on a newly requested window.
+    */
+   typedef struct _Elm_Web_Window_Features Elm_Web_Window_Features;
+   /**
+    * Callback type for the create_window hook.
+    *
+    * The function parameters are:
+    * @li @p data User data pointer set when setting the hook function
+    * @li @p obj The elm_web object requesting the new window
+    * @li @p js Set to @c EINA_TRUE if the request was originated from
+    * JavaScript. @c EINA_FALSE otherwise.
+    * @li @p window_features A pointer of #Elm_Web_Window_Features indicating
+    * the features requested for the new window.
+    *
+    * The returned value of the function should be the @c elm_web widget where
+    * the request will be loaded. That is, if a new window or tab is created,
+    * the elm_web widget in it should be returned, and @b NOT the window
+    * object.
+    * Returning @c NULL should cancel the request.
+    *
+    * @see elm_web_window_create_hook_set()
+    */
+   typedef Evas_Object *(*Elm_Web_Window_Open)(void *data, Evas_Object *obj, Eina_Bool js, const Elm_Web_Window_Features *window_features);
+   /**
+    * Callback type for the JS alert hook.
+    *
+    * The function parameters are:
+    * @li @p data User data pointer set when setting the hook function
+    * @li @p obj The elm_web object requesting the new window
+    * @li @p message The message to show in the alert dialog
+    *
+    * The function should return the object representing the alert dialog.
+    * Elm_Web will run a second main loop to handle the dialog and normal
+    * flow of the application will be restored when the object is deleted, so
+    * the user should handle the popup properly in order to delete the object
+    * when the action is finished.
+    * If the function returns @c NULL the popup will be ignored.
+    *
+    * @see elm_web_dialog_alert_hook_set()
+    */
+   typedef Evas_Object *(*Elm_Web_Dialog_Alert)(void *data, Evas_Object *obj, const char *message);
+   /**
+    * Callback type for the JS confirm hook.
+    *
+    * The function parameters are:
+    * @li @p data User data pointer set when setting the hook function
+    * @li @p obj The elm_web object requesting the new window
+    * @li @p message The message to show in the confirm dialog
+    * @li @p ret Pointer where to store the user selection. @c EINA_TRUE if
+    * the user selected @c Ok, @c EINA_FALSE otherwise.
+    *
+    * The function should return the object representing the confirm dialog.
+    * Elm_Web will run a second main loop to handle the dialog and normal
+    * flow of the application will be restored when the object is deleted, so
+    * the user should handle the popup properly in order to delete the object
+    * when the action is finished.
+    * If the function returns @c NULL the popup will be ignored.
+    *
+    * @see elm_web_dialog_confirm_hook_set()
+    */
+   typedef Evas_Object *(*Elm_Web_Dialog_Confirm)(void *data, Evas_Object *obj, const char *message, Eina_Bool *ret);
+   /**
+    * Callback type for the JS prompt hook.
+    *
+    * The function parameters are:
+    * @li @p data User data pointer set when setting the hook function
+    * @li @p obj The elm_web object requesting the new window
+    * @li @p message The message to show in the prompt dialog
+    * @li @p def_value The default value to present the user in the entry
+    * @li @p value Pointer where to store the value given by the user. Must
+    * be a malloc'ed string or @c NULL if the user cancelled the popup.
+    * @li @p ret Pointer where to store the user selection. @c EINA_TRUE if
+    * the user selected @c Ok, @c EINA_FALSE otherwise.
+    *
+    * The function should return the object representing the prompt dialog.
+    * Elm_Web will run a second main loop to handle the dialog and normal
+    * flow of the application will be restored when the object is deleted, so
+    * the user should handle the popup properly in order to delete the object
+    * when the action is finished.
+    * If the function returns @c NULL the popup will be ignored.
+    *
+    * @see elm_web_dialog_prompt_hook_set()
+    */
+   typedef Evas_Object *(*Elm_Web_Dialog_Prompt)(void *data, Evas_Object *obj, const char *message, const char *def_value, char **value, Eina_Bool *ret);
+   /**
+    * Callback type for the JS file selector hook.
+    *
+    * The function parameters are:
+    * @li @p data User data pointer set when setting the hook function
+    * @li @p obj The elm_web object requesting the new window
+    * @li @p allows_multiple @c EINA_TRUE if multiple files can be selected.
+    * @li @p accept_types Mime types accepted
+    * @li @p selected Pointer where to store the list of malloc'ed strings
+    * containing the path to each file selected. Must be @c NULL if the file
+    * dialog is cancelled
+    * @li @p ret Pointer where to store the user selection. @c EINA_TRUE if
+    * the user selected @c Ok, @c EINA_FALSE otherwise.
+    *
+    * The function should return the object representing the file selector
+    * dialog.
+    * Elm_Web will run a second main loop to handle the dialog and normal
+    * flow of the application will be restored when the object is deleted, so
+    * the user should handle the popup properly in order to delete the object
+    * when the action is finished.
+    * If the function returns @c NULL the popup will be ignored.
+    *
+    * @see elm_web_dialog_file selector_hook_set()
+    */
+   typedef Evas_Object *(*Elm_Web_Dialog_File_Selector)(void *data, Evas_Object *obj, Eina_Bool allows_multiple, const char *accept_types, Eina_List **selected, Eina_Bool *ret);
+   /**
+    * Callback type for the JS console message hook.
+    *
+    * When a console message is added from JavaScript, any set function to the
+    * console message hook will be called for the user to handle. There is no
+    * default implementation of this hook.
+    *
+    * The function parameters are:
+    * @li @p data User data pointer set when setting the hook function
+    * @li @p obj The elm_web object that originated the message
+    * @li @p message The message sent
+    * @li @p line_number The line number
+    * @li @p source_id Source id
+    *
+    * @see elm_web_console_message_hook_set()
+    */
+   typedef void (*Elm_Web_Console_Message)(void *data, Evas_Object *obj, const char *message, unsigned int line_number, const char *source_id);
+   /**
+    * Add a new web object to the parent.
+    *
+    * @param parent The parent object.
+    * @return The new object or NULL if it cannot be created.
+    *
+    * @see elm_web_uri_set()
+    * @see elm_web_webkit_view_get()
+    */
+   EAPI Evas_Object                 *elm_web_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get internal ewk_view object from web object.
+    *
+    * Elementary may not provide some low level features of EWebKit,
+    * instead of cluttering the API with proxy methods we opted to
+    * return the internal reference. Be careful using it as it may
+    * interfere with elm_web behavior.
+    *
+    * @param obj The web object.
+    * @return The internal ewk_view object or NULL if it does not
+    *         exist. (Failure to create or Elementary compiled without
+    *         ewebkit)
+    *
+    * @see elm_web_add()
+    */
+   EAPI Evas_Object                 *elm_web_webkit_view_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Sets the function to call when a new window is requested
+    *
+    * This hook will be called when a request to create a new window is
+    * issued from the web page loaded.
+    * There is no default implementation for this feature, so leaving this
+    * unset or passing @c NULL in @p func will prevent new windows from
+    * opening.
+    *
+    * @param obj The web object where to set the hook function
+    * @param func The hook function to be called when a window is requested
+    * @param data User data
+    */
+   EAPI void                         elm_web_window_create_hook_set(Evas_Object *obj, Elm_Web_Window_Open func, void *data);
+   /**
+    * Sets the function to call when an alert dialog
+    *
+    * This hook will be called when a JavaScript alert dialog is requested.
+    * If no function is set or @c NULL is passed in @p func, the default
+    * implementation will take place.
+    *
+    * @param obj The web object where to set the hook function
+    * @param func The callback function to be used
+    * @param data User data
+    *
+    * @see elm_web_inwin_mode_set()
+    */
+   EAPI void                         elm_web_dialog_alert_hook_set(Evas_Object *obj, Elm_Web_Dialog_Alert func, void *data);
+   /**
+    * Sets the function to call when an confirm dialog
+    *
+    * This hook will be called when a JavaScript confirm dialog is requested.
+    * If no function is set or @c NULL is passed in @p func, the default
+    * implementation will take place.
+    *
+    * @param obj The web object where to set the hook function
+    * @param func The callback function to be used
+    * @param data User data
+    *
+    * @see elm_web_inwin_mode_set()
+    */
+   EAPI void                         elm_web_dialog_confirm_hook_set(Evas_Object *obj, Elm_Web_Dialog_Confirm func, void *data);
+   /**
+    * Sets the function to call when an prompt dialog
+    *
+    * This hook will be called when a JavaScript prompt dialog is requested.
+    * If no function is set or @c NULL is passed in @p func, the default
+    * implementation will take place.
+    *
+    * @param obj The web object where to set the hook function
+    * @param func The callback function to be used
+    * @param data User data
+    *
+    * @see elm_web_inwin_mode_set()
+    */
+   EAPI void                         elm_web_dialog_prompt_hook_set(Evas_Object *obj, Elm_Web_Dialog_Prompt func, void *data);
+   /**
+    * Sets the function to call when an file selector dialog
+    *
+    * This hook will be called when a JavaScript file selector dialog is
+    * requested.
+    * If no function is set or @c NULL is passed in @p func, the default
+    * implementation will take place.
+    *
+    * @param obj The web object where to set the hook function
+    * @param func The callback function to be used
+    * @param data User data
+    *
+    * @see elm_web_inwin_mode_set()
+    */
+   EAPI void                         elm_web_dialog_file_selector_hook_set(Evas_Object *obj, Elm_Web_Dialog_File_Selector func, void *data);
+   /**
+    * Sets the function to call when a console message is emitted from JS
+    *
+    * This hook will be called when a console message is emitted from
+    * JavaScript. There is no default implementation for this feature.
+    *
+    * @param obj The web object where to set the hook function
+    * @param func The callback function to be used
+    * @param data User data
+    */
+   EAPI void                         elm_web_console_message_hook_set(Evas_Object *obj, Elm_Web_Console_Message func, void *data);
+   /**
+    * Gets the status of the tab propagation
+    *
+    * @param obj The web object to query
+    * @return EINA_TRUE if tab propagation is enabled, EINA_FALSE otherwise
+    *
+    * @see elm_web_tab_propagate_set()
+    */
+   EAPI Eina_Bool                    elm_web_tab_propagate_get(const Evas_Object *obj);
+   /**
+    * Sets whether to use tab propagation
+    *
+    * If tab propagation is enabled, whenever the user presses the Tab key,
+    * Elementary will handle it and switch focus to the next widget.
+    * The default value is disabled, where WebKit will handle the Tab key to
+    * cycle focus though its internal objects, jumping to the next widget
+    * only when that cycle ends.
+    *
+    * @param obj The web object
+    * @param propagate Whether to propagate Tab keys to Elementary or not
+    */
+   EAPI void                         elm_web_tab_propagate_set(Evas_Object *obj, Eina_Bool propagate);
+   /**
+    * Sets the URI for the web object
+    *
+    * It must be a full URI, with resource included, in the form
+    * http://www.enlightenment.org or file:///tmp/something.html
+    *
+    * @param obj The web object
+    * @param uri The URI to set
+    * @return EINA_TRUE if the URI could be, EINA_FALSE if an error occurred
+    */
+   EAPI Eina_Bool                    elm_web_uri_set(Evas_Object *obj, const char *uri);
+   /**
+    * Gets the current URI for the object
+    *
+    * The returned string must not be freed and is guaranteed to be
+    * stringshared.
+    *
+    * @param obj The web object
+    * @return A stringshared internal string with the current URI, or NULL on
+    * failure
+    */
+   EAPI const char                  *elm_web_uri_get(const Evas_Object *obj);
+   /**
+    * Gets the current title
+    *
+    * The returned string must not be freed and is guaranteed to be
+    * stringshared.
+    *
+    * @param obj The web object
+    * @return A stringshared internal string with the current title, or NULL on
+    * failure
+    */
+   EAPI const char                  *elm_web_title_get(const Evas_Object *obj);
+   /**
+    * Sets the background color to be used by the web object
+    *
+    * This is the color that will be used by default when the loaded page
+    * does not set it's own. Color values are pre-multiplied.
+    *
+    * @param obj The web object
+    * @param r Red component
+    * @param g Green component
+    * @param b Blue component
+    * @param a Alpha component
+    */
+   EAPI void                         elm_web_bg_color_set(Evas_Object *obj, int r, int g, int b, int a);
+   /**
+    * Gets the background color to be used by the web object
+    *
+    * This is the color that will be used by default when the loaded page
+    * does not set it's own. Color values are pre-multiplied.
+    *
+    * @param obj The web object
+    * @param r Red component
+    * @param g Green component
+    * @param b Blue component
+    * @param a Alpha component
+    */
+   EAPI void                         elm_web_bg_color_get(const Evas_Object *obj, int *r, int *g, int *b, int *a);
+   /**
+    * Gets a copy of the currently selected text
+    *
+    * The string returned must be freed by the user when it's done with it.
+    *
+    * @param obj The web object
+    * @return A newly allocated string, or NULL if nothing is selected or an
+    * error occurred
+    */
+   EAPI char                        *elm_view_selection_get(const Evas_Object *obj);
+   /**
+    * Tells the web object which index in the currently open popup was selected
+    *
+    * When the user handles the popup creation from the "popup,created" signal,
+    * it needs to tell the web object which item was selected by calling this
+    * function with the index corresponding to the item.
+    *
+    * @param obj The web object
+    * @param index The index selected
+    *
+    * @see elm_web_popup_destroy()
+    */
+   EAPI void                         elm_web_popup_selected_set(Evas_Object *obj, int index);
+   /**
+    * Dismisses an open dropdown popup
+    *
+    * When the popup from a dropdown widget is to be dismissed, either after
+    * selecting an option or to cancel it, this function must be called, which
+    * will later emit an "popup,willdelete" signal to notify the user that
+    * any memory and objects related to this popup can be freed.
+    *
+    * @param obj The web object
+    * @return EINA_TRUE if the menu was successfully destroyed, or EINA_FALSE
+    * if there was no menu to destroy
+    */
+   EAPI Eina_Bool                    elm_web_popup_destroy(Evas_Object *obj);
+   /**
+    * Searches the given string in a document.
+    *
+    * @param obj The web object where to search the text
+    * @param string String to search
+    * @param case_sensitive If search should be case sensitive or not
+    * @param forward If search is from cursor and on or backwards
+    * @param wrap If search should wrap at the end
+    *
+    * @return @c EINA_TRUE if the given string was found, @c EINA_FALSE if not
+    * or failure
+    */
+   EAPI Eina_Bool                    elm_web_text_search(const Evas_Object *obj, const char *string, Eina_Bool case_sensitive, Eina_Bool forward, Eina_Bool wrap);
+   /**
+    * Marks matches of the given string in a document.
+    *
+    * @param obj The web object where to search text
+    * @param string String to match
+    * @param case_sensitive If match should be case sensitive or not
+    * @param highlight If matches should be highlighted
+    * @param limit Maximum amount of matches, or zero to unlimited
+    *
+    * @return number of matched @a string
+    */
+   EAPI unsigned int                 elm_web_text_matches_mark(Evas_Object *obj, const char *string, Eina_Bool case_sensitive, Eina_Bool highlight, unsigned int limit);
+   /**
+    * Clears all marked matches in the document
+    *
+    * @param obj The web object
+    *
+    * @return EINA_TRUE on success, EINA_FALSE otherwise
+    */
+   EAPI Eina_Bool                    elm_web_text_matches_unmark_all(Evas_Object *obj);
+   /**
+    * Sets whether to highlight the matched marks
+    *
+    * If enabled, marks set with elm_web_text_matches_mark() will be
+    * highlighted.
+    *
+    * @param obj The web object
+    * @param highlight Whether to highlight the marks or not
+    *
+    * @return EINA_TRUE on success, EINA_FALSE otherwise
+    */
+   EAPI Eina_Bool                    elm_web_text_matches_highlight_set(Evas_Object *obj, Eina_Bool highlight);
+   /**
+    * Gets whether highlighting marks is enabled
+    *
+    * @param The web object
+    *
+    * @return EINA_TRUE is marks are set to be highlighted, EINA_FALSE
+    * otherwise
+    */
+   EAPI Eina_Bool                    elm_web_text_matches_highlight_get(const Evas_Object *obj);
+   /**
+    * Gets the overall loading progress of the page
+    *
+    * Returns the estimated loading progress of the page, with a value between
+    * 0.0 and 1.0. This is an estimated progress accounting for all the frames
+    * included in the page.
+    *
+    * @param The web object
+    *
+    * @return A value between 0.0 and 1.0 indicating the progress, or -1.0 on
+    * failure
+    */
+   EAPI double                       elm_web_load_progress_get(const Evas_Object *obj);
+   /**
+    * Stops loading the current page
+    *
+    * Cancels the loading of the current page in the web object. This will
+    * cause a "load,error" signal to be emitted, with the is_cancellation
+    * flag set to EINA_TRUE.
     *
-    * @see elm_thumb_file_set()
-    * @see elm_thumb_path_get()
+    * @param obj The web object
     *
-    * @ingroup Thumb
+    * @return EINA_TRUE if the cancel was successful, EINA_FALSE otherwise
     */
-   EAPI void                         elm_thumb_file_get(const Evas_Object *obj, const char **file, const char **key) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool                    elm_web_stop(Evas_Object *obj);
    /**
-    * Get the path and key to the image or video generated by ethumb.
+    * Requests a reload of the current document in the object
     *
-    * One just need to make sure that the thumbnail was generated before getting
-    * its path; otherwise, the path will be NULL. One way to do that is by asking
-    * for the path when/after the "generate,stop" smart callback is called.
+    * @param obj The web object
     *
-    * @param obj The thumb object.
-    * @param file Pointer to thumb path.
-    * @param key Pointer to thumb key.
+    * @return EINA_TRUE on success, EINA_FALSE otherwise
+    */
+   EAPI Eina_Bool                    elm_web_reload(Evas_Object *obj);
+   /**
+    * Requests a reload of the current document, avoiding any existing caches
     *
-    * @see elm_thumb_file_get()
+    * @param obj The web object
     *
-    * @ingroup Thumb
+    * @return EINA_TRUE on success, EINA_FALSE otherwise
     */
-   EAPI void                         elm_thumb_path_get(const Evas_Object *obj, const char **file, const char **key) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool                    elm_web_reload_full(Evas_Object *obj);
    /**
-    * Set the animation state for the thumb object. If its content is an animated
-    * video, you may start/stop the animation or tell it to play continuously and
-    * looping.
+    * Goes back one step in the browsing history
     *
-    * @param obj The thumb object.
-    * @param setting The animation setting.
+    * This is equivalent to calling elm_web_object_navigate(obj, -1);
     *
-    * @see elm_thumb_file_set()
+    * @param obj The web object
     *
-    * @ingroup Thumb
+    * @return EINA_TRUE on success, EINA_FALSE otherwise
+    *
+    * @see elm_web_history_enable_set()
+    * @see elm_web_back_possible()
+    * @see elm_web_forward()
+    * @see elm_web_navigate()
     */
-   EAPI void                         elm_thumb_animate_set(Evas_Object *obj, Elm_Thumb_Animation_Setting s) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool                    elm_web_back(Evas_Object *obj);
    /**
-    * Get the animation state for the thumb object.
+    * Goes forward one step in the browsing history
     *
-    * @param obj The thumb object.
-    * @return getting The animation setting or @c ELM_THUMB_ANIMATION_LAST,
-    * on errors.
+    * This is equivalent to calling elm_web_object_navigate(obj, 1);
     *
-    * @see elm_thumb_animate_set()
+    * @param obj The web object
     *
-    * @ingroup Thumb
+    * @return EINA_TRUE on success, EINA_FALSE otherwise
+    *
+    * @see elm_web_history_enable_set()
+    * @see elm_web_forward_possible()
+    * @see elm_web_back()
+    * @see elm_web_navigate()
     */
-   EAPI Elm_Thumb_Animation_Setting  elm_thumb_animate_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool                    elm_web_forward(Evas_Object *obj);
    /**
-    * Get the ethumb_client handle so custom configuration can be made.
+    * Jumps the given number of steps in the browsing history
     *
-    * @return Ethumb_Client instance or NULL.
+    * The @p steps value can be a negative integer to back in history, or a
+    * positive to move forward.
     *
-    * This must be called before the objects are created to be sure no object is
-    * visible and no generation started.
+    * @param obj The web object
+    * @param steps The number of steps to jump
     *
-    * Example of usage:
+    * @return EINA_TRUE on success, EINA_FALSE on error or if not enough
+    * history exists to jump the given number of steps
     *
-    * @code
-    * #include <Elementary.h>
-    * #ifndef ELM_LIB_QUICKLAUNCH
-    * EAPI int
-    * elm_main(int argc, char **argv)
-    * {
-    *    Ethumb_Client *client;
+    * @see elm_web_history_enable_set()
+    * @see elm_web_navigate_possible()
+    * @see elm_web_back()
+    * @see elm_web_forward()
+    */
+   EAPI Eina_Bool                    elm_web_navigate(Evas_Object *obj, int steps);
+   /**
+    * Queries whether it's possible to go back in history
     *
-    *    elm_need_ethumb();
+    * @param obj The web object
     *
-    *    // ... your code
+    * @return EINA_TRUE if it's possible to back in history, EINA_FALSE
+    * otherwise
+    */
+   EAPI Eina_Bool                    elm_web_back_possible(Evas_Object *obj);
+   /**
+    * Queries whether it's possible to go forward in history
     *
-    *    client = elm_thumb_ethumb_client_get();
-    *    if (!client)
-    *      {
-    *         ERR("could not get ethumb_client");
-    *         return 1;
-    *      }
-    *    ethumb_client_size_set(client, 100, 100);
-    *    ethumb_client_crop_align_set(client, 0.5, 0.5);
-    *    // ... your code
+    * @param obj The web object
     *
-    *    // Create elm_thumb objects here
+    * @return EINA_TRUE if it's possible to forward in history, EINA_FALSE
+    * otherwise
+    */
+   EAPI Eina_Bool                    elm_web_forward_possible(Evas_Object *obj);
+   /**
+    * Queries whether it's possible to jump the given number of steps
     *
-    *    elm_run();
-    *    elm_shutdown();
-    *    return 0;
-    * }
-    * #endif
-    * ELM_MAIN()
-    * @endcode
+    * The @p steps value can be a negative integer to back in history, or a
+    * positive to move forward.
     *
-    * @note There's only one client handle for Ethumb, so once a configuration
-    * change is done to it, any other request for thumbnails (for any thumbnail
-    * object) will use that configuration. Thus, this configuration is global.
+    * @param obj The web object
+    * @param steps The number of steps to check for
     *
-    * @ingroup Thumb
+    * @return EINA_TRUE if enough history exists to perform the given jump,
+    * EINA_FALSE otherwise
     */
-   EAPI void                        *elm_thumb_ethumb_client_get(void);
+   EAPI Eina_Bool                    elm_web_navigate_possible(Evas_Object *obj, int steps);
    /**
-    * Get the ethumb_client connection state.
+    * Gets whether browsing history is enabled for the given object
     *
-    * @return EINA_TRUE if the client is connected to the server or EINA_FALSE
-    * otherwise.
+    * @param obj The web object
+    *
+    * @return EINA_TRUE if history is enabled, EINA_FALSE otherwise
     */
-   EAPI Eina_Bool                    elm_thumb_ethumb_client_connected(void);
+   EAPI Eina_Bool                    elm_web_history_enable_get(const Evas_Object *obj);
    /**
-    * Make the thumbnail 'editable'.
+    * Enables or disables the browsing history
     *
-    * @param obj Thumb object.
-    * @param set Turn on or off editability. Default is @c EINA_FALSE.
+    * @param obj The web object
+    * @param enable Whether to enable or disable the browsing history
+    */
+   EAPI void                         elm_web_history_enable_set(Evas_Object *obj, Eina_Bool enable);
+   /**
+    * Gets whether text-only zoom is set
     *
-    * This means the thumbnail is a valid drag target for drag and drop, and can be
-    * cut or pasted too.
+    * @param obj The web object
     *
-    * @see elm_thumb_editable_get()
+    * @return EINA_TRUE if zoom is set to affect only text, EINA_FALSE
+    * otherwise
     *
-    * @ingroup Thumb
+    * @see elm_web_zoom_text_only_set()
     */
-   EAPI Eina_Bool                    elm_thumb_editable_set(Evas_Object *obj, Eina_Bool edit) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool                    elm_web_zoom_text_only_get(const Evas_Object *obj);
    /**
-    * Make the thumbnail 'editable'.
+    * Enables or disables zoom to affect only text
     *
-    * @param obj Thumb object.
-    * @return Editability.
+    * If set, then the zoom level set to the page will only be applied on text,
+    * leaving other objects, such as images, at their original size.
     *
-    * This means the thumbnail is a valid drag target for drag and drop, and can be
-    * cut or pasted too.
+    * @param obj The web object
+    * @param setting EINA_TRUE to use text-only zoom, EINA_FALSE to have zoom
+    * affect the entire page
+    */
+   EAPI void                         elm_web_zoom_text_only_set(Evas_Object *obj, Eina_Bool setting);
+   /**
+    * Sets the default dialogs to use an Inwin instead of a normal window
     *
-    * @see elm_thumb_editable_set()
+    * If set, then the default implementation for the JavaScript dialogs and
+    * file selector will be opened in an Inwin. Otherwise they will use a
+    * normal separated window.
     *
-    * @ingroup Thumb
+    * @param obj The web object
+    * @param value EINA_TRUE to use Inwin, EINA_FALSE to use a normal window
     */
-   EAPI Eina_Bool                    elm_thumb_editable_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI void                         elm_web_inwin_mode_set(Evas_Object *obj, Eina_Bool value);
+   /**
+    * Gets whether Inwin mode is set for the current object
+    *
+    * @param obj The web object
+    *
+    * @return EINA_TRUE if Inwin mode is set, EINA_FALSE otherwise
+    */
+   EAPI Eina_Bool                    elm_web_inwin_mode_get(const Evas_Object *obj);
+
+   EAPI void                         elm_web_window_features_ref(Elm_Web_Window_Features *wf);
+   EAPI void                         elm_web_window_features_unref(Elm_Web_Window_Features *wf);
+   EAPI void                         elm_web_window_features_bool_property_get(const Elm_Web_Window_Features *wf, Eina_Bool *toolbar_visible, Eina_Bool *statusbar_visible, Eina_Bool *scrollbars_visible, Eina_Bool *menubar_visible, Eina_Bool *locationbar_visble, Eina_Bool *fullscreen);
+   EAPI void                         elm_web_window_features_int_property_get(const Elm_Web_Window_Features *wf, int *x, int *y, int *w, int *h);
 
    /**
     * @}
@@ -10858,6 +14053,38 @@ extern "C" {
    EAPI Elm_Icon_Lookup_Order   elm_toolbar_icon_order_lookup_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
 
    /**
+    * Set whether the toolbar should always have an item selected.
+    *
+    * @param obj The toolbar object.
+    * @param wrap @c EINA_TRUE to enable always-select mode or @c EINA_FALSE to
+    * disable it.
+    *
+    * This will cause the toolbar to always have an item selected, and clicking
+    * the selected item will not cause a selected event to be emitted. Enabling this mode
+    * will immediately select the first toolbar item.
+    *
+    * Always-selected is disabled by default.
+    *
+    * @see elm_toolbar_always_select_mode_get().
+    *
+    * @ingroup Toolbar
+    */
+   EAPI void                    elm_toolbar_always_select_mode_set(Evas_Object *obj, Eina_Bool always_select) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get whether the toolbar should always have an item selected.
+    *
+    * @param obj The toolbar object.
+    * @return @c EINA_TRUE means an item will always be selected, @c EINA_FALSE indicates
+    * that it is possible to have no items selected. If @p obj is @c NULL, @c EINA_FALSE is returned.
+    *
+    * @see elm_toolbar_always_select_mode_set() for details.
+    *
+    * @ingroup Toolbar
+    */
+   EAPI Eina_Bool               elm_toolbar_always_select_mode_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
     * Set whether the toolbar items' should be selected by the user or not.
     *
     * @param obj The toolbar object.
@@ -11299,6 +14526,46 @@ extern "C" {
    EAPI const char             *elm_toolbar_item_icon_get(const Elm_Toolbar_Item *item) EINA_ARG_NONNULL(1);
 
    /**
+    * Get the object of @p item.
+    *
+    * @param item The toolbar item.
+    * @return The object
+    *
+    * @ingroup Toolbar
+    */
+   EAPI Evas_Object            *elm_toolbar_item_object_get(const Elm_Toolbar_Item *item) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get the icon object of @p item.
+    *
+    * @param item The toolbar item.
+    * @return The icon object
+    *
+    * @see elm_toolbar_item_icon_set() or elm_toolbar_item_icon_memfile_set() for details.
+    *
+    * @ingroup Toolbar
+    */
+   EAPI Evas_Object            *elm_toolbar_item_icon_object_get(Elm_Toolbar_Item *item) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set the icon associated with @p item to an image in a binary buffer.
+    *
+    * @param item The toolbar item.
+    * @param img The binary data that will be used as an image
+    * @param size The size of binary data @p img
+    * @param format Optional format of @p img to pass to the image loader
+    * @param key Optional key of @p img to pass to the image loader (eg. if @p img is an edje file)
+    *
+    * @return (@c EINA_TRUE = success, @c EINA_FALSE = error)
+    *
+    * @note The icon image set by this function can be changed by
+    * elm_toolbar_item_icon_set().
+    * 
+    * @ingroup Toolbar
+    */
+   EAPI Eina_Bool elm_toolbar_item_icon_memfile_set(Elm_Toolbar_Item *item, const void *img, size_t size, const char *format, const char *key) EINA_ARG_NONNULL(1);
+
+   /**
     * Delete them item from the toolbar.
     *
     * @param item The item of toolbar to be deleted.
@@ -11912,10 +15179,37 @@ extern "C" {
    EAPI Eina_Bool        elm_toolbar_item_cursor_engine_only_get(const Elm_Toolbar_Item *item) EINA_ARG_NONNULL(1);
 
    /**
+    * Change a toolbar's orientation
+    * @param obj The toolbar object
+    * @param vertical If @c EINA_TRUE, the toolbar is vertical
+    * By default, a toolbar will be horizontal. Use this function to create a vertical toolbar.
+    * @ingroup Toolbar
+    */
+   EAPI void             elm_toolbar_orientation_set(Evas_Object *obj, Eina_Bool vertical) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get a toolbar's orientation
+    * @param obj The toolbar object
+    * @return If @c EINA_TRUE, the toolbar is vertical
+    * By default, a toolbar will be horizontal. Use this function to determine whether a toolbar is vertical.
+    * @ingroup Toolbar
+    */
+   EAPI Eina_Bool        elm_toolbar_orientation_get(Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
     * @}
     */
 
-   /* tooltip */
+   /**
+    * @defgroup Tooltips Tooltips
+    *
+    * The Tooltip is an (internal, for now) smart object used to show a
+    * content in a frame on mouse hover of objects(or widgets), with
+    * tips/information about them.
+    *
+    * @{
+    */
+
    EAPI double       elm_tooltip_delay_get(void);
    EAPI Eina_Bool    elm_tooltip_delay_set(double delay);
    EAPI void         elm_object_tooltip_show(Evas_Object *obj) EINA_ARG_NONNULL(1);
@@ -11925,21 +15219,155 @@ extern "C" {
    EAPI void         elm_object_tooltip_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
    EAPI void         elm_object_tooltip_style_set(Evas_Object *obj, const char *style) EINA_ARG_NONNULL(1);
    EAPI const char  *elm_object_tooltip_style_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool    elm_tooltip_size_restrict_disable(Evas_Object *obj, Eina_Bool disable); EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool    elm_tooltip_size_restrict_disabled_get(const Evas_Object *obj); EINA_ARG_NONNULL(1);
+
+   /**
+    * @}
+    */
+
+   /**
+    * @defgroup Cursors Cursors
+    *
+    * The Elementary cursor is an internal smart object used to
+    * customize the mouse cursor displayed over objects (or
+    * widgets). In the most common scenario, the cursor decoration
+    * comes from the graphical @b engine Elementary is running
+    * on. Those engines may provide different decorations for cursors,
+    * and Elementary provides functions to choose them (think of X11
+    * cursors, as an example).
+    *
+    * There's also the possibility of, besides using engine provided
+    * cursors, also use ones coming from Edje theming files. Both
+    * globally and per widget, Elementary makes it possible for one to
+    * make the cursors lookup to be held on engines only or on
+    * Elementary's theme file, too.
+    *
+    * @{
+    */
+
+   /**
+    * Set the cursor to be shown when mouse is over the object
+    *
+    * Set the cursor that will be displayed when mouse is over the
+    * object. The object can have only one cursor set to it, so if
+    * this function is called twice for an object, the previous set
+    * will be unset.
+    * If using X cursors, a definition of all the valid cursor names
+    * is listed on Elementary_Cursors.h. If an invalid name is set
+    * the default cursor will be used.
+    *
+    * @param obj the object being set a cursor.
+    * @param cursor the cursor name to be used.
+    *
+    * @ingroup Cursors
+    */
    EAPI void         elm_object_cursor_set(Evas_Object *obj, const char *cursor) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get the cursor to be shown when mouse is over the object
+    *
+    * @param obj an object with cursor already set.
+    * @return the cursor name.
+    *
+    * @ingroup Cursors
+    */
    EAPI const char  *elm_object_cursor_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Unset cursor for object
+    *
+    * Unset cursor for object, and set the cursor to default if the mouse
+    * was over this object.
+    *
+    * @param obj Target object
+    * @see elm_object_cursor_set()
+    *
+    * @ingroup Cursors
+    */
    EAPI void         elm_object_cursor_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Sets a different style for this object cursor.
+    *
+    * @note before you set a style you should define a cursor with
+    *       elm_object_cursor_set()
+    *
+    * @param obj an object with cursor already set.
+    * @param style the theme style to use (default, transparent, ...)
+    *
+    * @ingroup Cursors
+    */
    EAPI void         elm_object_cursor_style_set(Evas_Object *obj, const char *style) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get the style for this object cursor.
+    *
+    * @param obj an object with cursor already set.
+    * @return style the theme style in use, defaults to "default". If the
+    *         object does not have a cursor set, then NULL is returned.
+    *
+    * @ingroup Cursors
+    */
    EAPI const char  *elm_object_cursor_style_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set if the cursor set should be searched on the theme or should use
+    * the provided by the engine, only.
+    *
+    * @note before you set if should look on theme you should define a cursor
+    * with elm_object_cursor_set(). By default it will only look for cursors
+    * provided by the engine.
+    *
+    * @param obj an object with cursor already set.
+    * @param engine_only boolean to define it cursors should be looked only
+    * between the provided by the engine or searched on widget's theme as well.
+    *
+    * @ingroup Cursors
+    */
    EAPI void         elm_object_cursor_engine_only_set(Evas_Object *obj, Eina_Bool engine_only) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get the cursor engine only usage for this object cursor.
+    *
+    * @param obj an object with cursor already set.
+    * @return engine_only boolean to define it cursors should be
+    * looked only between the provided by the engine or searched on
+    * widget's theme as well. If the object does not have a cursor
+    * set, then EINA_FALSE is returned.
+    *
+    * @ingroup Cursors
+    */
    EAPI Eina_Bool    elm_object_cursor_engine_only_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool    elm_tooltip_size_restrict_disable(Evas_Object *obj, Eina_Bool disable); EINA_ARG_NONNULL(1);
-   EAPI Eina_Bool    elm_tooltip_size_restrict_disabled_get(const Evas_Object *obj); EINA_ARG_NONNULL(1);
 
-   /* cursors */
+   /**
+    * Get the configured cursor engine only usage
+    *
+    * This gets the globally configured exclusive usage of engine cursors.
+    *
+    * @return 1 if only engine cursors should be used
+    * @ingroup Cursors
+    */
    EAPI int          elm_cursor_engine_only_get(void);
+
+   /**
+    * Set the configured cursor engine only usage
+    *
+    * This sets the globally configured exclusive usage of engine cursors.
+    * It won't affect cursors set before changing this value.
+    *
+    * @param engine_only If 1 only engine cursors will be enabled, if 0 will
+    * look for them on theme before.
+    * @return EINA_TRUE if value is valid and setted (0 or 1)
+    * @ingroup Cursors
+    */
    EAPI Eina_Bool    elm_cursor_engine_only_set(int engine_only);
 
    /**
+    * @}
+    */
+
+   /**
     * @defgroup Menu Menu
     *
     * @image html img/widget/menu/preview-00.png
@@ -12549,7 +15977,7 @@ extern "C" {
     * @param policy_v Vertical scrollbar policy.
     *
     * This sets the scrollbar visibility policy for the given scroller.
-    * #ELM_SCROLLER_POLICY_AUTO means the scrollber is made visible if it
+    * #ELM_SCROLLER_POLICY_AUTO means the scrollbar is made visible if it
     * is needed, and otherwise kept hidden. #ELM_SCROLLER_POLICY_ON turns
     * it on all the time, and #ELM_SCROLLER_POLICY_OFF always keeps it off.
     * This applies respectively for the horizontal and vertical scrollbars.
@@ -13111,7 +16539,8 @@ extern "C" {
     *
     * @ingroup List
     */
-   EAPI Evas_Object     *elm_list_item_base_get(const Elm_List_Item *item) EINA_ARG_NONNULL(1);
+   EAPI Evas_Object     *elm_list_item_object_get(const Elm_List_Item *item) EINA_ARG_NONNULL(1);
+   EINA_DEPRECATED EAPI Evas_Object     *elm_list_item_base_get(const Elm_List_Item *item) EINA_ARG_NONNULL(1);
 
    /**
     * Get the label of item.
@@ -14158,23 +17587,23 @@ extern "C" {
     * - @c label_get - The @c part parameter is the name string of one of the
     *   existing text parts in the Edje group implementing the item's theme.
     *   This function @b must return a strdup'()ed string, as the caller will
-    *   free() it when done. See #GenlistItemLabelGetFunc.
+    *   free() it when done. See #Elm_Genlist_Item_Label_Get_Cb.
     * - @c icon_get - The @c part parameter is the name string of one of the
     *   existing (icon) swallow parts in the Edje group implementing the item's
     *   theme. It must return @c NULL, when no icon is desired, or a valid
     *   object handle, otherwise.  The object will be deleted by the genlist on
     *   its deletion or when the item is "unrealized".  See
-    *   #GenlistItemIconGetFunc.
+    *   #Elm_Genlist_Item_Icon_Get_Cb.
     * - @c func.state_get - The @c part parameter is the name string of one of
     *   the state parts in the Edje group implementing the item's theme. Return
     *   @c EINA_FALSE for false/off or @c EINA_TRUE for true/on. Genlists will
     *   emit a signal to its theming Edje object with @c "elm,state,XXX,active"
     *   and @c "elm" as "emission" and "source" arguments, respectively, when
     *   the state is true (the default is false), where @c XXX is the name of
-    *   the (state) part.  See #GenlistItemStateGetFunc.
+    *   the (state) part.  See #Elm_Genlist_Item_State_Get_Cb.
     * - @c func.del - This is intended for use when genlist items are deleted,
     *   so any data attached to the item (e.g. its data parameter on creation)
-    *   can be deleted. See #GenlistItemDelFunc.
+    *   can be deleted. See #Elm_Genlist_Item_Del_Cb.
     *
     * available item styles:
     * - default
@@ -14291,7 +17720,7 @@ extern "C" {
     *
     * In general to indicate how the genlist should expand items horizontally to
     * fill the list area, use elm_genlist_horizontal_set(). Valid modes are
-    * ELM_LIST_LIMIT and ELM_LIST_SCROLL . The default is ELM_LIST_SCROLL. This
+    * ELM_LIST_LIMIT and ELM_LIST_SCROLL. The default is ELM_LIST_SCROLL. This
     * mode means that if items are too wide to fit, the scroller will scroll
     * horizontally. Otherwise items are expanded to fill the width of the
     * viewport of the scroller. If it is ELM_LIST_LIMIT, items will be expanded
@@ -14394,6 +17823,14 @@ extern "C" {
     * - @c "drag" - This is called when the item in the list is being dragged.
     * - @c "longpressed" - This is called when the item is pressed for a certain
     *   amount of time. By default it's 1 second.
+    * - @c "scroll,anim,start" - This is called when scrolling animation has
+    *   started.
+    * - @c "scroll,anim,stop" - This is called when scrolling animation has
+    *   stopped.
+    * - @c "scroll,drag,start" - This is called when dragging the content has
+    *   started.
+    * - @c "scroll,drag,stop" - This is called when dragging the content has
+    *   stopped.
     * - @c "scroll,edge,top" - This is called when the genlist is scrolled until
     *   the top edge.
     * - @c "scroll,edge,bottom" - This is called when the genlist is scrolled
@@ -14449,11 +17886,16 @@ extern "C" {
    typedef struct _Elm_Genlist_Item_Class Elm_Genlist_Item_Class;  /**< Genlist item class definition structs */
    typedef struct _Elm_Genlist_Item       Elm_Genlist_Item; /**< Item of Elm_Genlist. Sub-type of Elm_Widget_Item */
    typedef struct _Elm_Genlist_Item_Class_Func Elm_Genlist_Item_Class_Func; /**< Class functions for genlist item class */
-   typedef char        *(*GenlistItemLabelGetFunc) (void *data, Evas_Object *obj, const char *part); /**< Label fetching class function for genlist item classes. */
-   typedef Evas_Object *(*GenlistItemIconGetFunc)  (void *data, Evas_Object *obj, const char *part); /**< Icon fetching class function for genlist item classes. */
-   typedef Eina_Bool    (*GenlistItemStateGetFunc) (void *data, Evas_Object *obj, const char *part); /**< State fetching class function for genlist item classes. */
-   typedef void         (*GenlistItemDelFunc)      (void *data, Evas_Object *obj); /**< Deletion class function for genlist item classes. */
-   typedef void         (*GenlistItemMovedFunc)    (Evas_Object *obj, Elm_Genlist_Item *item, Elm_Genlist_Item *rel_item, Eina_Bool move_after);
+   typedef char        *(*Elm_Genlist_Item_Label_Get_Cb) (void *data, Evas_Object *obj, const char *part); /**< Label fetching class function for genlist item classes. */
+   typedef Evas_Object *(*Elm_Genlist_Item_Icon_Get_Cb)  (void *data, Evas_Object *obj, const char *part); /**< Icon fetching class function for genlist item classes. */
+   typedef Eina_Bool    (*Elm_Genlist_Item_State_Get_Cb) (void *data, Evas_Object *obj, const char *part); /**< State fetching class function for genlist item classes. */
+   typedef void         (*Elm_Genlist_Item_Del_Cb)      (void *data, Evas_Object *obj); /**< Deletion class function for genlist item classes. */
+   typedef void         (*GenlistItemMovedFunc)    (Evas_Object *obj, Elm_Genlist_Item *item, Elm_Genlist_Item *rel_item, Eina_Bool move_after); /** TODO: remove this by SeoZ **/
+
+   typedef char        *(*GenlistItemLabelGetFunc) (void *data, Evas_Object *obj, const char *part) EINA_DEPRECATED; /** DEPRECATED. Use Elm_Genlist_Item_Label_Get_Cb instead. */
+   typedef Evas_Object *(*GenlistItemIconGetFunc)  (void *data, Evas_Object *obj, const char *part) EINA_DEPRECATED; /** DEPRECATED. Use Elm_Genlist_Item_Icon_Get_Cb instead. */
+   typedef Eina_Bool    (*GenlistItemStateGetFunc) (void *data, Evas_Object *obj, const char *part) EINA_DEPRECATED; /** DEPRECATED. Use Elm_Genlist_Item_State_Get_Cb instead. */
+   typedef void         (*GenlistItemDelFunc)      (void *data, Evas_Object *obj) EINA_DEPRECATED; /** DEPRECATED. Use Elm_Genlist_Item_Del_Cb instead. */
 
    /**
     * @struct _Elm_Genlist_Item_Class
@@ -14470,10 +17912,10 @@ extern "C" {
         const char                *item_style; /**< style of this class. */
         struct
           {
-             GenlistItemLabelGetFunc  label_get; /**< Label fetching class function for genlist item classes.*/
-             GenlistItemIconGetFunc   icon_get; /**< Icon fetching class function for genlist item classes. */
-             GenlistItemStateGetFunc  state_get; /**< State fetching class function for genlist item classes. */
-             GenlistItemDelFunc       del; /**< Deletion class function for genlist item classes. */
+             Elm_Genlist_Item_Label_Get_Cb  label_get; /**< Label fetching class function for genlist item classes.*/
+             Elm_Genlist_Item_Icon_Get_Cb   icon_get; /**< Icon fetching class function for genlist item classes. */
+             Elm_Genlist_Item_State_Get_Cb  state_get; /**< State fetching class function for genlist item classes. */
+             Elm_Genlist_Item_Del_Cb        del; /**< Deletion class function for genlist item classes. */
              GenlistItemMovedFunc     moved; // TODO: do not use this. change this to smart callback.
           } func;
         const char                *mode_item_style;
@@ -15796,7 +19238,27 @@ extern "C" {
     * @ingroup Genlist
     */
    EAPI const Elm_Genlist_Item *elm_genlist_mode_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
+   /**
+    * Set reorder mode
+    *
+    * @param obj The genlist object
+    * @param reorder_mode The reorder mode
+    * (EINA_TRUE = on, EINA_FALSE = off)
+    *
+    * @ingroup Genlist
+    */
    EAPI void               elm_genlist_reorder_mode_set(Evas_Object *obj, Eina_Bool reorder_mode) EINA_ARG_NONNULL(1);
+
+   /**
+    * Get the reorder mode
+    *
+    * @param obj The genlist object
+    * @return The reorder mode
+    * (EINA_TRUE = on, EINA_FALSE = off)
+    *
+    * @ingroup Genlist
+    */
    EAPI Eina_Bool          elm_genlist_reorder_mode_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
 
    /**
@@ -21097,273 +24559,11 @@ extern "C" {
     * @ingroup Flipselector
     */
    EAPI double                     elm_flipselector_interval_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-
-   /**
-    * @}
-    */
-
-   /**
-    * @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);
    /**
     * @}
     */
 
    /**
-    * @defgroup Calendar Calendar
-    * @ingroup Elementary
-    *
-    * @image html img/widget/calendar/preview-00.png
-    * @image latex img/widget/calendar/preview-00.eps
-    *
-    * A calendar is a widget that displays a regular calendar, one
-    * month at a time, to the user, and can allows the user to select a date.
-    *
-    * It has support to adding check marks (holidays and checks are supported
-    * by default theme).
-    *
-    * Weekday names and the function used to format month and year to
-    * be displayed can be set, giving more flexibility to this widget.
-    *
-    * Smart callbacks one can register to:
-    * - "changed" - emitted when the user selects a day or changes the
-    *   displayed month, what actually changes the selected day as well.
-    *
-    * Available styles for it:
-    * - @c "default"
-    *
-    * List of examples:
-    * @li @ref calendar_example_01
-    * @li @ref calendar_example_02
-    * @li @ref calendar_example_03
-    * @li @ref calendar_example_04
-    * @li @ref calendar_example_05
-    * @li @ref calendar_example_06
-    */
-
-   /**
     * @addtogroup Calendar
     * @{
     */
@@ -22001,6 +25201,15 @@ extern "C" {
    EAPI void                   elm_diskselector_display_item_num_set(Evas_Object *obj, int num) EINA_ARG_NONNULL(1);
 
    /**
+    * Get the number of items in the diskselector object.
+    *
+    * @param obj The diskselector object.
+    *
+    * @ingroup Diskselector
+    */
+   EAPI int                   elm_diskselector_display_item_num_get(const 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
@@ -22056,7 +25265,7 @@ extern "C" {
     * @param policy_v Vertical scrollbar policy.
     *
     * This sets the scrollbar visibility policy for the given scroller.
-    * #ELM_SCROLLER_POLICY_AUTO means the scrollber is made visible if it
+    * #ELM_SCROLLER_POLICY_AUTO means the scrollbar is made visible if it
     * is needed, and otherwise kept hidden. #ELM_SCROLLER_POLICY_ON turns
     * it on all the time, and #ELM_SCROLLER_POLICY_OFF always keeps it off.
     * This applies respectively for the horizontal and vertical scrollbars.
@@ -22694,8 +25903,6 @@ extern "C" {
     * @ref tutorial_ctxpopup shows the usage of a good deal of the API.
     * @{
     */
-   typedef struct _Elm_Ctxpopup_Item Elm_Ctxpopup_Item;
-
    typedef enum _Elm_Ctxpopup_Direction
      {
         ELM_CTXPOPUP_DIRECTION_DOWN, /**< ctxpopup show appear below clicked
@@ -22706,6 +25913,7 @@ extern "C" {
                                           the clicked area */
         ELM_CTXPOPUP_DIRECTION_UP, /**< ctxpopup show appear above the clicked
                                         area */
+        ELM_CTXPOPUP_DIRECTION_UNKNOWN, /**< ctxpopup does not determine it's direction yet*/
      } Elm_Ctxpopup_Direction;
 
    /**
@@ -22775,48 +25983,48 @@ extern "C" {
     *
     * @see elm_ctxpopup_content_set()
     */
-   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);
+   Elm_Object_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);
    /**
     * @brief Delete the given item in a ctxpopup object.
     *
-    * @param item Ctxpopup item to be deleted
+    * @param it Ctxpopup item to be deleted
     *
     * @see elm_ctxpopup_item_append()
     */
-   EAPI void          elm_ctxpopup_item_del(Elm_Ctxpopup_Item *it) EINA_ARG_NONNULL(1);
+   EAPI void          elm_ctxpopup_item_del(Elm_Object_Item *it) EINA_ARG_NONNULL(1);
    /**
     * @brief Set the ctxpopup item's state as disabled or enabled.
     *
-    * @param item Ctxpopup item to be enabled/disabled
+    * @param it Ctxpopup item to be enabled/disabled
     * @param disabled @c EINA_TRUE to disable it, @c EINA_FALSE to enable it
     *
     * When disabled the item is greyed out to indicate it's state.
     */
-   EAPI void          elm_ctxpopup_item_disabled_set(Elm_Ctxpopup_Item *item, Eina_Bool disabled) EINA_ARG_NONNULL(1);
+   EAPI void          elm_ctxpopup_item_disabled_set(Elm_Object_Item *it, Eina_Bool disabled) EINA_ARG_NONNULL(1);
    /**
     * @brief Get the ctxpopup item's disabled/enabled state.
     *
-    * @param item Ctxpopup item to be enabled/disabled
+    * @param it Ctxpopup item to be enabled/disabled
     * @return disabled @c EINA_TRUE, if disabled, @c EINA_FALSE otherwise
     *
     * @see elm_ctxpopup_item_disabled_set()
     */
-   EAPI Eina_Bool     elm_ctxpopup_item_disabled_get(const Elm_Ctxpopup_Item *item) EINA_ARG_NONNULL(1);
+   EAPI Eina_Bool     elm_ctxpopup_item_disabled_get(const Elm_Object_Item *it) EINA_ARG_NONNULL(1);
    /**
     * @brief Get the icon object for the given ctxpopup item.
     *
-    * @param item Ctxpopup item
+    * @param it Ctxpopup item
     * @return icon object or @c NULL, if the item does not have icon or an error
     * occurred
     *
     * @see elm_ctxpopup_item_append()
     * @see elm_ctxpopup_item_icon_set()
     */
-   EAPI Evas_Object  *elm_ctxpopup_item_icon_get(const Elm_Ctxpopup_Item *item) EINA_ARG_NONNULL(1);
+   EAPI Evas_Object  *elm_ctxpopup_item_icon_get(const Elm_Object_Item *it) EINA_ARG_NONNULL(1);
    /**
     * @brief Sets the side icon associated with the ctxpopup item
     *
-    * @param item Ctxpopup item
+    * @param it Ctxpopup item
     * @param icon Icon object to be set
     *
     * Once the icon object is set, a previously set one will be deleted.
@@ -22825,25 +26033,25 @@ extern "C" {
     *
     * @see elm_ctxpopup_item_append()
     */
-   EAPI void          elm_ctxpopup_item_icon_set(Elm_Ctxpopup_Item *item, Evas_Object *icon) EINA_ARG_NONNULL(1);
+   EAPI void          elm_ctxpopup_item_icon_set(Elm_Object_Item *it, Evas_Object *icon) EINA_ARG_NONNULL(1);
    /**
     * @brief Get the label for the given ctxpopup item.
     *
-    * @param item Ctxpopup item
+    * @param it Ctxpopup item
     * @return label string or @c NULL, if the item does not have label or an
     * error occured
     *
     * @see elm_ctxpopup_item_append()
     * @see elm_ctxpopup_item_label_set()
     */
-   EAPI const char   *elm_ctxpopup_item_label_get(const Elm_Ctxpopup_Item *item) EINA_ARG_NONNULL(1);
+   EAPI const char   *elm_ctxpopup_item_label_get(const Elm_Object_Item *it) EINA_ARG_NONNULL(1);
    /**
     * @brief (Re)set the label on the given ctxpopup item.
     *
-    * @param item Ctxpopup item
+    * @param it Ctxpopup item
     * @param label String to set as label
     */
-   EAPI void          elm_ctxpopup_item_label_set(Elm_Ctxpopup_Item *item, const char *label) EINA_ARG_NONNULL(1);
+   EAPI void          elm_ctxpopup_item_label_set(Elm_Object_Item *it, const char *label) EINA_ARG_NONNULL(1);
    /**
     * @brief Set an elm widget as the content of the ctxpopup.
     *
@@ -22901,6 +26109,17 @@ extern "C" {
     * @see elm_ctxpopup_direction_priority_set() for more information.
     */
    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);
+
+   /**
+    * @brief Get the current direction of a ctxpopup.
+    *
+    * @param obj Ctxpopup object
+    * @return current direction of a ctxpopup
+    *
+    * @warning Once the ctxpopup showed up, the direction would be determined
+    */
+   EAPI Elm_Ctxpopup_Direction elm_ctxpopup_direction_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+
    /**
     * @}
     */
@@ -23963,7 +27182,7 @@ extern "C" {
     * positioned at left.
     *
     * @see elm_segment_control_item_add()
-    * @see elm_segment_control_count_get()
+    * @see elm_segment_control_item_count_get()
     * @see elm_segment_control_item_del()
     *
     * @ingroup SegmentControl
@@ -24175,21 +27394,143 @@ extern "C" {
     * @}
     */
 
+   /**
+    * @defgroup Grid Grid
+    *
+    * The grid is a grid layout widget that lays out a series of children as a
+    * fixed "grid" of widgets using a given percentage of the grid width and
+    * height each using the child object.
+    *
+    * The Grid uses a "Virtual resolution" that is stretched to fill the grid
+    * widgets size itself. The default is 100 x 100, so that means the
+    * position and sizes of children will effectively be percentages (0 to 100)
+    * of the width or height of the grid widget
+    *
+    * @{
+    */
 
+   /**
+    * Add a new grid to the parent
+    *
+    * @param parent The parent object
+    * @return The new object or NULL if it cannot be created
+    *
+    * @ingroup Grid
+    */
    EAPI Evas_Object *elm_grid_add(Evas_Object *parent);
+
+   /**
+    * Set the virtual size of the grid
+    *
+    * @param obj The grid object
+    * @param w The virtual width of the grid
+    * @param h The virtual height of the grid
+    *
+    * @ingroup Grid
+    */
    EAPI void         elm_grid_size_set(Evas_Object *obj, int w, int h);
+
+   /**
+    * Get the virtual size of the grid
+    *
+    * @param obj The grid object
+    * @param w Pointer to integer to store the virtual width of the grid
+    * @param h Pointer to integer to store the virtual height of the grid
+    *
+    * @ingroup Grid
+    */
    EAPI void         elm_grid_size_get(Evas_Object *obj, int *w, int *h);
+
+   /**
+    * Pack child at given position and size
+    *
+    * @param obj The grid object
+    * @param subobj The child to pack
+    * @param x The virtual x coord at which to pack it
+    * @param y The virtual y coord at which to pack it
+    * @param w The virtual width at which to pack it
+    * @param h The virtual height at which to pack it
+    *
+    * @ingroup Grid
+    */
    EAPI void         elm_grid_pack(Evas_Object *obj, Evas_Object *subobj, int x, int y, int w, int h);
+
+   /**
+    * Unpack a child from a grid object
+    *
+    * @param obj The grid object
+    * @param subobj The child to unpack
+    *
+    * @ingroup Grid
+    */
    EAPI void         elm_grid_unpack(Evas_Object *obj, Evas_Object *subobj);
+
+   /**
+    * Faster way to remove all child objects from a grid object.
+    *
+    * @param obj The grid object
+    * @param clear If true, it will delete just removed children
+    *
+    * @ingroup Grid
+    */
    EAPI void         elm_grid_clear(Evas_Object *obj, Eina_Bool clear);
+
+   /**
+    * Set packing of an existing child at to position and size
+    *
+    * @param subobj The child to set packing of
+    * @param x The virtual x coord at which to pack it
+    * @param y The virtual y coord at which to pack it
+    * @param w The virtual width at which to pack it
+    * @param h The virtual height at which to pack it
+    *
+    * @ingroup Grid
+    */
    EAPI void         elm_grid_pack_set(Evas_Object *subobj, int x, int y, int w, int h);
+
+   /**
+    * get packing of a child
+    *
+    * @param subobj The child to query
+    * @param x Pointer to integer to store the virtual x coord
+    * @param y Pointer to integer to store the virtual y coord
+    * @param w Pointer to integer to store the virtual width
+    * @param h Pointer to integer to store the virtual height
+    *
+    * @ingroup Grid
+    */
    EAPI void         elm_grid_pack_get(Evas_Object *subobj, int *x, int *y, int *w, int *h);
 
+   /**
+    * @}
+    */
 
    EAPI Evas_Object *elm_factory_add(Evas_Object *parent);
    EAPI void         elm_factory_content_set(Evas_Object *obj, Evas_Object *content);
    EAPI Evas_Object *elm_factory_content_get(const Evas_Object *obj);
-   
+   EAPI void         elm_factory_maxmin_mode_set(Evas_Object *obj, Eina_Bool enabled);
+   EAPI Eina_Bool    elm_factory_maxmin_mode_get(const Evas_Object *obj);
+   EAPI void         elm_factory_maxmin_reset_set(Evas_Object *obj);
+
+   /**
+    * @defgroup Video Video
+    *
+    * This object display an player that let you control an Elm_Video
+    * object. It take care of updating it's content according to what is
+    * going on inside the Emotion object. It does activate the remember
+    * function on the linked Elm_Video object.
+    *
+    * Signals that you can add callback for are :
+    *
+    * "forward,clicked" - the user clicked the forward button.
+    * "info,clicked" - the user clicked the info button.
+    * "next,clicked" - the user clicked the next button.
+    * "pause,clicked" - the user clicked the pause button.
+    * "play,clicked" - the user clicked the play button.
+    * "prev,clicked" - the user clicked the prev button.
+    * "rewind,clicked" - the user clicked the rewind button.
+    * "stop,clicked" - the user clicked the stop button.
+    */
    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);
@@ -24213,23 +27554,175 @@ extern "C" {
    EAPI Evas_Object *elm_player_add(Evas_Object *parent);
    EAPI void elm_player_video_set(Evas_Object *player, Evas_Object *video);
 
-  /* naviframe */
+   /**
+    * @defgroup Naviframe Naviframe
+    *
+    * @brief Naviframe is a kind of view manager for the applications.
+    *
+    * Naviframe provides functions to switch different pages with stack
+    * mechanism. It means if one page(item) needs to be changed to the new one,
+    * then naviframe would push the new page to it's internal stack. Of course,
+    * it can be back to the previous page by popping the top page. Naviframe
+    * provides some transition effect while the pages are switching (same as
+    * pager).
+    *
+    * Since each item could keep the different styles, users could keep the
+    * same look & feel for the pages or different styles for the items in it's
+    * application.
+    *
+    * Signals that you can add callback for are:
+    *
+    * @li "transition,finished" - When the transition is finished in changing
+    *     the item
+    * @li "title,clicked" - User clicked title area
+    *
+    * Default contents parts for the naviframe items that you can use for are:
+    *
+    * @li "elm.swallow.content" - The main content of the page
+    * @li "elm.swallow.prev_btn" - The button to go to the previous page
+    * @li "elm.swallow.next_btn" - The button to go to the next page
+    *
+    * Default text parts of naviframe items that you can be used are:
+    *
+    * @li "elm.text.title" - The title label in the title area
+    *
+    * @ref tutorial_naviframe gives a good overview of the usage of the API.
+    * @{
+    */
+   /**
+    * @brief Add a new Naviframe object to the parent.
+    *
+    * @param parent Parent object
+    * @return New object or @c NULL, if it cannot be created
+    */
    EAPI Evas_Object        *elm_naviframe_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
+   /**
+    * @brief Push a new item to the top of the naviframe stack (and show it).
+    *
+    * @param obj The naviframe object
+    * @param title_label The label in the title area. The name of the title
+    *        label part is "elm.text.title"
+    * @param prev_btn The button to go to the previous item. If it is NULL,
+    *        then naviframe will create a back button automatically. The name of
+    *        the prev_btn part is "elm.swallow.prev_btn"
+    * @param next_btn The button to go to the next item. Or It could be just an
+    *        extra function button. The name of the next_btn part is
+    *        "elm.swallow.next_btn"
+    * @param content The main content object. The name of content part is
+    *        "elm.swallow.content"
+    * @param item_style The current item style name. @c NULL would be default.
+    * @return The created item or @c NULL upon failure.
+    *
+    * The item pushed becomes one page of the naviframe, this item will be
+    * deleted when it is popped.
+    *
+    * @see also elm_naviframe_item_style_set()
+    *
+    * The following styles are available for this item:
+    * @li @c "default"
+    */
    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);
+   /**
+    * @brief Pop an item that is on top of the stack
+    *
+    * @param obj The naviframe object
+    * @return @c NULL or the content object(if the
+    *         elm_naviframe_content_preserve_on_pop_get is true).
+    *
+    * This pops an item that is on the top(visible) of the naviframe, makes it
+    * disappear, then deletes the item. The item that was underneath it on the
+    * stack will become visible.
+    *
+    * @see also elm_naviframe_content_preserve_on_pop_get()
+    */
    EAPI Evas_Object        *elm_naviframe_item_pop(Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * @brief Pop the items between the top and the above one on the given item.
+    *
+    * @param it The naviframe item
+    */
+   EAPI void                elm_naviframe_item_pop_to(Elm_Object_Item *it) EINA_ARG_NONNULL(1);
+   /**
+    * @brief preserve the content objects when items are popped.
+    *
+    * @param obj The naviframe object
+    * @param preserve Enable the preserve mode if EINA_TRUE, disable otherwise
+    *
+    * @see also elm_naviframe_content_preserve_on_pop_get()
+    */
    EAPI void                elm_naviframe_content_preserve_on_pop_set(Evas_Object *obj, Eina_Bool preserve) EINA_ARG_NONNULL(1);
+   /**
+    * @brief Get a value whether preserve mode is enabled or not.
+    *
+    * @param obj The naviframe object
+    * @return If @c EINA_TRUE, preserve mode is enabled
+    *
+    * @see also elm_naviframe_content_preserve_on_pop_set()
+    */
    EAPI Eina_Bool           elm_naviframe_content_preserve_on_pop_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
-   EAPI void                elm_naviframe_item_title_label_set(Elm_Object_Item *it, const char *label) EINA_ARG_NONNULL(1);
-   EAPI const char         *elm_naviframe_item_title_label_get(const Elm_Object_Item *it) EINA_ARG_NONNULL(1);
-   EAPI void                elm_naviframe_item_subtitle_label_set(Elm_Object_Item *it, const char *label) EINA_ARG_NONNULL(1);
-   EAPI const char         *elm_naviframe_item_subtitle_label_get(const Elm_Object_Item *it) EINA_ARG_NONNULL(1);
+   /**
+    * @brief Get a top item on the naviframe stack
+    *
+    * @param obj The naviframe object
+    * @return The top item on the naviframe stack or @c NULL, if the stack is
+    *         empty
+    */
    EAPI Elm_Object_Item    *elm_naviframe_top_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * @brief Get a bottom item on the naviframe stack
+    *
+    * @param obj The naviframe object
+    * @return The bottom item on the naviframe stack or @c NULL, if the stack is
+    *         empty
+    */
    EAPI Elm_Object_Item    *elm_naviframe_bottom_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
+   /**
+    * @brief Set an item style
+    *
+    * @param obj The naviframe item
+    * @param item_style The current item style name. @c NULL would be default
+    *
+    * The following styles are available for this item:
+    * @li @c "default"
+    *
+    * @see also elm_naviframe_item_style_get()
+    */
    EAPI void                elm_naviframe_item_style_set(Elm_Object_Item *it, const char *item_style) EINA_ARG_NONNULL(1);
+   /**
+    * @brief Get an item style
+    *
+    * @param obj The naviframe item
+    * @return The current item style name
+    *
+    * @see also elm_naviframe_item_style_set()
+    */
    EAPI const char         *elm_naviframe_item_style_get(const Elm_Object_Item *it) EINA_ARG_NONNULL(1);
+   /**
+    * @brief Show/Hide the title area
+    *
+    * @param it The naviframe item
+    * @param visible If @c EINA_TRUE, title area will be visible, hidden
+    *        otherwise
+    *
+    * When the title area is invisible, then the controls would be hidden so as     * to expand the content area to full-size.
+    *
+    * @see also elm_naviframe_item_title_visible_get()
+    */
    EAPI void                elm_naviframe_item_title_visible_set(Elm_Object_Item *it, Eina_Bool visible) EINA_ARG_NONNULL(1);
+   /**
+    * @brief Get a value whether title area is visible or not.
+    *
+    * @param it The naviframe item
+    * @return If @c EINA_TRUE, title area is visible
+    *
+    * @see also elm_naviframe_item_title_visible_set()
+    */
    EAPI Eina_Bool           elm_naviframe_item_title_visible_get(const Elm_Object_Item *it) EINA_ARG_NONNULL(1);
 
+   /**
+    * @}
+    */
+
 #ifdef __cplusplus
 }
 #endif