Upon reviewing the elm_glview, I've realized a few issues and mistakes that i've
[framework/uifw/elementary.git] / src / lib / Elementary.h.in
1 /*
2  *
3  * vim:ts=8:sw=3:sts=3:expandtab:cino=>5n-3f0^-2{2(0W1st0
4  */
5
6 /**
7 @file elementary.dox
8 @brief Elementary Widget Library
9 */
10
11 /**
12 @mainpage Elementary
13 @image html  elementary.png
14 @version @PACKAGE_VERSION@
15 @author Carsten Haitzler <raster@@rasterman.com>
16 @author Gustavo Sverzut Barbieri <barbieri@@profusion.mobi>
17 @author Cedric Bail <cedric.bail@@free.fr>
18 @author Vincent Torri <vtorri@@univ-evry.fr>
19 @author Daniel Kolesa <quaker66@@gmail.com>
20 @author Jaime Thomas <avi.thomas@@gmail.com>
21 @author Swisscom - http://www.swisscom.ch/
22 @author Christopher Michael <devilhorns@@comcast.net>
23 @author Marco Trevisan (Treviño) <mail@@3v1n0.net>
24 @author Michael Bouchaud <michael.bouchaud@@gmail.com>
25 @author Jonathan Atton (Watchwolf) <jonathan.atton@@gmail.com>
26 @author Brian Wang <brian.wang.0721@@gmail.com>
27 @author Mike Blumenkrantz (zmike) <mike@@zentific.com>
28 @author Samsung Electronics <tbd>
29 @author Samsung SAIT <tbd>
30 @author Brett Nash <nash@@nash.id.au>
31 @author Bruno Dilly <bdilly@@profusion.mobi>
32 @author Rafael Fonseca <rfonseca@@profusion.mobi>
33 @author Chuneon Park <hermet@@hermet.pe.kr>
34 @author Woohyun Jung <wh0705.jung@@samsung.com>
35 @author Jaehwan Kim <jae.hwan.kim@@samsung.com>
36 @author Wonguk Jeong <wonguk.jeong@@samsung.com>
37 @author Leandro A. F. Pereira <leandro@@profusion.mobi>
38 @author Helen Fornazier <helen.fornazier@@profusion.mobi>
39 @author Gustavo Lima Chaves <glima@@profusion.mobi>
40 @author Fabiano Fidêncio <fidencio@@profusion.mobi>
41 @author Tiago Falcão <tiago@@profusion.mobi>
42 @author Otavio Pontes <otavio@@profusion.mobi>
43 @author Viktor Kojouharov <vkojouharov@@gmail.com>
44 @author Daniel Juyung Seo (SeoZ) <juyung.seo@@samsung.com> <seojuyung2@@gmail.com>
45 @author Sangho Park <sangho.g.park@@samsung.com> <gouache95@@gmail.com>
46 @author Rajeev Ranjan (Rajeev) <rajeev.r@@samsung.com> <rajeev.jnnce@@gmail.com>
47 @author Seunggyun Kim <sgyun.kim@@samsung.com> <tmdrbs@@gmail.com>
48 @author Sohyun Kim <anna1014.kim@@samsung.com> <sohyun.anna@@gmail.com>
49 @author Jihoon Kim <jihoon48.kim@@samsung.com>
50 @author Jeonghyun Yun (arosis) <jh0506.yun@@samsung.com>
51 @author Tom Hacohen <tom@@stosb.com>
52 @author Aharon Hillel <a.hillel@@partner.samsung.com>
53 @author Jonathan Atton (Watchwolf) <jonathan.atton@@gmail.com>
54 @author Shinwoo Kim <kimcinoo@@gmail.com>
55 @author Govindaraju SM <govi.sm@@samsung.com> <govism@@gmail.com>
56 @author Prince Kumar Dubey <prince.dubey@@samsung.com> <prince.dubey@@gmail.com>
57 @date 2008-2011
58
59 @section intro What is Elementary?
60
61 This is a VERY SIMPLE toolkit. It is not meant for writing extensive desktop
62 applications (yet). Small simple ones with simple needs.
63
64 It is meant to make the programmers work almost brainless but give them lots
65 of flexibility.
66
67 License: LGPL v2 (see COPYING in the base of Elementary's source). This
68 applies to all files in the source here.
69
70 Acknowledgements: There is a lot that goes into making a widget set, and
71 they don't happen out of nothing. It's like trying to make everyone
72 everywhere happy, regardless of age, gender, race or nationality - and
73 that is really tough. So thanks to people and organisations behind this,
74 aslisted in the Authors section above.
75
76 @verbatim
77 Pants
78 @endverbatim
79 */
80
81 #ifndef ELEMENTARY_H
82 #define ELEMENTARY_H
83
84 /**
85  * @file Elementary.h
86  * @brief Elementary's API
87  *
88  * Elementary API.
89  */
90
91 @ELM_UNIX_DEF@ ELM_UNIX
92 @ELM_WIN32_DEF@ ELM_WIN32
93 @ELM_WINCE_DEF@ ELM_WINCE
94 @ELM_EDBUS_DEF@ ELM_EDBUS
95 @ELM_EFREET_DEF@ ELM_EFREET
96 @ELM_ETHUMB_DEF@ ELM_ETHUMB
97 @ELM_DEBUG_DEF@ ELM_DEBUG
98 @ELM_ALLOCA_H_DEF@ ELM_ALLOCA_H
99 @ELM_LIBINTL_H_DEF@ ELM_LIBINTL_H
100
101 /* Standard headers for standard system calls etc. */
102 #include <stdio.h>
103 #include <stdlib.h>
104 #include <unistd.h>
105 #include <string.h>
106 #include <sys/types.h>
107 #include <sys/stat.h>
108 #include <sys/time.h>
109 #include <sys/param.h>
110 #include <dlfcn.h>
111 #include <math.h>
112 #include <fnmatch.h>
113 #include <limits.h>
114 #include <ctype.h>
115 #include <time.h>
116 #include <dirent.h>
117 #include <pwd.h>
118 #include <errno.h>
119
120 #ifdef ELM_UNIX
121 # include <locale.h>
122 # ifdef ELM_LIBINTL_H
123 #  include <libintl.h>
124 # endif
125 # include <signal.h>
126 # include <grp.h>
127 # include <glob.h>
128 #endif
129
130 #ifdef ELM_ALLOCA_H
131 # include <alloca.h>
132 #endif
133
134 #if defined (ELM_WIN32) || defined (ELM_WINCE)
135 # include <malloc.h>
136 # ifndef alloca
137 #  define alloca _alloca
138 # endif
139 #endif
140
141
142 /* EFL headers */
143 #include <Eina.h>
144 #include <Eet.h>
145 #include <Evas.h>
146 #include <Evas_GL.h>
147 #include <Ecore.h>
148 #include <Ecore_Evas.h>
149 #include <Ecore_File.h>
150 #include <Ecore_IMF.h>
151 #include <Edje.h>
152
153 #ifdef ELM_EDBUS
154 # include <E_DBus.h>
155 #endif
156
157 #ifdef ELM_EFREET
158 # include <Efreet.h>
159 # include <Efreet_Mime.h>
160 # include <Efreet_Trash.h>
161 #endif
162
163 #ifdef ELM_ETHUMB
164 # include <Ethumb_Client.h>
165 #endif
166
167 #ifdef EAPI
168 # undef EAPI
169 #endif
170
171 #ifdef _WIN32
172 # ifdef ELEMENTARY_BUILD
173 #  ifdef DLL_EXPORT
174 #   define EAPI __declspec(dllexport)
175 #  else
176 #   define EAPI
177 #  endif /* ! DLL_EXPORT */
178 # else
179 #  define EAPI __declspec(dllimport)
180 # endif /* ! EFL_EVAS_BUILD */
181 #else
182 # ifdef __GNUC__
183 #  if __GNUC__ >= 4
184 #   define EAPI __attribute__ ((visibility("default")))
185 #  else
186 #   define EAPI
187 #  endif
188 # else
189 #  define EAPI
190 # endif
191 #endif /* ! _WIN32 */
192
193
194 /* allow usage from c++ */
195 #ifdef __cplusplus
196 extern "C" {
197 #endif
198
199 #define ELM_VERSION_MAJOR @VMAJ@
200 #define ELM_VERSION_MINOR @VMIN@
201
202    typedef struct _Elm_Version
203      {
204         int major;
205         int minor;
206         int micro;
207         int revision;
208      } Elm_Version;
209
210    EAPI extern Elm_Version *elm_version;
211
212 /* handy macros */
213 #define ELM_RECTS_INTERSECT(x, y, w, h, xx, yy, ww, hh) (((x) < ((xx) + (ww))) && ((y) < ((yy) + (hh))) && (((x) + (w)) > (xx)) && (((y) + (h)) > (yy)))
214 #define ELM_PI 3.14159265358979323846
215
216   /**
217    * Defines couple of standard Evas_Object layers to be used
218    * with evas_object_layer_set().
219    *
220    * @note whenever extending with new values, try to keep some padding
221    *       to siblings so there is room for further extensions.
222    */
223   typedef enum _Elm_Object_Layer
224     {
225        ELM_OBJECT_LAYER_BACKGROUND = EVAS_LAYER_MIN + 64, /**< where to place backgrounds */
226        ELM_OBJECT_LAYER_DEFAULT = 0, /**< Evas_Object default layer (and thus for Elementary) */
227        ELM_OBJECT_LAYER_FOCUS = EVAS_LAYER_MAX - 128, /**< where focus object visualization is */
228        ELM_OBJECT_LAYER_TOOLTIP = EVAS_LAYER_MAX - 64, /**< where to show tooltips */
229        ELM_OBJECT_LAYER_CURSOR = EVAS_LAYER_MAX - 32, /**< where to show cursors */
230        ELM_OBJECT_LAYER_LAST /**< last layer known by Elementary */
231     } Elm_Object_Layer;
232
233 /**************************************************************************/
234    EAPI extern int ELM_ECORE_EVENT_ETHUMB_CONNECT;
235
236    /* Objects */
237    /**
238     * Emitted when policy value changed.
239     */
240    EAPI extern int ELM_EVENT_POLICY_CHANGED;
241    typedef struct _Elm_Event_Policy_Changed
242      {
243         unsigned int policy;
244         int          new_value;
245         int          old_value;
246      } Elm_Event_Policy_Changed;
247
248    /**
249     * Policy identifiers.
250     *
251     * @see elm_policy_set()
252     */
253    typedef enum _Elm_Policy
254      {
255         ELM_POLICY_QUIT, /**< when should quit application automatically.
256                           * @see Elm_Policy_Quit.
257                           */
258         ELM_POLICY_LAST
259      } Elm_Policy;
260
261    typedef enum _Elm_Policy_Quit
262      {
263         ELM_POLICY_QUIT_NONE = 0, /**< never quit application automatically */
264         ELM_POLICY_QUIT_LAST_WINDOW_CLOSED /**< quit when last window is closed */
265      } Elm_Policy_Quit;
266
267    typedef enum _Elm_Focus_Direction
268      {
269         ELM_FOCUS_PREVIOUS,
270         ELM_FOCUS_NEXT
271      } Elm_Focus_Direction;
272
273    typedef enum _Elm_Text_Format
274      {
275         ELM_TEXT_FORMAT_PLAIN_UTF8,
276         ELM_TEXT_FORMAT_MARKUP_UTF8
277      } Elm_Text_Format;
278
279    /**
280     * Line wrapping types.
281     */
282    typedef enum _Elm_Wrap_Type
283      {
284         ELM_WRAP_NONE = 0, /**< No wrap - value is zero */
285         ELM_WRAP_CHAR, /**< Char wrap - wrap between graphmes */
286         ELM_WRAP_WORD, /**< Word wrap - wrap in allowed wrapping points (as defined in the unicode standard) */
287         ELM_WRAP_MIXED, /**< Mixed wrap - Word wrap, and if that fails, char wrap. */
288         ELM_WRAP_LAST
289      } Elm_Wrap_Type;
290
291
292    /**
293     * Called back when a widget's tooltip is activated and needs content.
294     * @param data user-data given to elm_object_tooltip_content_cb_set()
295     * @param obj owner widget.
296     */
297    typedef Evas_Object *(*Elm_Tooltip_Content_Cb) (void *data, Evas_Object *obj);
298
299    /**
300     * Called back when a widget's item tooltip is activated and needs content.
301     * @param data user-data given to elm_object_tooltip_content_cb_set()
302     * @param obj owner widget.
303     * @param item context dependent item. As an example, if tooltip was
304     *        set on Elm_List_Item, then it is of this type.
305     */
306    typedef Evas_Object *(*Elm_Tooltip_Item_Content_Cb) (void *data, Evas_Object *obj, void *item);
307
308    typedef Eina_Bool (*Elm_Event_Cb) (void *data, Evas_Object *obj, Evas_Object *src, Evas_Callback_Type type, void *event_info);
309
310 #ifndef ELM_LIB_QUICKLAUNCH
311 #define ELM_MAIN() int main(int argc, char **argv) {elm_init(argc, argv); return elm_main(argc, argv);}
312 #else
313 #define ELM_MAIN() int main(int argc, char **argv) {return elm_quicklaunch_fallback(argc, argv);}
314 #endif
315
316 /**************************************************************************/
317    /* General calls */
318    EAPI int          elm_init(int argc, char **argv);
319    EAPI int          elm_shutdown(void);
320    EAPI void         elm_run(void);
321    EAPI void         elm_exit(void);
322
323    EAPI void         elm_app_info_set(void *mainfunc, const char *dom, const char *checkfile);
324    EAPI void         elm_app_compile_bin_dir_set(const char *dir);
325    EAPI void         elm_app_compile_lib_dir_set(const char *dir);
326    EAPI void         elm_app_compile_data_dir_set(const char *dir);
327    EAPI void         elm_app_compile_locale_set(const char *dir);
328    EAPI const char  *elm_app_prefix_dir_get(void);
329    EAPI const char  *elm_app_bin_dir_get(void);
330    EAPI const char  *elm_app_lib_dir_get(void);
331    EAPI const char  *elm_app_data_dir_get(void);
332    EAPI const char  *elm_app_locale_dir_get(void);
333
334    EAPI void         elm_quicklaunch_mode_set(Eina_Bool ql_on);
335    EAPI Eina_Bool    elm_quicklaunch_mode_get(void);
336    EAPI int          elm_quicklaunch_init(int argc, char **argv);
337    EAPI int          elm_quicklaunch_sub_init(int argc, char **argv);
338    EAPI int          elm_quicklaunch_sub_shutdown(void);
339    EAPI int          elm_quicklaunch_shutdown(void);
340    EAPI void         elm_quicklaunch_seed(void);
341    EAPI Eina_Bool    elm_quicklaunch_prepare(int argc, char **argv);
342    EAPI Eina_Bool    elm_quicklaunch_fork(int argc, char **argv, char *cwd, void (postfork_func) (void *data), void *postfork_data);
343    EAPI void         elm_quicklaunch_cleanup(void);
344    EAPI int          elm_quicklaunch_fallback(int argc, char **argv);
345    EAPI char        *elm_quicklaunch_exe_path_get(const char *exe);
346
347    EAPI Eina_Bool    elm_need_efreet(void);
348    EAPI Eina_Bool    elm_need_e_dbus(void);
349    EAPI Eina_Bool    elm_need_ethumb(void);
350
351    EAPI Eina_Bool    elm_policy_set(unsigned int policy, int value);
352    EAPI int          elm_policy_get(unsigned int policy);
353
354    EAPI void         elm_all_flush(void);
355    EAPI int          elm_cache_flush_interval_get(void);
356    EAPI void         elm_cache_flush_interval_set(int size);
357    EAPI void         elm_cache_flush_interval_all_set(int size);
358    EAPI Eina_Bool    elm_cache_flush_enabled_get(void);
359    EAPI void         elm_cache_flush_enabled_set(Eina_Bool enabled);
360    EAPI void         elm_cache_flush_enabled_all_set(Eina_Bool enabled);
361    EAPI int          elm_font_cache_get(void);
362    EAPI void         elm_font_cache_set(int size);
363    EAPI void         elm_font_cache_all_set(int size);
364    EAPI int          elm_image_cache_get(void);
365    EAPI void         elm_image_cache_set(int size);
366    EAPI void         elm_image_cache_all_set(int size);
367    EAPI int          elm_edje_file_cache_get(void);
368    EAPI void         elm_edje_file_cache_set(int size);
369    EAPI void         elm_edje_file_cache_all_set(int size);
370    EAPI int          elm_edje_collection_cache_get(void);
371    EAPI void         elm_edje_collection_cache_set(int size);
372    EAPI void         elm_edje_collection_cache_all_set(int size);
373
374    EAPI void         elm_object_scale_set(Evas_Object *obj, double scale) EINA_ARG_NONNULL(1);
375    EAPI double       elm_object_scale_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
376    EAPI Eina_Bool    elm_object_mirrored_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
377    EAPI void         elm_object_mirrored_set(Evas_Object *obj, Eina_Bool mirrored) EINA_ARG_NONNULL(1);
378    EAPI Eina_Bool    elm_object_mirrored_automatic_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
379    EAPI void         elm_object_mirrored_automatic_set(Evas_Object *obj, Eina_Bool automatic) EINA_ARG_NONNULL(1);
380    EAPI void         elm_object_style_set(Evas_Object *obj, const char *style) EINA_ARG_NONNULL(1);
381    EAPI const char  *elm_object_style_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
382    EAPI void         elm_object_disabled_set(Evas_Object *obj, Eina_Bool disabled) EINA_ARG_NONNULL(1);
383    EAPI Eina_Bool    elm_object_disabled_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
384
385    EAPI Eina_Bool    elm_object_widget_check(const Evas_Object *obj) EINA_ARG_NONNULL(1);
386    EAPI Evas_Object *elm_object_parent_widget_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
387    EAPI Evas_Object *elm_object_top_widget_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
388    EAPI const char  *elm_object_widget_type_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
389
390    EAPI double       elm_scale_get(void);
391    EAPI void         elm_scale_set(double scale);
392    EAPI void         elm_scale_all_set(double scale);
393
394    EAPI Eina_Bool    elm_mirrored_get(void);
395    EAPI void         elm_mirrored_set(Eina_Bool mirrored);
396
397    EAPI Eina_Bool    elm_config_save(void);
398    EAPI void         elm_config_reload(void);
399
400    EAPI const char  *elm_profile_current_get(void);
401    EAPI const char  *elm_profile_dir_get(const char *profile, Eina_Bool is_user);
402    EAPI void         elm_profile_dir_free(const char *p_dir);
403    EAPI Eina_List   *elm_profile_list_get(void);
404    EAPI void         elm_profile_list_free(Eina_List *l);
405    EAPI void         elm_profile_set(const char *profile);
406    EAPI void         elm_profile_all_set(const char *profile);
407
408    EAPI const char  *elm_engine_current_get(void);
409    EAPI void         elm_engine_set(const char *engine);
410
411   typedef struct _Elm_Text_Class
412     {
413        const char *name;
414        const char *desc;
415     } Elm_Text_Class;
416
417   typedef struct _Elm_Font_Overlay
418     {
419        const char     *text_class;
420        const char     *font;
421        Evas_Font_Size  size;
422     } Elm_Font_Overlay;
423
424   typedef struct _Elm_Font_Properties
425     {
426        const char *name;
427        Eina_List  *styles;
428     } Elm_Font_Properties;
429
430    EAPI const Eina_List     *elm_text_classes_list_get(void);
431    EAPI void                 elm_text_classes_list_free(const Eina_List *list);
432
433    EAPI const Eina_List     *elm_font_overlay_list_get(void);
434    EAPI void                 elm_font_overlay_set(const char *text_class, const char *font, Evas_Font_Size size);
435    EAPI void                 elm_font_overlay_unset(const char *text_class);
436    EAPI void                 elm_font_overlay_apply(void);
437    EAPI void                 elm_font_overlay_all_apply(void);
438
439    EAPI Elm_Font_Properties *elm_font_properties_get(const char *font) EINA_ARG_NONNULL(1);
440    EAPI void                 elm_font_properties_free(Elm_Font_Properties *efp) EINA_ARG_NONNULL(1);
441    EAPI const char          *elm_font_fontconfig_name_get(const char *name, const char *style) EINA_ARG_NONNULL(1);
442    EAPI void                 elm_font_fontconfig_name_free(const char *name) EINA_ARG_NONNULL(1);
443    EAPI Eina_Hash           *elm_font_available_hash_add(Eina_List *list);
444    EAPI void                 elm_font_available_hash_del(Eina_Hash *hash);
445
446    EAPI Evas_Coord       elm_finger_size_get(void);
447    EAPI void             elm_finger_size_set(Evas_Coord size);
448    EAPI void             elm_finger_size_all_set(Evas_Coord size);
449
450    EAPI Eina_Bool        elm_focus_highlight_enabled_get(void);
451    EAPI void             elm_focus_highlight_enabled_set(Eina_Bool enable);
452    EAPI Eina_Bool        elm_focus_highlight_animate_get(void);
453    EAPI void             elm_focus_highlight_animate_set(Eina_Bool animate);
454
455    EAPI Eina_Bool        elm_object_focus_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
456    EAPI void             elm_object_focus(Evas_Object *obj) EINA_ARG_NONNULL(1);
457    EAPI void             elm_object_unfocus(Evas_Object *obj) EINA_ARG_NONNULL(1);
458    EAPI void             elm_object_focus_allow_set(Evas_Object *obj, Eina_Bool enable) EINA_ARG_NONNULL(1);
459    EAPI Eina_Bool        elm_object_focus_allow_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
460
461    EAPI void             elm_object_focus_custom_chain_set(Evas_Object *obj, Eina_List *objs) EINA_ARG_NONNULL(1);
462    EAPI void             elm_object_focus_custom_chain_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
463    EAPI const Eina_List *elm_object_focus_custom_chain_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
464    EAPI void             elm_object_focus_custom_chain_append(Evas_Object *obj, Evas_Object *child, Evas_Object *relative_child) EINA_ARG_NONNULL(1, 2);
465    EAPI void             elm_object_focus_custom_chain_prepend(Evas_Object *obj, Evas_Object *child, Evas_Object *relative_child) EINA_ARG_NONNULL(1, 2);
466    EAPI void             elm_object_focus_cycle(Evas_Object *obj, Elm_Focus_Direction dir) EINA_ARG_NONNULL(1);
467    EAPI void             elm_object_focus_direction_go(Evas_Object *obj, int x, int y) EINA_ARG_NONNULL(1);
468
469    EAPI Eina_Bool        elm_scroll_bounce_enabled_get(void);
470    EAPI void             elm_scroll_bounce_enabled_set(Eina_Bool enabled);
471    EAPI void             elm_scroll_bounce_enabled_all_set(Eina_Bool enabled);
472    EAPI double           elm_scroll_bounce_friction_get(void);
473    EAPI void             elm_scroll_bounce_friction_set(double friction);
474    EAPI void             elm_scroll_bounce_friction_all_set(double friction);
475    EAPI double           elm_scroll_page_scroll_friction_get(void);
476    EAPI void             elm_scroll_page_scroll_friction_set(double friction);
477    EAPI void             elm_scroll_page_scroll_friction_all_set(double friction);
478    EAPI double           elm_scroll_bring_in_scroll_friction_get(void);
479    EAPI void             elm_scroll_bring_in_scroll_friction_set(double friction);
480    EAPI void             elm_scroll_bring_in_scroll_friction_all_set(double friction);
481    EAPI double           elm_scroll_zoom_friction_get(void);
482    EAPI void             elm_scroll_zoom_friction_set(double friction);
483    EAPI void             elm_scroll_zoom_friction_all_set(double friction);
484    EAPI Eina_Bool        elm_scroll_thumbscroll_enabled_get(void);
485    EAPI void             elm_scroll_thumbscroll_enabled_set(Eina_Bool enabled);
486    EAPI void             elm_scroll_thumbscroll_enabled_all_set(Eina_Bool enabled);
487    EAPI unsigned int     elm_scroll_thumbscroll_threshold_get(void);
488    EAPI void             elm_scroll_thumbscroll_threshold_set(unsigned int threshold);
489    EAPI void             elm_scroll_thumbscroll_threshold_all_set(unsigned int threshold);
490    EAPI double           elm_scroll_thumbscroll_momentum_threshold_get(void);
491    EAPI void             elm_scroll_thumbscroll_momentum_threshold_set(double threshold);
492    EAPI void             elm_scroll_thumbscroll_momentum_threshold_all_set(double threshold);
493    EAPI double           elm_scroll_thumbscroll_friction_get(void);
494    EAPI void             elm_scroll_thumbscroll_friction_set(double friction);
495    EAPI void             elm_scroll_thumbscroll_friction_all_set(double friction);
496    EAPI double           elm_scroll_thumbscroll_border_friction_get(void);
497    EAPI void             elm_scroll_thumbscroll_border_friction_set(double friction);
498    EAPI void             elm_scroll_thumbscroll_border_friction_all_set(double friction);
499
500    EAPI void             elm_object_scroll_hold_push(Evas_Object *obj) EINA_ARG_NONNULL(1);
501    EAPI void             elm_object_scroll_hold_pop(Evas_Object *obj) EINA_ARG_NONNULL(1);
502    EAPI void             elm_object_scroll_freeze_push(Evas_Object *obj) EINA_ARG_NONNULL(1);
503    EAPI void             elm_object_scroll_freeze_pop(Evas_Object *obj) EINA_ARG_NONNULL(1);
504    EAPI void             elm_object_scroll_lock_x_set(Evas_Object *obj, Eina_Bool lock) EINA_ARG_NONNULL(1);
505    EAPI void             elm_object_scroll_lock_y_set(Evas_Object *obj, Eina_Bool lock) EINA_ARG_NONNULL(1);
506    EAPI Eina_Bool        elm_object_scroll_lock_x_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
507    EAPI Eina_Bool        elm_object_scroll_lock_y_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
508
509    EAPI void             elm_object_signal_emit(Evas_Object *obj, const char *emission, const char *source) EINA_ARG_NONNULL(1);
510    EAPI void             elm_object_signal_callback_add(Evas_Object *obj, const char *emission, const char *source, void (*func) (void *data, Evas_Object *o, const char *emission, const char *source), void *data) EINA_ARG_NONNULL(1, 4);
511    EAPI void            *elm_object_signal_callback_del(Evas_Object *obj, const char *emission, const char *source, void (*func) (void *data, Evas_Object *o, const char *emission, const char *source)) EINA_ARG_NONNULL(1, 4);
512
513    EAPI void             elm_object_event_callback_add(Evas_Object *obj, Elm_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
514    EAPI void            *elm_object_event_callback_del(Evas_Object *obj, Elm_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
515
516    EAPI void             elm_coords_finger_size_adjust(int times_w, Evas_Coord *w, int times_h, Evas_Coord *h);
517
518    EAPI double           elm_longpress_timeout_get(void);
519    EAPI void             elm_longpress_timeout_set(double longpress_timeout);
520
521    /* debug
522     * don't use it unless you are sure
523     */
524    EAPI void             elm_object_tree_dump(const Evas_Object *top);
525    EAPI void             elm_object_tree_dot_dump(const Evas_Object *top, const char *file);
526
527
528    /* theme */
529    typedef struct _Elm_Theme Elm_Theme;
530
531    EAPI Elm_Theme       *elm_theme_new(void);
532    EAPI void             elm_theme_free(Elm_Theme *th);
533    EAPI void             elm_theme_copy(Elm_Theme *th, Elm_Theme *thdst);
534    EAPI void             elm_theme_ref_set(Elm_Theme *th, Elm_Theme *thref);
535    EAPI Elm_Theme       *elm_theme_ref_get(Elm_Theme *th);
536    EAPI Elm_Theme       *elm_theme_default_get(void);
537    EAPI void             elm_theme_overlay_add(Elm_Theme *th, const char *item);
538    EAPI void             elm_theme_overlay_del(Elm_Theme *th, const char *item);
539    EAPI void             elm_theme_extension_add(Elm_Theme *th, const char *item);
540    EAPI void             elm_theme_extension_del(Elm_Theme *th, const char *item);
541    EAPI void             elm_theme_set(Elm_Theme *th, const char *theme);
542    EAPI const char      *elm_theme_get(Elm_Theme *th);
543    EAPI const Eina_List *elm_theme_list_get(const Elm_Theme *th);
544    EAPI char            *elm_theme_list_item_path_get(const char *f, Eina_Bool *in_search_path);
545    EAPI void             elm_theme_flush(Elm_Theme *th);
546    EAPI void             elm_theme_full_flush(void);
547
548    EAPI void             elm_theme_all_set(const char *theme);
549
550    EAPI Eina_List       *elm_theme_name_available_list_new(void);
551    EAPI void             elm_theme_name_available_list_free(Eina_List *list);
552
553    EAPI void             elm_object_theme_set(Evas_Object *obj, Elm_Theme *th) EINA_ARG_NONNULL(1);
554    EAPI Elm_Theme       *elm_object_theme_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
555
556    /* win */
557    typedef enum _Elm_Win_Type
558      {
559         ELM_WIN_BASIC,
560         ELM_WIN_DIALOG_BASIC,
561         ELM_WIN_DESKTOP,
562         ELM_WIN_DOCK,
563         ELM_WIN_TOOLBAR,
564         ELM_WIN_MENU,
565         ELM_WIN_UTILITY,
566         ELM_WIN_SPLASH,
567         ELM_WIN_DROPDOWN_MENU,
568         ELM_WIN_POPUP_MENU,
569         ELM_WIN_TOOLTIP,
570         ELM_WIN_NOTIFICATION,
571         ELM_WIN_COMBO,
572         ELM_WIN_DND,
573         ELM_WIN_INLINED_IMAGE,
574      } Elm_Win_Type;
575
576    typedef enum _Elm_Win_Keyboard_Mode
577      {
578         ELM_WIN_KEYBOARD_UNKNOWN,
579         ELM_WIN_KEYBOARD_OFF,
580         ELM_WIN_KEYBOARD_ON,
581         ELM_WIN_KEYBOARD_ALPHA,
582         ELM_WIN_KEYBOARD_NUMERIC,
583         ELM_WIN_KEYBOARD_PIN,
584         ELM_WIN_KEYBOARD_PHONE_NUMBER,
585         ELM_WIN_KEYBOARD_HEX,
586         ELM_WIN_KEYBOARD_TERMINAL,
587         ELM_WIN_KEYBOARD_PASSWORD,
588         ELM_WIN_KEYBOARD_IP,
589         ELM_WIN_KEYBOARD_HOST,
590         ELM_WIN_KEYBOARD_FILE,
591         ELM_WIN_KEYBOARD_URL,
592         ELM_WIN_KEYBOARD_KEYPAD,
593         ELM_WIN_KEYBOARD_J2ME
594      } Elm_Win_Keyboard_Mode;
595
596    typedef enum _Elm_Illume_Command
597      {
598         ELM_ILLUME_COMMAND_FOCUS_BACK,
599         ELM_ILLUME_COMMAND_FOCUS_FORWARD,
600         ELM_ILLUME_COMMAND_FOCUS_HOME,
601         ELM_ILLUME_COMMAND_CLOSE
602      } Elm_Illume_Command;
603
604    EAPI Evas_Object *elm_win_add(Evas_Object *parent, const char *name, Elm_Win_Type type);
605    EAPI void         elm_win_resize_object_add(Evas_Object *obj, Evas_Object *subobj) EINA_ARG_NONNULL(1);
606    EAPI void         elm_win_resize_object_del(Evas_Object *obj, Evas_Object *subobj) EINA_ARG_NONNULL(1);
607    EAPI void         elm_win_title_set(Evas_Object *obj, const char *title) EINA_ARG_NONNULL(1);
608    EAPI const char  *elm_win_title_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
609    EAPI void         elm_win_autodel_set(Evas_Object *obj, Eina_Bool autodel) EINA_ARG_NONNULL(1);
610    EAPI Eina_Bool    elm_win_autodel_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
611    EAPI void         elm_win_activate(Evas_Object *obj) EINA_ARG_NONNULL(1);
612    EAPI void         elm_win_lower(Evas_Object *obj) EINA_ARG_NONNULL(1);
613    EAPI void         elm_win_raise(Evas_Object *obj) EINA_ARG_NONNULL(1);
614    EAPI void         elm_win_borderless_set(Evas_Object *obj, Eina_Bool borderless) EINA_ARG_NONNULL(1);
615    EAPI Eina_Bool    elm_win_borderless_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
616    EAPI void         elm_win_shaped_set(Evas_Object *obj, Eina_Bool shaped) EINA_ARG_NONNULL(1);
617    EAPI Eina_Bool    elm_win_shaped_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
618    EAPI void         elm_win_alpha_set(Evas_Object *obj, Eina_Bool alpha) EINA_ARG_NONNULL(1);
619    EAPI Eina_Bool    elm_win_transparent_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
620    EAPI void         elm_win_transparent_set(Evas_Object *obj, Eina_Bool transparent) EINA_ARG_NONNULL(1);
621    EAPI Eina_Bool    elm_win_alpha_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
622    EAPI void         elm_win_override_set(Evas_Object *obj, Eina_Bool override) EINA_ARG_NONNULL(1);
623    EAPI Eina_Bool    elm_win_override_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
624    EAPI void         elm_win_fullscreen_set(Evas_Object *obj, Eina_Bool fullscreen) EINA_ARG_NONNULL(1);
625    EAPI Eina_Bool    elm_win_fullscreen_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
626    EAPI void         elm_win_maximized_set(Evas_Object *obj, Eina_Bool maximized) EINA_ARG_NONNULL(1);
627    EAPI Eina_Bool    elm_win_maximized_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
628    EAPI void         elm_win_iconified_set(Evas_Object *obj, Eina_Bool iconified) EINA_ARG_NONNULL(1);
629    EAPI Eina_Bool    elm_win_iconified_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
630    EAPI void         elm_win_layer_set(Evas_Object *obj, int layer) EINA_ARG_NONNULL(1);
631    EAPI int          elm_win_layer_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
632    EAPI void         elm_win_rotation_set(Evas_Object *obj, int rotation) EINA_ARG_NONNULL(1);
633    EAPI void         elm_win_rotation_with_resize_set(Evas_Object *obj, int rotation) EINA_ARG_NONNULL(1);
634    EAPI int          elm_win_rotation_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
635    EAPI void         elm_win_sticky_set(Evas_Object *obj, Eina_Bool sticky) EINA_ARG_NONNULL(1);
636    EAPI Eina_Bool    elm_win_sticky_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
637    EAPI void         elm_win_conformant_set(Evas_Object *obj, Eina_Bool conformant) EINA_ARG_NONNULL(1);
638    EAPI Eina_Bool    elm_win_conformant_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
639    EAPI void         elm_win_quickpanel_set(Evas_Object *obj, Eina_Bool quickpanel) EINA_ARG_NONNULL(1);
640    EAPI Eina_Bool    elm_win_quickpanel_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
641    EAPI void         elm_win_quickpanel_priority_major_set(Evas_Object *obj, int priority) EINA_ARG_NONNULL(1);
642    EAPI int          elm_win_quickpanel_priority_major_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
643    EAPI void         elm_win_quickpanel_priority_minor_set(Evas_Object *obj, int priority) EINA_ARG_NONNULL(1);
644    EAPI int          elm_win_quickpanel_priority_minor_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
645    EAPI void         elm_win_quickpanel_zone_set(Evas_Object *obj, int zone) EINA_ARG_NONNULL(1);
646    EAPI int          elm_win_quickpanel_zone_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
647    EAPI void         elm_win_prop_focus_skip_set(Evas_Object *obj, Eina_Bool skip); EINA_ARG_NONNULL(1);
648    EAPI void         elm_win_illume_command_send(Evas_Object *obj, Elm_Illume_Command command, void *params); EINA_ARG_NONNULL(1);
649    EAPI Evas_Object *elm_win_inlined_image_object_get(Evas_Object *obj);
650    EAPI void         elm_win_focus_highlight_enabled_set(Evas_Object *obj, Eina_Bool enabled) EINA_ARG_NONNULL(1);
651    EAPI Eina_Bool    elm_win_focus_highlight_enabled_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
652    EAPI void         elm_win_focus_highlight_style_set(Evas_Object *obj, const char *style) EINA_ARG_NONNULL(1);
653    EAPI const char  *elm_win_focus_highlight_style_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
654    /*...
655     * ecore_x_icccm_hints_set -> accepts_focus (add to ecore_evas)
656     * ecore_x_icccm_hints_set -> window_group (add to ecore_evas)
657     * ecore_x_icccm_size_pos_hints_set -> request_pos (add to ecore_evas)
658     * ecore_x_icccm_client_leader_set -> l (add to ecore_evas)
659     * ecore_x_icccm_window_role_set -> role (add to ecore_evas)
660     * ecore_x_icccm_transient_for_set -> forwin (add to ecore_evas)
661     * ecore_x_netwm_window_type_set -> type (add to ecore_evas)
662     *
663     * (add to ecore_x) set netwm argb icon! (add to ecore_evas)
664     * (blank mouse, private mouse obj, defaultmouse)
665     *
666     */
667    EAPI void                  elm_win_keyboard_mode_set(Evas_Object *obj, Elm_Win_Keyboard_Mode mode) EINA_ARG_NONNULL(1);
668    EAPI Elm_Win_Keyboard_Mode elm_win_keyboard_mode_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
669    EAPI void                  elm_win_keyboard_win_set(Evas_Object *obj, Eina_Bool is_keyboard) EINA_ARG_NONNULL(1);
670    EAPI Eina_Bool             elm_win_keyboard_win_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
671
672    EAPI void                  elm_win_screen_position_get(const Evas_Object *obj, int *x, int *y) EINA_ARG_NONNULL(1);
673
674    EAPI Evas_Object          *elm_win_inwin_add(Evas_Object *obj) EINA_ARG_NONNULL(1);
675    EAPI void                  elm_win_inwin_activate(Evas_Object *obj) EINA_ARG_NONNULL(1);
676    EAPI void                  elm_win_inwin_content_set(Evas_Object *obj, Evas_Object *content) EINA_ARG_NONNULL(1);
677    EAPI Evas_Object          *elm_win_inwin_content_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
678    EAPI Evas_Object          *elm_win_inwin_content_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
679    /* available styles:
680     * default
681     * minimal
682     * minimal_vertical
683     */
684    /* X specific calls - won't work on non-x engines (return 0) */
685    EAPI Ecore_X_Window elm_win_xwindow_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
686    /* smart callbacks called:
687     * "delete,request" - the user requested to delete the window
688     * "focus,in" - window got focus
689     * "focus,out" - window lost focus
690     * "moved" - window that holds the canvas was moved
691     */
692
693    /**
694     * @page bg_01_example_page elm_bg - Plain color background.
695     * @dontinclude bg_example_01.c
696     *
697     * The full code for this example can be found at @ref bg_example_01_c,
698     * in the function @c test_bg_plain. It's part of the @c elementar_test
699     * suite, and thus has the code for the three examples referenced by this
700     * documentation.
701     *
702     * This first example just sets a default background with a plain color. The
703     * first part consists of creating an Elementary window. It's the common
704     * piece of code that you'll see everywhere in Elementary: @skip elm_main
705     * @until autodel_set
706     *
707     * Now we really create our background object, using the window object as
708     * its parent:
709     *
710     * @skipline bg_add
711     *
712     * Then we set the size hints of the background object so that it will use
713     * all space available for it, and then add it as a resize object to the
714     * window, making it visible in the end:
715     *
716     * @skip size_hint_weight_set
717     * @until resize_object_add
718     *
719     * See @ref evas_object_size_hint_weight_set and elm_win_resize_object_add()
720     * for more detailed info about these functions.
721     *
722     * The end of the example is quite simple, just setting the minimum and
723     * maximum size of the background, so the Elementary window knows that it
724     * has to have at least the minimum size. The background also won't scale to
725     * a size above its maximum. Then we resize the window and show it in the
726     * end:
727     *
728     * @skip set size hints
729     * @until }
730     *
731     * And here we finish our very simple background object usage example.
732     */
733
734    /**
735     * @page bg_02_example_page elm_bg - Image background.
736     * @dontinclude bg_example_02.c
737     *
738     * The full code for this example can be found at @ref bg_example_02_c,
739     * in the function @c test_bg_image. It's part of the @c elementar_test
740     * suite, and thus has the code for the three examples referenced by this
741     * documentation.
742     *
743     * This is the second example, and shows how to use the Elementary
744     * background object to set an image as background of your application.
745     *
746     * We start this example exactly in the same way as the previous one, even
747     * when creating the background object:
748     *
749     * @skip elm_main
750     * @until bg_add
751     *
752     * Now it's the different part.
753     *
754     * Our background will have an image, that will be displayed over the
755     * background color. Before loading the image, we set the load size of the
756     * image. The load size is a hint about the size that we want the image
757     * displayed in the screen. It's not the exact size that the image will have,
758     * but usually a bit bigger. The background object can still be scaled to a
759     * size bigger than the one set here. Setting the image load size to
760     * something smaller than its real size will reduce the memory used to keep
761     * the pixmap representation of the image, and the time to load it. Here we
762     * set the load size to 20x20 pixels, but the image is loaded with a size
763     * bigger than that (since it's just a hint):
764     *
765     * @skipline load_size_set
766     *
767     * And set our background image to be centered, instead of stretched or
768     * scaled, so the effect of the elm_bg_load_size_set() can be easily
769     * understood:
770     *
771     * @skipline option_set
772     *
773     * We need a filename to set, so we get one from the previous installed
774     * images in the @c PACKAGE_DATA_DIR, and write its full path to a buffer.
775     * Then we use this buffer to set the filename in the background object:
776     *
777     * @skip snprintf
778     * @until bg_file_set
779     *
780     * Notice that the third argument of the elm_bg_file_set() function is @c
781     * NULL, since we are setting an image to this background. This function
782     * also supports setting an edje group as background, in which case the @c
783     * group parameter wouldn't be @c NULL, but be the name of the group
784     * instead.
785     *
786     * Finally, we can set the size hints, add the background as a resize
787     * object, and resize the window, exactly the same thing we do in the @ref
788     * bg_01_example_page example:
789     *
790     * @skip size_hint
791     * @until }
792     *
793     * And this is the end of this example.
794     */
795
796    /**
797     * @page bg_03_example_page elm_bg - Background properties.
798     * @dontinclude bg_example_03.c
799     *
800     * The full code for this example can be found at @ref bg_example_03_c, in the
801     * function @c test_bg_options, with the callbacks @c _cb_overlay_changed, @c
802     * _cb_color_changed and @c _cb_radio_changed defined in the beginning of the
803     * file. It's part of the @c elementar_test suite, and thus has the code for
804     * the three examples referenced by this documentation.
805     *
806     * This example will show the properties available for the background object,
807     * and will use of some more widgets to set them.
808     *
809     * In order to do this, we will set some callbacks for these widgets. The
810     * first is for the radio buttons that will be used to choose the option
811     * passed as argument to elm_bg_option_set():
812     *
813     * @skip _cb_radio_changed
814     * @until }
815     *
816     * The next callback will be used when setting the overlay (using
817     * elm_bg_overlay_set()):
818     *
819     * @skip _cb_overlay_changed
820     * @until }
821     * @until }
822     *
823     * And the last one, used to set the color (with elm_bg_color_set()):
824     *
825     * @skip _cb_color_changed
826     * @until }
827     *
828     * We will get back to what these functions do soon. If you want to know more
829     * about how to set these callbacks and what these widgets are, look for:
830     * @li elm_radio_add()
831     * @li elm_check_add()
832     * @li elm_spinner_add()
833     *
834     * Now going to the main function, @c test_bg_options, we have the common
835     * code with the other examples:
836     *
837     * @skip bg-options
838     * @until autodel_set
839     *
840     * We add a plain background to this window, so it will have the default
841     * background color behind everything:
842     *
843     * @skip bg = elm_bg_add
844     * @until evas_object_show(bg)
845     *
846     * Then we add a vertical box (elm_box_add()) that will hold the background
847     * object that we are going to play with, as well as a horizontal box that
848     * will hold widgets:
849     *
850     * @skip elm_box_add
851     * @until evas_object_show
852     *
853     * Now we add the background object that is going to be of use for our
854     * example. It is an image background, as used in @ref bg_02_example_page ,
855     * so the code should be familiar:
856     *
857     * @skip elm_bg_add
858     * @until evas_object_show
859     *
860     * Notice the call to elm_box_pack_end(): it will pack the background object
861     * in the end of the Elementary box declared above. Just refer to that
862     * documentation for more info.
863     *
864     * Since this Elementary background is already an image background, we are
865     * going to play with its other properties. We will change its option
866     * (CENTER, SCALE, STRETCH, TILE), its color (RGB), and add an overlay to it.
867     * For all of these properties, we are going to add widgets that will
868     * configure them.
869     *
870     * First, lets add the horizontal box that will hold these widgets:
871     * @skip hbox
872     * @until align_set
873     *
874     * For now, just consider this @c hbox as a rectangle that will contain the
875     * widgets, and will distribute them horizontally inside its content. Then we
876     * add radio buttons that will allow us to choose the property to use with
877     * this background:
878     *
879     * @skip radio_add
880     * @until evas_object_show
881     *
882     * Again, I won't give details about the use of these widgets, just look for
883     * their documentation if necessary. It's enough to know for now that we are
884     * packing them in the @c hbox, setting a label for them, and the most
885     * important parts: setting its value to @c ELM_BG_OPTION_CENTER and its
886     * callback to @c _cb_radio_changed (the function defined in the beginning of
887     * this example). We do this for the next 3 radio buttons added after this
888     * one, each of them with a different value.
889     *
890     * Now taking a look at the code of the callback @c _cb_radio_changed again,
891     * it will call elm_bg_option_set() with the value set from the checked radio
892     * button, thus setting the option for this background. The background is
893     * passed as argument to the @p data parameter of this callback, and is
894     * referenced here as @c o_bg.
895     *
896     * Later we set the default value for this radio button:
897     *
898     * @skipline elm_radio_value_set
899     *
900     * Then we add a checkbox for the elm_bg_overlay_set() function:
901     *
902     * @skip check_add
903     * @until evas_object_show
904     *
905     * Now look at the code of the @c _cb_overlay_changed again. If the checkbox
906     * state is checked, an overlay will be added to the background. It's done by
907     * creating an Edje object, and setting it with elm_bg_overlay_set() to the
908     * background object. For information about what are and how to set Edje
909     * object, look at the Edje documentation.
910     *
911     * Finally we add a spinner object (elm_spinner_add()) to be used to select
912     * the color of our background. In its callback it's possible to see the call
913     * to elm_bg_color_set(), which will change the color of this background.
914     * This color is used by the background to fill areas where the image doesn't
915     * cover (in this case, where we have an image background). The spinner is
916     * also packed into the @c hbox :
917     *
918     * @skip elm_spinner_add
919     * @until evas_object_show
920     *
921     * Then we just have to pack the @c hbox inside the @c box, set some size
922     * hints, and show our window:
923     *
924     * @skip pack_end
925     * @until }
926     *
927     * Now to see this code in action, open elementary_test, and go to the "Bg
928     * Options" test. It should demonstrate what was implemented here.
929     */
930
931    /**
932     * @page bg_example_01_c bg_example_01.c
933     * @include bg_example_01.c
934     */
935
936    /**
937     * @page bg_example_02_c bg_example_02.c
938     * @include bg_example_02.c
939     */
940
941    /**
942     * @page bg_example_03_c bg_example_03.c
943     * @include bg_example_03.c
944     */
945
946    /**
947     * @defgroup Bg Bg
948     *
949     * @brief Background object, used for setting a solid color, image or Edje
950     * group as background to a window or any container object.
951     *
952     * The bg object is used for setting a solid background to a window or
953     * packing into any container object. It works just like an image, but has
954     * some properties useful to a background, like setting it to tiled,
955     * centered, scaled or stretched.
956     *
957     * Here is some sample code using it:
958     * @li @ref bg_01_example_page
959     * @li @ref bg_02_example_page
960     * @li @ref bg_03_example_page
961     */
962
963    /* bg */
964    typedef enum _Elm_Bg_Option
965      {
966         ELM_BG_OPTION_CENTER,  /**< center the background */
967         ELM_BG_OPTION_SCALE,   /**< scale the background retaining aspect ratio */
968         ELM_BG_OPTION_STRETCH, /**< stretch the background to fill */
969         ELM_BG_OPTION_TILE     /**< tile background at its original size */
970      } Elm_Bg_Option;
971
972    /**
973     * Add a new background to the parent
974     *
975     * @param parent The parent object
976     * @return The new object or NULL if it cannot be created
977     *
978     * @ingroup Bg
979     */
980    EAPI Evas_Object  *elm_bg_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
981
982    /**
983     * Set the file (image or edje) used for the background
984     *
985     * @param obj The bg object
986     * @param file The file path
987     * @param group Optional key (group in Edje) within the file
988     *
989     * This sets the image file used in the background object. The image (or edje)
990     * will be stretched (retaining aspect if its an image file) to completely fill
991     * the bg object. This may mean some parts are not visible.
992     *
993     * @note  Once the image of @p obj is set, a previously set one will be deleted,
994     * even if @p file is NULL.
995     *
996     * @ingroup Bg
997     */
998    EAPI void          elm_bg_file_set(Evas_Object *obj, const char *file, const char *group) EINA_ARG_NONNULL(1);
999
1000    /**
1001     * Get the file (image or edje) used for the background
1002     *
1003     * @param obj The bg object
1004     * @param file The file path
1005     * @param group Optional key (group in Edje) within the file
1006     *
1007     * @ingroup Bg
1008     */
1009    EAPI void          elm_bg_file_get(const Evas_Object *obj, const char **file, const char **group) EINA_ARG_NONNULL(1);
1010
1011    /**
1012     * Set the option used for the background image
1013     *
1014     * @param obj The bg object
1015     * @param option The desired background option (TILE, SCALE)
1016     *
1017     * This sets the option used for manipulating the display of the background
1018     * image. The image can be tiled or scaled.
1019     *
1020     * @ingroup Bg
1021     */
1022    EAPI void          elm_bg_option_set(Evas_Object *obj, Elm_Bg_Option option) EINA_ARG_NONNULL(1);
1023
1024    /**
1025     * Get the option used for the background image
1026     *
1027     * @param obj The bg object
1028     * @return The desired background option (CENTER, SCALE, STRETCH or TILE)
1029     *
1030     * @ingroup Bg
1031     */
1032    EAPI Elm_Bg_Option elm_bg_option_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1033    /**
1034     * Set the option used for the background color
1035     *
1036     * @param obj The bg object
1037     * @param r
1038     * @param g
1039     * @param b
1040     *
1041     * This sets the color used for the background rectangle. Its range goes
1042     * from 0 to 255.
1043     *
1044     * @ingroup Bg
1045     */
1046    EAPI void          elm_bg_color_set(Evas_Object *obj, int r, int g, int b) EINA_ARG_NONNULL(1);
1047    /**
1048     * Get the option used for the background color
1049     *
1050     * @param obj The bg object
1051     * @param r
1052     * @param g
1053     * @param b
1054     *
1055     * @ingroup Bg
1056     */
1057    EAPI void          elm_bg_color_get(const Evas_Object *obj, int *r, int *g, int *b) EINA_ARG_NONNULL(1);
1058
1059    /**
1060     * Set the overlay object used for the background object.
1061     *
1062     * @param obj The bg object
1063     * @param overlay The overlay object
1064     *
1065     * This provides a way for elm_bg to have an 'overlay' that will be on top
1066     * of the bg. Once the over object is set, a previously set one will be
1067     * deleted, even if you set the new one to NULL. If you want to keep that
1068     * old content object, use the elm_bg_overlay_unset() function.
1069     *
1070     * @ingroup Bg
1071     */
1072
1073    EAPI void          elm_bg_overlay_set(Evas_Object *obj, Evas_Object *overlay) EINA_ARG_NONNULL(1);
1074
1075    /**
1076     * Get the overlay object used for the background object.
1077     *
1078     * @param obj The bg object
1079     * @return The content that is being used
1080     *
1081     * Return the content object which is set for this widget
1082     *
1083     * @ingroup Bg
1084     */
1085    EAPI Evas_Object  *elm_bg_overlay_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1086
1087    /**
1088     * Get the overlay object used for the background object.
1089     *
1090     * @param obj The bg object
1091     * @return The content that was being used
1092     *
1093     * Unparent and return the overlay object which was set for this widget
1094     *
1095     * @ingroup Bg
1096     */
1097    EAPI Evas_Object  *elm_bg_overlay_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
1098
1099    /**
1100     * Set the size of the pixmap representation of the image.
1101     *
1102     * This option just makes sense if an image is going to be set in the bg.
1103     *
1104     * @param obj The bg object
1105     * @param w The new width of the image pixmap representation.
1106     * @param h The new height of the image pixmap representation.
1107     *
1108     * This function sets a new size for pixmap representation of the given bg
1109     * image. It allows the image to be loaded already in the specified size,
1110     * reducing the memory usage and load time when loading a big image with load
1111     * size set to a smaller size.
1112     *
1113     * NOTE: this is just a hint, the real size of the pixmap may differ
1114     * depending on the type of image being loaded, being bigger than requested.
1115     *
1116     * @ingroup Bg
1117     */
1118    EAPI void          elm_bg_load_size_set(Evas_Object *obj, Evas_Coord w, Evas_Coord h) EINA_ARG_NONNULL(1);
1119    /* smart callbacks called:
1120     */
1121
1122    /* icon */
1123    typedef enum _Elm_Icon_Lookup_Order
1124      {
1125         ELM_ICON_LOOKUP_FDO_THEME, /**< icon look up order: freedesktop, theme */
1126         ELM_ICON_LOOKUP_THEME_FDO, /**< icon look up order: theme, freedesktop */
1127         ELM_ICON_LOOKUP_FDO,       /**< icon look up order: freedesktop */
1128         ELM_ICON_LOOKUP_THEME      /**< icon look up order: theme */
1129      } Elm_Icon_Lookup_Order;
1130
1131    EAPI Evas_Object          *elm_icon_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
1132    EAPI Eina_Bool             elm_icon_file_set(Evas_Object *obj, const char *file, const char *group) EINA_ARG_NONNULL(1, 2);
1133    EAPI void                  elm_icon_thumb_set(const Evas_Object *obj, const char *file, const char *group) EINA_ARG_NONNULL(1, 2);
1134    EAPI void                  elm_icon_file_get(const Evas_Object *obj, const char **file, const char **group) EINA_ARG_NONNULL(1);
1135    EAPI Eina_Bool             elm_icon_standard_set(Evas_Object *obj, const char *name) EINA_ARG_NONNULL(1);
1136    EAPI const char           *elm_icon_standard_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1137    EAPI void                  elm_icon_smooth_set(Evas_Object *obj, Eina_Bool smooth) EINA_ARG_NONNULL(1);
1138    EAPI Eina_Bool             elm_icon_smooth_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1139    EAPI void                  elm_icon_no_scale_set(Evas_Object *obj, Eina_Bool no_scale) EINA_ARG_NONNULL(1);
1140    EAPI Eina_Bool             elm_icon_no_scale_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1141    EAPI void                  elm_icon_scale_set(Evas_Object *obj, Eina_Bool scale_up, Eina_Bool scale_down) EINA_ARG_NONNULL(1);
1142    EAPI void                  elm_icon_scale_get(const Evas_Object *obj, Eina_Bool *scale_up, Eina_Bool *scale_down) EINA_ARG_NONNULL(1);
1143    EAPI void                  elm_icon_fill_outside_set(Evas_Object *obj, Eina_Bool fill_outside) EINA_ARG_NONNULL(1);
1144    EAPI Eina_Bool             elm_icon_fill_outside_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1145    EAPI void                  elm_icon_prescale_set(Evas_Object *obj, int size) EINA_ARG_NONNULL(1);
1146    EAPI int                   elm_icon_prescale_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1147    EAPI void                  elm_icon_order_lookup_set(Evas_Object *obj, Elm_Icon_Lookup_Order order) EINA_ARG_NONNULL(1);
1148    EAPI Elm_Icon_Lookup_Order elm_icon_order_lookup_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1149    /* smart callbacks called:
1150     * "clicked" - the user clicked the icon
1151     */
1152
1153    /* image */
1154    typedef enum _Elm_Image_Orient
1155      {
1156         ELM_IMAGE_ORIENT_NONE,
1157         ELM_IMAGE_ROTATE_90_CW,
1158         ELM_IMAGE_ROTATE_180_CW,
1159         ELM_IMAGE_ROTATE_90_CCW,
1160         ELM_IMAGE_FLIP_HORIZONTAL,
1161         ELM_IMAGE_FLIP_VERTICAL,
1162         ELM_IMAGE_FLIP_TRANSPOSE,
1163         ELM_IMAGE_FLIP_TRANSVERSE
1164      } Elm_Image_Orient;
1165    EAPI Evas_Object     *elm_image_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
1166    EAPI Eina_Bool        elm_image_file_set(Evas_Object *obj, const char *file, const char *group) EINA_ARG_NONNULL(1, 2);
1167    EAPI void             elm_image_file_get(const Evas_Object *obj, const char **file, const char **group) EINA_ARG_NONNULL(1);
1168    EAPI void             elm_image_smooth_set(Evas_Object *obj, Eina_Bool smooth) EINA_ARG_NONNULL(1);
1169    EAPI Eina_Bool        elm_image_smooth_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1170    EAPI void             elm_image_object_size_get(const Evas_Object *obj, int *w, int *h) EINA_ARG_NONNULL(1);
1171    EAPI void             elm_image_no_scale_set(Evas_Object *obj, Eina_Bool no_scale) EINA_ARG_NONNULL(1);
1172    EAPI Eina_Bool        elm_image_no_scale_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1173    EAPI void             elm_image_scale_set(Evas_Object *obj, Eina_Bool scale_up, Eina_Bool scale_down) EINA_ARG_NONNULL(1);
1174    EAPI void             elm_image_scale_get(const Evas_Object *obj, Eina_Bool *scale_up, Eina_Bool *scale_down) EINA_ARG_NONNULL(1);
1175    EAPI void             elm_image_fill_outside_set(Evas_Object *obj, Eina_Bool fill_outside) EINA_ARG_NONNULL(1);
1176    EAPI Eina_Bool        elm_image_fill_outside_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1177    EAPI void             elm_image_prescale_set(Evas_Object *obj, int size) EINA_ARG_NONNULL(1);
1178    EAPI int              elm_image_prescale_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1179    EAPI void             elm_image_orient_set(Evas_Object *obj, Elm_Image_Orient orient) EINA_ARG_NONNULL(1);
1180    EAPI Elm_Image_Orient elm_image_orient_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1181    EAPI void             elm_image_editable_set(Evas_Object *obj, Eina_Bool set) EINA_ARG_NONNULL(1);
1182    EAPI Eina_Bool        elm_image_editable_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1183    EAPI Evas_Object     *elm_image_object_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1184    /* smart callbacks called:
1185     * "clicked" - the user clicked the image
1186     */
1187
1188    /* glview */
1189    typedef void (*Elm_GLView_Func)(Evas_Object *obj);
1190
1191    typedef enum _Elm_GLView_Mode
1192      {
1193         ELM_GLVIEW_ALPHA   = 1,
1194         ELM_GLVIEW_DEPTH   = 2,
1195         ELM_GLVIEW_STENCIL = 4
1196      } Elm_GLView_Mode;
1197
1198    /**
1199     * Defines a policy for the glview resizing.
1200     *
1201     * @note Default is ELM_GLVIEW_RESIZE_POLICY_RECREATE
1202     */
1203    typedef enum _Elm_GLView_Resize_Policy
1204      {
1205         ELM_GLVIEW_RESIZE_POLICY_RECREATE = 1,      /**< Resize the internal surface along with the image */
1206         ELM_GLVIEW_RESIZE_POLICY_SCALE    = 2       /**< Only reize the internal image and not the surface */
1207      } Elm_GLView_Resize_Policy;
1208
1209    typedef enum _Elm_GLView_Render_Policy
1210      {
1211         ELM_GLVIEW_RENDER_POLICY_ON_DEMAND = 1,     /**< Render only when there is a need for redrawing */
1212         ELM_GLVIEW_RENDER_POLICY_ALWAYS    = 2      /**< Render always even when it is not visible */
1213      } Elm_GLView_Render_Policy;
1214
1215
1216    EAPI Evas_Object     *elm_glview_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
1217    EAPI void             elm_glview_size_set(Evas_Object *obj, Evas_Coord width, Evas_Coord height) EINA_ARG_NONNULL(1);
1218    EAPI void             elm_glview_size_get(const Evas_Object *obj, Evas_Coord *width, Evas_Coord *height) EINA_ARG_NONNULL(1);
1219    EAPI Evas_GL_API     *elm_glview_gl_api_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1220    EAPI Eina_Bool        elm_glview_mode_set(Evas_Object *obj, Elm_GLView_Mode mode) EINA_ARG_NONNULL(1);
1221    EAPI Eina_Bool        elm_glview_resize_policy_set(Evas_Object *obj, Elm_GLView_Resize_Policy policy) EINA_ARG_NONNULL(1);
1222    EAPI Eina_Bool        elm_glview_render_policy_set(Evas_Object *obj, Elm_GLView_Render_Policy policy) EINA_ARG_NONNULL(1);
1223    EAPI void             elm_glview_init_func_set(Evas_Object *obj, Elm_GLView_Func func) EINA_ARG_NONNULL(1);
1224    EAPI void             elm_glview_del_func_set(Evas_Object *obj, Elm_GLView_Func func) EINA_ARG_NONNULL(1);
1225    EAPI void             elm_glview_resize_func_set(Evas_Object *obj, Elm_GLView_Func func) EINA_ARG_NONNULL(1);
1226    EAPI void             elm_glview_render_func_set(Evas_Object *obj, Elm_GLView_Func func) EINA_ARG_NONNULL(1);
1227    EAPI void             elm_glview_changed_set(Evas_Object *obj) EINA_ARG_NONNULL(1);
1228
1229    /* box */
1230    typedef struct _Elm_Box_Transition Elm_Box_Transition;
1231
1232    EAPI Evas_Object        *elm_box_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
1233    EAPI void                elm_box_horizontal_set(Evas_Object *obj, Eina_Bool horizontal) EINA_ARG_NONNULL(1);
1234    EAPI Eina_Bool           elm_box_horizontal_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1235    EAPI void                elm_box_homogeneous_set(Evas_Object *obj, Eina_Bool homogeneous) EINA_ARG_NONNULL(1);
1236    EAPI Eina_Bool           elm_box_homogeneous_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1237    EINA_DEPRECATED EAPI void elm_box_homogenous_set(Evas_Object *obj, Eina_Bool homogenous) EINA_ARG_NONNULL(1);
1238    EINA_DEPRECATED EAPI Eina_Bool elm_box_homogenous_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1239    EAPI void                elm_box_pack_start(Evas_Object *obj, Evas_Object *subobj) EINA_ARG_NONNULL(1);
1240    EAPI void                elm_box_pack_end(Evas_Object *obj, Evas_Object *subobj) EINA_ARG_NONNULL(1);
1241    EAPI void                elm_box_pack_before(Evas_Object *obj, Evas_Object *subobj, Evas_Object *before) EINA_ARG_NONNULL(1);
1242    EAPI void                elm_box_pack_after(Evas_Object *obj, Evas_Object *subobj, Evas_Object *after) EINA_ARG_NONNULL(1);
1243    EAPI void                elm_box_clear(Evas_Object *obj) EINA_ARG_NONNULL(1);
1244    EAPI void                elm_box_unpack(Evas_Object *obj, Evas_Object *subobj) EINA_ARG_NONNULL(1);
1245    EAPI void                elm_box_unpack_all(Evas_Object *obj) EINA_ARG_NONNULL(1);
1246    EAPI const Eina_List    *elm_box_children_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1247    EAPI void                elm_box_padding_set(Evas_Object *obj, Evas_Coord horizontal, Evas_Coord vertical) EINA_ARG_NONNULL(1);
1248    EAPI void                elm_box_padding_get(const Evas_Object *obj, Evas_Coord *horizontal, Evas_Coord *vertical) EINA_ARG_NONNULL(1);
1249    EAPI void                elm_box_align_set(Evas_Object *obj, double horizontal, double vertical) EINA_ARG_NONNULL(1);
1250    EAPI void                elm_box_align_get(const Evas_Object *obj, double *horizontal, double *vertical) EINA_ARG_NONNULL(1);
1251
1252    EAPI void                elm_box_layout_set(Evas_Object *obj, Evas_Object_Box_Layout cb, const void *data, void (*free_data)(void *data)) EINA_ARG_NONNULL(1);
1253    EAPI void                elm_box_layout_transition(Evas_Object *obj, Evas_Object_Box_Data *priv, void *data);
1254    EAPI Elm_Box_Transition *elm_box_transition_new(const double duration, Evas_Object_Box_Layout start_layout, void *start_layout_data, void(*start_layout_free_data)(void *data), Evas_Object_Box_Layout end_layout, void *end_layout_data, void(*end_layout_free_data)(void *data), void(*transition_end_cb)(void *data), void *transition_end_data) EINA_ARG_NONNULL(2, 5);
1255    EAPI void                elm_box_transition_free(void *data);
1256    /* smart callbacks called:
1257     */
1258
1259    /* button */
1260    EAPI Evas_Object *elm_button_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
1261    EAPI void         elm_button_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
1262    EAPI const char  *elm_button_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1263    EAPI void         elm_button_icon_set(Evas_Object *obj, Evas_Object *icon) EINA_ARG_NONNULL(1);
1264    EAPI Evas_Object *elm_button_icon_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1265    EAPI Evas_Object *elm_button_icon_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
1266    EAPI void         elm_button_autorepeat_set(Evas_Object *obj, Eina_Bool on) EINA_ARG_NONNULL(1);
1267    EAPI Eina_Bool    elm_button_autorepeat_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1268    EAPI void         elm_button_autorepeat_initial_timeout_set(Evas_Object *obj, double t) EINA_ARG_NONNULL(1);
1269    EAPI double       elm_button_autorepeat_initial_timeout_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1270    EAPI void         elm_button_autorepeat_gap_timeout_set(Evas_Object *obj, double t) EINA_ARG_NONNULL(1);
1271    EAPI double       elm_button_autorepeat_gap_timeout_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1272    /* available styles:
1273     * default
1274     * anchor
1275     * hoversel_vertical
1276     * hoversel_vertical_entry
1277     */
1278    /* smart callbacks called:
1279     * "clicked" - the user clicked the button
1280     * "repeated" - the user pressed the button without releasing it
1281     * "unpressed" - when the button is unpressed (released)
1282     */
1283
1284    /* fileselector */
1285    EAPI Evas_Object *elm_fileselector_button_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
1286    EAPI void         elm_fileselector_button_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
1287    EAPI const char  *elm_fileselector_button_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1288    EAPI void         elm_fileselector_button_icon_set(Evas_Object *obj, Evas_Object *icon) EINA_ARG_NONNULL(1);
1289    EAPI Evas_Object *elm_fileselector_button_icon_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1290    EAPI Evas_Object *elm_fileselector_button_icon_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
1291    EAPI void         elm_fileselector_button_window_title_set(Evas_Object *obj, const char *title) EINA_ARG_NONNULL(1);
1292    EAPI const char  *elm_fileselector_button_window_title_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1293    EAPI void         elm_fileselector_button_window_size_set(Evas_Object *obj, Evas_Coord width, Evas_Coord height) EINA_ARG_NONNULL(1);
1294    EAPI void         elm_fileselector_button_window_size_get(const Evas_Object *obj, Evas_Coord *width, Evas_Coord *height) EINA_ARG_NONNULL(1);
1295    EAPI void         elm_fileselector_button_path_set(Evas_Object *obj, const char *path) EINA_ARG_NONNULL(1);
1296    EAPI const char  *elm_fileselector_button_path_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1297    EAPI void         elm_fileselector_button_expandable_set(Evas_Object *obj, Eina_Bool value) EINA_ARG_NONNULL(1);
1298    EAPI Eina_Bool    elm_fileselector_button_expandable_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1299    EAPI void         elm_fileselector_button_folder_only_set(Evas_Object *obj, Eina_Bool value) EINA_ARG_NONNULL(1);
1300    EAPI Eina_Bool    elm_fileselector_button_folder_only_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1301    EAPI void         elm_fileselector_button_is_save_set(Evas_Object *obj, Eina_Bool value) EINA_ARG_NONNULL(1);
1302    EAPI Eina_Bool    elm_fileselector_button_is_save_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1303    EAPI void         elm_fileselector_button_inwin_mode_set(Evas_Object *obj, Eina_Bool value) EINA_ARG_NONNULL(1);
1304    EAPI Eina_Bool    elm_fileselector_button_inwin_mode_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1305    /* available styles:
1306     * default
1307     * anchor
1308     * hoversel_vertical
1309     * hoversel_vertical_entry
1310     */
1311    /* smart callbacks called:
1312     * "file,chosen" - the user has selected a path, whose string pointer comes
1313                       as event info
1314     */
1315
1316    EAPI Evas_Object *elm_fileselector_entry_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
1317    EAPI void         elm_fileselector_entry_button_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
1318    EAPI const char  *elm_fileselector_entry_button_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1319    EAPI void         elm_fileselector_entry_button_icon_set(Evas_Object *obj, Evas_Object *icon) EINA_ARG_NONNULL(1);
1320    EAPI Evas_Object *elm_fileselector_entry_button_icon_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1321    EAPI Evas_Object *elm_fileselector_entry_button_icon_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
1322    EAPI void         elm_fileselector_entry_window_title_set(Evas_Object *obj, const char *title) EINA_ARG_NONNULL(1);
1323    EAPI const char  *elm_fileselector_entry_window_title_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1324    EAPI void         elm_fileselector_entry_window_size_set(Evas_Object *obj, Evas_Coord width, Evas_Coord height) EINA_ARG_NONNULL(1);
1325    EAPI void         elm_fileselector_entry_window_size_get(const Evas_Object *obj, Evas_Coord *width, Evas_Coord *height) EINA_ARG_NONNULL(1);
1326    EAPI void         elm_fileselector_entry_path_set(Evas_Object *obj, const char *path) EINA_ARG_NONNULL(1);
1327    EAPI const char  *elm_fileselector_entry_path_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1328    EAPI void         elm_fileselector_entry_expandable_set(Evas_Object *obj, Eina_Bool value) EINA_ARG_NONNULL(1);
1329    EAPI Eina_Bool    elm_fileselector_entry_expandable_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1330    EAPI void         elm_fileselector_entry_folder_only_set(Evas_Object *obj, Eina_Bool value) EINA_ARG_NONNULL(1);
1331    EAPI Eina_Bool    elm_fileselector_entry_folder_only_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1332    EAPI void         elm_fileselector_entry_is_save_set(Evas_Object *obj, Eina_Bool value) EINA_ARG_NONNULL(1);
1333    EAPI Eina_Bool    elm_fileselector_entry_is_save_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1334    EAPI void         elm_fileselector_entry_inwin_mode_set(Evas_Object *obj, Eina_Bool value) EINA_ARG_NONNULL(1);
1335    EAPI Eina_Bool    elm_fileselector_entry_inwin_mode_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1336    EAPI void         elm_fileselector_entry_selected_set(Evas_Object *obj, const char *path) EINA_ARG_NONNULL(1);
1337    EAPI const char  *elm_fileselector_entry_selected_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1338
1339    /* scroller policy */
1340    typedef enum _Elm_Scroller_Policy
1341      {
1342         ELM_SCROLLER_POLICY_AUTO = 0,
1343         ELM_SCROLLER_POLICY_ON,
1344         ELM_SCROLLER_POLICY_OFF,
1345         ELM_SCROLLER_POLICY_LAST
1346      } Elm_Scroller_Policy;
1347
1348    EAPI Evas_Object *elm_scroller_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
1349    EAPI void         elm_scroller_content_set(Evas_Object *obj, Evas_Object *child) EINA_ARG_NONNULL(1);
1350    EAPI Evas_Object *elm_scroller_content_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1351    EAPI Evas_Object *elm_scroller_content_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
1352    EAPI void         elm_scroller_custom_widget_base_theme_set(Evas_Object *obj, const char *widget, const char *base) EINA_ARG_NONNULL(1, 2, 3);
1353    EAPI void         elm_scroller_content_min_limit(Evas_Object *obj, Eina_Bool w, Eina_Bool h) EINA_ARG_NONNULL(1);
1354    EAPI void         elm_scroller_region_show(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h) EINA_ARG_NONNULL(1);
1355    EAPI void         elm_scroller_policy_set(Evas_Object *obj, Elm_Scroller_Policy policy_h, Elm_Scroller_Policy policy_v) EINA_ARG_NONNULL(1);
1356    EAPI void         elm_scroller_policy_get(const Evas_Object *obj, Elm_Scroller_Policy *policy_h, Elm_Scroller_Policy *policy_v) EINA_ARG_NONNULL(1);
1357    EAPI void         elm_scroller_region_get(const Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h) EINA_ARG_NONNULL(1);
1358    EAPI void         elm_scroller_child_size_get(const Evas_Object *obj, Evas_Coord *w, Evas_Coord *h) EINA_ARG_NONNULL(1);
1359    EAPI void         elm_scroller_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_bounce) EINA_ARG_NONNULL(1);
1360    EAPI void         elm_scroller_bounce_get(const Evas_Object *obj, Eina_Bool *h_bounce, Eina_Bool *v_bounce) EINA_ARG_NONNULL(1);
1361    EAPI void         elm_scroller_page_relative_set(Evas_Object *obj, double h_pagerel, double v_pagerel) EINA_ARG_NONNULL(1);
1362    EAPI void         elm_scroller_page_size_set(Evas_Object *obj, Evas_Coord h_pagesize, Evas_Coord v_pagesize) EINA_ARG_NONNULL(1);
1363    EAPI void         elm_scroller_region_bring_in(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h) EINA_ARG_NONNULL(1);
1364    EAPI void         elm_scroller_propagate_events_set(Evas_Object *obj, Eina_Bool propagation);
1365    EAPI Eina_Bool    elm_scroller_propagate_events_get(const Evas_Object *obj);
1366    /* smart callbacks called:
1367     * "edge,left" - the left edge of the content has been reached
1368     * "edge,right" - the right edge of the content has been reached
1369     * "edge,top" - the top edge of the content has been reached
1370     * "edge,bottom" - the bottom edge of the content has been reached
1371     * "scroll" - the content has been scrolled (moved)
1372     * "scroll,anim,start" - scrolling animation has started
1373     * "scroll,anim,stop" - scrolling animation has stopped
1374     * "scroll,drag,start" - dragging the contents around has started
1375     * "scroll,drag,stop" - dragging the contents around has stopped
1376     */
1377
1378    /* label */
1379    EAPI Evas_Object *elm_label_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
1380    EAPI void         elm_label_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
1381    EAPI const char  *elm_label_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1382    EAPI void         elm_label_line_wrap_set(Evas_Object *obj, Elm_Wrap_Type wrap) EINA_ARG_NONNULL(1);
1383    EAPI Elm_Wrap_Type elm_label_line_wrap_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1384    EAPI void         elm_label_wrap_width_set(Evas_Object *obj, Evas_Coord w) EINA_ARG_NONNULL(1);
1385    EAPI Evas_Coord   elm_label_wrap_width_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1386    EAPI void         elm_label_wrap_height_set(Evas_Object *obj, Evas_Coord h) EINA_ARG_NONNULL(1);
1387    EAPI Evas_Coord   elm_label_wrap_height_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1388    EAPI void         elm_label_fontsize_set(Evas_Object *obj, int fontsize) EINA_ARG_NONNULL(1);
1389    EAPI void         elm_label_text_color_set(Evas_Object *obj, unsigned int r, unsigned int g, unsigned int b, unsigned int a) EINA_ARG_NONNULL(1);
1390    EAPI void         elm_label_text_align_set(Evas_Object *obj, const char *alignmode) EINA_ARG_NONNULL(1);
1391    EAPI void         elm_label_background_color_set(Evas_Object *obj, unsigned int r, unsigned int g, unsigned int b, unsigned int a) EINA_ARG_NONNULL(1);
1392    EAPI void         elm_label_ellipsis_set(Evas_Object *obj, Eina_Bool ellipsis) EINA_ARG_NONNULL(1);
1393    EAPI void         elm_label_slide_set(Evas_Object *obj, Eina_Bool slide) EINA_ARG_NONNULL(1);
1394    EAPI Eina_Bool    elm_label_slide_get(Evas_Object *obj) EINA_ARG_NONNULL(1);
1395    EAPI void         elm_label_slide_duration_set(Evas_Object *obj, double duration) EINA_ARG_NONNULL(1);
1396    EAPI double       elm_label_slide_duration_get(Evas_Object *obj) EINA_ARG_NONNULL(1);
1397    /* available styles:
1398     * default
1399     * marker
1400     */
1401    /* smart callbacks called:
1402     */
1403
1404    /* toggle */
1405    EAPI Evas_Object *elm_toggle_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
1406    EAPI void         elm_toggle_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
1407    EAPI const char  *elm_toggle_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1408    EAPI void         elm_toggle_icon_set(Evas_Object *obj, Evas_Object *icon) EINA_ARG_NONNULL(1);
1409    EAPI Evas_Object *elm_toggle_icon_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1410    EAPI Evas_Object *elm_toggle_icon_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
1411    EAPI void         elm_toggle_states_labels_set(Evas_Object *obj, const char *onlabel, const char *offlabel) EINA_ARG_NONNULL(1);
1412    EAPI void         elm_toggle_states_labels_get(const Evas_Object *obj, const char **onlabel, const char **offlabel) EINA_ARG_NONNULL(1);
1413    EAPI void         elm_toggle_state_set(Evas_Object *obj, Eina_Bool state) EINA_ARG_NONNULL(1);
1414    EAPI Eina_Bool    elm_toggle_state_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1415    EAPI void         elm_toggle_state_pointer_set(Evas_Object *obj, Eina_Bool *statep) EINA_ARG_NONNULL(1);
1416    /* smart callbacks called:
1417     * "changed" - Whenever the toggle value has been changed.  Is not called
1418     *             until the toggle is released by the cursor (assuming it has been triggered
1419     *             by the cursor in the first place).
1420     */
1421
1422    /* frame */
1423    EAPI Evas_Object *elm_frame_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
1424    EAPI void         elm_frame_label_set(Evas_Object *obj, const char *label); EINA_ARG_NONNULL(1)
1425    EAPI const char  *elm_frame_label_get(const Evas_Object *obj); EINA_ARG_NONNULL(1)
1426    EAPI void         elm_frame_content_set(Evas_Object *obj, Evas_Object *content); EINA_ARG_NONNULL(1)
1427    EAPI Evas_Object *elm_frame_content_get(const Evas_Object *obj); EINA_ARG_NONNULL(1)
1428    EAPI Evas_Object *elm_frame_content_unset(Evas_Object *obj); EINA_ARG_NONNULL(1)
1429    /* available styles:
1430     * default
1431     * pad_small
1432     * pad_medium
1433     * pad_large
1434     * pad_huge
1435     * outdent_top
1436     * outdent_bottom
1437     */
1438    /* smart callbacks called:
1439     */
1440
1441    /* table */
1442    EAPI Evas_Object *elm_table_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
1443    EAPI void         elm_table_homogeneous_set(Evas_Object *obj, Eina_Bool homogeneous) EINA_ARG_NONNULL(1);
1444    EAPI Eina_Bool    elm_table_homogeneous_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1445    EINA_DEPRECATED EAPI void elm_table_homogenous_set(Evas_Object *obj, Eina_Bool homogenous) EINA_ARG_NONNULL(1);
1446    EINA_DEPRECATED EAPI Eina_Bool elm_table_homogenous_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1447    EAPI void         elm_table_padding_set(Evas_Object *obj, Evas_Coord horizontal, Evas_Coord vertical) EINA_ARG_NONNULL(1);
1448    EAPI void         elm_table_padding_get(const Evas_Object *obj, Evas_Coord *horizontal, Evas_Coord *vertical) EINA_ARG_NONNULL(1);
1449    EAPI void         elm_table_pack(Evas_Object *obj, Evas_Object *subobj, int x, int y, int w, int h) EINA_ARG_NONNULL(1);
1450    EAPI void         elm_table_unpack(Evas_Object *obj, Evas_Object *subobj) EINA_ARG_NONNULL(1);
1451    EAPI void         elm_table_clear(Evas_Object *obj, Eina_Bool clear) EINA_ARG_NONNULL(1);
1452    EAPI void         elm_table_pack_set(Evas_Object *subobj, int x, int y, int w, int h) EINA_ARG_NONNULL(1);
1453    EAPI void         elm_table_pack_get(Evas_Object *subobj, int *x, int *y, int *w, int *h) EINA_ARG_NONNULL(1);
1454          
1455    /* gengrid */
1456    typedef struct _Elm_Gengrid_Item_Class Elm_Gengrid_Item_Class;
1457    typedef struct _Elm_Gengrid_Item_Class_Func Elm_Gengrid_Item_Class_Func;
1458    typedef struct _Elm_Gengrid_Item Elm_Gengrid_Item; /**< Item of Elm_Gengrid. Sub-type of Elm_Widget_Item */
1459    typedef char        *(*GridItemLabelGetFunc) (void *data, Evas_Object *obj, const char *part);
1460    typedef Evas_Object *(*GridItemIconGetFunc)  (void *data, Evas_Object *obj, const char *part);
1461    typedef Eina_Bool    (*GridItemStateGetFunc) (void *data, Evas_Object *obj, const char *part);
1462    typedef void         (*GridItemDelFunc)      (void *data, Evas_Object *obj);
1463
1464    struct _Elm_Gengrid_Item_Class
1465      {
1466         const char             *item_style;
1467         struct _Elm_Gengrid_Item_Class_Func
1468           {
1469              GridItemLabelGetFunc  label_get;
1470              GridItemIconGetFunc   icon_get;
1471              GridItemStateGetFunc  state_get;
1472              GridItemDelFunc       del;
1473           } func;
1474      };
1475
1476    EAPI Evas_Object       *elm_gengrid_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
1477    EAPI void               elm_gengrid_item_size_set(Evas_Object *obj, Evas_Coord w, Evas_Coord h) EINA_ARG_NONNULL(1);
1478    EAPI void               elm_gengrid_item_size_get(const Evas_Object *obj, Evas_Coord *w, Evas_Coord *h) EINA_ARG_NONNULL(1);
1479    EAPI void               elm_gengrid_align_set(Evas_Object *obj, double align_x, double align_y) EINA_ARG_NONNULL(1);
1480    EAPI void               elm_gengrid_align_get(const Evas_Object *obj, double *align_x, double *align_y) EINA_ARG_NONNULL(1);
1481
1482    EAPI void               elm_gengrid_reorder_mode_set(Evas_Object *obj, Eina_Bool reorder_mode) EINA_ARG_NONNULL(1);
1483    EAPI Eina_Bool          elm_gengrid_reorder_mode_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1484    EAPI void               elm_gengrid_always_select_mode_set(Evas_Object *obj, Eina_Bool always_select) EINA_ARG_NONNULL(1);
1485    EAPI Eina_Bool          elm_gengrid_always_select_mode_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1486    EAPI void               elm_gengrid_no_select_mode_set(Evas_Object *obj, Eina_Bool no_select) EINA_ARG_NONNULL(1);
1487    EAPI Eina_Bool          elm_gengrid_no_select_mode_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1488    EAPI void               elm_gengrid_multi_select_set(Evas_Object *obj, Eina_Bool multi) EINA_ARG_NONNULL(1);
1489    EAPI Eina_Bool          elm_gengrid_multi_select_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1490    EAPI void               elm_gengrid_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_bounce) EINA_ARG_NONNULL(1);
1491    EAPI void               elm_gengrid_bounce_get(const Evas_Object *obj, Eina_Bool *h_bounce, Eina_Bool *v_bounce) EINA_ARG_NONNULL(1);
1492    EAPI void               elm_gengrid_page_relative_set(Evas_Object *obj, double h_pagerel, double v_pagerel) EINA_ARG_NONNULL(1);
1493    EAPI void               elm_gengrid_page_relative_get(const Evas_Object *obj, double *h_pagerel, double *v_pagerel) EINA_ARG_NONNULL(1);
1494    EAPI void               elm_gengrid_page_size_set(Evas_Object *obj, Evas_Coord h_pagesize, Evas_Coord v_pagesize) EINA_ARG_NONNULL(1);
1495    EAPI void               elm_gengrid_horizontal_set(Evas_Object *obj, Eina_Bool setting) EINA_ARG_NONNULL(1);
1496    EAPI Eina_Bool          elm_gengrid_horizontal_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1497
1498    EAPI Elm_Gengrid_Item  *elm_gengrid_first_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1499    EAPI Elm_Gengrid_Item  *elm_gengrid_last_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1500
1501    EAPI Elm_Gengrid_Item  *elm_gengrid_item_next_get(const Elm_Gengrid_Item *item) EINA_ARG_NONNULL(1);
1502    EAPI Elm_Gengrid_Item  *elm_gengrid_item_prev_get(const Elm_Gengrid_Item *item) EINA_ARG_NONNULL(1);
1503    EAPI Evas_Object       *elm_gengrid_item_gengrid_get(const Elm_Gengrid_Item *item) EINA_ARG_NONNULL(1);
1504    EAPI void               elm_gengrid_item_del(Elm_Gengrid_Item *item) EINA_ARG_NONNULL(1);
1505    EAPI void               elm_gengrid_item_update(Elm_Gengrid_Item *item) EINA_ARG_NONNULL(1);
1506    EAPI void              *elm_gengrid_item_data_get(const Elm_Gengrid_Item *item) EINA_ARG_NONNULL(1);
1507    EAPI void               elm_gengrid_item_data_set(Elm_Gengrid_Item *item, const void *data) EINA_ARG_NONNULL(1);
1508    EAPI void               elm_gengrid_item_pos_get(const Elm_Gengrid_Item *item, unsigned int *x, unsigned int *y) EINA_ARG_NONNULL(1);
1509    EAPI void               elm_gengrid_item_selected_set(Elm_Gengrid_Item *item, Eina_Bool selected) EINA_ARG_NONNULL(1);
1510    EAPI Eina_Bool          elm_gengrid_item_selected_get(const Elm_Gengrid_Item *item) EINA_ARG_NONNULL(1);
1511    EAPI const Evas_Object *elm_gengrid_item_object_get(const Elm_Gengrid_Item *item) EINA_ARG_NONNULL(1);
1512    EAPI void               elm_gengrid_item_show(Elm_Gengrid_Item *item) EINA_ARG_NONNULL(1);
1513    EAPI void               elm_gengrid_item_bring_in(Elm_Gengrid_Item *item) EINA_ARG_NONNULL(1);
1514    EAPI void               elm_gengrid_item_disabled_set(Elm_Gengrid_Item *item, Eina_Bool disabled) EINA_ARG_NONNULL(1);
1515    EAPI Eina_Bool          elm_gengrid_item_disabled_get(const Elm_Gengrid_Item *item) EINA_ARG_NONNULL(1);
1516
1517    EAPI void               elm_gengrid_item_tooltip_text_set(Elm_Gengrid_Item *item, const char *text) EINA_ARG_NONNULL(1);
1518    EAPI void               elm_gengrid_item_tooltip_content_cb_set(Elm_Gengrid_Item *item, Elm_Tooltip_Item_Content_Cb func, const void *data, Evas_Smart_Cb del_cb) EINA_ARG_NONNULL(1);
1519    EAPI void               elm_gengrid_item_tooltip_unset(Elm_Gengrid_Item *item) EINA_ARG_NONNULL(1);
1520    EAPI void               elm_gengrid_item_tooltip_style_set(Elm_Gengrid_Item *item, const char *style) EINA_ARG_NONNULL(1);
1521    EAPI const char        *elm_gengrid_item_tooltip_style_get(const Elm_Gengrid_Item *item) EINA_ARG_NONNULL(1);
1522    EAPI void               elm_gengrid_item_cursor_set(Elm_Gengrid_Item *item, const char *cursor) EINA_ARG_NONNULL(1);
1523    EAPI const char        *elm_gengrid_item_cursor_get(const Elm_Gengrid_Item *item) EINA_ARG_NONNULL(1);
1524    EAPI void               elm_gengrid_item_cursor_unset(Elm_Gengrid_Item *item) EINA_ARG_NONNULL(1);
1525    EAPI void               elm_gengrid_item_cursor_style_set(Elm_Gengrid_Item *item, const char *style) EINA_ARG_NONNULL(1);
1526    EAPI const char        *elm_gengrid_item_cursor_style_get(const Elm_Gengrid_Item *item) EINA_ARG_NONNULL(1);
1527    EAPI void               elm_gengrid_item_cursor_engine_only_set(Elm_Gengrid_Item *item, Eina_Bool engine_only) EINA_ARG_NONNULL(1);
1528    EAPI Eina_Bool          elm_gengrid_item_cursor_engine_only_get(const Elm_Gengrid_Item *item) EINA_ARG_NONNULL(1);
1529
1530    EAPI void               elm_gengrid_clear(Evas_Object *obj) EINA_ARG_NONNULL(1);
1531    EAPI Elm_Gengrid_Item  *elm_gengrid_selected_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1532    EAPI const Eina_List   *elm_gengrid_selected_items_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1533
1534    EAPI Elm_Gengrid_Item  *elm_gengrid_item_append(Evas_Object *obj, const Elm_Gengrid_Item_Class *gic,  const void *data, Evas_Smart_Cb func, const void *func_data) EINA_ARG_NONNULL(1);
1535    EAPI Elm_Gengrid_Item  *elm_gengrid_item_prepend(Evas_Object *obj, const Elm_Gengrid_Item_Class *gic, const void *data, Evas_Smart_Cb func, const void *func_data) EINA_ARG_NONNULL(1);
1536    EAPI Elm_Gengrid_Item  *elm_gengrid_item_insert_before(Evas_Object *obj, const Elm_Gengrid_Item_Class *gic, const void *data, Elm_Gengrid_Item *relative, Evas_Smart_Cb func, const void *func_data) EINA_ARG_NONNULL(1);
1537    EAPI Elm_Gengrid_Item  *elm_gengrid_item_insert_after(Evas_Object *obj, const Elm_Gengrid_Item_Class *gic, const void *data, Elm_Gengrid_Item *relative, Evas_Smart_Cb func, const void *func_data) EINA_ARG_NONNULL(1);
1538    /* smart callbacks called:
1539     *
1540     * selected - User has selected an item.
1541     * unselected - User has unselected an item.
1542     * clicked,double - User has double-clicked or pressed enter on an item.
1543     * realized - An evas object for an item was built.
1544     * unrealized - An evas object for an item was deleted.
1545     * changed - An item has been added, removed, resized or moved,
1546     * or gengrid has been resized or horizontal property has been changed.
1547     * scroll - the content has been scrolled (moved).
1548     * "scroll,drag,start" - dragging the contents around has started.
1549     * "scroll,drat,stop" - dragging the contents around has stopped.
1550     * drag - Gengrid is being dragged.
1551     * "drag,start,up" - Gengrid has been dragged (not scrolled) up.
1552     * "drag,start,down" - Gengrid has been dragged (not scrolled) down.
1553     * "drag,start,left" - Gengrid has been dragged (not scrolled) left.
1554     * "drag,start,rigth" - Gengrid has been dragged (nto scrolled) right.
1555     * "drag,stop" - Gengrid is not being dragged.
1556     */
1557
1558    /* clock */
1559    typedef enum _Elm_Clock_Digedit
1560      {
1561         ELM_CLOCK_NONE         = 0,
1562         ELM_CLOCK_HOUR_DECIMAL = 1 << 0,
1563         ELM_CLOCK_HOUR_UNIT    = 1 << 1,
1564         ELM_CLOCK_MIN_DECIMAL  = 1 << 2,
1565         ELM_CLOCK_MIN_UNIT     = 1 << 3,
1566         ELM_CLOCK_SEC_DECIMAL  = 1 << 4,
1567         ELM_CLOCK_SEC_UNIT     = 1 << 5,
1568         ELM_CLOCK_ALL          = (1 << 6) - 1
1569      } Elm_Clock_Digedit;
1570
1571    EAPI Evas_Object      *elm_clock_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
1572    EAPI void              elm_clock_time_set(Evas_Object *obj, int hrs, int min, int sec) EINA_ARG_NONNULL(1);
1573    EAPI void              elm_clock_time_get(const Evas_Object *obj, int *hrs, int *min, int *sec) EINA_ARG_NONNULL(1);
1574    EAPI void              elm_clock_edit_set(Evas_Object *obj, Eina_Bool edit) EINA_ARG_NONNULL(1);
1575    EAPI Eina_Bool         elm_clock_edit_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1576    EAPI void              elm_clock_digit_edit_set(Evas_Object *obj, Elm_Clock_Digedit digedit) EINA_ARG_NONNULL(1);
1577    EAPI Elm_Clock_Digedit elm_clock_digit_edit_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1578    EAPI void              elm_clock_show_am_pm_set(Evas_Object *obj, Eina_Bool am_pm) EINA_ARG_NONNULL(1);
1579    EAPI Eina_Bool         elm_clock_show_am_pm_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1580    EAPI void              elm_clock_show_seconds_set(Evas_Object *obj, Eina_Bool seconds) EINA_ARG_NONNULL(1);
1581    EAPI Eina_Bool         elm_clock_show_seconds_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1582    EAPI void              elm_clock_interval_set(Evas_Object *obj, double interval) EINA_ARG_NONNULL(1);
1583    EAPI double            elm_clock_interval_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1584    /* smart callbacks called:
1585     * "changed" - the user changed the time
1586     */
1587
1588    /* layout */
1589    EAPI Evas_Object       *elm_layout_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
1590    EAPI Eina_Bool          elm_layout_file_set(Evas_Object *obj, const char *file, const char *group) EINA_ARG_NONNULL(1);
1591    EAPI Eina_Bool          elm_layout_theme_set(Evas_Object *obj, const char *clas, const char *group, const char *style) EINA_ARG_NONNULL(1);
1592    EAPI void               elm_layout_content_set(Evas_Object *obj, const char *swallow, Evas_Object *content) EINA_ARG_NONNULL(1);
1593    EAPI Evas_Object       *elm_layout_content_get(const Evas_Object *obj, const char *swallow) EINA_ARG_NONNULL(1);
1594    EAPI Evas_Object       *elm_layout_content_unset(Evas_Object *obj, const char *swallow) EINA_ARG_NONNULL(1);
1595    EAPI void               elm_layout_text_set(Evas_Object *obj, const char *part, const char *text) EINA_ARG_NONNULL(1);
1596    EAPI const char        *elm_layout_text_get(const Evas_Object *obj, const char *part) EINA_ARG_NONNULL(1);
1597    EAPI void               elm_layout_box_append(Evas_Object *obj, const char *part, Evas_Object *child) EINA_ARG_NONNULL(1);
1598    EAPI void               elm_layout_box_prepend(Evas_Object *obj, const char *part, Evas_Object *child) EINA_ARG_NONNULL(1);
1599    EAPI void               elm_layout_box_insert_before(Evas_Object *obj, const char *part, Evas_Object *child, const Evas_Object *reference) EINA_ARG_NONNULL(1);
1600    EAPI void               elm_layout_box_insert_at(Evas_Object *obj, const char *part, Evas_Object *child, unsigned int pos) EINA_ARG_NONNULL(1);
1601    EAPI Evas_Object       *elm_layout_box_remove(Evas_Object *obj, const char *part, Evas_Object *child) EINA_ARG_NONNULL(1, 2, 3);
1602    EAPI void               elm_layout_box_remove_all(Evas_Object *obj, const char *part, Eina_Bool clear) EINA_ARG_NONNULL(1, 2);
1603    EAPI void               elm_layout_table_pack(Evas_Object *obj, const char *part, Evas_Object *child_obj, unsigned short col, unsigned short row, unsigned short colspan, unsigned short rowspan) EINA_ARG_NONNULL(1);
1604    EAPI Evas_Object       *elm_layout_table_unpack(Evas_Object *obj, const char *part, Evas_Object *child_obj) EINA_ARG_NONNULL(1, 2, 3);
1605    EAPI void               elm_layout_table_clear(Evas_Object *obj, const char *part, Eina_Bool clear) EINA_ARG_NONNULL(1, 2);
1606    EAPI Evas_Object       *elm_layout_edje_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1607    EAPI const char        *elm_layout_data_get(const Evas_Object *obj, const char *key) EINA_ARG_NONNULL(1, 2);
1608    EAPI void               elm_layout_sizing_eval(Evas_Object *obj) EINA_ARG_NONNULL(1);
1609    EAPI Eina_Bool          elm_layout_part_cursor_set(Evas_Object *obj, const char *part_name, const char *cursor) EINA_ARG_NONNULL(1, 2);
1610    EAPI const char        *elm_layout_part_cursor_get(const Evas_Object *obj, const char *part_name) EINA_ARG_NONNULL(1, 2);
1611    EAPI void               elm_layout_part_cursor_unset(Evas_Object *obj, const char *part_name) EINA_ARG_NONNULL(1, 2);
1612    EAPI Eina_Bool          elm_layout_part_cursor_style_set(Evas_Object *obj, const char *part_name, const char *style) EINA_ARG_NONNULL(1, 2);
1613    EAPI const char        *elm_layout_part_cursor_style_get(const Evas_Object *obj, const char *part_name) EINA_ARG_NONNULL(1, 2);
1614    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);
1615    EAPI Eina_Bool          elm_layout_part_cursor_engine_only_get(const Evas_Object *obj, const char *part_name) EINA_ARG_NONNULL(1, 2);
1616 /**
1617  * @def elm_layout_icon_set
1618  * Convienience macro to set the icon object in a layout that follows the
1619  * Elementary naming convention for its parts.
1620  *
1621  * @ingroup Layout
1622  */
1623 #define elm_layout_icon_set(_ly, _obj) \
1624   do { \
1625     const char *sig; \
1626     elm_layout_content_set((_ly), "elm.swallow.icon", (_obj)); \
1627     if ((_obj)) sig = "elm,state,icon,visible"; \
1628     else sig = "elm,state,icon,hidden"; \
1629     elm_object_signal_emit((_ly), sig, "elm"); \
1630   } while (0)
1631
1632 /**
1633  * @def elm_layout_icon_get
1634  * Convienience macro to get the icon object from a layout that follows the
1635  * Elementary naming convention for its parts.
1636  *
1637  * @ingroup Layout
1638  */
1639 #define elm_layout_icon_get(_ly) \
1640   elm_layout_content_get((_ly), "elm.swallow.icon")
1641
1642 /**
1643  * @def elm_layout_end_set
1644  * Convienience macro to set the end object in a layout that follows the
1645  * Elementary naming convention for its parts.
1646  *
1647  * @ingroup Layout
1648  */
1649 #define elm_layout_end_set(_ly, _obj) \
1650   do { \
1651     const char *sig; \
1652     elm_layout_content_set((_ly), "elm.swallow.end", (_obj)); \
1653     if ((_obj)) sig = "elm,state,end,visible"; \
1654     else sig = "elm,state,end,hidden"; \
1655     elm_object_signal_emit((_ly), sig, "elm"); \
1656   } while (0)
1657
1658 /**
1659  * @def elm_layout_end_get
1660  * Convienience macro to get the end object in a layout that follows the
1661  * Elementary naming convention for its parts.
1662  *
1663  * @ingroup Layout
1664  */
1665 #define elm_layout_end_get(_ly) \
1666   elm_layout_content_get((_ly), "elm.swallow.end")
1667
1668 /**
1669  * @def elm_layout_label_set
1670  * Convienience macro to set the label in a layout that follows the
1671  * Elementary naming convention for its parts.
1672  *
1673  * @ingroup Layout
1674  */
1675 #define elm_layout_label_set(_ly, _txt) \
1676   elm_layout_text_set((_ly), "elm.text", (_txt))
1677
1678 /**
1679  * @def elm_layout_label_get
1680  * Convienience macro to get the label in a layout that follows the
1681  * Elementary naming convention for its parts.
1682  *
1683  * @ingroup Layout
1684  */
1685 #define elm_layout_label_get(_ly) \
1686   elm_layout_text_get((_ly), "elm.text")
1687
1688    /* smart callbacks called:
1689     */
1690
1691    /* notify */
1692    typedef enum _Elm_Notify_Orient
1693      {
1694         ELM_NOTIFY_ORIENT_TOP,
1695         ELM_NOTIFY_ORIENT_CENTER,
1696         ELM_NOTIFY_ORIENT_BOTTOM,
1697         ELM_NOTIFY_ORIENT_LEFT,
1698         ELM_NOTIFY_ORIENT_RIGHT,
1699         ELM_NOTIFY_ORIENT_TOP_LEFT,
1700         ELM_NOTIFY_ORIENT_TOP_RIGHT,
1701         ELM_NOTIFY_ORIENT_BOTTOM_LEFT,
1702         ELM_NOTIFY_ORIENT_BOTTOM_RIGHT,
1703         ELM_NOTIFY_ORIENT_LAST
1704      } Elm_Notify_Orient;
1705    EAPI Evas_Object      *elm_notify_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
1706    EAPI void              elm_notify_content_set(Evas_Object *obj, Evas_Object *content) EINA_ARG_NONNULL(1);
1707    EAPI Evas_Object      *elm_notify_content_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
1708    EAPI Evas_Object      *elm_notify_content_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1709    EAPI void              elm_notify_parent_set(Evas_Object *obj, Evas_Object *parent) EINA_ARG_NONNULL(1);
1710    EAPI Evas_Object      *elm_notify_parent_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1711    EAPI void              elm_notify_orient_set(Evas_Object *obj, Elm_Notify_Orient orient) EINA_ARG_NONNULL(1);
1712    EAPI Elm_Notify_Orient elm_notify_orient_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1713    EAPI void              elm_notify_timeout_set(Evas_Object *obj, double timeout) EINA_ARG_NONNULL(1);
1714    EAPI double            elm_notify_timeout_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1715    EAPI void              elm_notify_repeat_events_set(Evas_Object *obj, Eina_Bool repeat) EINA_ARG_NONNULL(1);
1716    EAPI Eina_Bool         elm_notify_repeat_events_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1717    /* smart callbacks called:
1718     * "timeout" - when timeout happens on notify and it's hidden
1719     * "block,clicked" - when it's hidden by a click outside of the notify's view
1720     */
1721
1722    /* hover */
1723    typedef enum _Elm_Hover_Axis
1724      {
1725         ELM_HOVER_AXIS_NONE,
1726         ELM_HOVER_AXIS_HORIZONTAL,
1727         ELM_HOVER_AXIS_VERTICAL,
1728         ELM_HOVER_AXIS_BOTH
1729      } Elm_Hover_Axis;
1730    EAPI Evas_Object *elm_hover_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
1731    EAPI void         elm_hover_target_set(Evas_Object *obj, Evas_Object *target) EINA_ARG_NONNULL(1);
1732    EAPI Evas_Object *elm_hover_target_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1733    EAPI void         elm_hover_parent_set(Evas_Object *obj, Evas_Object *parent) EINA_ARG_NONNULL(1);
1734    EAPI Evas_Object *elm_hover_parent_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1735    EAPI void         elm_hover_content_set(Evas_Object *obj, const char *swallow, Evas_Object *content) EINA_ARG_NONNULL(1);
1736    EAPI Evas_Object *elm_hover_content_get(const Evas_Object *obj, const char *swallow) EINA_ARG_NONNULL(1);
1737    EAPI Evas_Object *elm_hover_content_unset(Evas_Object *obj, const char *swallow) EINA_ARG_NONNULL(1);
1738    EAPI const char  *elm_hover_best_content_location_get(const Evas_Object *obj, Elm_Hover_Axis pref_axis) EINA_ARG_NONNULL(1);
1739    /* available styles:
1740     * default
1741     * popout
1742     * menu
1743     * hoversel_vertical
1744     */
1745    /* smart callbacks called:
1746     * "clicked" - the user clicked the empty space in the hover to dismiss
1747     * "smart,changed" - a content object placed under the "smart"
1748     *                   policy was replaced to a new slot direction.
1749     */
1750
1751    /* entry */
1752    typedef struct _Elm_Entry_Anchor_Info Elm_Entry_Anchor_Info;
1753    struct _Elm_Entry_Anchor_Info
1754      {
1755         const char *name;
1756         int         button;
1757         Evas_Coord  x, y, w, h;
1758      };
1759    typedef enum _Elm_Icon_Type
1760      {
1761         ELM_ICON_NONE,
1762         ELM_ICON_FILE,
1763         ELM_ICON_STANDARD
1764      } Elm_Icon_Type;
1765    typedef struct _Elm_Hoversel_Item Elm_Hoversel_Item; /**< Item of Elm_Hoversel. Sub-type of Elm_Widget_Item */
1766
1767    EAPI Evas_Object *elm_entry_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
1768    EAPI void         elm_entry_single_line_set(Evas_Object *obj, Eina_Bool single_line) EINA_ARG_NONNULL(1);
1769    EAPI Eina_Bool    elm_entry_single_line_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1770    EAPI void         elm_entry_password_set(Evas_Object *obj, Eina_Bool password) EINA_ARG_NONNULL(1);
1771    EAPI Eina_Bool    elm_entry_password_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1772    EAPI void         elm_entry_entry_set(Evas_Object *obj, const char *entry) EINA_ARG_NONNULL(1);
1773    EAPI const char  *elm_entry_entry_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1774    EAPI void         elm_entry_entry_append(Evas_Object *obj, const char *entry) EINA_ARG_NONNULL(1);
1775    EAPI Eina_Bool    elm_entry_is_empty(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1776    EAPI const char  *elm_entry_selection_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1777    EAPI void         elm_entry_entry_insert(Evas_Object *obj, const char *entry) EINA_ARG_NONNULL(1);
1778    EAPI void         elm_entry_line_wrap_set(Evas_Object *obj, Elm_Wrap_Type wrap) EINA_ARG_NONNULL(1);
1779    EAPI void         elm_entry_editable_set(Evas_Object *obj, Eina_Bool editable) EINA_ARG_NONNULL(1);
1780    EAPI Eina_Bool    elm_entry_editable_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1781    EAPI void         elm_entry_select_none(Evas_Object *obj) EINA_ARG_NONNULL(1);
1782    EAPI void         elm_entry_select_all(Evas_Object *obj) EINA_ARG_NONNULL(1);
1783    EAPI Eina_Bool    elm_entry_cursor_next(Evas_Object *obj) EINA_ARG_NONNULL(1);
1784    EAPI Eina_Bool    elm_entry_cursor_prev(Evas_Object *obj) EINA_ARG_NONNULL(1);
1785    EAPI Eina_Bool    elm_entry_cursor_up(Evas_Object *obj) EINA_ARG_NONNULL(1);
1786    EAPI Eina_Bool    elm_entry_cursor_down(Evas_Object *obj) EINA_ARG_NONNULL(1);
1787    EAPI void         elm_entry_cursor_begin_set(Evas_Object *obj) EINA_ARG_NONNULL(1);
1788    EAPI void         elm_entry_cursor_end_set(Evas_Object *obj) EINA_ARG_NONNULL(1);
1789    EAPI void         elm_entry_cursor_line_begin_set(Evas_Object *obj) EINA_ARG_NONNULL(1);
1790    EAPI void         elm_entry_cursor_line_end_set(Evas_Object *obj) EINA_ARG_NONNULL(1);
1791    EAPI void         elm_entry_cursor_selection_begin(Evas_Object *obj) EINA_ARG_NONNULL(1);
1792    EAPI void         elm_entry_cursor_selection_end(Evas_Object *obj) EINA_ARG_NONNULL(1);
1793    EAPI Eina_Bool    elm_entry_cursor_is_format_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1794    EAPI Eina_Bool    elm_entry_cursor_is_visible_format_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1795    EAPI const char  *elm_entry_cursor_content_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1796    EAPI Eina_Bool    elm_entry_cursor_geometry_get(const Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h) EINA_ARG_NONNULL(1);
1797    EAPI void         elm_entry_cursor_pos_set(Evas_Object *obj, int pos) EINA_ARG_NONNULL(1);
1798    EAPI int          elm_entry_cursor_pos_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1799    EAPI void         elm_entry_selection_cut(Evas_Object *obj) EINA_ARG_NONNULL(1);
1800    EAPI void         elm_entry_selection_copy(Evas_Object *obj) EINA_ARG_NONNULL(1);
1801    EAPI void         elm_entry_selection_paste(Evas_Object *obj) EINA_ARG_NONNULL(1);
1802    EAPI void         elm_entry_context_menu_clear(Evas_Object *obj) EINA_ARG_NONNULL(1);
1803    EAPI void         elm_entry_context_menu_item_add(Evas_Object *obj, const char *label, const char *icon_file, Elm_Icon_Type icon_type, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1);
1804    EAPI void         elm_entry_context_menu_disabled_set(Evas_Object *obj, Eina_Bool disabled) EINA_ARG_NONNULL(1);
1805    EAPI Eina_Bool    elm_entry_context_menu_disabled_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1806    EAPI void         elm_entry_item_provider_append(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *entry, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
1807    EAPI void         elm_entry_item_provider_prepend(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *entry, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
1808    EAPI void         elm_entry_item_provider_remove(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *entry, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
1809    EAPI void         elm_entry_text_filter_append(Evas_Object *obj, void (*func) (void *data, Evas_Object *entry, char **text), void *data) EINA_ARG_NONNULL(1, 2);
1810    EAPI void         elm_entry_text_filter_prepend(Evas_Object *obj, void (*func) (void *data, Evas_Object *entry, char **text), void *data) EINA_ARG_NONNULL(1, 2);
1811    EAPI void         elm_entry_text_filter_remove(Evas_Object *obj, void (*func) (void *data, Evas_Object *entry, char **text), void *data) EINA_ARG_NONNULL(1, 2);
1812    EAPI char        *elm_entry_markup_to_utf8(const char *s) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
1813    EAPI char        *elm_entry_utf8_to_markup(const char *s) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
1814    EAPI void         elm_entry_file_set(Evas_Object *obj, const char *file, Elm_Text_Format format) EINA_ARG_NONNULL(1);
1815    EAPI void         elm_entry_file_get(const Evas_Object *obj, const char **file, Elm_Text_Format *format) EINA_ARG_NONNULL(1);
1816    EAPI void         elm_entry_file_save(Evas_Object *obj) EINA_ARG_NONNULL(1);
1817    EAPI void         elm_entry_autosave_set(Evas_Object *obj, Eina_Bool autosave) EINA_ARG_NONNULL(1);
1818    EAPI Eina_Bool    elm_entry_autosave_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1819    EAPI void         elm_entry_cnp_textonly_set(Evas_Object *obj, Eina_Bool textonly) EINA_ARG_NONNULL(1);
1820    EAPI Eina_Bool    elm_entry_cnp_textonly_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1821    EAPI void         elm_entry_scrollable_set(Evas_Object *obj, Eina_Bool scroll);
1822    EAPI Eina_Bool    elm_entry_scrollable_get(const Evas_Object *obj);
1823    EAPI void         elm_entry_icon_set(Evas_Object *obj, Evas_Object *icon);
1824    EAPI Evas_Object *elm_entry_icon_get(const Evas_Object *obj);
1825    EAPI Evas_Object *elm_entry_icon_unset(Evas_Object *obj);
1826    EAPI void         elm_entry_icon_visible_set(Evas_Object *obj, Eina_Bool setting);
1827    EAPI void         elm_entry_end_set(Evas_Object *obj, Evas_Object *end);
1828    EAPI Evas_Object *elm_entry_end_get(const Evas_Object *obj);
1829    EAPI Evas_Object *elm_entry_end_unset(Evas_Object *obj);
1830    EAPI void         elm_entry_end_visible_set(Evas_Object *obj, Eina_Bool setting);
1831    EAPI void         elm_entry_scrollbar_policy_set(Evas_Object *obj, Elm_Scroller_Policy h, Elm_Scroller_Policy v);
1832    EAPI void         elm_entry_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_bounce);
1833    EAPI void         elm_entry_bounce_get(const Evas_Object *obj, Eina_Bool *h_bounce, Eina_Bool *v_bounce);
1834          
1835    /* pre-made filters for entries */
1836    typedef struct _Elm_Entry_Filter_Limit_Size Elm_Entry_Filter_Limit_Size;
1837    struct _Elm_Entry_Filter_Limit_Size
1838      {
1839         int max_char_count;
1840         int max_byte_count;
1841      };
1842    EAPI void         elm_entry_filter_limit_size(void *data, Evas_Object *entry, char **text) EINA_ARG_NONNULL(1, 2, 3);
1843    typedef struct _Elm_Entry_Filter_Accept_Set Elm_Entry_Filter_Accept_Set;
1844    struct _Elm_Entry_Filter_Accept_Set
1845      {
1846         const char *accepted;
1847         const char *rejected;
1848      };
1849    EAPI void         elm_entry_filter_accept_set(void *data, Evas_Object *entry, char **text) EINA_ARG_NONNULL(1, 3);
1850    /* smart callbacks called:
1851     * "changed" - the text content changed
1852     * "selection,start" - the user started selecting text
1853     * "selection,changed" - the user modified the selection size/location
1854     * "selection,cleared" - the user cleared the selection
1855     * "selection,paste" - the user requested a paste of text
1856     * "selection,copy" - the user copied the text
1857     * "selection,cut" - the user cut the text
1858     * "cursor,changed" - the cursor changed position
1859     * "anchor,clicked" - achor called was clicked | event_info = Elm_Entry_Anchor_Info
1860     * "activated" - when the enter key is pressed (useful for single line)
1861     * "press" - when finger/mouse is pressed down
1862     * "clicked" - when finger/mouse is pressed and released (without a drag etc.)
1863     * "clicked,double" - when finger/mouse is double-pressed
1864     * "longpressed" - the entry has been longpressed
1865     * "focused" - the entry has received keyboard focus
1866     * "unfocused" - keyboard focus is gone
1867     */
1868
1869    /* composite widgets - these basically put together basic widgets above
1870     * in convenient packages that do more than basic stuff */
1871
1872    /* anchorview */
1873    /**
1874     * @defgroup Anchorview Anchorview
1875     *
1876     * Anchorview is for displaying text that contains markup with anchors
1877     * like <c>\<a href=1234\>something\</\></c> in it.
1878     *
1879     * Besides being styled differently, the anchorview widget provides the
1880     * necessary functionality so that clicking on these anchors brings up a
1881     * popup with user defined content such as "call", "add to contacts" or
1882     * "open web page". This popup is provided using the @ref Hover widget.
1883     *
1884     * This widget is very similar to @ref Anchorblock, so refer to that
1885     * widget for an example. The only difference Anchorview has is that the
1886     * widget is already provided with scrolling functionality, so if the
1887     * text set to it is too large to fit in the given space, it will scroll,
1888     * whereas the @ref Anchorblock widget will keep growing to ensure all the
1889     * text can be displayed.
1890     *
1891     * This widget emits the following signals:
1892     * @li "anchor,clicked": will be called when an anchor is clicked. The
1893     * @p event_info parameter on the callback will be a pointer of type
1894     * ::Elm_Entry_Anchorview_Info.
1895     *
1896     * See @ref Anchorblock for an example on how to use both of them.
1897     *
1898     * @see Anchorblock
1899     * @see Entry
1900     * @see Hover
1901     *
1902     * @{
1903     */
1904    /**
1905     * @typedef Elm_Entry_Anchorview_Info
1906     *
1907     * The info sent in the callback for "anchor,clicked" signals emitted by
1908     * the Anchorview widget.
1909     */
1910    typedef struct _Elm_Entry_Anchorview_Info Elm_Entry_Anchorview_Info;
1911    /**
1912     * @struct _Elm_Entry_Anchorview_Info
1913     *
1914     * The info sent in the callback for "anchor,clicked" signals emitted by
1915     * the Anchorview widget.
1916     */
1917    struct _Elm_Entry_Anchorview_Info
1918      {
1919         const char     *name; /**< Name of the anchor, as indicated in its href
1920                                    attribute */
1921         int             button; /**< The mouse button used to click on it */
1922         Evas_Object    *hover; /**< The hover object to use for the popup */
1923         struct {
1924              Evas_Coord    x, y, w, h;
1925         } anchor, /**< Geometry selection of text used as anchor */
1926           hover_parent; /**< Geometry of the object used as parent by the
1927                              hover */
1928         Eina_Bool       hover_left : 1; /**< Hint indicating if there's space
1929                                              for content on the left side of
1930                                              the hover. Before calling the
1931                                              callback, the widget will make the
1932                                              necessary calculations to check
1933                                              which sides are fit to be set with
1934                                              content, based on the position the
1935                                              hover is activated and its distance
1936                                              to the edges of its parent object
1937                                              */
1938         Eina_Bool       hover_right : 1; /**< Hint indicating content fits on
1939                                               the right side of the hover.
1940                                               See @ref hover_left */
1941         Eina_Bool       hover_top : 1; /**< Hint indicating content fits on top
1942                                             of the hover. See @ref hover_left */
1943         Eina_Bool       hover_bottom : 1; /**< Hint indicating content fits
1944                                                below the hover. See @ref
1945                                                hover_left */
1946      };
1947    /**
1948     * Add a new Anchorview object
1949     *
1950     * @param parent The parent object
1951     * @return The new object or NULL if it cannot be created
1952     */
1953    EAPI Evas_Object *elm_anchorview_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
1954    /**
1955     * Set the text to show in the anchorview
1956     *
1957     * Sets the text of the anchorview to @p text. This text can include markup
1958     * format tags, including <c>\<a href=anchorname\></c> to begin a segment of
1959     * text that will be specially styled and react to click events, ended with
1960     * either of \</a\> or \</\>. When clicked, the anchor will emit an
1961     * "anchor,clicked" signal that you can attach a callback to with
1962     * evas_object_smart_callback_add(). The name of the anchor given in the
1963     * event info struct will be the one set in the href attribute, in this
1964     * case, anchorname.
1965     *
1966     * Other markup can be used to style the text in different ways, but it's
1967     * up to the style defined in the theme which tags do what.
1968     */
1969    EAPI void         elm_anchorview_text_set(Evas_Object *obj, const char *text) EINA_ARG_NONNULL(1);
1970    /**
1971     * Get the markup text set for the anchorview
1972     *
1973     * Retrieves the text set on the anchorview, with markup tags included.
1974     *
1975     * @param obj The anchorview object
1976     * @return The markup text set or @c NULL if nothing was set or an error
1977     * occurred
1978     */
1979    EAPI const char  *elm_anchorview_text_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
1980    /**
1981     * Set the parent of the hover popup
1982     *
1983     * Sets the parent object to use by the hover created by the anchorview
1984     * when an anchor is clicked. See @ref Hover for more details on this.
1985     * If no parent is set, the same anchorview object will be used.
1986     *
1987     * @param obj The anchorview object
1988     * @param parent The object to use as parent for the hover
1989     */
1990    EAPI void         elm_anchorview_hover_parent_set(Evas_Object *obj, Evas_Object *parent) EINA_ARG_NONNULL(1);
1991    /**
1992     * Get the parent of the hover popup
1993     *
1994     * Get the object used as parent for the hover created by the anchorview
1995     * widget. See @ref Hover for more details on this.
1996     *
1997     * @param obj The anchorview object
1998     * @return The object used as parent for the hover, NULL if none is set.
1999     */
2000    EAPI Evas_Object *elm_anchorview_hover_parent_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2001    /**
2002     * Set the style that the hover should use
2003     *
2004     * When creating the popup hover, anchorview will request that it's
2005     * themed according to @p style.
2006     *
2007     * @param obj The anchorview object
2008     * @param style The style to use for the underlying hover
2009     *
2010     * @see elm_object_style_set()
2011     */
2012    EAPI void         elm_anchorview_hover_style_set(Evas_Object *obj, const char *style) EINA_ARG_NONNULL(1);
2013    /**
2014     * Get the style that the hover should use
2015     *
2016     * Get the style the hover created by anchorview will use.
2017     *
2018     * @param obj The anchorview object
2019     * @return The style to use by the hover. NULL means the default is used.
2020     *
2021     * @see elm_object_style_set()
2022     */
2023    EAPI const char  *elm_anchorview_hover_style_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2024    /**
2025     * Ends the hover popup in the anchorview
2026     *
2027     * When an anchor is clicked, the anchorview widget will create a hover
2028     * object to use as a popup with user provided content. This function
2029     * terminates this popup, returning the anchorview to its normal state.
2030     *
2031     * @param obj The anchorview object
2032     */
2033    EAPI void         elm_anchorview_hover_end(Evas_Object *obj) EINA_ARG_NONNULL(1);
2034    /**
2035     * Set bouncing behaviour when the scrolled content reaches an edge
2036     *
2037     * Tell the internal scroller object whether it should bounce or not
2038     * when it reaches the respective edges for each axis.
2039     *
2040     * @param obj The anchorview object
2041     * @param h_bounce Whether to bounce or not in the horizontal axis
2042     * @param v_bounce Whether to bounce or not in the vertical axis
2043     *
2044     * @see elm_scroller_bounce_set()
2045     */
2046    EAPI void         elm_anchorview_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_bounce) EINA_ARG_NONNULL(1);
2047    /**
2048     * Get the set bouncing behaviour of the internal scroller
2049     *
2050     * Get whether the internal scroller should bounce when the edge of each
2051     * axis is reached scrolling.
2052     *
2053     * @param obj The anchorview object
2054     * @param h_bounce Pointer where to store the bounce state of the horizontal
2055     *                 axis
2056     * @param v_bounce Pointer where to store the bounce state of the vertical
2057     *                 axis
2058     *
2059     * @see elm_scroller_bounce_get()
2060     */
2061    EAPI void         elm_anchorview_bounce_get(const Evas_Object *obj, Eina_Bool *h_bounce, Eina_Bool *v_bounce) EINA_ARG_NONNULL(1);
2062    /**
2063     * Appends a custom item provider to the given anchorview
2064     *
2065     * Appends the given function to the list of items providers. This list is
2066     * called, one function at a time, with the given @p data pointer, the
2067     * anchorview object and, in the @p item parameter, the item name as
2068     * referenced in its href string. Following functions in the list will be
2069     * called in order until one of them returns something different to NULL,
2070     * which should be an Evas_Object which will be used in place of the item
2071     * element.
2072     *
2073     * Items in the markup text take the form \<item relsize=16x16 vsize=full
2074     * href=item/name\>\</item\>
2075     *
2076     * @param obj The anchorview object
2077     * @param func The function to add to the list of providers
2078     * @param data User data that will be passed to the callback function
2079     *
2080     * @see elm_entry_item_provider_append()
2081     */
2082    EAPI void         elm_anchorview_item_provider_append(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorview, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
2083    /**
2084     * Prepend a custom item provider to the given anchorview
2085     *
2086     * Like elm_anchorview_item_provider_append(), but it adds the function
2087     * @p func to the beginning of the list, instead of the end.
2088     *
2089     * @param obj The anchorview object
2090     * @param func The function to add to the list of providers
2091     * @param data User data that will be passed to the callback function
2092     */
2093    EAPI void         elm_anchorview_item_provider_prepend(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorview, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
2094    /**
2095     * Remove a custom item provider from the list of the given anchorview
2096     *
2097     * Removes the function and data pairing that matches @p func and @p data.
2098     * That is, unless the same function and same user data are given, the
2099     * function will not be removed from the list. This allows us to add the
2100     * same callback several times, with different @p data pointers and be
2101     * able to remove them later without conflicts.
2102     *
2103     * @param obj The anchorview object
2104     * @param func The function to remove from the list
2105     * @param data The data matching the function to remove from the list
2106     */
2107    EAPI void         elm_anchorview_item_provider_remove(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorview, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
2108    /**
2109     * @}
2110     */
2111
2112    /* anchorblock */
2113    /**
2114     * @defgroup Anchorblock Anchorblock
2115     *
2116     * Anchorblock is for displaying text that contains markup with anchors
2117     * like <c>\<a href=1234\>something\</\></c> in it.
2118     *
2119     * Besides being styled differently, the anchorblock widget provides the
2120     * necessary functionality so that clicking on these anchors brings up a
2121     * popup with user defined content such as "call", "add to contacts" or
2122     * "open web page". This popup is provided using the @ref Hover widget.
2123     *
2124     * This widget emits the following signals:
2125     * @li "anchor,clicked": will be called when an anchor is clicked. The
2126     * @p event_info parameter on the callback will be a pointer of type
2127     * ::Elm_Entry_Anchorblock_Info.
2128     *
2129     * @see Anchorview
2130     * @see Entry
2131     * @see Hover
2132     *
2133     * Since examples are usually better than plain words, we might as well
2134     * try one. This exampel will show both Anchorblock and @ref Anchorview,
2135     * since both are very similar and it's easier to show them once and side
2136     * by side, so the difference is more clear.
2137     *
2138     * We'll show the relevant snippets of the code here, but the full example
2139     * can be found here... sorry, @ref anchorblock_example_01.c "here".
2140     *
2141     * As for the actual example, it's just a simple window with an anchorblock
2142     * and an anchorview, both containing the same text. After including
2143     * Elementary.h and declaring some functions we'll need, we jump to our
2144     * elm_main (see ELM_MAIN) and create our window.
2145     * @dontinclude anchorblock_example_01.c
2146     * @skip int
2147     * @until const char
2148     * @until ;
2149     *
2150     * With the needed variables declared, we'll create the window and a box to
2151     * hold our widgets, but we don't need to go through that here.
2152     *
2153     * In order to make clear where the anchorblock ends and the anchorview
2154     * begins, they'll be each inside a @ref Frame. After creating the frame,
2155     * the anchorblock follows.
2156     * @skip elm_frame_add
2157     * @until elm_frame_content_set
2158     *
2159     * Nothing out of the ordinary there. What's worth mentioning is the call
2160     * to elm_anchorblock_hover_parent_set(). We are telling our widget that
2161     * when an anchor is clicked, the hover for the popup will cover the entire
2162     * window. This affects the area that will be obscured by the hover and
2163     * where clicking will dismiss it, as well as the calculations it does to
2164     * inform the best locations where to insert the popups content.
2165     * Other than that, the code is pretty standard. We also need to set our
2166     * callback for when an anchor is clicked, since it's our task to populate
2167     * the popup. There's no default for it.
2168     *
2169     * The anchorview is no different, we only change a few things so it looks
2170     * different.
2171     * @until elm_frame_content_set
2172     *
2173     * Then we run, so stuff works and close our main function in the usual way.
2174     * @until ELM_MAIN
2175     *
2176     * Now, a little note. Normally you would use either one of anchorblock or
2177     * anchorview, set your one callback to clicks and do your stuff in there.
2178     * In this example, however, there are a few tricks to make it easier to
2179     * show both widgets in one go (and to save me some typing). So we have
2180     * two callbacks, one per widget, that will call a common function to do
2181     * the rest. The trick is using ::Elm_Entry_Anchorblock_Info for the
2182     * anchorview too, since both are equal, and passing a callback to use
2183     * for our buttons to end the hover, because each widget has a different
2184     * function for it.
2185     * @until _anchorview_clicked_cb
2186     * @until }
2187     *
2188     * The meat of our popup is in the following function. We check what kind
2189     * of menu we need to show, based on the name set to the anchor in the
2190     * markup text. If there's no type (something went wrong, no valid contact
2191     * in the address list) we are just putting a button that does nothing, but
2192     * it's perfectly reasonable to just end the hover and call it quits.
2193     *
2194     * Our popup will consist of one main button in the middle of our hover,
2195     * and possibly a secondary button and a list of other options. We'll create
2196     * first our main button and check what kind of popup we need afterwards.
2197     * @skip static void
2198     * @skip static void
2199     * @until eina_stringshare_add
2200     * @until }
2201     *
2202     * Each button has two callbacks, one is our hack to close the hover
2203     * properly based on which widget it belongs to, the other a simple
2204     * printf that will show the action with the anchors own data. This is
2205     * not how you would usually do it. Instead, the common case is to have
2206     * one callback for the button that will know which function to call to end
2207     * things, but since we are doing it this way it's worth noting that
2208     * smart callbacks will be called in reverse in respect to the order they
2209     * were added, and since our @c btn_end_cb will close the hover, and thus
2210     * delete our buttons, the other callback wouldn't be called if we had
2211     * added it before.
2212     *
2213     * After our telephone popup, there are a few others that are practically
2214     * the same, so they won't be shown here.
2215     *
2216     * Once we are done with that, it's time to place our actions into our
2217     * hover. Main button goes in the middle without much questioning, and then
2218     * we see if we have a secondary button and a box of extra options.
2219     * Because I said so, secondary button goes on either side and box of
2220     * options either on top or below the main one, but to choose which
2221     * exactly, we use the hints our callback info has, which saves us from
2222     * having to do the math and see which side has more space available, with
2223     * a little special case where we delete our extra stuff if there's nowhere
2224     * to place it.
2225     * @skip url:
2226     * @skip }
2227     * @skip evas_object_smart
2228     * @until evas_object_del(box)
2229     * @until }
2230     * @until }
2231     */
2232    /**
2233     * @example anchorblock_example_01.c
2234     */
2235    /**
2236     * @addtogroup Anchorblock
2237     * @{
2238     */
2239    /**
2240     * @typedef Elm_Entry_Anchorblock_Info
2241     *
2242     * The info sent in the callback for "anchor,clicked" signals emitted by
2243     * the Anchorblock widget.
2244     */
2245    typedef struct _Elm_Entry_Anchorblock_Info Elm_Entry_Anchorblock_Info;
2246    /**
2247     * @struct _Elm_Entry_Anchorblock_Info
2248     *
2249     * The info sent in the callback for "anchor,clicked" signals emitted by
2250     * the Anchorblock widget.
2251     */
2252    struct _Elm_Entry_Anchorblock_Info
2253      {
2254         const char     *name; /**< Name of the anchor, as indicated in its href
2255                                    attribute */
2256         int             button; /**< The mouse button used to click on it */
2257         Evas_Object    *hover; /**< The hover object to use for the popup */
2258         struct {
2259              Evas_Coord    x, y, w, h;
2260         } anchor, /**< Geometry selection of text used as anchor */
2261           hover_parent; /**< Geometry of the object used as parent by the
2262                              hover */
2263         Eina_Bool       hover_left : 1; /**< Hint indicating if there's space
2264                                              for content on the left side of
2265                                              the hover. Before calling the
2266                                              callback, the widget will make the
2267                                              necessary calculations to check
2268                                              which sides are fit to be set with
2269                                              content, based on the position the
2270                                              hover is activated and its distance
2271                                              to the edges of its parent object
2272                                              */
2273         Eina_Bool       hover_right : 1; /**< Hint indicating content fits on
2274                                               the right side of the hover.
2275                                               See @ref hover_left */
2276         Eina_Bool       hover_top : 1; /**< Hint indicating content fits on top
2277                                             of the hover. See @ref hover_left */
2278         Eina_Bool       hover_bottom : 1; /**< Hint indicating content fits
2279                                                below the hover. See @ref
2280                                                hover_left */
2281      };
2282    /**
2283     * Add a new Anchorblock object
2284     *
2285     * @param parent The parent object
2286     * @return The new object or NULL if it cannot be created
2287     */
2288    EAPI Evas_Object *elm_anchorblock_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
2289    /**
2290     * Set the text to show in the anchorblock
2291     *
2292     * Sets the text of the anchorblock to @p text. This text can include markup
2293     * format tags, including <c>\<a href=anchorname\></a></c> to begin a segment
2294     * of text that will be specially styled and react to click events, ended
2295     * with either of \</a\> or \</\>. When clicked, the anchor will emit an
2296     * "anchor,clicked" signal that you can attach a callback to with
2297     * evas_object_smart_callback_add(). The name of the anchor given in the
2298     * event info struct will be the one set in the href attribute, in this
2299     * case, anchorname.
2300     *
2301     * Other markup can be used to style the text in different ways, but it's
2302     * up to the style defined in the theme which tags do what.
2303     */
2304    EAPI void         elm_anchorblock_text_set(Evas_Object *obj, const char *text) EINA_ARG_NONNULL(1);
2305    /**
2306     * Get the markup text set for the anchorblock
2307     *
2308     * Retrieves the text set on the anchorblock, with markup tags included.
2309     *
2310     * @param obj The anchorblock object
2311     * @return The markup text set or @c NULL if nothing was set or an error
2312     * occurred
2313     */
2314    EAPI const char  *elm_anchorblock_text_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2315    /**
2316     * Set the parent of the hover popup
2317     *
2318     * Sets the parent object to use by the hover created by the anchorblock
2319     * when an anchor is clicked. See @ref Hover for more details on this.
2320     *
2321     * @param obj The anchorblock object
2322     * @param parent The object to use as parent for the hover
2323     */
2324    EAPI void         elm_anchorblock_hover_parent_set(Evas_Object *obj, Evas_Object *parent) EINA_ARG_NONNULL(1);
2325    /**
2326     * Get the parent of the hover popup
2327     *
2328     * Get the object used as parent for the hover created by the anchorblock
2329     * widget. See @ref Hover for more details on this.
2330     * If no parent is set, the same anchorblock object will be used.
2331     *
2332     * @param obj The anchorblock object
2333     * @return The object used as parent for the hover, NULL if none is set.
2334     */
2335    EAPI Evas_Object *elm_anchorblock_hover_parent_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2336    /**
2337     * Set the style that the hover should use
2338     *
2339     * When creating the popup hover, anchorblock will request that it's
2340     * themed according to @p style.
2341     *
2342     * @param obj The anchorblock object
2343     * @param style The style to use for the underlying hover
2344     *
2345     * @see elm_object_style_set()
2346     */
2347    EAPI void         elm_anchorblock_hover_style_set(Evas_Object *obj, const char *style) EINA_ARG_NONNULL(1);
2348    /**
2349     * Get the style that the hover should use
2350     *
2351     * Get the style the hover created by anchorblock will use.
2352     *
2353     * @param obj The anchorblock object
2354     * @return The style to use by the hover. NULL means the default is used.
2355     *
2356     * @see elm_object_style_set()
2357     */
2358    EAPI const char  *elm_anchorblock_hover_style_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2359    /**
2360     * Ends the hover popup in the anchorblock
2361     *
2362     * When an anchor is clicked, the anchorblock widget will create a hover
2363     * object to use as a popup with user provided content. This function
2364     * terminates this popup, returning the anchorblock to its normal state.
2365     *
2366     * @param obj The anchorblock object
2367     */
2368    EAPI void         elm_anchorblock_hover_end(Evas_Object *obj) EINA_ARG_NONNULL(1);
2369    /**
2370     * Appends a custom item provider to the given anchorblock
2371     *
2372     * Appends the given function to the list of items providers. This list is
2373     * called, one function at a time, with the given @p data pointer, the
2374     * anchorblock object and, in the @p item parameter, the item name as
2375     * referenced in its href string. Following functions in the list will be
2376     * called in order until one of them returns something different to NULL,
2377     * which should be an Evas_Object which will be used in place of the item
2378     * element.
2379     *
2380     * Items in the markup text take the form \<item relsize=16x16 vsize=full
2381     * href=item/name\>\</item\>
2382     *
2383     * @param obj The anchorblock object
2384     * @param func The function to add to the list of providers
2385     * @param data User data that will be passed to the callback function
2386     *
2387     * @see elm_entry_item_provider_append()
2388     */
2389    EAPI void         elm_anchorblock_item_provider_append(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorblock, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
2390    /**
2391     * Prepend a custom item provider to the given anchorblock
2392     *
2393     * Like elm_anchorblock_item_provider_append(), but it adds the function
2394     * @p func to the beginning of the list, instead of the end.
2395     *
2396     * @param obj The anchorblock object
2397     * @param func The function to add to the list of providers
2398     * @param data User data that will be passed to the callback function
2399     */
2400    EAPI void         elm_anchorblock_item_provider_prepend(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorblock, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
2401    /**
2402     * Remove a custom item provider from the list of the given anchorblock
2403     *
2404     * Removes the function and data pairing that matches @p func and @p data.
2405     * That is, unless the same function and same user data are given, the
2406     * function will not be removed from the list. This allows us to add the
2407     * same callback several times, with different @p data pointers and be
2408     * able to remove them later without conflicts.
2409     *
2410     * @param obj The anchorblock object
2411     * @param func The function to remove from the list
2412     * @param data The data matching the function to remove from the list
2413     */
2414    EAPI void         elm_anchorblock_item_provider_remove(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *anchorblock, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
2415    /**
2416     * @}
2417     */
2418
2419    /* bubble */
2420    EAPI Evas_Object *elm_bubble_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
2421    EAPI void         elm_bubble_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
2422    EAPI const char  *elm_bubble_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2423    EAPI void         elm_bubble_info_set(Evas_Object *obj, const char *info) EINA_ARG_NONNULL(1);
2424    EAPI const char  *elm_bubble_info_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2425
2426    EAPI void         elm_bubble_content_set(Evas_Object *obj, Evas_Object *content) EINA_ARG_NONNULL(1);
2427    EAPI Evas_Object *elm_bubble_content_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2428    EAPI Evas_Object *elm_bubble_content_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
2429    EAPI void         elm_bubble_icon_set(Evas_Object *obj, Evas_Object *icon) EINA_ARG_NONNULL(1);
2430    EAPI Evas_Object *elm_bubble_icon_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2431    EAPI Evas_Object *elm_bubble_icon_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
2432    EAPI void         elm_bubble_corner_set(Evas_Object *obj, const char *corner) EINA_ARG_NONNULL(1, 2);
2433    EAPI const char  *elm_bubble_corner_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2434    /* smart callbacks called:
2435     * "clicked" - the user clicked the bubble
2436     */
2437
2438    /* photo */
2439    EAPI Evas_Object *elm_photo_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
2440    EAPI Eina_Bool    elm_photo_file_set(Evas_Object *obj, const char *file) EINA_ARG_NONNULL(1);
2441    EAPI void         elm_photo_size_set(Evas_Object *obj, int size) EINA_ARG_NONNULL(1);
2442    EAPI void         elm_photo_fill_inside_set(Evas_Object *obj, Eina_Bool fill) EINA_ARG_NONNULL(1);
2443    EAPI void         elm_photo_editable_set(Evas_Object *obj, Eina_Bool set) EINA_ARG_NONNULL(1);
2444    /* smart callbacks called:
2445     * "clicked" - the user clicked the icon
2446     * "drag,start" - Someone started dragging the image out of the object
2447     * "drag,end" - Dragged item was dropped (somewhere)
2448     */
2449
2450    /* thumb */
2451    typedef enum _Elm_Thumb_Animation_Setting
2452      {
2453         ELM_THUMB_ANIMATION_START = 0, /* Play animation once */
2454         ELM_THUMB_ANIMATION_LOOP,      /* Keep playing animation until stop is requested */
2455         ELM_THUMB_ANIMATION_STOP,
2456         ELM_THUMB_ANIMATION_LAST
2457      } Elm_Thumb_Animation_Setting;
2458
2459    EAPI Evas_Object                 *elm_thumb_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
2460    EAPI void                         elm_thumb_reload(Evas_Object *obj) EINA_ARG_NONNULL(1);
2461    EAPI void                         elm_thumb_file_set(Evas_Object *obj, const char *file, const char *key) EINA_ARG_NONNULL(1);
2462    EAPI void                         elm_thumb_file_get(const Evas_Object *obj, const char **file, const char **key) EINA_ARG_NONNULL(1);
2463    EAPI void                         elm_thumb_path_get(const Evas_Object *obj, const char **file, const char **key) EINA_ARG_NONNULL(1);
2464    EAPI void                         elm_thumb_animate_set(Evas_Object *obj, Elm_Thumb_Animation_Setting s) EINA_ARG_NONNULL(1);
2465    EAPI Elm_Thumb_Animation_Setting  elm_thumb_animate_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2466    EAPI void                        *elm_thumb_ethumb_client_get(void);
2467    EAPI Eina_Bool                    elm_thumb_ethumb_client_connected(void);
2468    EAPI Eina_Bool                    elm_thumb_editable_set(Evas_Object *obj, Eina_Bool edit) EINA_ARG_NONNULL(1);
2469    EAPI Eina_Bool                    elm_thumb_editable_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2470    /* available styles:
2471     * default
2472     * noframe
2473     */
2474    /* smart callbacks called:
2475     * "clicked" - This is called when a user has clicked the thumb without dragging around.
2476     * "clicked,double" - This is called when a user has double-clicked the thumb.
2477     * "press" - This is called when a user has pressed down the thumb.
2478     * "generate,start" - The thumbnail generation started.
2479     * "generate,stop" - The generation process stopped.
2480     * "generate,error" - The generation failed.
2481     * "load,error" - The thumbnail image loading failed.
2482     */
2483
2484    /* hoversel */
2485    EAPI Evas_Object       *elm_hoversel_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
2486    EAPI void               elm_hoversel_horizontal_set(Evas_Object *obj, Eina_Bool horizontal) EINA_ARG_NONNULL(1);
2487    EAPI Eina_Bool          elm_hoversel_horizontal_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2488    EAPI void               elm_hoversel_hover_parent_set(Evas_Object *obj, Evas_Object *parent) EINA_ARG_NONNULL(1);
2489    EAPI Evas_Object       *elm_hoversel_hover_parent_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2490    EAPI void               elm_hoversel_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
2491    EAPI const char        *elm_hoversel_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2492    EAPI void               elm_hoversel_icon_set(Evas_Object *obj, Evas_Object *icon) EINA_ARG_NONNULL(1);
2493    EAPI Evas_Object       *elm_hoversel_icon_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2494    EAPI Evas_Object       *elm_hoversel_icon_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
2495    EAPI void               elm_hoversel_hover_begin(Evas_Object *obj) EINA_ARG_NONNULL(1);
2496    EAPI void               elm_hoversel_hover_end(Evas_Object *obj) EINA_ARG_NONNULL(1);
2497    EAPI Eina_Bool          elm_hoversel_expanded_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2498    EAPI void               elm_hoversel_clear(Evas_Object *obj) EINA_ARG_NONNULL(1);
2499    EAPI const Eina_List   *elm_hoversel_items_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2500    EAPI Elm_Hoversel_Item *elm_hoversel_item_add(Evas_Object *obj, const char *label, const char *icon_file, Elm_Icon_Type icon_type, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1);
2501    EAPI void               elm_hoversel_item_del(Elm_Hoversel_Item *item) EINA_ARG_NONNULL(1);
2502    EAPI void               elm_hoversel_item_del_cb_set(Elm_Hoversel_Item *it, Evas_Smart_Cb func) EINA_ARG_NONNULL(1);
2503    EAPI void              *elm_hoversel_item_data_get(const Elm_Hoversel_Item *it) EINA_ARG_NONNULL(1);
2504    EAPI const char        *elm_hoversel_item_label_get(const Elm_Hoversel_Item *it) EINA_ARG_NONNULL(1);
2505    EAPI void               elm_hoversel_item_icon_set(Elm_Hoversel_Item *it, const char *icon_file, const char *icon_group, Elm_Icon_Type icon_type) EINA_ARG_NONNULL(1);
2506    EAPI void               elm_hoversel_item_icon_get(const Elm_Hoversel_Item *it, const char **icon_file, const char **icon_group, Elm_Icon_Type *icon_type) EINA_ARG_NONNULL(1);
2507    /* smart callbacks called:
2508     * "clicked" - the user clicked the hoversel button and popped up the sel
2509     * "selected" - an item in the hoversel list is selected
2510     * "dismissed" - the hover is dismissed
2511     */
2512
2513    /* toolbar */
2514    typedef enum _Elm_Toolbar_Shrink_Mode
2515      {
2516         ELM_TOOLBAR_SHRINK_NONE,   /**< set toolbar minimun size to fit all the items */
2517         ELM_TOOLBAR_SHRINK_HIDE,   /**< hide excess items */
2518         ELM_TOOLBAR_SHRINK_SCROLL, /**< allow accessing excess items through a scroller */
2519         ELM_TOOLBAR_SHRINK_MENU    /**< inserts a button to pop up a menu with excess items */
2520      } Elm_Toolbar_Shrink_Mode;
2521
2522    typedef struct _Elm_Toolbar_Item Elm_Toolbar_Item; /**< Item of Elm_Toolbar. Sub-type of Elm_Widget_Item */
2523    typedef struct _Elm_Toolbar_Item_State Elm_Toolbar_Item_State; /** State of a Elm_Toolbar_Item */
2524
2525    EAPI Evas_Object            *elm_toolbar_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
2526    EAPI void                    elm_toolbar_icon_size_set(Evas_Object *obj, int icon_size) EINA_ARG_NONNULL(1);
2527    EAPI int                     elm_toolbar_icon_size_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2528    EAPI void                    elm_toolbar_icon_order_lookup_set(Evas_Object *obj, Elm_Icon_Lookup_Order order) EINA_ARG_NONNULL(1);
2529    EAPI Elm_Icon_Lookup_Order   elm_toolbar_icon_order_lookup_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2530    EAPI void                    elm_toolbar_no_select_mode_set(Evas_Object *obj, Eina_Bool no_select) EINA_ARG_NONNULL(1);
2531    EAPI Eina_Bool               elm_toolbar_no_select_mode_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2532    EAPI Elm_Toolbar_Item       *elm_toolbar_item_append(Evas_Object *obj, const char *icon, const char *label, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1);
2533    EAPI Elm_Toolbar_Item       *elm_toolbar_item_prepend(Evas_Object *obj, const char *icon, const char *label, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1);
2534    EAPI Elm_Toolbar_Item       *elm_toolbar_item_insert_before(Evas_Object *obj, Elm_Toolbar_Item *before, const char *icon, const char *label, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1);
2535    EAPI Elm_Toolbar_Item       *elm_toolbar_item_insert_after(Evas_Object *obj, Elm_Toolbar_Item *after, const char *icon, const char *label, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1);
2536    EAPI Elm_Toolbar_Item       *elm_toolbar_first_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2537    EAPI Elm_Toolbar_Item       *elm_toolbar_last_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2538    EAPI Elm_Toolbar_Item       *elm_toolbar_item_next_get(const Elm_Toolbar_Item *item) EINA_ARG_NONNULL(1);
2539    EAPI Elm_Toolbar_Item       *elm_toolbar_item_prev_get(const Elm_Toolbar_Item *item) EINA_ARG_NONNULL(1);
2540    EAPI Evas_Object            *elm_toolbar_item_toolbar_get(const Elm_Toolbar_Item *item) EINA_ARG_NONNULL(1);
2541    EAPI void                    elm_toolbar_item_priority_set(Elm_Toolbar_Item *item, int priority) EINA_ARG_NONNULL(1);
2542    EAPI int                     elm_toolbar_item_priority_get(const Elm_Toolbar_Item *item) EINA_ARG_NONNULL(1);
2543    EAPI const char             *elm_toolbar_item_icon_get(const Elm_Toolbar_Item *item) EINA_ARG_NONNULL(1);
2544    EAPI const char             *elm_toolbar_item_label_get(const Elm_Toolbar_Item *item) EINA_ARG_NONNULL(1);
2545    EAPI void                    elm_toolbar_item_label_set(Elm_Toolbar_Item *item, const char *label) EINA_ARG_NONNULL(1);
2546    EAPI void                   *elm_toolbar_item_data_get(const Elm_Toolbar_Item *item) EINA_ARG_NONNULL(1);
2547    EAPI void                    elm_toolbar_item_data_set(Elm_Toolbar_Item *item, const void *data) EINA_ARG_NONNULL(1);
2548    EAPI Elm_Toolbar_Item       *elm_toolbar_item_find_by_label(const Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
2549    EAPI Eina_Bool               elm_toolbar_item_selected_get(const Elm_Toolbar_Item *item) EINA_ARG_NONNULL(1);
2550    EAPI void                    elm_toolbar_item_selected_set(Elm_Toolbar_Item *item, Eina_Bool selected) EINA_ARG_NONNULL(1);
2551    EAPI Elm_Toolbar_Item       *elm_toolbar_selected_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2552    EAPI void                    elm_toolbar_item_icon_set(Elm_Toolbar_Item *item, const char *icon) EINA_ARG_NONNULL(1);
2553    EAPI void                    elm_toolbar_item_del(Elm_Toolbar_Item *item) EINA_ARG_NONNULL(1);
2554    EAPI void                    elm_toolbar_item_del_cb_set(Elm_Toolbar_Item *item, Evas_Smart_Cb func) EINA_ARG_NONNULL(1);
2555    EAPI Eina_Bool               elm_toolbar_item_disabled_get(const Elm_Toolbar_Item *item) EINA_ARG_NONNULL(1);
2556    EAPI void                    elm_toolbar_item_disabled_set(Elm_Toolbar_Item *item, Eina_Bool disabled) EINA_ARG_NONNULL(1);
2557    EAPI void                    elm_toolbar_item_separator_set(Elm_Toolbar_Item *item, Eina_Bool separator) EINA_ARG_NONNULL(1);
2558    EAPI Eina_Bool               elm_toolbar_item_separator_get(const Elm_Toolbar_Item *item) EINA_ARG_NONNULL(1);
2559    EAPI void                    elm_toolbar_mode_shrink_set(Evas_Object *obj, Elm_Toolbar_Shrink_Mode shrink_mode) EINA_ARG_NONNULL(1);
2560    EAPI Elm_Toolbar_Shrink_Mode elm_toolbar_mode_shrink_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2561    EAPI void                    elm_toolbar_homogeneous_set(Evas_Object *obj, Eina_Bool homogeneous) EINA_ARG_NONNULL(1);
2562    EAPI Eina_Bool               elm_toolbar_homogeneous_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2563    EINA_DEPRECATED EAPI void    elm_toolbar_homogenous_set(Evas_Object *obj, Eina_Bool homogenous) EINA_ARG_NONNULL(1);
2564    EINA_DEPRECATED EAPI Eina_Bool elm_toolbar_homogenous_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2565    EAPI void                    elm_toolbar_menu_parent_set(Evas_Object *obj, Evas_Object *parent) EINA_ARG_NONNULL(1);
2566    EAPI Evas_Object            *elm_toolbar_menu_parent_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2567    EAPI void                    elm_toolbar_align_set(Evas_Object *obj, double align) EINA_ARG_NONNULL(1);
2568    EAPI double                  elm_toolbar_align_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2569    EAPI void                    elm_toolbar_item_menu_set(Elm_Toolbar_Item *item, Eina_Bool menu) EINA_ARG_NONNULL(1);
2570    EAPI Evas_Object            *elm_toolbar_item_menu_get(Elm_Toolbar_Item *item) EINA_ARG_NONNULL(1);
2571    EAPI Elm_Toolbar_Item_State *elm_toolbar_item_state_add(Elm_Toolbar_Item *item, const char *icon, const char *label, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1);
2572    EAPI Eina_Bool               elm_toolbar_item_state_del(Elm_Toolbar_Item *item, Elm_Toolbar_Item_State *state) EINA_ARG_NONNULL(1);
2573    EAPI Eina_Bool               elm_toolbar_item_state_set(Elm_Toolbar_Item *it, Elm_Toolbar_Item_State *state) EINA_ARG_NONNULL(1);
2574    EAPI void                    elm_toolbar_item_state_unset(Elm_Toolbar_Item *it) EINA_ARG_NONNULL(1);
2575    EAPI Elm_Toolbar_Item_State *elm_toolbar_item_state_get(const Elm_Toolbar_Item *it) EINA_ARG_NONNULL(1);
2576    EAPI Elm_Toolbar_Item_State *elm_toolbar_item_state_next(Elm_Toolbar_Item *it) EINA_ARG_NONNULL(1);
2577    EAPI Elm_Toolbar_Item_State *elm_toolbar_item_state_prev(Elm_Toolbar_Item *it) EINA_ARG_NONNULL(1);
2578    EAPI void                    elm_toolbar_item_tooltip_text_set(Elm_Toolbar_Item *item, const char *text) EINA_ARG_NONNULL(1);
2579    EAPI void                    elm_toolbar_item_tooltip_content_cb_set(Elm_Toolbar_Item *item, Elm_Tooltip_Item_Content_Cb func, const void *data, Evas_Smart_Cb del_cb) EINA_ARG_NONNULL(1);
2580    EAPI void                    elm_toolbar_item_tooltip_unset(Elm_Toolbar_Item *item) EINA_ARG_NONNULL(1);
2581    EAPI void                    elm_toolbar_item_tooltip_style_set(Elm_Toolbar_Item *item, const char *style) EINA_ARG_NONNULL(1);
2582    EAPI const char             *elm_toolbar_item_tooltip_style_get(const Elm_Toolbar_Item *item) EINA_ARG_NONNULL(1);
2583    EAPI void                    elm_toolbar_item_cursor_set(Elm_Toolbar_Item *item, const char *cursor) EINA_ARG_NONNULL(1);
2584    EAPI const char             *elm_toolbar_item_cursor_get(const Elm_Toolbar_Item *item) EINA_ARG_NONNULL(1);
2585    EAPI void                    elm_toolbar_item_cursor_unset(Elm_Toolbar_Item *item) EINA_ARG_NONNULL(1);
2586    EAPI void                    elm_toolbar_item_cursor_style_set(Elm_Toolbar_Item *item, const char *style) EINA_ARG_NONNULL(1);
2587    EAPI const char             *elm_toolbar_item_cursor_style_get(const Elm_Toolbar_Item *item) EINA_ARG_NONNULL(1);
2588    EAPI void                    elm_toolbar_item_cursor_engine_only_set(Elm_Toolbar_Item *item, Eina_Bool engine_only) EINA_ARG_NONNULL(1);
2589    EAPI Eina_Bool               elm_toolbar_item_cursor_engine_only_get(const Elm_Toolbar_Item *item) EINA_ARG_NONNULL(1);
2590    /* smart callbacks called:
2591     * "clicked" - when the user clicks on a toolbar item and becomes selected
2592     */
2593    /* available styles:
2594     * default
2595     * transparent (no background or shadow, just show the provided content)
2596     */
2597
2598    /* tooltip */
2599    EAPI double       elm_tooltip_delay_get(void);
2600    EAPI Eina_Bool    elm_tooltip_delay_set(double delay);
2601    EAPI void         elm_object_tooltip_show(Evas_Object *obj) EINA_ARG_NONNULL(1);
2602    EAPI void         elm_object_tooltip_hide(Evas_Object *obj) EINA_ARG_NONNULL(1);
2603    EAPI void         elm_object_tooltip_text_set(Evas_Object *obj, const char *text) EINA_ARG_NONNULL(1, 2);
2604    EAPI void         elm_object_tooltip_content_cb_set(Evas_Object *obj, Elm_Tooltip_Content_Cb func, const void *data, Evas_Smart_Cb del_cb) EINA_ARG_NONNULL(1);
2605    EAPI void         elm_object_tooltip_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
2606    EAPI void         elm_object_tooltip_style_set(Evas_Object *obj, const char *style) EINA_ARG_NONNULL(1);
2607    EAPI const char  *elm_object_tooltip_style_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2608    EAPI void         elm_object_cursor_set(Evas_Object *obj, const char *cursor) EINA_ARG_NONNULL(1);
2609    EAPI const char  *elm_object_cursor_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2610    EAPI void         elm_object_cursor_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
2611    EAPI void         elm_object_cursor_style_set(Evas_Object *obj, const char *style) EINA_ARG_NONNULL(1);
2612    EAPI const char  *elm_object_cursor_style_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2613    EAPI void         elm_object_cursor_engine_only_set(Evas_Object *obj, Eina_Bool engine_only) EINA_ARG_NONNULL(1);
2614    EAPI Eina_Bool    elm_object_cursor_engine_only_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2615
2616    /* cursors */
2617    EAPI int          elm_cursor_engine_only_get(void);
2618    EAPI Eina_Bool    elm_cursor_engine_only_set(int engine_only);
2619
2620    /* menu */
2621    typedef struct _Elm_Menu_Item Elm_Menu_Item; /**< Item of Elm_Menu. Sub-type of Elm_Widget_Item */
2622    EAPI Evas_Object       *elm_menu_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
2623    EAPI void               elm_menu_parent_set(Evas_Object *obj, Evas_Object *parent) EINA_ARG_NONNULL(1);
2624    EAPI Evas_Object       *elm_menu_parent_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2625    EAPI void               elm_menu_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y) EINA_ARG_NONNULL(1);
2626    EAPI void               elm_menu_close(Evas_Object *obj) EINA_ARG_NONNULL(1);
2627    EAPI const Eina_List   *elm_menu_items_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2628    EAPI Evas_Object       *elm_menu_item_object_get(const Elm_Menu_Item *it) EINA_ARG_NONNULL(1);
2629    EAPI Elm_Menu_Item     *elm_menu_item_add(Evas_Object *obj, Elm_Menu_Item *parent, const char *icon, const char *label, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1);
2630    EAPI void               elm_menu_item_label_set(Elm_Menu_Item *item, const char *label) EINA_ARG_NONNULL(1);
2631    EAPI const char        *elm_menu_item_label_get(const Elm_Menu_Item *item) EINA_ARG_NONNULL(1);
2632    EAPI void               elm_menu_item_icon_set(Elm_Menu_Item *item, const char *icon) EINA_ARG_NONNULL(1, 2);
2633    EAPI const char        *elm_menu_item_icon_get(const Elm_Menu_Item *item) EINA_ARG_NONNULL(1);
2634    EAPI const Evas_Object *elm_menu_item_object_icon_get(const Elm_Menu_Item *item) EINA_ARG_NONNULL(1);
2635    EAPI void               elm_menu_item_selected_set(Elm_Menu_Item *item, Eina_Bool selected) EINA_ARG_NONNULL(1);
2636    EAPI Eina_Bool          elm_menu_item_selected_get(const Elm_Menu_Item *item) EINA_ARG_NONNULL(1);
2637    EAPI void               elm_menu_item_disabled_set(Elm_Menu_Item *item, Eina_Bool disabled) EINA_ARG_NONNULL(1);
2638    EAPI Eina_Bool          elm_menu_item_disabled_get(const Elm_Menu_Item *item) EINA_ARG_NONNULL(1);
2639    EAPI Elm_Menu_Item     *elm_menu_item_separator_add(Evas_Object *obj, Elm_Menu_Item *parent) EINA_ARG_NONNULL(1);
2640    EAPI Eina_Bool          elm_menu_item_is_separator(Elm_Menu_Item *item) EINA_ARG_NONNULL(1);
2641    EAPI void               elm_menu_item_del(Elm_Menu_Item *item) EINA_ARG_NONNULL(1);
2642    EAPI void               elm_menu_item_del_cb_set(Elm_Menu_Item *it, Evas_Smart_Cb func) EINA_ARG_NONNULL(1);
2643    EAPI void              *elm_menu_item_data_get(const Elm_Menu_Item *it) EINA_ARG_NONNULL(1);
2644    EAPI void               elm_menu_item_data_set(Elm_Menu_Item *item, const void *data) EINA_ARG_NONNULL(1);
2645    EAPI const Eina_List   *elm_menu_item_subitems_get(const Elm_Menu_Item *item) EINA_ARG_NONNULL(1);
2646    EAPI const Elm_Menu_Item *elm_menu_selected_item_get(const Evas_Object * obj) EINA_ARG_NONNULL(1);
2647    EAPI const Elm_Menu_Item *elm_menu_last_item_get(const Evas_Object * obj) EINA_ARG_NONNULL(1);
2648    EAPI const Elm_Menu_Item *elm_menu_first_item_get(const Evas_Object * obj) EINA_ARG_NONNULL(1);
2649    EAPI const Elm_Menu_Item *elm_menu_item_next_get(const Elm_Menu_Item *it) EINA_ARG_NONNULL(1);
2650    EAPI const Elm_Menu_Item *elm_menu_item_prev_get(const Elm_Menu_Item *it) EINA_ARG_NONNULL(1);
2651
2652    /* smart callbacks called:
2653     * "clicked" - the user clicked the empty space in the menu to dismiss. event_info is NULL.
2654     */
2655
2656    /* list */
2657    typedef enum _Elm_List_Mode
2658      {
2659         ELM_LIST_COMPRESS = 0,
2660         ELM_LIST_SCROLL,
2661         ELM_LIST_LIMIT,
2662         ELM_LIST_EXPAND,
2663         ELM_LIST_LAST
2664      } Elm_List_Mode;
2665    typedef struct _Elm_List_Item Elm_List_Item; /**< Item of Elm_List. Sub-type of Elm_Widget_Item */
2666    EAPI Evas_Object     *elm_list_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
2667    EAPI Elm_List_Item   *elm_list_item_append(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *end, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1);
2668    EAPI Elm_List_Item   *elm_list_item_prepend(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *end, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1);
2669    EAPI Elm_List_Item   *elm_list_item_insert_before(Evas_Object *obj, Elm_List_Item *before, const char *label, Evas_Object *icon, Evas_Object *end, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
2670    EAPI Elm_List_Item   *elm_list_item_insert_after(Evas_Object *obj, Elm_List_Item *after, const char *label, Evas_Object *icon, Evas_Object *end, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
2671    EAPI Elm_List_Item   *elm_list_item_sorted_insert(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *end, Evas_Smart_Cb func, const void *data, Eina_Compare_Cb cmp_func) EINA_ARG_NONNULL(1);
2672    EAPI void             elm_list_clear(Evas_Object *obj) EINA_ARG_NONNULL(1);
2673    EAPI void             elm_list_go(Evas_Object *obj) EINA_ARG_NONNULL(1);
2674    EAPI void             elm_list_multi_select_set(Evas_Object *obj, Eina_Bool multi) EINA_ARG_NONNULL(1);
2675    EAPI Eina_Bool        elm_list_multi_select_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2676    EAPI void             elm_list_mode_set(Evas_Object *obj, Elm_List_Mode mode) EINA_ARG_NONNULL(1);
2677    EAPI Elm_List_Mode    elm_list_mode_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2678    EAPI void             elm_list_horizontal_set(Evas_Object *obj, Eina_Bool horizontal) EINA_ARG_NONNULL(1);
2679    EAPI Eina_Bool        elm_list_horizontal_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2680    EAPI void             elm_list_always_select_mode_set(Evas_Object *obj, Eina_Bool always_select) EINA_ARG_NONNULL(1);
2681    EAPI Eina_Bool        elm_list_always_select_mode_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2682    EAPI const Eina_List *elm_list_items_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2683    EAPI Elm_List_Item   *elm_list_selected_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2684    EAPI const Eina_List *elm_list_selected_items_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2685    EAPI void             elm_list_item_separator_set(Elm_List_Item *it, Eina_Bool setting) EINA_ARG_NONNULL(1);
2686    EAPI Eina_Bool        elm_list_item_separator_get(const Elm_List_Item *it) EINA_ARG_NONNULL(1);
2687    EAPI void             elm_list_item_selected_set(Elm_List_Item *item, Eina_Bool selected) EINA_ARG_NONNULL(1);
2688    EAPI Eina_Bool        elm_list_item_selected_get(const Elm_List_Item *item) EINA_ARG_NONNULL(1);
2689    EAPI void             elm_list_item_show(Elm_List_Item *item) EINA_ARG_NONNULL(1);
2690    EAPI void             elm_list_item_bring_in(Elm_List_Item *item) EINA_ARG_NONNULL(1);
2691    EAPI void             elm_list_item_del(Elm_List_Item *item) EINA_ARG_NONNULL(1);
2692    EAPI void             elm_list_item_del_cb_set(Elm_List_Item *item, Evas_Smart_Cb func) EINA_ARG_NONNULL(1);
2693    EAPI void            *elm_list_item_data_get(const Elm_List_Item *item) EINA_ARG_NONNULL(1);
2694    EAPI Evas_Object     *elm_list_item_icon_get(const Elm_List_Item *item) EINA_ARG_NONNULL(1);
2695    EAPI void             elm_list_item_icon_set(Elm_List_Item *item, Evas_Object *icon) EINA_ARG_NONNULL(1);
2696    EAPI Evas_Object     *elm_list_item_end_get(const Elm_List_Item *item) EINA_ARG_NONNULL(1);
2697    EAPI void             elm_list_item_end_set(Elm_List_Item *item, Evas_Object *end) EINA_ARG_NONNULL(1);
2698    EAPI Evas_Object     *elm_list_item_base_get(const Elm_List_Item *item) EINA_ARG_NONNULL(1);
2699    EAPI const char      *elm_list_item_label_get(const Elm_List_Item *item) EINA_ARG_NONNULL(1);
2700    EAPI void             elm_list_item_label_set(Elm_List_Item *item, const char *text) EINA_ARG_NONNULL(1);
2701    EAPI Elm_List_Item   *elm_list_item_prev(const Elm_List_Item *it) EINA_ARG_NONNULL(1);
2702    EAPI Elm_List_Item   *elm_list_item_next(const Elm_List_Item *it) EINA_ARG_NONNULL(1);
2703    EAPI void             elm_list_item_tooltip_text_set(Elm_List_Item *item, const char *text) EINA_ARG_NONNULL(1);
2704    EAPI void             elm_list_item_tooltip_content_cb_set(Elm_List_Item *item, Elm_Tooltip_Item_Content_Cb func, const void *data, Evas_Smart_Cb del_cb) EINA_ARG_NONNULL(1);
2705    EAPI void             elm_list_item_tooltip_unset(Elm_List_Item *item) EINA_ARG_NONNULL(1);
2706    EAPI void             elm_list_item_tooltip_style_set(Elm_List_Item *item, const char *style) EINA_ARG_NONNULL(1);
2707    EAPI const char      *elm_list_item_tooltip_style_get(const Elm_List_Item *item) EINA_ARG_NONNULL(1);
2708    EAPI void             elm_list_item_cursor_set(Elm_List_Item *item, const char *cursor) EINA_ARG_NONNULL(1);
2709    EAPI const char      *elm_list_item_cursor_get(const Elm_List_Item *item) EINA_ARG_NONNULL(1);
2710    EAPI void             elm_list_item_cursor_unset(Elm_List_Item *item) EINA_ARG_NONNULL(1);
2711    EAPI void             elm_list_item_cursor_style_set(Elm_List_Item *item, const char *style) EINA_ARG_NONNULL(1);
2712    EAPI const char      *elm_list_item_cursor_style_get(const Elm_List_Item *item) EINA_ARG_NONNULL(1);
2713    EAPI void             elm_list_item_cursor_engine_only_set(Elm_List_Item *item, Eina_Bool engine_only) EINA_ARG_NONNULL(1);
2714    EAPI Eina_Bool        elm_list_item_cursor_engine_only_get(const Elm_List_Item *item) EINA_ARG_NONNULL(1);
2715    EAPI void             elm_list_item_disabled_set(Elm_List_Item *it, Eina_Bool disabled) EINA_ARG_NONNULL(1);
2716    EAPI Eina_Bool        elm_list_item_disabled_get(const Elm_List_Item *it) EINA_ARG_NONNULL(1);
2717    EAPI void             elm_list_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_bounce) EINA_ARG_NONNULL(1);
2718    EAPI void             elm_list_bounce_get(const Evas_Object *obj, Eina_Bool *h_bounce, Eina_Bool *v_bounce) EINA_ARG_NONNULL(1);
2719    EAPI void             elm_list_scroller_policy_set(Evas_Object *obj, Elm_Scroller_Policy policy_h, Elm_Scroller_Policy policy_v) EINA_ARG_NONNULL(1);
2720    EAPI void             elm_list_scroller_policy_get(const Evas_Object *obj, Elm_Scroller_Policy *policy_h, Elm_Scroller_Policy *policy_v) EINA_ARG_NONNULL(1);
2721    /* smart callbacks called:
2722     * "clicked,double" - when the user double-clicked an item
2723     * "selected" - when the user selected an item
2724     * "unselected" - when the user selected an item
2725     * "longpressed" - an item in the hoversel list is long-pressed
2726     * "scroll,edge,top" - the list is scrolled until the top edge
2727     * "scroll,edge,bottom" - the list is scrolled until the bottom edge
2728     * "scroll,edge,left" - the list is scrolled until the left edge
2729     * "scroll,edge,right" - the list is scrolled until the right edge
2730     */
2731
2732    /* slider */
2733    EAPI Evas_Object       *elm_slider_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
2734    EAPI void               elm_slider_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
2735    EAPI const char        *elm_slider_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2736    EAPI void               elm_slider_icon_set(Evas_Object *obj, Evas_Object *icon) EINA_ARG_NONNULL(1);
2737    EAPI Evas_Object       *elm_slider_icon_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
2738    EAPI Evas_Object       *elm_slider_icon_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2739    EAPI void               elm_slider_end_set(Evas_Object *obj, Evas_Object *end) EINA_ARG_NONNULL(1);
2740    EAPI Evas_Object       *elm_slider_end_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
2741    EAPI Evas_Object       *elm_slider_end_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2742    EAPI void               elm_slider_span_size_set(Evas_Object *obj, Evas_Coord size) EINA_ARG_NONNULL(1);
2743    EAPI Evas_Coord         elm_slider_span_size_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2744    EAPI void               elm_slider_unit_format_set(Evas_Object *obj, const char *format) EINA_ARG_NONNULL(1);
2745    EAPI const char        *elm_slider_unit_format_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2746    EAPI void               elm_slider_indicator_format_set(Evas_Object *obj, const char *indicator) EINA_ARG_NONNULL(1);
2747    EAPI const char        *elm_slider_indicator_format_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2748    EAPI void               elm_slider_indicator_format_function_set(Evas_Object *obj, const char *(*func)(double val)) EINA_ARG_NONNULL(1);
2749    EAPI void               elm_slider_horizontal_set(Evas_Object *obj, Eina_Bool horizontal) EINA_ARG_NONNULL(1);
2750    EAPI Eina_Bool          elm_slider_horizontal_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2751    EAPI void               elm_slider_min_max_set(Evas_Object *obj, double min, double max) EINA_ARG_NONNULL(1);
2752    EAPI void               elm_slider_min_max_get(const Evas_Object *obj, double *min, double *max) EINA_ARG_NONNULL(1);
2753    EAPI void               elm_slider_value_set(Evas_Object *obj, double val) EINA_ARG_NONNULL(1);
2754    EAPI double             elm_slider_value_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2755    EAPI void               elm_slider_inverted_set(Evas_Object *obj, Eina_Bool inverted) EINA_ARG_NONNULL(1);
2756    EAPI Eina_Bool          elm_slider_inverted_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2757    EAPI void               elm_slider_indicator_show_set(Evas_Object *obj, Eina_Bool show) EINA_ARG_NONNULL(1);
2758    EAPI Eina_Bool          elm_slider_indicator_show_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2759    /* smart callbacks called:
2760     * "changed" - Whenever the slider value is changed by the user.
2761     * "slider,drag,start" - dragging the slider indicator around has started
2762     * "slider,drag,stop" - dragging the slider indicator around has stopped
2763     * "delay,changed" - A short time after the value is changed by the user.
2764     *                   This will be called only when the user stops dragging for a very short
2765     *                   period or when they release their finger/mouse, so it avoids possibly
2766     *                   expensive reactions to the value change.
2767     */
2768
2769    /**
2770     * @page actionslider_example_page Actionslider usage
2771     * @dontinclude actionslider_example_01.c
2772     *
2773     * For this example we are going to assume knowledge of evas smart callbacks
2774     * and some basic evas object functions. Elementary is not meant to be used
2775     * without evas, if you're not yet familiar with evas it probably is worth
2776     * checking that out.
2777     *
2778     * And now to the example, when using Elementary we start by including
2779     * Elementary.h:
2780     * @skipline #include
2781     *
2782     * Next we define some callbacks, they all share the same signature because
2783     * they are all to be used with evas_object_smart_callback_add().
2784     * The first one just prints the selected label(in two different ways):
2785     * @until }
2786     *
2787     * This next callback is a little more interesting, it makes the selected
2788     * label magnetic(except if it's the center label):
2789     * @until }
2790     *
2791     * This callback enables or disables the magnetic propertty of the center
2792     * label:
2793     * @until }
2794     *
2795     * And finally a callback to stop the main loop when the window is closed:
2796     * @until }
2797     *
2798     * To be able to create our actionsliders we need to do some setup, but this
2799     * isn't really relevant here, so if you want to know about that go @ref
2800     * Win "here".
2801     *
2802     * With all that boring stuff out of the way we can proceed to creating some
2803     * actionsliders.@n
2804     * All actionsliders are created the same way:
2805     * @skipline actionslider_add
2806     * Next we must choose where the indicator starts, and for this one we choose
2807     * the right, and set the right as magnetic:
2808     * @skipline indicator_pos_set
2809     * @until magnet_pos_set
2810     *
2811     * We then set the labels for the left and right, passing NULL as an argument
2812     * to any of the labels makes that position have no label.
2813     * @until Stop
2814     *
2815     * Furthermore we mark both left and right as enabled positions, if we didn't
2816     * do this all three positions would be enabled:
2817     * @until RIGHT
2818     *
2819     * Having the the enabled positions we now add a smart callback to change
2820     * which position is magnetic, so that only the last selected position is
2821     * magnetic:
2822     * @until NULL
2823     *
2824     * And finally we set our printing callback and show the actionslider:
2825     * @until object_show
2826     * @skip pack_end
2827     *
2828     * For our next actionslider we are going to do much as we did for the
2829     * previous except we are going to have the center as the magnet(and not
2830     * change it):
2831     * @skipline actionslider_add
2832     * @skipline indicator_pos_set
2833     * @until object_show
2834     *
2835     * And another actionslider, in this one the indicator starts on the left.
2836     * It has labels only in the center and right, and both bositions are
2837     * magnetic. Because the left doesn't have a label and is not magnetic once
2838     * the indicator leaves it can't return:
2839     * @skipline actionslider_add
2840     * @skipline indicator_pos_set
2841     * @until object_show
2842     * @note The greyed out area is a @ref Styles "style".
2843     *
2844     * And now an actionslider with a label in the indicator, and whose magnet
2845     * properties change based on what was last selected:
2846     * @skipline actionslider_add
2847     * @skipline indicator_pos_set
2848     * @until object_show
2849     * @note The greyed out area is a @ref Styles "style".
2850     *
2851     * We are almost done, this next one is just an actionslider with all
2852     * positions magnetized and having every possible label:
2853     * @skipline actionslider_add
2854     * @skipline indicator_pos_set
2855     * @until object_show
2856     *
2857     * And for our last actionslider we have one that turns the magnetic property
2858     * on and off:
2859     * @skipline actionslider_add
2860     * @skipline indicator_pos_set
2861     * @until object_show
2862     *
2863     * See the full source code @ref actionslider_example_01 "here"
2864     */
2865    /**
2866     * @page actionslider_example_01 Actionslider example
2867     * @include actionslider_example_01.c
2868     * @example actionslider_example_01.c
2869     */
2870    /**
2871     * @addtogroup Actionslider Actionslider
2872     *
2873     * A actionslider is a switcher for 2 or 3 labels with customizable magnet
2874     * properties. The indicator is the element the user drags to choose a label.
2875     * When the position is set with magnet, when released the indicator will be
2876     * moved to it if it's nearest the magnetized position.
2877     *
2878     * @note By default all positions are set as enabled.
2879     *
2880     * Signals that you can add callbacks for are:
2881     *
2882     * "selected" - when user selects an enabled position (the label is passed
2883     *              as event info)".
2884     * @n
2885     * "pos_changed" - when the indicator reaches any of the positions("left",
2886     *                 "right" or "center").
2887     *
2888     * See an example of actionslider usage @ref actionslider_example_page "here"
2889     * @{
2890     */
2891    typedef enum _Elm_Actionslider_Pos
2892      {
2893         ELM_ACTIONSLIDER_NONE = 0,
2894         ELM_ACTIONSLIDER_LEFT = 1 << 0,
2895         ELM_ACTIONSLIDER_CENTER = 1 << 1,
2896         ELM_ACTIONSLIDER_RIGHT = 1 << 2,
2897         ELM_ACTIONSLIDER_ALL = (1 << 3) -1
2898      } Elm_Actionslider_Pos;
2899
2900    /**
2901     * Add a new actionslider to the parent.
2902     *
2903     * @param parent The parent object
2904     * @return The new actionslider object or NULL if it cannot be created
2905     */
2906    EAPI Evas_Object          *elm_actionslider_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
2907    /**
2908     * Set actionslider labels.
2909     *
2910     * @param obj The actionslider object
2911     * @param left_label The label to be set on the left.
2912     * @param center_label The label to be set on the center.
2913     * @param right_label The label to be set on the right.
2914     */
2915    EAPI void                  elm_actionslider_labels_set(Evas_Object *obj, const char *left_label, const char *center_label, const char *right_label) EINA_ARG_NONNULL(1);
2916    /**
2917     * Get actionslider labels.
2918     *
2919     * @param obj The actionslider object
2920     * @param left_label A char** to place the left_label of @p obj into.
2921     * @param center_label A char** to place the center_label of @p obj into.
2922     * @param right_label A char** to place the right_label of @p obj into.
2923     */
2924    EAPI void                  elm_actionslider_labels_get(const Evas_Object *obj, const char **left_label, const char **center_label, const char **right_label) EINA_ARG_NONNULL(1);
2925    /**
2926     * Get actionslider selected label.
2927     *
2928     * @param obj The actionslider object
2929     * @return The selected label
2930     */
2931    EAPI const char           *elm_actionslider_selected_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2932    /**
2933     * Set actionslider indicator position.
2934     *
2935     * @param obj The actionslider object.
2936     * @param pos The position of the indicator.
2937     */
2938    EAPI void                  elm_actionslider_indicator_pos_set(Evas_Object *obj, Elm_Actionslider_Pos pos) EINA_ARG_NONNULL(1);
2939    /**
2940     * Get actionslider indicator position.
2941     *
2942     * @param obj The actionslider object.
2943     * @return The position of the indicator.
2944     */
2945    EAPI Elm_Actionslider_Pos  elm_actionslider_indicator_pos_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2946    /**
2947     * Set actionslider magnet position. To make multiple positions magnets @c or
2948     * them together(e.g.: ELM_ACTIONSLIDER_LEFT | ELM_ACTIONSLIDER_RIGHT)
2949     *
2950     * @param obj The actionslider object.
2951     * @param pos Bit mask indicating the magnet positions.
2952     */
2953    EAPI void                  elm_actionslider_magnet_pos_set(Evas_Object *obj, Elm_Actionslider_Pos pos) EINA_ARG_NONNULL(1);
2954    /**
2955     * Get actionslider magnet position.
2956     *
2957     * @param obj The actionslider object.
2958     * @return The positions with magnet property.
2959     */
2960    EAPI Elm_Actionslider_Pos  elm_actionslider_magnet_pos_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2961    /**
2962     * Set actionslider enabled position. To set multiple positions as enabled @c or
2963     * them together(e.g.: ELM_ACTIONSLIDER_LEFT | ELM_ACTIONSLIDER_RIGHT).
2964     *
2965     * @note All the positions are enabled by default.
2966     *
2967     * @param obj The actionslider object.
2968     * @param pos Bit mask indicating the enabled positions.
2969     */
2970    EAPI void                  elm_actionslider_enabled_pos_set(Evas_Object *obj, Elm_Actionslider_Pos pos) EINA_ARG_NONNULL(1);
2971    /**
2972     * Get actionslider enabled position.
2973     *
2974     * @param obj The actionslider object.
2975     * @return The enabled positions.
2976     */
2977    EAPI Elm_Actionslider_Pos  elm_actionslider_enabled_pos_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
2978    /**
2979     * Set the label used on the indicator.
2980     *
2981     * @param obj The actionslider object
2982     * @param label The label to be set on the indicator.
2983     */
2984    EAPI void                  elm_actionslider_indicator_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
2985    /**
2986     * Get the label used on the indicator object.
2987     *
2988     * @param obj The actionslider object
2989     * @return The indicator label
2990     */
2991    EAPI const char           *elm_actionslider_indicator_label_get(Evas_Object *obj) EINA_ARG_NONNULL(1);
2992    /**
2993     * @}
2994     */
2995
2996    /* genlist */
2997    typedef enum _Elm_Genlist_Item_Flags
2998      {
2999         ELM_GENLIST_ITEM_NONE = 0,
3000         ELM_GENLIST_ITEM_SUBITEMS = (1 << 0),
3001         ELM_GENLIST_ITEM_GROUP = (1 << 1)
3002      } Elm_Genlist_Item_Flags;
3003    typedef struct _Elm_Genlist_Item_Class Elm_Genlist_Item_Class;
3004    typedef struct _Elm_Genlist_Item       Elm_Genlist_Item; /**< Item of Elm_Genlist. Sub-type of Elm_Widget_Item */
3005    typedef struct _Elm_Genlist_Item_Class_Func Elm_Genlist_Item_Class_Func;
3006    typedef char        *(*GenlistItemLabelGetFunc) (void *data, Evas_Object *obj, const char *part);
3007    typedef Evas_Object *(*GenlistItemIconGetFunc)  (void *data, Evas_Object *obj, const char *part);
3008    typedef Eina_Bool    (*GenlistItemStateGetFunc) (void *data, Evas_Object *obj, const char *part);
3009    typedef void         (*GenlistItemDelFunc)      (void *data, Evas_Object *obj);
3010    typedef void         (*GenlistItemMovedFunc)    (Evas_Object *obj, Elm_Genlist_Item *item, Elm_Genlist_Item *rel_item, Eina_Bool move_after);
3011
3012    struct _Elm_Genlist_Item_Class
3013      {
3014         const char                *item_style;
3015         struct
3016           {
3017              GenlistItemLabelGetFunc  label_get;
3018              GenlistItemIconGetFunc   icon_get;
3019              GenlistItemStateGetFunc  state_get;
3020              GenlistItemDelFunc       del;
3021              GenlistItemMovedFunc     moved;
3022           } func;
3023         const char                *mode_item_style;
3024      };
3025
3026    EAPI Evas_Object      *elm_genlist_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
3027    EAPI void              elm_genlist_clear(Evas_Object *obj) EINA_ARG_NONNULL(1);
3028    EAPI void              elm_genlist_multi_select_set(Evas_Object *obj, Eina_Bool multi) EINA_ARG_NONNULL(1);
3029    EAPI Eina_Bool         elm_genlist_multi_select_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3030    EAPI void              elm_genlist_horizontal_mode_set(Evas_Object *obj, Elm_List_Mode mode) EINA_ARG_NONNULL(1);
3031    EAPI Elm_List_Mode     elm_genlist_horizontal_mode_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3032    EAPI void              elm_genlist_always_select_mode_set(Evas_Object *obj, Eina_Bool always_select) EINA_ARG_NONNULL(1);
3033    EAPI Eina_Bool         elm_genlist_always_select_mode_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3034    EAPI void              elm_genlist_no_select_mode_set(Evas_Object *obj, Eina_Bool no_select) EINA_ARG_NONNULL(1);
3035    EAPI Eina_Bool         elm_genlist_no_select_mode_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3036    EAPI void              elm_genlist_compress_mode_set(Evas_Object *obj, Eina_Bool compress) EINA_ARG_NONNULL(1);
3037    EAPI Eina_Bool         elm_genlist_compress_mode_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3038    EAPI void              elm_genlist_height_for_width_mode_set(Evas_Object *obj, Eina_Bool height_for_width) EINA_ARG_NONNULL(1);
3039    EAPI Eina_Bool         elm_genlist_height_for_width_mode_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3040    EAPI void              elm_genlist_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_bounce) EINA_ARG_NONNULL(1);
3041    EAPI void              elm_genlist_bounce_get(const Evas_Object *obj, Eina_Bool *h_bounce, Eina_Bool *v_bounce) EINA_ARG_NONNULL(1);
3042    EAPI void              elm_genlist_homogeneous_set(Evas_Object *obj, Eina_Bool homogeneous) EINA_ARG_NONNULL(1);
3043    EAPI Eina_Bool         elm_genlist_homogeneous_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3044    EAPI void              elm_genlist_block_count_set(Evas_Object *obj, int n) EINA_ARG_NONNULL(1);
3045    EAPI int               elm_genlist_block_count_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3046    EAPI void              elm_genlist_longpress_timeout_set(Evas_Object *obj, double timeout) EINA_ARG_NONNULL(1);
3047    EAPI double            elm_genlist_longpress_timeout_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3048    /* operations to add items */
3049    EAPI Elm_Genlist_Item *elm_genlist_item_append(Evas_Object *obj, const Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *parent, Elm_Genlist_Item_Flags flags, Evas_Smart_Cb func, const void *func_data) EINA_ARG_NONNULL(1);
3050    EAPI Elm_Genlist_Item *elm_genlist_item_prepend(Evas_Object *obj, const Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *parent, Elm_Genlist_Item_Flags flags, Evas_Smart_Cb func, const void *func_data) EINA_ARG_NONNULL(1);
3051    EAPI Elm_Genlist_Item *elm_genlist_item_insert_before(Evas_Object *obj, const Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *parent, Elm_Genlist_Item *before, Elm_Genlist_Item_Flags flags, Evas_Smart_Cb func, const void *func_data) EINA_ARG_NONNULL(1, 5);
3052    EAPI Elm_Genlist_Item *elm_genlist_item_insert_after(Evas_Object *obj, const Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *parent, Elm_Genlist_Item *after, Elm_Genlist_Item_Flags flags, Evas_Smart_Cb func, const void *func_data) EINA_ARG_NONNULL(1, 5);
3053 EAPI Elm_Genlist_Item *elm_genlist_item_sorted_insert(Evas_Object *obj, const Elm_Genlist_Item_Class *itc, const void *data, Elm_Genlist_Item *parent, Elm_Genlist_Item_Flags flags, Eina_Compare_Cb comp, Evas_Smart_Cb func,const void *func_data);
3054    /* operations to retrieve existing items */
3055    EAPI Elm_Genlist_Item *elm_genlist_selected_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3056    EAPI const Eina_List  *elm_genlist_selected_items_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3057    EAPI Eina_List        *elm_genlist_realized_items_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3058    EAPI Elm_Genlist_Item *elm_genlist_at_xy_item_get(const Evas_Object *obj, Evas_Coord x, Evas_Coord y, int *posret) EINA_ARG_NONNULL(1);
3059    EAPI Elm_Genlist_Item *elm_genlist_first_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3060    EAPI Elm_Genlist_Item *elm_genlist_last_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3061    EAPI void              elm_genlist_scroller_policy_set(Evas_Object *obj, Elm_Scroller_Policy policy_h, Elm_Scroller_Policy policy_v) EINA_ARG_NONNULL(1);
3062    EAPI void              elm_genlist_scroller_policy_get(const Evas_Object *obj, Elm_Scroller_Policy *policy_h, Elm_Scroller_Policy *policy_v) EINA_ARG_NONNULL(1);
3063    /* available item styles:
3064     * default
3065     * default_style - The text part is a textblock
3066     * double_label
3067     * icon_top_text_bottom
3068     */
3069    /* Genlist Item operation */
3070    EAPI Elm_Genlist_Item  *elm_genlist_item_next_get(const Elm_Genlist_Item *item) EINA_ARG_NONNULL(1);
3071    EAPI Elm_Genlist_Item  *elm_genlist_item_prev_get(const Elm_Genlist_Item *item) EINA_ARG_NONNULL(1);
3072    EAPI Evas_Object       *elm_genlist_item_genlist_get(const Elm_Genlist_Item *item) EINA_ARG_NONNULL(1);
3073    EAPI Elm_Genlist_Item  *elm_genlist_item_parent_get(const Elm_Genlist_Item *it) EINA_ARG_NONNULL(1);
3074    EAPI void               elm_genlist_item_subitems_clear(Elm_Genlist_Item *item) EINA_ARG_NONNULL(1);
3075    EAPI void               elm_genlist_item_selected_set(Elm_Genlist_Item *item, Eina_Bool selected) EINA_ARG_NONNULL(1);
3076    EAPI Eina_Bool          elm_genlist_item_selected_get(const Elm_Genlist_Item *item) EINA_ARG_NONNULL(1);
3077    EAPI void               elm_genlist_item_expanded_set(Elm_Genlist_Item *item, Eina_Bool expanded) EINA_ARG_NONNULL(1);
3078    EAPI Eina_Bool          elm_genlist_item_expanded_get(const Elm_Genlist_Item *item) EINA_ARG_NONNULL(1);
3079    EAPI int                elm_genlist_item_expanded_depth_get(const Elm_Genlist_Item *it) EINA_ARG_NONNULL(1);
3080    EAPI void               elm_genlist_item_disabled_set(Elm_Genlist_Item *item, Eina_Bool disabled) EINA_ARG_NONNULL(1);
3081    EAPI Eina_Bool          elm_genlist_item_disabled_get(const Elm_Genlist_Item *item) EINA_ARG_NONNULL(1);
3082    EAPI void               elm_genlist_item_display_only_set(Elm_Genlist_Item *it, Eina_Bool display_only) EINA_ARG_NONNULL(1);
3083    EAPI Eina_Bool          elm_genlist_item_display_only_get(const Elm_Genlist_Item *it) EINA_ARG_NONNULL(1);
3084    EAPI void               elm_genlist_item_show(Elm_Genlist_Item *item) EINA_ARG_NONNULL(1);
3085    EAPI void               elm_genlist_item_bring_in(Elm_Genlist_Item *item) EINA_ARG_NONNULL(1);
3086    EAPI void               elm_genlist_item_top_show(Elm_Genlist_Item *item) EINA_ARG_NONNULL(1);
3087    EAPI void               elm_genlist_item_top_bring_in(Elm_Genlist_Item *item) EINA_ARG_NONNULL(1);
3088    EAPI void               elm_genlist_item_middle_show(Elm_Genlist_Item *it) EINA_ARG_NONNULL(1);
3089    EAPI void               elm_genlist_item_middle_bring_in(Elm_Genlist_Item *it) EINA_ARG_NONNULL(1);
3090    EAPI void               elm_genlist_item_del(Elm_Genlist_Item *item) EINA_ARG_NONNULL(1);
3091    EAPI void              *elm_genlist_item_data_get(const Elm_Genlist_Item *item) EINA_ARG_NONNULL(1);
3092    EAPI void               elm_genlist_item_data_set(Elm_Genlist_Item *it, const void *data) EINA_ARG_NONNULL(1);
3093    EAPI void               elm_genlist_item_icons_orphan(Elm_Genlist_Item *it) EINA_ARG_NONNULL(1);
3094    EAPI const Evas_Object *elm_genlist_item_object_get(const Elm_Genlist_Item *it) EINA_ARG_NONNULL(1);
3095    EAPI void               elm_genlist_item_update(Elm_Genlist_Item *item) EINA_ARG_NONNULL(1);
3096    EAPI void               elm_genlist_item_item_class_update(Elm_Genlist_Item *it, const Elm_Genlist_Item_Class *itc) EINA_ARG_NONNULL(1, 2);
3097    EAPI void               elm_genlist_item_tooltip_text_set(Elm_Genlist_Item *item, const char *text) EINA_ARG_NONNULL(1);
3098    EAPI void               elm_genlist_item_tooltip_content_cb_set(Elm_Genlist_Item *item, Elm_Tooltip_Item_Content_Cb func, const void *data, Evas_Smart_Cb del_cb) EINA_ARG_NONNULL(1);
3099    EAPI void               elm_genlist_item_tooltip_unset(Elm_Genlist_Item *item) EINA_ARG_NONNULL(1);
3100    EAPI void               elm_genlist_item_tooltip_style_set(Elm_Genlist_Item *item, const char *style) EINA_ARG_NONNULL(1);
3101    EAPI const char        *elm_genlist_item_tooltip_style_get(const Elm_Genlist_Item *item) EINA_ARG_NONNULL(1);
3102    EAPI void               elm_genlist_item_cursor_set(Elm_Genlist_Item *item, const char *cursor) EINA_ARG_NONNULL(1);
3103    EAPI const char        *elm_genlist_item_cursor_get(const Elm_Genlist_Item *item) EINA_ARG_NONNULL(1);
3104    EAPI void               elm_genlist_item_cursor_unset(Elm_Genlist_Item *item) EINA_ARG_NONNULL(1);
3105    EAPI void               elm_genlist_item_cursor_style_set(Elm_Genlist_Item *item, const char *style) EINA_ARG_NONNULL(1);
3106    EAPI const char        *elm_genlist_item_cursor_style_get(const Elm_Genlist_Item *item) EINA_ARG_NONNULL(1);
3107    EAPI void               elm_genlist_item_cursor_engine_only_set(Elm_Genlist_Item *item, Eina_Bool engine_only) EINA_ARG_NONNULL(1);
3108    EAPI Eina_Bool          elm_genlist_item_cursor_engine_only_get(const Elm_Genlist_Item *item) EINA_ARG_NONNULL(1);
3109    EAPI void               elm_genlist_realized_items_update(Evas_Object *obj) EINA_ARG_NONNULL(1);
3110    EAPI void               elm_genlist_item_mode_set(Elm_Genlist_Item *it, const char *mode_type, Eina_Bool mode_set) EINA_ARG_NONNULL(1, 2);
3111    EAPI const char        *elm_genlist_mode_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3112    EAPI const Elm_Genlist_Item *elm_genlist_mode_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3113    EAPI void               elm_genlist_reorder_mode_set(Evas_Object *obj, Eina_Bool reorder_mode) EINA_ARG_NONNULL(1);
3114    EAPI Eina_Bool          elm_genlist_reorder_mode_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3115    /** Signals that you can add callbacks for are:
3116     * "clicked,double" - This is called when a user has double-clicked an item.
3117     *                    The event_info parameter is the genlist item that was
3118     *                    double-clicked.
3119     * "selected" - This is called when a user has made an item selected. The
3120     *              event_info parameter is the genlist item that was selected.
3121     * "unselected" - This is called when a user has made an item unselected. The
3122     *                 event_info parameter is the genlist item that was
3123     *                 unselected.
3124     * "expanded" - This is called when elm_genlist_item_expanded_set() is called
3125     *              and the item is now meant to be expanded. The event_info
3126     *              parameter is the genlist item that was indicated to expand.
3127     *              It is the job of this callback to then fill in the child
3128     *              items.
3129     * "contracted" - This is called when elm_genlist_item_expanded_set() is
3130     *                called and the item is now meant to be contracted. The
3131     *                event_info parameter is the genlist item that was indicated
3132     *                to contract. It is the job of this callback to then delete
3133     *                the child items.
3134     * "expand,request" - This is called when a user has indicated they want to
3135     *                    expand a tree branch item. The callback should decide
3136     *                    if the item can expand (has any children) and then call
3137     *                    elm_genlist_item_expanded_set() appropriately to set
3138     *                    the state. The event_info parameter is the genlist item
3139     *                    that was indicated to expand.
3140     * "contract,request" - This is called when a user has indicated they want to
3141     *                      contract a tree branch item. The callback should
3142     *                      decide if the item can contract (has any children)
3143     *                      and then call elm_genlist_item_expanded_set()
3144     *                      appropriately to set the state. The event_info
3145     *                      parameter is the genlist item that was indicated to
3146     *                      contract.
3147     * "realized" - This is called when the item in the list is created as a real
3148     *              evas object. event_info parameter is the genlist item that
3149     *              was created. The object may be deleted at any time, so it is
3150     *              up to the caller to not use the object pointer from
3151     *              elm_genlist_item_object_get() in a way where it may point to
3152     *              freed objects.
3153     * "unrealized" - This is called just before an item is unrealized. After
3154     *                this call icon objects provided will be deleted and the
3155     *                item object itself delete or be put into a floating cache.
3156     * "drag,start,up" - This is called when the item in the list has been
3157     *                   dragged (not scrolled) up.
3158     * "drag,start,down" - This is called when the item in the list has been
3159     *                     dragged (not scrolled) down.
3160     * "drag,start,left" - This is called when the item in the list has been
3161     *                     dragged (not scrolled) left.
3162     * "drag,start,right" - This is called when the item in the list has been
3163     *                      dragged (not scrolled) right.
3164     * "drag,stop" - This is called when the item in the list has stopped being
3165     *               dragged.
3166     * "drag" - This is called when the item in the list is being dragged.
3167     * "longpressed" - This is called when the item is pressed for a certain
3168     *                 amount of time. By default it's 1 second.
3169     * "scroll,edge,top" - This is called when the genlist is scrolled until the
3170     *                     top edge.
3171     * "scroll,edge,bottom" - This is called when the genlist is scrolled until
3172     *                        the bottom edge.
3173     * "scroll,edge,left" - This is called when the genlist is scrolled until the
3174     *                      left edge.
3175     * "scroll,edge,right" - This is called when the genlist is scrolled until
3176     *                       the right edge.
3177     * "multi,swipe,left" - This is called when the genlist is multi-touch swiped
3178     *                       left.
3179     * "multi,swipe,right" - This is called when the genlist is multi-touch
3180     *                       swiped right.
3181     * "multi,swipe,up" - This is called when the genlist is multi-touch swiped
3182     *                    up.
3183     * "multi,swipe,down" - This is called when the genlist is multi-touch swiped
3184     *                      down.
3185     * "multi,pinch,out" - This is called when the genlist is multi-touch pinched
3186     *                     out.
3187     * "multi,pinch,in" - This is called when the genlist is multi-touch pinched
3188     *                    in.
3189     * "swipe" - This is called when the genlist is swiped.
3190     */
3191
3192    /* check */
3193    EAPI Evas_Object *elm_check_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
3194    EAPI void         elm_check_label_set(Evas_Object *obj, const char *label); EINA_ARG_NONNULL(1)
3195    EAPI const char  *elm_check_label_get(const Evas_Object *obj); EINA_ARG_NONNULL(1)
3196    EAPI void         elm_check_icon_set(Evas_Object *obj, Evas_Object *icon); EINA_ARG_NONNULL(1)
3197    EAPI Evas_Object *elm_check_icon_get(const Evas_Object *obj); EINA_ARG_NONNULL(1)
3198    EAPI Evas_Object *elm_check_icon_unset(Evas_Object *obj); EINA_ARG_NONNULL(1)
3199    EAPI void         elm_check_state_set(Evas_Object *obj, Eina_Bool state); EINA_ARG_NONNULL(1)
3200    EAPI Eina_Bool    elm_check_state_get(const Evas_Object *obj); EINA_ARG_NONNULL(1)
3201    EAPI void         elm_check_state_pointer_set(Evas_Object *obj, Eina_Bool *statep); EINA_ARG_NONNULL(1)
3202    /* smart callbacks called:
3203     * "changed" - This is called whenever the user changes the state of one of the check object.
3204     */
3205
3206    /* radio */
3207    EAPI Evas_Object *elm_radio_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
3208    EAPI void         elm_radio_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
3209    EAPI const char  *elm_radio_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3210    EAPI void         elm_radio_icon_set(Evas_Object *obj, Evas_Object *icon) EINA_ARG_NONNULL(1);
3211    EAPI Evas_Object *elm_radio_icon_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3212    EAPI Evas_Object *elm_radio_icon_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
3213    EAPI void         elm_radio_group_add(Evas_Object *obj, Evas_Object *group) EINA_ARG_NONNULL(1);
3214    EAPI void         elm_radio_state_value_set(Evas_Object *obj, int value) EINA_ARG_NONNULL(1);
3215    EAPI int          elm_radio_state_value_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3216    EAPI void         elm_radio_value_set(Evas_Object *obj, int value) EINA_ARG_NONNULL(1);
3217    EAPI int          elm_radio_value_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3218    EAPI void         elm_radio_value_pointer_set(Evas_Object *obj, int *valuep) EINA_ARG_NONNULL(1);
3219    /* smart callbacks called:
3220     * "changed" - when the radio status is changed
3221     */
3222
3223    /* pager */
3224    EAPI Evas_Object *elm_pager_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
3225    EAPI void         elm_pager_content_push(Evas_Object *obj, Evas_Object *content) EINA_ARG_NONNULL(1);
3226    EAPI void         elm_pager_content_pop(Evas_Object *obj) EINA_ARG_NONNULL(1);
3227    EAPI void         elm_pager_content_promote(Evas_Object *obj, Evas_Object *content) EINA_ARG_NONNULL(1);
3228    EAPI Evas_Object *elm_pager_content_bottom_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3229    EAPI Evas_Object *elm_pager_content_top_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3230    /* available item styles:
3231     * default
3232     * fade
3233     * fade_translucide
3234     * fade_invisible
3235     */
3236    /* smart callbacks called:
3237     * "hide,finished" - when the previous page is hided
3238     */
3239
3240    typedef struct _Elm_Slideshow_Item_Class Elm_Slideshow_Item_Class;
3241    typedef struct _Elm_Slideshow_Item_Class_Func Elm_Slideshow_Item_Class_Func;
3242    typedef struct _Elm_Slideshow_Item       Elm_Slideshow_Item; /**< Item of Elm_Slideshow. Sub-type of Elm_Widget_Item */
3243    typedef Evas_Object *(*SlideshowItemGetFunc) (void *data, Evas_Object *obj);
3244    typedef void         (*SlideshowItemDelFunc) (void *data, Evas_Object *obj);
3245
3246    struct _Elm_Slideshow_Item_Class
3247      {
3248         struct _Elm_Slideshow_Item_Class_Func
3249           {
3250              SlideshowItemGetFunc get;
3251              SlideshowItemDelFunc del;
3252           } func;
3253      };
3254
3255    EAPI Evas_Object        *elm_slideshow_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
3256    EAPI Elm_Slideshow_Item *elm_slideshow_item_add(Evas_Object *obj, const Elm_Slideshow_Item_Class *itc, const void *data) EINA_ARG_NONNULL(1);
3257    EAPI Elm_Slideshow_Item *elm_slideshow_item_sorted_insert(Evas_Object *obj, const Elm_Slideshow_Item_Class *itc, const void *data, Eina_Compare_Cb func) EINA_ARG_NONNULL(1);
3258    EAPI void                elm_slideshow_show(Elm_Slideshow_Item *item) EINA_ARG_NONNULL(1);
3259    EAPI void                elm_slideshow_next(Evas_Object *obj) EINA_ARG_NONNULL(1);
3260    EAPI void                elm_slideshow_previous(Evas_Object *obj) EINA_ARG_NONNULL(1);
3261    EAPI const Eina_List    *elm_slideshow_transitions_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3262    EAPI void                elm_slideshow_transition_set(Evas_Object *obj, const char *transition) EINA_ARG_NONNULL(1);
3263    EAPI const char         *elm_slideshow_transition_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3264    EAPI void                elm_slideshow_timeout_set(Evas_Object *obj, double timeout) EINA_ARG_NONNULL(1);
3265    EAPI double              elm_slideshow_timeout_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3266    EAPI void                elm_slideshow_loop_set(Evas_Object *obj, Eina_Bool loop) EINA_ARG_NONNULL(1);
3267    EAPI Eina_Bool           elm_slideshow_loop_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3268    EAPI void                elm_slideshow_clear(Evas_Object *obj) EINA_ARG_NONNULL(1);
3269    EAPI const Eina_List    *elm_slideshow_items_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3270    EAPI void                elm_slideshow_item_del(Elm_Slideshow_Item *item) EINA_ARG_NONNULL(1);
3271    EAPI void               *elm_slideshow_item_data_get(const Elm_Slideshow_Item *item) EINA_ARG_NONNULL(1);
3272    EAPI Elm_Slideshow_Item *elm_slideshow_item_current_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3273    EAPI Evas_Object*        elm_slideshow_item_object_get(const Elm_Slideshow_Item* item) EINA_ARG_NONNULL(1);
3274    EAPI Elm_Slideshow_Item *elm_slideshow_item_nth_get(const Evas_Object *obj, unsigned int nth) EINA_ARG_NONNULL(1);
3275    EAPI const char         *elm_slideshow_layout_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3276    EAPI void                elm_slideshow_layout_set(Evas_Object *obj, const char *layout) EINA_ARG_NONNULL(1);
3277    EAPI const Eina_List    *elm_slideshow_layouts_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3278    EAPI void                elm_slideshow_cache_before_set(Evas_Object *obj, int count) EINA_ARG_NONNULL(1);
3279    EAPI int                 elm_slideshow_cache_before_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3280    EAPI void                elm_slideshow_cache_after_set(Evas_Object *obj, int count) EINA_ARG_NONNULL(1);
3281    EAPI int                 elm_slideshow_cache_after_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3282    EAPI unsigned int        elm_slideshow_count_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3283    /* smart callbacks called:
3284     * "changed" - when the slideshow switch to another item
3285     */
3286
3287    /* file selector */
3288    typedef enum _Elm_Fileselector_Mode
3289      {
3290         ELM_FILESELECTOR_LIST = 0,
3291         ELM_FILESELECTOR_GRID,
3292         ELM_FILESELECTOR_LAST
3293      } Elm_Fileselector_Mode;
3294
3295    EAPI Evas_Object          *elm_fileselector_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
3296    EAPI void                  elm_fileselector_is_save_set(Evas_Object *obj, Eina_Bool is_save) EINA_ARG_NONNULL(1);
3297    EAPI Eina_Bool             elm_fileselector_is_save_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3298    EAPI void                  elm_fileselector_folder_only_set(Evas_Object *obj, Eina_Bool only) EINA_ARG_NONNULL(1);
3299    EAPI Eina_Bool             elm_fileselector_folder_only_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3300    EAPI void                  elm_fileselector_buttons_ok_cancel_set(Evas_Object *obj, Eina_Bool buttons) EINA_ARG_NONNULL(1);
3301    EAPI Eina_Bool             elm_fileselector_buttons_ok_cancel_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3302    EAPI Eina_Bool             elm_fileselector_expandable_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3303    EAPI void                  elm_fileselector_expandable_set(Evas_Object *obj, Eina_Bool expand) EINA_ARG_NONNULL(1);
3304    EAPI void                  elm_fileselector_path_set(Evas_Object *obj, const char *path) EINA_ARG_NONNULL(1);
3305    EAPI const char           *elm_fileselector_path_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3306    EAPI const char           *elm_fileselector_selected_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3307    EAPI Eina_Bool             elm_fileselector_selected_set(Evas_Object *obj, const char *path) EINA_ARG_NONNULL(1);
3308    EAPI void                  elm_fileselector_mode_set(Evas_Object *obj, Elm_Fileselector_Mode mode) EINA_ARG_NONNULL(1);
3309    EAPI Elm_Fileselector_Mode elm_fileselector_mode_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3310    /* smart callbacks called:
3311     * "selected" - the user click on a file
3312     * "directory,open" - the list is populate with a new content. event_info is a directory.
3313     * "done" - the user click on the ok or cancel buttons
3314     */
3315
3316    /* progressbar */
3317    EAPI Evas_Object *elm_progressbar_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
3318    EAPI void         elm_progressbar_pulse_set(Evas_Object *obj, Eina_Bool pulse) EINA_ARG_NONNULL(1);
3319    EAPI Eina_Bool    elm_progressbar_pulse_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3320    EAPI void         elm_progressbar_pulse(Evas_Object *obj, Eina_Bool state) EINA_ARG_NONNULL(1);
3321    EAPI void         elm_progressbar_value_set(Evas_Object *obj, double val) EINA_ARG_NONNULL(1);
3322    EAPI double       elm_progressbar_value_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3323    EAPI void         elm_progressbar_label_set(Evas_Object *obj, const char *label) EINA_ARG_NONNULL(1);
3324    EAPI const char  *elm_progressbar_label_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3325    EAPI void         elm_progressbar_icon_set(Evas_Object *obj, Evas_Object *icon) EINA_ARG_NONNULL(1);
3326    EAPI Evas_Object *elm_progressbar_icon_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3327    EAPI Evas_Object *elm_progressbar_icon_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
3328    EAPI void         elm_progressbar_span_size_set(Evas_Object *obj, Evas_Coord size) EINA_ARG_NONNULL(1);
3329    EAPI Evas_Coord   elm_progressbar_span_size_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3330    EAPI void         elm_progressbar_unit_format_set(Evas_Object *obj, const char *format) EINA_ARG_NONNULL(1);
3331    EAPI const char  *elm_progressbar_unit_format_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3332    EAPI void         elm_progressbar_horizontal_set(Evas_Object *obj, Eina_Bool horizontal) EINA_ARG_NONNULL(1);
3333    EAPI Eina_Bool    elm_progressbar_horizontal_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3334    EAPI void         elm_progressbar_inverted_set(Evas_Object *obj, Eina_Bool inverted) EINA_ARG_NONNULL(1);
3335    EAPI Eina_Bool    elm_progressbar_inverted_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3336    /* smart callbacks called:
3337     */
3338    /* available item styles:
3339     * default
3340     * wheel (simple style, no text, no progression, only pulse is available)
3341     */
3342
3343    /* separator */
3344    EAPI Evas_Object *elm_separator_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
3345    EAPI void         elm_separator_horizontal_set(Evas_Object *obj, Eina_Bool horizontal) EINA_ARG_NONNULL(1);
3346    EAPI Eina_Bool    elm_separator_horizontal_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3347    /* smart callbacks called:
3348     */
3349
3350    /* spinner */
3351    EAPI Evas_Object *elm_spinner_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
3352    EAPI void         elm_spinner_label_format_set(Evas_Object *obj, const char *fmt) EINA_ARG_NONNULL(1);
3353    EAPI const char  *elm_spinner_label_format_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3354    EAPI void         elm_spinner_min_max_set(Evas_Object *obj, double min, double max) EINA_ARG_NONNULL(1);
3355    EAPI void         elm_spinner_min_max_get(const Evas_Object *obj, double *min, double *max) EINA_ARG_NONNULL(1);
3356    EAPI void         elm_spinner_step_set(Evas_Object *obj, double step) EINA_ARG_NONNULL(1);
3357    EAPI double       elm_spinner_step_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3358    EAPI void         elm_spinner_value_set(Evas_Object *obj, double val) EINA_ARG_NONNULL(1);
3359    EAPI double       elm_spinner_value_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3360    EAPI void         elm_spinner_wrap_set(Evas_Object *obj, Eina_Bool wrap) EINA_ARG_NONNULL(1);
3361    EAPI Eina_Bool    elm_spinner_wrap_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3362    EAPI void         elm_spinner_editable_set(Evas_Object *obj, Eina_Bool editable) EINA_ARG_NONNULL(1);
3363    EAPI Eina_Bool    elm_spinner_editable_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3364    EAPI void         elm_spinner_special_value_add(Evas_Object *obj, double value, const char *label) EINA_ARG_NONNULL(1);
3365    EAPI void         elm_spinner_interval_set(Evas_Object *obj, double interval) EINA_ARG_NONNULL(1);
3366    EAPI double       elm_spinner_interval_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3367    /* smart callbacks called:
3368     * "changed" - when the spinner value changes
3369     * "delay,changed" - when the spinner value changed, but a small time after a change (use this if you only want to respond to a change once the spinner is held still for a short while).
3370     */
3371    /* available item styles:
3372     * default
3373     * vertical (two up/down buttons at the right side and text left aligned)
3374     */
3375
3376    /* index */
3377    typedef struct _Elm_Index_Item Elm_Index_Item; /**< Item of Elm_Index. Sub-type of Elm_Widget_Item */
3378
3379    EAPI Evas_Object    *elm_index_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
3380    EAPI void            elm_index_active_set(Evas_Object *obj, Eina_Bool active) EINA_ARG_NONNULL(1);
3381    EAPI Eina_Bool       elm_index_active_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3382    EAPI void            elm_index_item_level_set(Evas_Object *obj, int level) EINA_ARG_NONNULL(1);
3383    EAPI int             elm_index_item_level_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3384    EAPI void           *elm_index_item_selected_get(const Evas_Object *obj, int level) EINA_ARG_NONNULL(1);
3385    EAPI void            elm_index_item_append(Evas_Object *obj, const char *letter, const void *item) EINA_ARG_NONNULL(1);
3386    EAPI void            elm_index_item_prepend(Evas_Object *obj, const char *letter, const void *item) EINA_ARG_NONNULL(1);
3387    EAPI void            elm_index_item_append_relative(Evas_Object *obj, const char *letter, const void *item, const void *relative) EINA_ARG_NONNULL(1);
3388    EAPI void            elm_index_item_prepend_relative(Evas_Object *obj, const char *letter, const void *item, const void *relative) EINA_ARG_NONNULL(1);
3389    EAPI void            elm_index_item_sorted_insert(Evas_Object *obj, const char *letter, const void *item, Eina_Compare_Cb cmp_func, Eina_Compare_Cb cmp_data_func) EINA_ARG_NONNULL(1);
3390    EAPI void            elm_index_item_del(Evas_Object *obj, const void *item) EINA_ARG_NONNULL(1);
3391    EAPI Elm_Index_Item *elm_index_item_find(Evas_Object *obj, const void *item) EINA_ARG_NONNULL(1);
3392    EAPI void            elm_index_item_clear(Evas_Object *obj) EINA_ARG_NONNULL(1);
3393    EAPI void            elm_index_item_go(Evas_Object *obj, int level) EINA_ARG_NONNULL(1);
3394    EAPI void           *elm_index_item_data_get(const Elm_Index_Item *item) EINA_ARG_NONNULL(1);
3395    EAPI void            elm_index_item_data_set(Elm_Index_Item *it, const void *data) EINA_ARG_NONNULL(1);
3396    EAPI void            elm_index_item_del_cb_set(Elm_Index_Item *it, Evas_Smart_Cb func) EINA_ARG_NONNULL(1);
3397    EAPI const char     *elm_index_item_letter_get(const Elm_Index_Item *item) EINA_ARG_NONNULL(1);
3398    /* smart callbacks called:
3399     * "changed" - when the selected index item changes
3400     * "delay,changed" - when the selected index item changes, but after some small idle period
3401     * "selected" - when the user releases a finger and selects an item
3402     * "level,up" - when the user moves a finger from the first level to the second level
3403     * "level,down" - when the user moves a finger from the second level to the first level
3404     */
3405
3406    /* photocam */
3407    typedef enum _Elm_Photocam_Zoom_Mode
3408      {
3409         ELM_PHOTOCAM_ZOOM_MODE_MANUAL = 0,
3410         ELM_PHOTOCAM_ZOOM_MODE_AUTO_FIT,
3411         ELM_PHOTOCAM_ZOOM_MODE_AUTO_FILL,
3412         ELM_PHOTOCAM_ZOOM_MODE_LAST
3413      } Elm_Photocam_Zoom_Mode;
3414
3415    EAPI Evas_Object           *elm_photocam_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
3416    EAPI Evas_Load_Error        elm_photocam_file_set(Evas_Object *obj, const char *file) EINA_ARG_NONNULL(1);
3417    EAPI const char            *elm_photocam_file_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3418    EAPI void                   elm_photocam_zoom_set(Evas_Object *obj, double zoom) EINA_ARG_NONNULL(1);
3419    EAPI double                 elm_photocam_zoom_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3420    EAPI void                   elm_photocam_zoom_mode_set(Evas_Object *obj, Elm_Photocam_Zoom_Mode mode) EINA_ARG_NONNULL(1);
3421    EAPI Elm_Photocam_Zoom_Mode elm_photocam_zoom_mode_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3422    EAPI void                   elm_photocam_image_size_get(const Evas_Object *obj, int *w, int *h) EINA_ARG_NONNULL(1);
3423    EAPI void                   elm_photocam_region_get(const Evas_Object *obj, int *x, int *y, int *w, int *h) EINA_ARG_NONNULL(1);
3424    EAPI void                   elm_photocam_image_region_show(Evas_Object *obj, int x, int y, int w, int h) EINA_ARG_NONNULL(1);
3425    EAPI void                   elm_photocam_image_region_bring_in(Evas_Object *obj, int x, int y, int w, int h) EINA_ARG_NONNULL(1);
3426    EAPI void                   elm_photocam_paused_set(Evas_Object *obj, Eina_Bool paused) EINA_ARG_NONNULL(1);
3427    EAPI Eina_Bool              elm_photocam_paused_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3428    EAPI Evas_Object           *elm_photocam_internal_image_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3429    EAPI void                   elm_photocam_bounce_set(Evas_Object *obj,  Eina_Bool h_bounce, Eina_Bool v_bounce) EINA_ARG_NONNULL(1);
3430    EAPI void                   elm_photocam_bounce_get(const Evas_Object *obj,  Eina_Bool *h_bounce, Eina_Bool *v_bounce) EINA_ARG_NONNULL(1);
3431    /* smart callbacks called:
3432     * "clicked" - when image clicked
3433     * "press" - when mouse/finger held down initially on image
3434     * "longpressed" - when mouse/finger held for long time on image
3435     * "clicked,double" - when mouse/finger double-clicked
3436     * "load" - when photo load begins
3437     * "loaded" - when photo load done
3438     * "load,detail" - when detailed image load begins
3439     * "loaded,detail" - when detailed image load done
3440     * "zoom,start" - when zooming started
3441     * "zoom,stop" - when zooming stopped
3442     * "zoom,change" - when auto zoom mode changed zoom level
3443     * "scroll - the content has been scrolled (moved)
3444     * "scroll,anim,start" - scrolling animation has started
3445     * "scroll,anim,stop" - scrolling animation has stopped
3446     * "scroll,drag,start" - dragging the contents around has started
3447     * "scroll,drag,stop" - dragging the contents around has stopped
3448     */
3449
3450    /* map */
3451    typedef enum _Elm_Map_Zoom_Mode
3452      {
3453         ELM_MAP_ZOOM_MODE_MANUAL,
3454         ELM_MAP_ZOOM_MODE_AUTO_FIT,
3455         ELM_MAP_ZOOM_MODE_AUTO_FILL,
3456         ELM_MAP_ZOOM_MODE_LAST
3457      } Elm_Map_Zoom_Mode;
3458
3459    typedef enum _Elm_Map_Route_Sources
3460      {
3461         ELM_MAP_ROUTE_SOURCE_YOURS,
3462         ELM_MAP_ROUTE_SOURCE_MONAV,
3463         ELM_MAP_ROUTE_SOURCE_ORS,
3464         ELM_MAP_ROUTE_SOURCE_LAST
3465      } Elm_Map_Route_Sources;
3466
3467    typedef enum _Elm_Map_Name_Sources
3468      {
3469         ELM_MAP_NAME_SOURCE_NOMINATIM,
3470         ELM_MAP_NAME_SOURCE_LAST
3471      } Elm_Map_Name_Sources;
3472
3473    typedef enum _Elm_Map_Route_Type
3474      {
3475         ELM_MAP_ROUTE_TYPE_MOTOCAR,
3476         ELM_MAP_ROUTE_TYPE_BICYCLE,
3477         ELM_MAP_ROUTE_TYPE_FOOT,
3478         ELM_MAP_ROUTE_TYPE_LAST
3479      } Elm_Map_Route_Type;
3480
3481    typedef enum _Elm_Map_Route_Method
3482      {
3483         ELM_MAP_ROUTE_METHOD_FASTEST,
3484         ELM_MAP_ROUTE_METHOD_SHORTEST,
3485         ELM_MAP_ROUTE_METHOD_LAST
3486      } Elm_Map_Route_Method;
3487
3488    typedef enum _Elm_Map_Name_Method
3489      {
3490         ELM_MAP_NAME_METHOD_SEARCH,
3491         ELM_MAP_NAME_METHOD_REVERSE,
3492         ELM_MAP_NAME_METHOD_LAST
3493      } Elm_Map_Name_Method;
3494
3495    typedef struct _Elm_Map_Marker          Elm_Map_Marker;
3496    typedef struct _Elm_Map_Marker_Class    Elm_Map_Marker_Class;
3497    typedef struct _Elm_Map_Group_Class     Elm_Map_Group_Class;
3498    typedef struct _Elm_Map_Route           Elm_Map_Route;
3499    typedef struct _Elm_Map_Name            Elm_Map_Name;
3500    typedef struct _Elm_Map_Track           Elm_Map_Track;
3501
3502    typedef Evas_Object *(*ElmMapMarkerGetFunc)      (Evas_Object *obj, Elm_Map_Marker *marker, void *data);
3503    typedef void         (*ElmMapMarkerDelFunc)      (Evas_Object *obj, Elm_Map_Marker *marker, void *data, Evas_Object *o);
3504    typedef Evas_Object *(*ElmMapMarkerIconGetFunc)  (Evas_Object *obj, Elm_Map_Marker *marker, void *data);
3505    typedef Evas_Object *(*ElmMapGroupIconGetFunc)   (Evas_Object *obj, void *data);
3506
3507    typedef char        *(*ElmMapModuleSourceFunc) (void);
3508    typedef int          (*ElmMapModuleZoomMinFunc) (void);
3509    typedef int          (*ElmMapModuleZoomMaxFunc) (void);
3510    typedef char        *(*ElmMapModuleUrlFunc) (Evas_Object *obj, int x, int y, int zoom);
3511    typedef int          (*ElmMapModuleRouteSourceFunc) (void);
3512    typedef char        *(*ElmMapModuleRouteUrlFunc) (Evas_Object *obj, char *type_name, int method, double flon, double flat, double tlon, double tlat);
3513    typedef char        *(*ElmMapModuleNameUrlFunc) (Evas_Object *obj, int method, char *name, double lon, double lat);
3514    typedef Eina_Bool    (*ElmMapModuleGeoIntoCoordFunc) (const Evas_Object *obj, int zoom, double lon, double lat, int size, int *x, int *y);
3515    typedef Eina_Bool    (*ElmMapModuleCoordIntoGeoFunc) (const Evas_Object *obj, int zoom, int x, int y, int size, double *lon, double *lat);
3516
3517    EAPI Evas_Object          *elm_map_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
3518    EAPI void                  elm_map_zoom_set(Evas_Object *obj, int zoom) EINA_ARG_NONNULL(1);
3519    EAPI int                   elm_map_zoom_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3520    EAPI void                  elm_map_zoom_mode_set(Evas_Object *obj, Elm_Map_Zoom_Mode mode) EINA_ARG_NONNULL(1);
3521    EAPI Elm_Map_Zoom_Mode     elm_map_zoom_mode_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3522    EAPI void                  elm_map_geo_region_get(const Evas_Object *obj, double *lon, double *lat) EINA_ARG_NONNULL(1);
3523    EAPI void                  elm_map_geo_region_bring_in(Evas_Object *obj, double lon, double lat) EINA_ARG_NONNULL(1);
3524    EAPI void                  elm_map_geo_region_show(Evas_Object *obj, double lon, double lat) EINA_ARG_NONNULL(1);
3525    EAPI void                  elm_map_paused_set(Evas_Object *obj, Eina_Bool paused) EINA_ARG_NONNULL(1);
3526    EAPI Eina_Bool             elm_map_paused_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3527    EAPI void                  elm_map_paused_markers_set(Evas_Object *obj, Eina_Bool paused) EINA_ARG_NONNULL(1);
3528    EAPI Eina_Bool             elm_map_paused_markers_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3529    EAPI void                  elm_map_utils_downloading_status_get(const Evas_Object *obj, int *try_num, int *finish_num) EINA_ARG_NONNULL(1, 2, 3);
3530    EAPI void                  elm_map_utils_convert_coord_into_geo(const Evas_Object *obj, int x, int y, int size, double *lon, double *lat) EINA_ARG_NONNULL(1, 5, 6);
3531    EAPI void                  elm_map_utils_convert_geo_into_coord(const Evas_Object *obj, double lon, double lat, int size, int *x, int *y) EINA_ARG_NONNULL(1, 5, 6);
3532    EAPI Elm_Map_Name         *elm_map_utils_convert_coord_into_name(const Evas_Object *obj, double lon, double lat) EINA_ARG_NONNULL(1);
3533    EAPI Elm_Map_Name         *elm_map_utils_convert_name_into_coord(const Evas_Object *obj, char *address) EINA_ARG_NONNULL(1, 2);
3534    EAPI void                  elm_map_utils_rotate_coord(const Evas_Object *obj, const Evas_Coord x, const Evas_Coord y, const Evas_Coord cx, const Evas_Coord cy, const double degree, Evas_Coord *xx, Evas_Coord *yy) EINA_ARG_NONNULL(1);
3535    EAPI Elm_Map_Marker       *elm_map_marker_add(Evas_Object *obj, double lon, double lat, Elm_Map_Marker_Class *clas, Elm_Map_Group_Class *clas_group, void *data) EINA_ARG_NONNULL(1, 4, 5);
3536    EAPI void                  elm_map_max_marker_per_group_set(Evas_Object *obj, int max) EINA_ARG_NONNULL(1);
3537    EAPI void                  elm_map_marker_remove(Elm_Map_Marker *marker) EINA_ARG_NONNULL(1);
3538    EAPI void                  elm_map_marker_region_get(const Elm_Map_Marker *marker, double *lon, double *lat) EINA_ARG_NONNULL(1);
3539    EAPI void                  elm_map_marker_bring_in(Elm_Map_Marker *marker) EINA_ARG_NONNULL(1);
3540    EAPI void                  elm_map_marker_show(Elm_Map_Marker *marker) EINA_ARG_NONNULL(1);
3541    EAPI void                  elm_map_markers_list_show(Eina_List *markers) EINA_ARG_NONNULL(1);
3542    EAPI Evas_Object          *elm_map_marker_object_get(const Elm_Map_Marker *marker) EINA_ARG_NONNULL(1);
3543    EAPI void                  elm_map_marker_update(Elm_Map_Marker *marker) EINA_ARG_NONNULL(1);
3544    EAPI void                  elm_map_bubbles_close(Evas_Object *obj) EINA_ARG_NONNULL(1);
3545    EAPI Elm_Map_Group_Class  *elm_map_group_class_new(Evas_Object *obj) EINA_ARG_NONNULL(1);
3546    EAPI void                  elm_map_group_class_style_set(Elm_Map_Group_Class *clas, const char *style) EINA_ARG_NONNULL(1);
3547    EAPI void                  elm_map_group_class_icon_cb_set(Elm_Map_Group_Class *clas, ElmMapGroupIconGetFunc icon_get) EINA_ARG_NONNULL(1);
3548    EAPI void                  elm_map_group_class_data_set(Elm_Map_Group_Class *clas, void *data) EINA_ARG_NONNULL(1);
3549    EAPI void                  elm_map_group_class_zoom_displayed_set(Elm_Map_Group_Class *clas, int zoom) EINA_ARG_NONNULL(1);
3550    EAPI void                  elm_map_group_class_zoom_grouped_set(Elm_Map_Group_Class *clas, int zoom) EINA_ARG_NONNULL(1);
3551    EAPI void                  elm_map_group_class_hide_set(Evas_Object *obj, Elm_Map_Group_Class *clas, Eina_Bool hide) EINA_ARG_NONNULL(1, 2);
3552    EAPI Elm_Map_Marker_Class *elm_map_marker_class_new(Evas_Object *obj) EINA_ARG_NONNULL(1);
3553    EAPI void                  elm_map_marker_class_style_set(Elm_Map_Marker_Class *clas, const char *style) EINA_ARG_NONNULL(1);
3554    EAPI void                  elm_map_marker_class_icon_cb_set(Elm_Map_Marker_Class *clas, ElmMapMarkerIconGetFunc icon_get) EINA_ARG_NONNULL(1);
3555    EAPI void                  elm_map_marker_class_get_cb_set(Elm_Map_Marker_Class *clas, ElmMapMarkerGetFunc get) EINA_ARG_NONNULL(1);
3556    EAPI void                  elm_map_marker_class_del_cb_set(Elm_Map_Marker_Class *clas, ElmMapMarkerDelFunc del) EINA_ARG_NONNULL(1);
3557    EAPI const char          **elm_map_source_names_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3558    EAPI void                  elm_map_source_name_set(Evas_Object *obj, const char *source_name) EINA_ARG_NONNULL(1);
3559    EAPI const char           *elm_map_source_name_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3560    EAPI void                  elm_map_route_source_set(Evas_Object *obj, Elm_Map_Route_Sources source) EINA_ARG_NONNULL(1);
3561    EAPI Elm_Map_Route_Sources elm_map_route_source_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3562    EAPI void                  elm_map_source_zoom_min_set(Evas_Object *obj, int zoom) EINA_ARG_NONNULL(1);
3563    EAPI int                   elm_map_source_zoom_min_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3564    EAPI void                  elm_map_source_zoom_max_set(Evas_Object *obj, int zoom) EINA_ARG_NONNULL(1);
3565    EAPI int                   elm_map_source_zoom_max_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3566    EAPI void                  elm_map_user_agent_set(Evas_Object *obj, const char *user_agent) EINA_ARG_NONNULL(1, 2);
3567    EAPI const char           *elm_map_user_agent_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3568    EAPI Elm_Map_Route        *elm_map_route_add(Evas_Object *obj, Elm_Map_Route_Type type, Elm_Map_Route_Method method, double flon, double flat, double tlon, double tlat) EINA_ARG_NONNULL(1);
3569    EAPI void                  elm_map_route_remove(Elm_Map_Route *route) EINA_ARG_NONNULL(1);
3570    EAPI void                  elm_map_route_color_set(Elm_Map_Route *route, int r, int g , int b, int a) EINA_ARG_NONNULL(1);
3571    EAPI void                  elm_map_route_color_get(const Elm_Map_Route *route, int *r, int *g , int *b, int *a) EINA_ARG_NONNULL(1);
3572    EAPI double                elm_map_route_distance_get(const Elm_Map_Route *route) EINA_ARG_NONNULL(1);
3573    EAPI const char           *elm_map_route_node_get(const Elm_Map_Route *route) EINA_ARG_NONNULL(1);
3574    EAPI const char           *elm_map_route_waypoint_get(const Elm_Map_Route *route) EINA_ARG_NONNULL(1);
3575    EAPI const char           *elm_map_name_address_get(const Elm_Map_Name *name) EINA_ARG_NONNULL(1);
3576    EAPI void                  elm_map_name_region_get(const Elm_Map_Name *name, double *lon, double *lat) EINA_ARG_NONNULL(1);
3577    EAPI void                  elm_map_name_remove(Elm_Map_Name *name) EINA_ARG_NONNULL(1);
3578    EAPI void                  elm_map_rotate_set(Evas_Object *obj, double degree, Evas_Coord cx, Evas_Coord cy) EINA_ARG_NONNULL(1);
3579    EAPI void                  elm_map_rotate_get(const Evas_Object *obj, double *degree, Evas_Coord *cx, Evas_Coord *cy) EINA_ARG_NONNULL(1, 2, 3, 4);
3580    EAPI void                  elm_map_wheel_disabled_set(Evas_Object *obj, Eina_Bool disabled) EINA_ARG_NONNULL(1);
3581    EAPI Eina_Bool             elm_map_wheel_disabled_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3582    EAPI Elm_Map_Track        *elm_map_track_add(Evas_Object *obj, const char *gpx_file) EINA_ARG_NONNULL(1);
3583    EAPI void                  elm_map_track_remove(Elm_Map_Track *track) EINA_ARG_NONNULL(1);
3584    EAPI void                  elm_map_track_color_set(Elm_Map_Track *track, int r, int g , int b, int a) EINA_ARG_NONNULL(1);
3585    EAPI void                  elm_map_track_color_get(const Elm_Map_Track *track, int *r, int *g , int *b, int *a) EINA_ARG_NONNULL(1);
3586
3587    /* smart callbacks called:
3588     * "clicked" - when image clicked
3589     * "press" - when mouse/finger held down initially on image
3590     * "longpressed" - when mouse/finger held for long time on image
3591     * "clicked,double" - when mouse/finger double-clicked
3592     * "load,details" - when detailed image load begins
3593     * "loaded,details" - when detailed image load done
3594     * "zoom,start" - when zooming started
3595     * "zoom,stop" - when zooming stopped
3596     * "zoom,change" - when auto zoom mode changed zoom level
3597     * "scroll - the content has been scrolled (moved)
3598     * "scroll,anim,start" - scrolling animation has started
3599     * "scroll,anim,stop" - scrolling animation has stopped
3600     * "scroll,drag,start" - dragging the contents around has started
3601     * "scroll,drag,stop" - dragging the contents around has stopped
3602     */
3603
3604    /* panel */
3605    typedef enum _Elm_Panel_Orient
3606      {
3607         ELM_PANEL_ORIENT_TOP,
3608         ELM_PANEL_ORIENT_BOTTOM,
3609         ELM_PANEL_ORIENT_LEFT,
3610         ELM_PANEL_ORIENT_RIGHT,
3611      } Elm_Panel_Orient;
3612
3613    EAPI Evas_Object          *elm_panel_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
3614    EAPI void                  elm_panel_orient_set(Evas_Object *obj, Elm_Panel_Orient orient) EINA_ARG_NONNULL(1);
3615    EAPI Elm_Panel_Orient      elm_panel_orient_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3616    EAPI void                  elm_panel_content_set(Evas_Object *obj, Evas_Object *content) EINA_ARG_NONNULL(1);
3617    EAPI Evas_Object          *elm_panel_content_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3618    EAPI Evas_Object          *elm_panel_content_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
3619    EAPI void                  elm_panel_hidden_set(Evas_Object *obj, Eina_Bool hidden) EINA_ARG_NONNULL(1);
3620    EAPI Eina_Bool             elm_panel_hidden_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3621    EAPI void                  elm_panel_toggle(Evas_Object *obj) EINA_ARG_NONNULL(1);
3622
3623    /* panes */
3624    /**
3625     * TODO
3626     *
3627     * Update the minimun height of the bar in the theme. No minimun should be set in the vertical theme
3628     * Add events (move, start ...)
3629     */
3630    EAPI Evas_Object          *elm_panes_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
3631    EAPI void                  elm_panes_content_left_set(Evas_Object *obj, Evas_Object *content) EINA_ARG_NONNULL(1);
3632    EAPI void                  elm_panes_content_right_set(Evas_Object *obj, Evas_Object *content) EINA_ARG_NONNULL(1);
3633    EAPI Evas_Object          *elm_panes_content_left_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3634    EAPI Evas_Object          *elm_panes_content_right_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3635    EAPI Evas_Object          *elm_panes_content_left_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
3636    EAPI Evas_Object          *elm_panes_content_right_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
3637    EAPI double                elm_panes_content_left_size_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3638    EAPI void                  elm_panes_content_left_size_set(Evas_Object *obj, double size) EINA_ARG_NONNULL(1);
3639    EAPI void                  elm_panes_horizontal_set(Evas_Object *obj, Eina_Bool horizontal) EINA_ARG_NONNULL(1);
3640    EAPI Eina_Bool             elm_panes_horizontal_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3641
3642    /* flip */
3643    typedef enum _Elm_Flip_Mode
3644      {
3645         ELM_FLIP_ROTATE_Y_CENTER_AXIS,
3646         ELM_FLIP_ROTATE_X_CENTER_AXIS,
3647         ELM_FLIP_ROTATE_XZ_CENTER_AXIS,
3648         ELM_FLIP_ROTATE_YZ_CENTER_AXIS,
3649         ELM_FLIP_CUBE_LEFT,
3650         ELM_FLIP_CUBE_RIGHT,
3651         ELM_FLIP_CUBE_UP,
3652         ELM_FLIP_CUBE_DOWN,
3653         ELM_FLIP_PAGE_LEFT,
3654         ELM_FLIP_PAGE_RIGHT,
3655         ELM_FLIP_PAGE_UP,
3656         ELM_FLIP_PAGE_DOWN
3657      } Elm_Flip_Mode;
3658    typedef enum _Elm_Flip_Interaction
3659      {
3660         ELM_FLIP_INTERACTION_NONE,
3661         ELM_FLIP_INTERACTION_ROTATE,
3662         ELM_FLIP_INTERACTION_CUBE,
3663         ELM_FLIP_INTERACTION_PAGE
3664      } Elm_Flip_Interaction;
3665    typedef enum _Elm_Flip_Direction
3666      {
3667         ELM_FLIP_DIRECTION_UP,
3668         ELM_FLIP_DIRECTION_DOWN,
3669         ELM_FLIP_DIRECTION_LEFT,
3670         ELM_FLIP_DIRECTION_RIGHT
3671      } Elm_Flip_Direction;
3672
3673    EAPI Evas_Object *elm_flip_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
3674    EAPI void         elm_flip_content_front_set(Evas_Object *obj, Evas_Object *content) EINA_ARG_NONNULL(1);
3675    EAPI void         elm_flip_content_back_set(Evas_Object *obj, Evas_Object *content) EINA_ARG_NONNULL(1);
3676    EAPI Evas_Object *elm_flip_content_front_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3677    EAPI Evas_Object *elm_flip_content_back_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3678    EAPI Evas_Object *elm_flip_content_front_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
3679    EAPI Evas_Object *elm_flip_content_back_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
3680    EAPI Eina_Bool    elm_flip_front_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3681    EAPI void         elm_flip_perspective_set(Evas_Object *obj, Evas_Coord foc, Evas_Coord x, Evas_Coord y) EINA_ARG_NONNULL(1);
3682    EAPI void         elm_flip_go(Evas_Object *obj, Elm_Flip_Mode mode) EINA_ARG_NONNULL(1);
3683    EAPI void         elm_flip_interaction_set(Evas_Object *obj, Elm_Flip_Interaction mode);
3684    EAPI Elm_Flip_Interaction elm_flip_interaction_get(const Evas_Object *obj);
3685    EAPI void         elm_flip_interacton_direction_enabled_set(Evas_Object *obj, Elm_Flip_Direction dir, Eina_Bool enabled);
3686    EAPI Eina_Bool    elm_flip_interacton_direction_enabled_get(Evas_Object *obj, Elm_Flip_Direction dir);
3687    EAPI void         elm_flip_interacton_direction_hitsize_set(Evas_Object *obj, Elm_Flip_Direction dir, double hitsize);
3688    EAPI double       elm_flip_interacton_direction_hitsize_get(Evas_Object *obj, Elm_Flip_Direction dir);
3689    /* smart callbacks called:
3690     * "animate,begin" - when a flip animation was started
3691     * "animate,done" - when a flip animation is finished
3692     */
3693
3694    /* scrolledentry */
3695    EINA_DEPRECATED EAPI Evas_Object *elm_scrolled_entry_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
3696    EINA_DEPRECATED EAPI void         elm_scrolled_entry_single_line_set(Evas_Object *obj, Eina_Bool single_line) EINA_ARG_NONNULL(1);
3697    EINA_DEPRECATED EAPI Eina_Bool    elm_scrolled_entry_single_line_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3698    EINA_DEPRECATED EAPI void         elm_scrolled_entry_password_set(Evas_Object *obj, Eina_Bool password) EINA_ARG_NONNULL(1);
3699    EINA_DEPRECATED EAPI Eina_Bool    elm_scrolled_entry_password_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3700    EINA_DEPRECATED EAPI void         elm_scrolled_entry_entry_set(Evas_Object *obj, const char *entry) EINA_ARG_NONNULL(1);
3701    EINA_DEPRECATED EAPI const char  *elm_scrolled_entry_entry_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3702    EINA_DEPRECATED EAPI void         elm_scrolled_entry_entry_append(Evas_Object *obj, const char *entry) EINA_ARG_NONNULL(1);
3703    EINA_DEPRECATED EAPI Eina_Bool    elm_scrolled_entry_is_empty(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3704    EINA_DEPRECATED EAPI const char  *elm_scrolled_entry_selection_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3705    EINA_DEPRECATED EAPI void         elm_scrolled_entry_entry_insert(Evas_Object *obj, const char *entry) EINA_ARG_NONNULL(1);
3706    EINA_DEPRECATED EAPI void         elm_scrolled_entry_line_wrap_set(Evas_Object *obj, Elm_Wrap_Type wrap) EINA_ARG_NONNULL(1);
3707    EINA_DEPRECATED EAPI void         elm_scrolled_entry_editable_set(Evas_Object *obj, Eina_Bool editable) EINA_ARG_NONNULL(1);
3708    EINA_DEPRECATED EAPI Eina_Bool    elm_scrolled_entry_editable_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3709    EINA_DEPRECATED EAPI void         elm_scrolled_entry_select_none(Evas_Object *obj) EINA_ARG_NONNULL(1);
3710    EINA_DEPRECATED EAPI void         elm_scrolled_entry_select_all(Evas_Object *obj) EINA_ARG_NONNULL(1);
3711    EINA_DEPRECATED EAPI Eina_Bool    elm_scrolled_entry_cursor_next(Evas_Object *obj) EINA_ARG_NONNULL(1);
3712    EINA_DEPRECATED EAPI Eina_Bool    elm_scrolled_entry_cursor_prev(Evas_Object *obj) EINA_ARG_NONNULL(1);
3713    EINA_DEPRECATED EAPI Eina_Bool    elm_scrolled_entry_cursor_up(Evas_Object *obj) EINA_ARG_NONNULL(1);
3714    EINA_DEPRECATED EAPI Eina_Bool    elm_scrolled_entry_cursor_down(Evas_Object *obj) EINA_ARG_NONNULL(1);
3715    EINA_DEPRECATED EAPI void         elm_scrolled_entry_cursor_begin_set(Evas_Object *obj) EINA_ARG_NONNULL(1);
3716    EINA_DEPRECATED EAPI void         elm_scrolled_entry_cursor_end_set(Evas_Object *obj) EINA_ARG_NONNULL(1);
3717    EINA_DEPRECATED EAPI void         elm_scrolled_entry_cursor_line_begin_set(Evas_Object *obj) EINA_ARG_NONNULL(1);
3718    EINA_DEPRECATED EAPI void         elm_scrolled_entry_cursor_line_end_set(Evas_Object *obj) EINA_ARG_NONNULL(1);
3719    EINA_DEPRECATED EAPI void         elm_scrolled_entry_cursor_selection_begin(Evas_Object *obj) EINA_ARG_NONNULL(1);
3720    EINA_DEPRECATED EAPI void         elm_scrolled_entry_cursor_selection_end(Evas_Object *obj) EINA_ARG_NONNULL(1);
3721    EINA_DEPRECATED EAPI Eina_Bool    elm_scrolled_entry_cursor_is_format_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3722    EINA_DEPRECATED EAPI Eina_Bool    elm_scrolled_entry_cursor_is_visible_format_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3723    EINA_DEPRECATED EAPI const char  *elm_scrolled_entry_cursor_content_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3724    EINA_DEPRECATED EAPI void         elm_scrolled_entry_cursor_pos_set(Evas_Object *obj, int pos) EINA_ARG_NONNULL(1);
3725    EINA_DEPRECATED EAPI int          elm_scrolled_entry_cursor_pos_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3726    EINA_DEPRECATED EAPI void         elm_scrolled_entry_selection_cut(Evas_Object *obj) EINA_ARG_NONNULL(1);
3727    EINA_DEPRECATED EAPI void         elm_scrolled_entry_selection_copy(Evas_Object *obj) EINA_ARG_NONNULL(1);
3728    EINA_DEPRECATED EAPI void         elm_scrolled_entry_selection_paste(Evas_Object *obj) EINA_ARG_NONNULL(1);
3729    EINA_DEPRECATED EAPI void         elm_scrolled_entry_context_menu_clear(Evas_Object *obj) EINA_ARG_NONNULL(1);
3730    EINA_DEPRECATED EAPI void         elm_scrolled_entry_context_menu_item_add(Evas_Object *obj, const char *label, const char *icon_file, Elm_Icon_Type icon_type, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1);
3731    EINA_DEPRECATED EAPI void         elm_scrolled_entry_context_menu_disabled_set(Evas_Object *obj, Eina_Bool disabled) EINA_ARG_NONNULL(1);
3732    EINA_DEPRECATED EAPI Eina_Bool    elm_scrolled_entry_context_menu_disabled_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3733    EINA_DEPRECATED EAPI void         elm_scrolled_entry_scrollbar_policy_set(Evas_Object *obj, Elm_Scroller_Policy h, Elm_Scroller_Policy v) EINA_ARG_NONNULL(1);
3734    EINA_DEPRECATED EAPI void         elm_scrolled_entry_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_bounce) EINA_ARG_NONNULL(1);
3735    EINA_DEPRECATED EAPI void         elm_scrolled_entry_bounce_get(const Evas_Object *obj, Eina_Bool *h_bounce, Eina_Bool *v_bounce) EINA_ARG_NONNULL(1);
3736    EINA_DEPRECATED EAPI void         elm_scrolled_entry_icon_set(Evas_Object *obj, Evas_Object *icon) EINA_ARG_NONNULL(1, 2);
3737    EINA_DEPRECATED EAPI Evas_Object *elm_scrolled_entry_icon_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3738    EINA_DEPRECATED EAPI Evas_Object *elm_scrolled_entry_icon_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
3739    EINA_DEPRECATED EAPI void         elm_scrolled_entry_icon_visible_set(Evas_Object *obj, Eina_Bool setting) EINA_ARG_NONNULL(1);
3740    EINA_DEPRECATED EAPI void         elm_scrolled_entry_end_set(Evas_Object *obj, Evas_Object *end) EINA_ARG_NONNULL(1, 2);
3741    EINA_DEPRECATED EAPI Evas_Object *elm_scrolled_entry_end_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3742    EINA_DEPRECATED EAPI Evas_Object *elm_scrolled_entry_end_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
3743    EINA_DEPRECATED EAPI void         elm_scrolled_entry_end_visible_set(Evas_Object *obj, Eina_Bool setting) EINA_ARG_NONNULL(1);
3744    EINA_DEPRECATED EAPI void         elm_scrolled_entry_item_provider_append(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *entry, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
3745    EINA_DEPRECATED EAPI void         elm_scrolled_entry_item_provider_prepend(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *entry, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
3746    EINA_DEPRECATED EAPI void         elm_scrolled_entry_item_provider_remove(Evas_Object *obj, Evas_Object *(*func) (void *data, Evas_Object *entry, const char *item), void *data) EINA_ARG_NONNULL(1, 2);
3747    EINA_DEPRECATED EAPI void         elm_scrolled_entry_text_filter_append(Evas_Object *obj, void (*func) (void *data, Evas_Object *entry, char **text), void *data) EINA_ARG_NONNULL(1, 2);
3748    EINA_DEPRECATED EAPI void         elm_scrolled_entry_text_filter_prepend(Evas_Object *obj, void (*func) (void *data, Evas_Object *entry, char **text), void *data) EINA_ARG_NONNULL(1, 2);
3749    EINA_DEPRECATED EAPI void         elm_scrolled_entry_text_filter_remove(Evas_Object *obj, void (*func) (void *data, Evas_Object *entry, char **text), void *data) EINA_ARG_NONNULL(1, 2);
3750    EINA_DEPRECATED EAPI void         elm_scrolled_entry_file_set(Evas_Object *obj, const char *file, Elm_Text_Format format) EINA_ARG_NONNULL(1);
3751    EINA_DEPRECATED EAPI void         elm_scrolled_entry_file_get(const Evas_Object *obj, const char **file, Elm_Text_Format *format) EINA_ARG_NONNULL(1);
3752    EINA_DEPRECATED EAPI void         elm_scrolled_entry_file_save(Evas_Object *obj) EINA_ARG_NONNULL(1);
3753    EINA_DEPRECATED EAPI void         elm_scrolled_entry_autosave_set(Evas_Object *obj, Eina_Bool autosave) EINA_ARG_NONNULL(1);
3754    EINA_DEPRECATED EAPI Eina_Bool    elm_scrolled_entry_autosave_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3755    EINA_DEPRECATED EAPI void         elm_scrolled_entry_cnp_textonly_set(Evas_Object *obj, Eina_Bool textonly) EINA_ARG_NONNULL(1);
3756    EINA_DEPRECATED EAPI Eina_Bool    elm_scrolled_entry_cnp_textonly_get(Evas_Object *obj) EINA_ARG_NONNULL(1);
3757
3758    /* conformant */
3759    EAPI Evas_Object *elm_conformant_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
3760    EAPI void         elm_conformant_content_set(Evas_Object *obj, Evas_Object *content) EINA_ARG_NONNULL(1);
3761    EAPI Evas_Object *elm_conformant_content_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3762    EAPI Evas_Object *elm_conformant_content_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
3763    EAPI Evas_Object *elm_conformant_content_area_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3764
3765    /* mapbuf */
3766    EAPI Evas_Object *elm_mapbuf_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
3767    EAPI void         elm_mapbuf_content_set(Evas_Object *obj, Evas_Object *content) EINA_ARG_NONNULL(1);
3768    EAPI Evas_Object *elm_mapbuf_content_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3769    EAPI Evas_Object *elm_mapbuf_content_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
3770    EAPI void         elm_mapbuf_enabled_set(Evas_Object *obj, Eina_Bool enabled) EINA_ARG_NONNULL(1);
3771    EAPI Eina_Bool    elm_mapbuf_enabled_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3772    EAPI void         elm_mapbuf_smooth_set(Evas_Object *obj, Eina_Bool smooth) EINA_ARG_NONNULL(1);
3773    EAPI Eina_Bool    elm_mapbuf_smooth_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3774    EAPI void         elm_mapbuf_alpha_set(Evas_Object *obj, Eina_Bool alpha) EINA_ARG_NONNULL(1);
3775    EAPI Eina_Bool    elm_mapbuf_alpha_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3776
3777    /* flipselector */
3778    typedef struct _Elm_Flipselector_Item Elm_Flipselector_Item;
3779
3780    EAPI Evas_Object               *elm_flipselector_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
3781    EAPI void                       elm_flipselector_flip_next(Evas_Object *obj) EINA_ARG_NONNULL(1);
3782    EAPI void                       elm_flipselector_flip_prev(Evas_Object *obj) EINA_ARG_NONNULL(1);
3783    EAPI Elm_Flipselector_Item     *elm_flipselector_item_append(Evas_Object *obj, const char *label, void (*func)(void *data, Evas_Object *obj, void *event_info), void *data) EINA_ARG_NONNULL(1);
3784    EAPI Elm_Flipselector_Item     *elm_flipselector_item_prepend(Evas_Object *obj, const char *label, void (*func)(void *data, Evas_Object *obj, void *event_info), void *data) EINA_ARG_NONNULL(1);
3785    EAPI const Eina_List           *elm_flipselector_items_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3786    EAPI Elm_Flipselector_Item     *elm_flipselector_first_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3787    EAPI Elm_Flipselector_Item     *elm_flipselector_last_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3788    EAPI Elm_Flipselector_Item     *elm_flipselector_selected_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3789    EAPI void                       elm_flipselector_item_selected_set(Elm_Flipselector_Item *item, Eina_Bool selected) EINA_ARG_NONNULL(1);
3790    EAPI Eina_Bool                  elm_flipselector_item_selected_get(const Elm_Flipselector_Item *item) EINA_ARG_NONNULL(1);
3791    EAPI void                       elm_flipselector_item_del(Elm_Flipselector_Item *item) EINA_ARG_NONNULL(1);
3792    EAPI const char                *elm_flipselector_item_label_get(const Elm_Flipselector_Item *item) EINA_ARG_NONNULL(1);
3793    EAPI void                       elm_flipselector_item_label_set(Elm_Flipselector_Item *item, const char *label) EINA_ARG_NONNULL(1);
3794    EAPI Elm_Flipselector_Item     *elm_flipselector_item_prev_get(Elm_Flipselector_Item *item) EINA_ARG_NONNULL(1);
3795    EAPI Elm_Flipselector_Item     *elm_flipselector_item_next_get(Elm_Flipselector_Item *item) EINA_ARG_NONNULL(1);
3796    EAPI void                       elm_flipselector_interval_set(Evas_Object *obj, double interval) EINA_ARG_NONNULL(1);
3797    EAPI double                     elm_flipselector_interval_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3798    /* smart callbacks called:
3799     * "selected" - when flipselector selected item is changed
3800     * "overflowed" - when flipselector item is changed to first item
3801     *                from last item
3802     * "underflowed" - when flipselector item is changed to last item
3803     *                 from first item.
3804     */
3805    /* available styles:
3806     * default
3807     */
3808
3809    /**
3810     * @page elm_animator_example_page_01 Animator usage
3811     * @dontinclude animator_example_01.c
3812     *
3813     * For this example we will be using a bit of evas, you could animate a
3814     * elementary widget in much the same way, but to keep things simple we use
3815     * an evas_object_rectangle.
3816     *
3817     * As every other example we start with our include and a simple callback to
3818     * exit the app when the window is closed:
3819     * @skipline #include
3820     * @until }
3821     *
3822     * This next callback is the one that actually creates our animation, it
3823     * changes the size, position and color of a rectangle given to it in @a
3824     * data:
3825     * @until }
3826     *
3827     * Next we have a callback that prints a string, nothing special:
3828     * @until }
3829     *
3830     * This next callback is a little more interesting, it has a state variable
3831     * to know if the animation is currently paused or running, and it toogles
3832     * the state of the animation accordingly:
3833     * @until }
3834     * @until }
3835     * @until }
3836     *
3837     * Finally we have a callback to stop the animation:
3838     * @until }
3839     *
3840     * As with every example we need to do a bit of setup before we can actually
3841     * use an animation, but for the purposes of this example that's not relevant
3842     * so let's just skip to the good stuff, creating an animator:
3843     * @skipline animator_add
3844     * @note Since elm_animator is not a widget we can give it a NULL parent.
3845     *
3846     * Now that we have an elm_animator we set it's duration to 1 second:
3847     * @line duration_set
3848     *
3849     * We would also like our animation to be reversible, so:
3850     * @line reverse_set
3851     *
3852     * We also set our animation to repeat as many times as possible, which will
3853     * mean that _end_cb will only be called after UINT_MAX * 2 seconds(UINT_MAX
3854     * for the animation running forward and UNIT_MAX for the animation running
3855     * backwards):
3856     * @line repeat_set
3857     *
3858     * To add some fun to our animation we will use the IN_OUT curve style:
3859     * @line curve_style
3860     *
3861     * To actually animate anything we need an operation callback:
3862     * @line operation_callback
3863     *
3864     * Even though we set our animation to repeat for a very long time we are
3865     * going to set a end callback to it:
3866     * @line completion_callback
3867     * @note Notice that stoping the animation with the stop button will not make
3868     * _end_cb be called.
3869     *
3870     * Now that we have fully set up our animator we can tell it to start
3871     * animating:
3872     * @line animate
3873     *
3874     * There's a bit more of code that doesn't really matter to use so we skip
3875     * right down to our last interesting point:
3876     * @skipline animator_del
3877     * @note Because we created our animator with no parent we need to delete it
3878     * ourselves.
3879     *
3880     * The full source code for this example can be found @ref
3881     * animator_example_01_c "here"
3882     */
3883    /**
3884     * @page animator_example_01_c Animator example 01
3885     * @include animator_example_01.c
3886     * @example animator_example_01.c
3887     */
3888    /**
3889     * @addtogroup Animator Animator
3890     * @ingroup Elementary
3891     *
3892     * @brief Functions to ease creation of animations.
3893     *
3894     * elm_animator is designed to provide an easy way to create animations.
3895     * Creating an animation with elm_animator is as simple as setting a
3896     * duration, an operating callback and telling it to run the animation.
3897     * However that is not the full extent of elm_animator's ability, animations
3898     * can be paused and resumed, reversed and the animation need not be linear.
3899     *
3900     * To run an animation you must specify at least a duration and operation
3901     * callback, not setting any other properties will create a linear animation
3902     * that runs once and is not reversed.
3903     *
3904     * @ref elm_animator_example_page_01 "This" example should make all of that
3905     * very clear.
3906     *
3907     * @warning elm_animator is @b not a widget.
3908     * @{
3909     */
3910    /**
3911     * @brief Type of curve desired for animation.
3912     *
3913     * The speed in which an animation happens doesn't have to be linear, some
3914     * animations will look better if they're accelerating or decelerating, so
3915     * elm_animator provides four options in this regard:
3916     * @image html elm_animator_curve_style.png
3917     * @image latex elm_animator_curve_style.eps width=\textwidth
3918     * As can be seen in the image the speed of the animation will be:
3919     * @li ELM_ANIMATOR_CURVE_LINEAR constant
3920     * @li ELM_ANIMATOR_CURVE_IN_OUT start slow, speed up and then slow down
3921     * @li ELM_ANIMATOR_CURVE_IN start slow and then speed up
3922     * @li ELM_ANIMATOR_CURVE_OUT start fast and then slow down
3923     */
3924    typedef enum
3925      {
3926         ELM_ANIMATOR_CURVE_LINEAR,
3927         ELM_ANIMATOR_CURVE_IN_OUT,
3928         ELM_ANIMATOR_CURVE_IN,
3929         ELM_ANIMATOR_CURVE_OUT
3930      } Elm_Animator_Curve_Style;
3931    typedef struct _Elm_Animator Elm_Animator;
3932   /**
3933    * Called back per loop of an elementary animators cycle
3934    * @param data user-data given to elm_animator_operation_callback_set()
3935    * @param animator the animator being run
3936    * @param double the position in the animation
3937    */
3938    typedef void (*Elm_Animator_Operation_Cb) (void *data, Elm_Animator *animator, double frame);
3939   /**
3940    * Called back when an elementary animator finishes
3941    * @param data user-data given to elm_animator_completion_callback_set()
3942    */
3943    typedef void (*Elm_Animator_Completion_Cb) (void *data);
3944
3945    /**
3946     * @brief Create a new animator.
3947     *
3948     * @param[in] parent Parent object
3949     *
3950     * The @a parent argument can be set to NULL for no parent. If a parent is set
3951     * there is no need to call elm_animator_del(), when the parent is deleted it
3952     * will delete the animator.
3953     */
3954    EAPI Elm_Animator*            elm_animator_add(Evas_Object *parent);
3955    /**
3956     * Deletes the animator freeing any resources it used. If the animator was
3957     * created with a NULL parent this must be called, otherwise it will be
3958     * automatically called when the parent is deleted.
3959     *
3960     * @param[in] animator Animator object
3961     */
3962    EAPI void                     elm_animator_del(Elm_Animator *animator) EINA_ARG_NONNULL(1);
3963    /**
3964     * Set the duration of the animation.
3965     *
3966     * @param[in] animator Animator object
3967     * @param[in] duration Duration in second
3968     */
3969    EAPI void                     elm_animator_duration_set(Elm_Animator *animator, double duration) EINA_ARG_NONNULL(1);
3970    /**
3971     * @brief Set the callback function for animator operation.
3972     *
3973     * @param[in] animator Animator object
3974     * @param[in] func @ref Elm_Animator_Operation_Cb "Callback" function pointer
3975     * @param[in] data Callback function user argument
3976     *
3977     * The @p func callback will be called with a frame value in range [0, 1] which
3978     * indicates how far along the animation should be. It is the job of @p func to
3979     * actually change the state of any object(or objects) that are being animated.
3980     */
3981    EAPI void                     elm_animator_operation_callback_set(Elm_Animator *animator, Elm_Animator_Operation_Cb func, void *data) EINA_ARG_NONNULL(1);
3982    /**
3983     * Set the callback function for the when the animation ends.
3984     *
3985     * @param[in]  animator Animator object
3986     * @param[in]  func   Callback function pointe
3987     * @param[in]  data Callback function user argument
3988     *
3989     * @warning @a func will not be executed if elm_animator_stop() is called.
3990     */
3991    EAPI void                     elm_animator_completion_callback_set(Elm_Animator *animator, Elm_Animator_Completion_Cb func, void *data) EINA_ARG_NONNULL(1);
3992    /**
3993     * @brief Stop animator.
3994     *
3995     * @param[in] animator Animator object
3996     *
3997     * If called before elm_animator_animate() it does nothing. If there is an
3998     * animation in progress the animation will be stopped(the operation callback
3999     * will not be executed again) and it can't be restarted using
4000     * elm_animator_resume().
4001     */
4002    EAPI void                     elm_animator_stop(Elm_Animator *animator) EINA_ARG_NONNULL(1);
4003    /**
4004     * Set the animator repeat count.
4005     *
4006     * @param[in]  animator Animator object
4007     * @param[in]  repeat_cnt Repeat count
4008     */
4009    EAPI void                     elm_animator_repeat_set(Elm_Animator *animator, unsigned int repeat_cnt) EINA_ARG_NONNULL(1);
4010    /**
4011     * @brief Start animation.
4012     *
4013     * @param[in] animator Animator object
4014     *
4015     * This function starts the animation if the nescessary properties(duration
4016     * and operation callback) have been set. Once started the animation will
4017     * run until complete or elm_animator_stop() is called.
4018     */
4019    EAPI void                     elm_animator_animate(Elm_Animator *animator) EINA_ARG_NONNULL(1);
4020    /**
4021     * Sets the animation @ref Elm_Animator_Curve_Style "acceleration style".
4022     *
4023     * @param[in] animator Animator object
4024     * @param[in] cs Curve style. Default is ELM_ANIMATOR_CURVE_LINEAR
4025     */
4026    EAPI void                     elm_animator_curve_style_set(Elm_Animator *animator, Elm_Animator_Curve_Style cs) EINA_ARG_NONNULL(1);
4027    /**
4028     * Gets the animation @ref Elm_Animator_Curve_Style "acceleration style".
4029     *
4030     * @param[in] animator Animator object
4031     * @param[in] cs Curve style. Default is ELM_ANIMATOR_CURVE_LINEAR
4032     */
4033    EAPI Elm_Animator_Curve_Style elm_animator_curve_style_get(const Elm_Animator *animator); EINA_ARG_NONNULL(1);
4034    /**
4035     * @brief Sets wether the animation should be automatically reversed.
4036     *
4037     * @param[in] animator Animator object
4038     * @param[in] reverse Reverse or not
4039     *
4040     * This controls wether the animation will be run on reverse imediately after
4041     * running forward. When this is set together with repetition the animation
4042     * will run in reverse once for each time it ran forward.@n
4043     * Runnin an animation in reverse is accomplished by calling the operation
4044     * callback with a frame value starting at 1 and diminshing until 0.
4045     */
4046    EAPI void                     elm_animator_auto_reverse_set(Elm_Animator *animator, Eina_Bool reverse) EINA_ARG_NONNULL(1);
4047    /**
4048     * Gets wether the animation will automatically reversed
4049     *
4050     * @param[in] animator Animator object
4051     */
4052    EAPI Eina_Bool                elm_animator_auto_reverse_get(const Elm_Animator *animator) EINA_ARG_NONNULL(1);
4053    /**
4054     * Gets the status for the animator operation. The status of the animator @b
4055     * doesn't take in to account elm_animator_pause() or elm_animator_resume(), it
4056     * only informs if the animation was started and has not ended(either normally
4057     * or through elm_animator_stop()).
4058     *
4059     * @param[in] animator Animator object
4060     */
4061    EAPI Eina_Bool                elm_animator_operating_get(const Elm_Animator *animator) EINA_ARG_NONNULL(1);
4062    /**
4063     * Gets how many times the animation will be repeated
4064     *
4065     * @param[in] animator Animator object
4066     */
4067    EAPI unsigned int             elm_animator_repeat_get(const Elm_Animator *animator) EINA_ARG_NONNULL(1);
4068    /**
4069     * Pause the animator.
4070     *
4071     * @param[in]  animator Animator object
4072     *
4073     * This causes the animation to be temporarily stopped(the operation callback
4074     * will not be called). If the animation is not yet running this is a no-op.
4075     * Once an animation has been paused with this function it can be resumed
4076     * using elm_animator_resume().
4077     */
4078    EAPI void                     elm_animator_pause(Elm_Animator *animator) EINA_ARG_NONNULL(1);
4079    /**
4080     * @brief Resumes the animator.
4081     *
4082     * @param[in]  animator Animator object
4083     *
4084     * Resumes an animation that was paused using elm_animator_pause(), after
4085     * calling this function calls to the operation callback will happen
4086     * normally. If an animation is stopped by means of elm_animator_stop it
4087     * @b can't be restarted with this function.@n
4088     *
4089     * @warning When an animation is resumed it doesn't start from where it was paused, it
4090     * will go to where it would have been if it had not been paused. If an
4091     * animation with a duration of 3 seconds is paused after 1 second for 1 second
4092     * it will resume as if it had ben animating for 2 seconds, the operating
4093     * callback will be called with a frame value of aproximately 2/3.
4094     */
4095    EAPI void                     elm_animator_resume(Elm_Animator *animator) EINA_ARG_NONNULL(1);
4096    /**
4097     * @}
4098     */
4099
4100    /* calendar */
4101    typedef enum
4102      {
4103         ELM_CALENDAR_UNIQUE,
4104         ELM_CALENDAR_DAILY,
4105         ELM_CALENDAR_WEEKLY,
4106         ELM_CALENDAR_MONTHLY,
4107         ELM_CALENDAR_ANNUALLY
4108      } Elm_Calendar_Mark_Repeat;
4109    typedef struct _Elm_Calendar_Mark Elm_Calendar_Mark;
4110
4111    EAPI Evas_Object       *elm_calendar_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
4112    EAPI const char       **elm_calendar_weekdays_names_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
4113    EAPI void               elm_calendar_weekdays_names_set(Evas_Object *obj, const char *weekdays[]) EINA_ARG_NONNULL(1, 2);
4114    EAPI double             elm_calendar_interval_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
4115    EAPI void               elm_calendar_interval_set(Evas_Object *obj, double interval) EINA_ARG_NONNULL(1);
4116    EAPI void               elm_calendar_min_max_year_get(const Evas_Object *obj, int *min, int *max) EINA_ARG_NONNULL(1);
4117    EAPI void               elm_calendar_min_max_year_set(Evas_Object *obj, int min, int max) EINA_ARG_NONNULL(1);
4118    EAPI Eina_Bool          elm_calendar_day_selection_enabled_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
4119    EAPI void               elm_calendar_day_selection_enabled_set(Evas_Object *obj, Eina_Bool enabled) EINA_ARG_NONNULL(1);
4120    EAPI Eina_Bool          elm_calendar_selected_time_get(const Evas_Object *obj, struct tm *selected_time) EINA_ARG_NONNULL(1, 2);
4121    EAPI void               elm_calendar_selected_time_set(Evas_Object *obj, struct tm *selected_time) EINA_ARG_NONNULL(1);
4122    EAPI void               elm_calendar_format_function_set(Evas_Object *obj, char * (*format_function) (struct tm *stime)) EINA_ARG_NONNULL(1);
4123    EAPI Elm_Calendar_Mark *elm_calendar_mark_add(Evas_Object *obj, const char *mark_type, struct tm *mark_time, Elm_Calendar_Mark_Repeat repeat) EINA_ARG_NONNULL(1);
4124    EAPI void               elm_calendar_mark_del(Elm_Calendar_Mark *mark) EINA_ARG_NONNULL(1);
4125    EAPI void               elm_calendar_marks_clear(Evas_Object *obj) EINA_ARG_NONNULL(1);
4126    EAPI const Eina_List   *elm_calendar_marks_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
4127    EAPI void               elm_calendar_marks_draw(Evas_Object *obj) EINA_ARG_NONNULL(1);
4128    EINA_DEPRECATED EAPI void               elm_calendar_text_saturday_color_set(Evas_Object *obj, int pos) EINA_ARG_NONNULL(1);
4129    EINA_DEPRECATED EAPI void               elm_calendar_text_sunday_color_set(Evas_Object *obj, int pos) EINA_ARG_NONNULL(1);
4130    EINA_DEPRECATED EAPI void               elm_calendar_text_weekday_color_set(Evas_Object *obj, int pos) EINA_ARG_NONNULL(1);
4131    /* smart callbacks called:
4132     * changed - emitted when the user select a day or change the displayed
4133     * month.
4134     */
4135
4136    /* diskselector */
4137    typedef struct _Elm_Diskselector_Item Elm_Diskselector_Item;
4138
4139    EAPI Evas_Object           *elm_diskselector_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
4140    EAPI Eina_Bool              elm_diskselector_round_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
4141    EAPI void                   elm_diskselector_round_set(Evas_Object *obj, Eina_Bool round) EINA_ARG_NONNULL(1);
4142    EAPI int                    elm_diskselector_side_label_lenght_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
4143    EAPI void                   elm_diskselector_side_label_lenght_set(Evas_Object *obj, int len) EINA_ARG_NONNULL(1);
4144    EAPI void                   elm_diskselector_bounce_set(Evas_Object *obj, Eina_Bool h_bounce, Eina_Bool v_bounce) EINA_ARG_NONNULL(1);
4145    EAPI void                   elm_diskselector_bounce_get(const Evas_Object *obj, Eina_Bool *h_bounce, Eina_Bool *v_bounce) EINA_ARG_NONNULL(1);
4146    EAPI void                   elm_diskselector_scroller_policy_get(const Evas_Object *obj, Elm_Scroller_Policy *policy_h, Elm_Scroller_Policy *policy_v) EINA_ARG_NONNULL(1);
4147    EAPI void                   elm_diskselector_scroller_policy_set(Evas_Object *obj, Elm_Scroller_Policy policy_h, Elm_Scroller_Policy policy_v) EINA_ARG_NONNULL(1);
4148    EAPI void                   elm_diskselector_clear(Evas_Object *obj) EINA_ARG_NONNULL(1);
4149    EAPI const Eina_List       *elm_diskselector_items_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
4150    EAPI Elm_Diskselector_Item *elm_diskselector_item_append(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1);
4151    EAPI void                   elm_diskselector_item_del(Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
4152    EAPI void                   elm_diskselector_item_del_cb_set(Elm_Diskselector_Item *item, Evas_Smart_Cb func) EINA_ARG_NONNULL(1);
4153    EAPI void                  *elm_diskselector_item_data_get(const Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
4154    EAPI Evas_Object           *elm_diskselector_item_icon_get(const Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
4155    EAPI void                   elm_diskselector_item_icon_set(Elm_Diskselector_Item *item, Evas_Object *icon) EINA_ARG_NONNULL(1);
4156    EAPI const char            *elm_diskselector_item_label_get(const Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
4157    EAPI void                   elm_diskselector_item_label_set(Elm_Diskselector_Item *item, const char *label) EINA_ARG_NONNULL(1);
4158    EAPI Elm_Diskselector_Item *elm_diskselector_selected_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
4159    EAPI void                   elm_diskselector_item_selected_set(Elm_Diskselector_Item *item, Eina_Bool selected) EINA_ARG_NONNULL(1);
4160    EAPI Eina_Bool              elm_diskselector_item_selected_get(const Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
4161    EAPI Elm_Diskselector_Item *elm_diskselector_first_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
4162    EAPI Elm_Diskselector_Item *elm_diskselector_last_item_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
4163    EAPI Elm_Diskselector_Item *elm_diskselector_item_prev_get(const Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
4164    EAPI Elm_Diskselector_Item *elm_diskselector_item_next_get(const Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
4165    EAPI void                   elm_diskselector_item_tooltip_text_set(Elm_Diskselector_Item *item, const char *text) EINA_ARG_NONNULL(1);
4166    EAPI void                   elm_diskselector_item_tooltip_content_cb_set(Elm_Diskselector_Item *item, Elm_Tooltip_Item_Content_Cb func, const void *data, Evas_Smart_Cb del_cb) EINA_ARG_NONNULL(1);
4167    EAPI void                   elm_diskselector_item_tooltip_unset(Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
4168    EAPI void                   elm_diskselector_item_tooltip_style_set(Elm_Diskselector_Item *item, const char *style) EINA_ARG_NONNULL(1);
4169    EAPI const char            *elm_diskselector_item_tooltip_style_get(const Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
4170    EAPI void                   elm_diskselector_item_cursor_set(Elm_Diskselector_Item *item, const char *cursor) EINA_ARG_NONNULL(1);
4171    EAPI const char            *elm_diskselector_item_cursor_get(const Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
4172    EAPI void                   elm_diskselector_item_cursor_unset(Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
4173    EAPI void                   elm_diskselector_item_cursor_style_set(Elm_Diskselector_Item *item, const char *style) EINA_ARG_NONNULL(1);
4174    EAPI const char            *elm_diskselector_item_cursor_style_get(const Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
4175    EAPI void                   elm_diskselector_item_cursor_engine_only_set(Elm_Diskselector_Item *item, Eina_Bool engine_only) EINA_ARG_NONNULL(1);
4176    EAPI Eina_Bool              elm_diskselector_item_cursor_engine_only_get(const Elm_Diskselector_Item *item) EINA_ARG_NONNULL(1);
4177    EAPI void                   elm_diskselector_display_item_num_set(Evas_Object *obj, int num) EINA_ARG_NONNULL(1);
4178    /* smart callbacks called:
4179     * "selected" - when item is selected (scroller stops)
4180     */
4181
4182    /* colorselector */
4183    EAPI Evas_Object *elm_colorselector_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
4184    EAPI void         elm_colorselector_color_set(Evas_Object *obj, int r, int g , int b, int a) EINA_ARG_NONNULL(1);
4185    EAPI void         elm_colorselector_color_get(const Evas_Object *obj, int *r, int *g , int *b, int *a) EINA_ARG_NONNULL(1);
4186    /* smart callbacks called:
4187     * "changed" - when the color value changes
4188     */
4189
4190    /* Contextual Popup */
4191    typedef struct _Elm_Ctxpopup_Item Elm_Ctxpopup_Item;
4192
4193    typedef enum _Elm_Ctxpopup_Direction
4194      {
4195         ELM_CTXPOPUP_DIRECTION_DOWN,
4196         ELM_CTXPOPUP_DIRECTION_RIGHT,
4197         ELM_CTXPOPUP_DIRECTION_LEFT,
4198         ELM_CTXPOPUP_DIRECTION_UP,
4199      } Elm_Ctxpopup_Direction;
4200
4201    EAPI Evas_Object  *elm_ctxpopup_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
4202    EAPI Evas_Object  *elm_ctxpopup_item_icon_get(const Elm_Ctxpopup_Item *item) EINA_ARG_NONNULL(1);
4203    EAPI void          elm_ctxpopup_item_icon_set(Elm_Ctxpopup_Item *item, Evas_Object *icon) EINA_ARG_NONNULL(1);
4204    EAPI const char   *elm_ctxpopup_item_label_get(const Elm_Ctxpopup_Item *item) EINA_ARG_NONNULL(1);
4205    EAPI void          elm_ctxpopup_item_label_set(Elm_Ctxpopup_Item *item, const char *label) EINA_ARG_NONNULL(1);
4206    EAPI void          elm_ctxpopup_hover_parent_set(Evas_Object *obj, Evas_Object *parent) EINA_ARG_NONNULL(1, 2);
4207    EAPI Evas_Object  *elm_ctxpopup_hover_parent_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
4208    EAPI void          elm_ctxpopup_clear(Evas_Object *obj) EINA_ARG_NONNULL(1);
4209    EAPI void          elm_ctxpopup_horizontal_set(Evas_Object *obj, Eina_Bool horizontal) EINA_ARG_NONNULL(1);
4210    EAPI Eina_Bool     elm_ctxpopup_horizontal_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
4211    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);
4212    EAPI void          elm_ctxpopup_item_del(Elm_Ctxpopup_Item *item) EINA_ARG_NONNULL(1);
4213    EAPI void          elm_ctxpopup_item_disabled_set(Elm_Ctxpopup_Item *item, Eina_Bool disabled) EINA_ARG_NONNULL(1);
4214    EAPI Eina_Bool     elm_ctxpopup_item_disabled_get(const Elm_Ctxpopup_Item *item) EINA_ARG_NONNULL(1);
4215    EAPI void          elm_ctxpopup_content_set(Evas_Object *obj, Evas_Object *content) EINA_ARG_NONNULL(1, 2);
4216    EAPI Evas_Object  *elm_ctxpopup_content_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
4217    EAPI void          elm_ctxpopup_direction_priority_set(Evas_Object *obj, Elm_Ctxpopup_Direction first, Elm_Ctxpopup_Direction second, Elm_Ctxpopup_Direction third, Elm_Ctxpopup_Direction fourth) EINA_ARG_NONNULL(1);
4218    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);
4219    /* smart callbacks called:
4220     * "dismissed" - the ctxpopup was dismissed
4221     */
4222
4223    /* transit */
4224    typedef enum
4225      {
4226         ELM_TRANSIT_TWEEN_MODE_LINEAR,
4227         ELM_TRANSIT_TWEEN_MODE_SINUSOIDAL,
4228         ELM_TRANSIT_TWEEN_MODE_DECELERATE,
4229         ELM_TRANSIT_TWEEN_MODE_ACCELERATE
4230      } Elm_Transit_Tween_Mode;
4231    typedef enum
4232      {
4233         ELM_TRANSIT_EFFECT_FLIP_AXIS_X,
4234         ELM_TRANSIT_EFFECT_FLIP_AXIS_Y
4235      } Elm_Transit_Effect_Flip_Axis;
4236    typedef enum
4237      {
4238         ELM_TRANSIT_EFFECT_WIPE_DIR_LEFT,
4239         ELM_TRANSIT_EFFECT_WIPE_DIR_RIGHT,
4240         ELM_TRANSIT_EFFECT_WIPE_DIR_UP,
4241         ELM_TRANSIT_EFFECT_WIPE_DIR_DOWN
4242      } Elm_Transit_Effect_Wipe_Dir;
4243    typedef enum
4244      {
4245         ELM_TRANSIT_EFFECT_WIPE_TYPE_HIDE,
4246         ELM_TRANSIT_EFFECT_WIPE_TYPE_SHOW
4247      } Elm_Transit_Effect_Wipe_Type;
4248
4249    typedef struct _Elm_Transit Elm_Transit;
4250    typedef void Elm_Transit_Effect;
4251    typedef void (*Elm_Transit_Effect_Transition_Cb) (Elm_Transit_Effect *effect, Elm_Transit *transit, double progress);
4252    typedef void (*Elm_Transit_Effect_End_Cb) (Elm_Transit_Effect *effect, Elm_Transit *transit);
4253
4254    EAPI Elm_Transit                *elm_transit_add(void);
4255    EAPI void                        elm_transit_del(Elm_Transit *transit) EINA_ARG_NONNULL(1);
4256    EAPI void                        elm_transit_effect_add(Elm_Transit *transit, Elm_Transit_Effect_Transition_Cb transition_cb, Elm_Transit_Effect *effect, Elm_Transit_Effect_End_Cb end_cb) EINA_ARG_NONNULL(1, 2);
4257    EAPI void                        elm_transit_effect_del(Elm_Transit *transit, Elm_Transit_Effect_Transition_Cb transition_cb, Elm_Transit_Effect *effect) EINA_ARG_NONNULL(1, 2);
4258    EAPI void                        elm_transit_object_add(Elm_Transit *transit, Evas_Object *obj) EINA_ARG_NONNULL(1, 2);
4259    EAPI void                        elm_transit_object_remove(Elm_Transit *transit, Evas_Object *obj) EINA_ARG_NONNULL(1, 2);
4260    EAPI const Eina_List            *elm_transit_objects_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
4261    EAPI void                        elm_transit_objects_final_state_keep_set(Elm_Transit *transit, Eina_Bool state_keep) EINA_ARG_NONNULL(1);
4262    EAPI Eina_Bool                   elm_transit_objects_final_state_keep_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
4263    EINA_DEPRECATED EAPI void                elm_transit_event_block_set(Elm_Transit *transit, Eina_Bool disabled) EINA_ARG_NONNULL(1);
4264    EINA_DEPRECATED EAPI Eina_Bool           elm_transit_event_block_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
4265    EAPI void                        elm_transit_event_enabled_set(Elm_Transit *transit, Eina_Bool enabled) EINA_ARG_NONNULL(1);
4266    EAPI Eina_Bool                   elm_transit_event_enabled_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
4267    EAPI void                        elm_transit_del_cb_set(Elm_Transit *transit, void (*cb)(void *data, Elm_Transit* transit), void *data) EINA_ARG_NONNULL(1);
4268    EAPI void                        elm_transit_auto_reverse_set(Elm_Transit *transit, Eina_Bool reverse) EINA_ARG_NONNULL(1);
4269    EAPI Eina_Bool                   elm_transit_auto_reverse_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
4270    EAPI void                        elm_transit_repeat_times_set(Elm_Transit *transit, int repeat) EINA_ARG_NONNULL(1);
4271    EAPI int                         elm_transit_repeat_times_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
4272    EAPI void                        elm_transit_tween_mode_set(Elm_Transit *transit, Elm_Transit_Tween_Mode tween_mode) EINA_ARG_NONNULL(1);
4273    EAPI Elm_Transit_Tween_Mode      elm_transit_tween_mode_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
4274    EAPI void                        elm_transit_duration_set(Elm_Transit *transit, double duration) EINA_ARG_NONNULL(1);
4275    EAPI double                      elm_transit_duration_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
4276    EAPI void                        elm_transit_go(Elm_Transit *transit) EINA_ARG_NONNULL(1);
4277    EAPI void                        elm_transit_paused_set(Elm_Transit *transit, Eina_Bool paused) EINA_ARG_NONNULL(1);
4278    EAPI Eina_Bool                   elm_transit_paused_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
4279    EAPI double                      elm_transit_progress_value_get(const Elm_Transit *transit) EINA_ARG_NONNULL(1);
4280    EAPI void                        elm_transit_chain_transit_add(Elm_Transit *transit, Elm_Transit *chain_transit) EINA_ARG_NONNULL(1, 2);
4281    EAPI Eina_List                  *elm_transit_chain_transits_get(const Elm_Transit *transit);
4282
4283    EAPI Elm_Transit_Effect *elm_transit_effect_resizing_add(Elm_Transit* transit, Evas_Coord from_w, Evas_Coord from_h, Evas_Coord to_w, Evas_Coord to_h);
4284    EAPI Elm_Transit_Effect *elm_transit_effect_translation_add(Elm_Transit* transit, Evas_Coord from_dx, Evas_Coord dy, Evas_Coord to_dx, Evas_Coord to_dy);
4285    EAPI Elm_Transit_Effect *elm_transit_effect_zoom_add(Elm_Transit *transit, float from_rate, float to_rate);
4286    EAPI Elm_Transit_Effect *elm_transit_effect_flip_add(Elm_Transit *transit, Elm_Transit_Effect_Flip_Axis axis, Eina_Bool cw);
4287    EAPI Elm_Transit_Effect *elm_transit_effect_resizable_flip_add(Elm_Transit *transit, Elm_Transit_Effect_Flip_Axis axis, Eina_Bool cw);
4288    EAPI Elm_Transit_Effect *elm_transit_effect_wipe_add(Elm_Transit *transit, Elm_Transit_Effect_Wipe_Type type, Elm_Transit_Effect_Wipe_Dir dir);
4289    EAPI Elm_Transit_Effect *elm_transit_effect_color_add(Elm_Transit *transit, unsigned int from_r, unsigned int from_g, unsigned int from_b, unsigned int from_a, unsigned int to_r, unsigned int to_g, unsigned int to_b, unsigned int to_a);
4290    EAPI Elm_Transit_Effect *elm_transit_effect_fade_add(Elm_Transit *transit);
4291    EAPI Elm_Transit_Effect *elm_transit_effect_blend_add(Elm_Transit *transit);
4292    EAPI Elm_Transit_Effect *elm_transit_effect_rotation_add(Elm_Transit *transit, float from_degree, float to_degree);
4293    EAPI Elm_Transit_Effect *elm_transit_effect_image_animation_add(Elm_Transit *transit, Eina_List *images);
4294
4295   typedef struct _Elm_Store                      Elm_Store;
4296   typedef struct _Elm_Store_Filesystem           Elm_Store_Filesystem;
4297   typedef struct _Elm_Store_Item                 Elm_Store_Item;
4298   typedef struct _Elm_Store_Item_Filesystem      Elm_Store_Item_Filesystem;
4299   typedef struct _Elm_Store_Item_Info            Elm_Store_Item_Info;
4300   typedef struct _Elm_Store_Item_Info_Filesystem Elm_Store_Item_Info_Filesystem;
4301   typedef struct _Elm_Store_Item_Mapping         Elm_Store_Item_Mapping;
4302   typedef struct _Elm_Store_Item_Mapping_Empty   Elm_Store_Item_Mapping_Empty;
4303   typedef struct _Elm_Store_Item_Mapping_Icon    Elm_Store_Item_Mapping_Icon;
4304   typedef struct _Elm_Store_Item_Mapping_Photo   Elm_Store_Item_Mapping_Photo;
4305   typedef struct _Elm_Store_Item_Mapping_Custom  Elm_Store_Item_Mapping_Custom;
4306
4307   typedef Eina_Bool (*Elm_Store_Item_List_Cb) (void *data, Elm_Store_Item_Info *info);
4308   typedef void      (*Elm_Store_Item_Fetch_Cb) (void *data, Elm_Store_Item *sti);
4309   typedef void      (*Elm_Store_Item_Unfetch_Cb) (void *data, Elm_Store_Item *sti);
4310   typedef void     *(*Elm_Store_Item_Mapping_Cb) (void *data, Elm_Store_Item *sti, const char *part);
4311
4312   typedef enum
4313     {
4314        ELM_STORE_ITEM_MAPPING_NONE = 0,
4315        ELM_STORE_ITEM_MAPPING_LABEL, // const char * -> label
4316        ELM_STORE_ITEM_MAPPING_STATE, // Eina_Bool -> state
4317        ELM_STORE_ITEM_MAPPING_ICON, // char * -> icon path
4318        ELM_STORE_ITEM_MAPPING_PHOTO, // char * -> photo path
4319        ELM_STORE_ITEM_MAPPING_CUSTOM, // item->custom(it->data, it, part) -> void * (-> any)
4320        // can add more here as needed by common apps
4321        ELM_STORE_ITEM_MAPPING_LAST
4322     } Elm_Store_Item_Mapping_Type;
4323
4324   struct _Elm_Store_Item_Mapping_Icon
4325     {
4326        // FIXME: allow edje file icons
4327        int                   w, h;
4328        Elm_Icon_Lookup_Order lookup_order;
4329        Eina_Bool             standard_name : 1;
4330        Eina_Bool             no_scale : 1;
4331        Eina_Bool             smooth : 1;
4332        Eina_Bool             scale_up : 1;
4333        Eina_Bool             scale_down : 1;
4334     };
4335
4336   struct _Elm_Store_Item_Mapping_Empty
4337     {
4338        Eina_Bool             dummy;
4339     };
4340
4341   struct _Elm_Store_Item_Mapping_Photo
4342     {
4343        int                   size;
4344     };
4345
4346   struct _Elm_Store_Item_Mapping_Custom
4347     {
4348        Elm_Store_Item_Mapping_Cb func;
4349     };
4350
4351   struct _Elm_Store_Item_Mapping
4352     {
4353        Elm_Store_Item_Mapping_Type     type;
4354        const char                     *part;
4355        int                             offset;
4356        union
4357          {
4358             Elm_Store_Item_Mapping_Empty  empty;
4359             Elm_Store_Item_Mapping_Icon   icon;
4360             Elm_Store_Item_Mapping_Photo  photo;
4361             Elm_Store_Item_Mapping_Custom custom;
4362             // add more types here
4363          } details;
4364     };
4365
4366   struct _Elm_Store_Item_Info
4367     {
4368       Elm_Genlist_Item_Class       *item_class;
4369       const Elm_Store_Item_Mapping *mapping;
4370       void                         *data;
4371       char                         *sort_id;
4372     };
4373
4374   struct _Elm_Store_Item_Info_Filesystem
4375     {
4376       Elm_Store_Item_Info  base;
4377       char                *path;
4378     };
4379
4380 #define ELM_STORE_ITEM_MAPPING_END { ELM_STORE_ITEM_MAPPING_NONE, NULL, 0, { .empty = { EINA_TRUE } } }
4381 #define ELM_STORE_ITEM_MAPPING_OFFSET(st, it) offsetof(st, it)
4382
4383   EAPI void                    elm_store_free(Elm_Store *st);
4384
4385   EAPI Elm_Store              *elm_store_filesystem_new(void);
4386   EAPI void                    elm_store_filesystem_directory_set(Elm_Store *st, const char *dir) EINA_ARG_NONNULL(1);
4387   EAPI const char             *elm_store_filesystem_directory_get(const Elm_Store *st) EINA_ARG_NONNULL(1);
4388   EAPI const char             *elm_store_item_filesystem_path_get(const Elm_Store_Item *sti) EINA_ARG_NONNULL(1);
4389
4390   EAPI void                    elm_store_target_genlist_set(Elm_Store *st, Evas_Object *obj) EINA_ARG_NONNULL(1);
4391
4392   EAPI void                    elm_store_cache_set(Elm_Store *st, int max) EINA_ARG_NONNULL(1);
4393   EAPI int                     elm_store_cache_get(const Elm_Store *st) EINA_ARG_NONNULL(1);
4394   EAPI void                    elm_store_list_func_set(Elm_Store *st, Elm_Store_Item_List_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
4395   EAPI void                    elm_store_fetch_func_set(Elm_Store *st, Elm_Store_Item_Fetch_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
4396   EAPI void                    elm_store_fetch_thread_set(Elm_Store *st, Eina_Bool use_thread) EINA_ARG_NONNULL(1);
4397   EAPI Eina_Bool               elm_store_fetch_thread_get(const Elm_Store *st) EINA_ARG_NONNULL(1);
4398
4399   EAPI void                    elm_store_unfetch_func_set(Elm_Store *st, Elm_Store_Item_Unfetch_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
4400   EAPI void                    elm_store_sorted_set(Elm_Store *st, Eina_Bool sorted) EINA_ARG_NONNULL(1);
4401   EAPI Eina_Bool               elm_store_sorted_get(const Elm_Store *st) EINA_ARG_NONNULL(1);
4402   EAPI void                    elm_store_item_data_set(Elm_Store_Item *sti, void *data) EINA_ARG_NONNULL(1);
4403   EAPI void                   *elm_store_item_data_get(Elm_Store_Item *sti) EINA_ARG_NONNULL(1);
4404   EAPI const Elm_Store        *elm_store_item_store_get(const Elm_Store_Item *sti) EINA_ARG_NONNULL(1);
4405   EAPI const Elm_Genlist_Item *elm_store_item_genlist_item_get(const Elm_Store_Item *sti) EINA_ARG_NONNULL(1);
4406
4407    /* SegmentControl */
4408    typedef struct _Elm_Segment_Item Elm_Segment_Item;
4409    EAPI Evas_Object      *elm_segment_control_add(Evas_Object *parent) EINA_ARG_NONNULL(1);
4410    EAPI Elm_Segment_Item *elm_segment_control_item_add(Evas_Object *obj, Evas_Object *icon, const char *label) EINA_ARG_NONNULL(1);
4411    EAPI Elm_Segment_Item *elm_segment_control_item_insert_at(Evas_Object *obj, Evas_Object *icon, const char *label, int index) EINA_ARG_NONNULL(1);
4412    EAPI void              elm_segment_control_item_del(Elm_Segment_Item *it) EINA_ARG_NONNULL(1);
4413    EAPI void              elm_segment_control_item_del_at(Evas_Object *obj, int index) EINA_ARG_NONNULL(1);
4414    EAPI int               elm_segment_control_item_count_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
4415    EAPI Elm_Segment_Item *elm_segment_control_item_get(const Evas_Object *obj, int index) EINA_ARG_NONNULL(1);
4416    EAPI const char       *elm_segment_control_item_label_get(const Evas_Object *obj, int index) EINA_ARG_NONNULL(1);
4417    EAPI void              elm_segment_control_item_label_set(Elm_Segment_Item* it, const char* label) EINA_ARG_NONNULL(1);
4418    EAPI Evas_Object      *elm_segment_control_item_icon_get(const Evas_Object *obj, int index) EINA_ARG_NONNULL(1);
4419    EAPI void              elm_segment_control_item_icon_set(Elm_Segment_Item *it, Evas_Object *icon) EINA_ARG_NONNULL(1);
4420    EAPI int               elm_segment_control_item_index_get(const Elm_Segment_Item *it) EINA_ARG_NONNULL(1);
4421    EAPI Evas_Object      *elm_segment_control_item_object_get(const Elm_Segment_Item *it) EINA_ARG_NONNULL(1);
4422    EAPI Elm_Segment_Item *elm_segment_control_item_selected_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
4423    EAPI void              elm_segment_control_item_selected_set(Elm_Segment_Item *it, Eina_Bool select) EINA_ARG_NONNULL(1);
4424    /* smart callbacks called:
4425     * "changed" -when the user clicks on a segment item which is not previously
4426     *            selected and get selected. The event_info parameter is the
4427     *            segment item index.
4428     */
4429
4430    EAPI Evas_Object *elm_grid_add(Evas_Object *parent);
4431    EAPI void         elm_grid_size_set(Evas_Object *obj, int w, int h);
4432    EAPI void         elm_grid_size_get(Evas_Object *obj, int *w, int *h);
4433    EAPI void         elm_grid_pack(Evas_Object *obj, Evas_Object *subobj, int x, int y, int w, int h);
4434    EAPI void         elm_grid_unpack(Evas_Object *obj, Evas_Object *subobj);
4435    EAPI void         elm_grid_clear(Evas_Object *obj, Eina_Bool clear);
4436    EAPI void         elm_grid_pack_set(Evas_Object *subobj, int x, int y, int w, int h);
4437    EAPI void         elm_grid_pack_get(Evas_Object *subobj, int *x, int *y, int *w, int *h);
4438
4439 #ifdef __cplusplus
4440 }
4441 #endif
4442
4443 #endif