2 # include "elementary_config.h"
6 #include <dlfcn.h> /* dlopen,dlclose,etc */
9 #ifdef HAVE_CRT_EXTERNS_H
10 # include <crt_externs.h>
17 #include <Elementary.h>
20 #define SEMI_BROKEN_QUICKLAUNCH 1
22 static Elm_Version _version = { VMAJ, VMIN, VMIC, VREV };
23 EAPI Elm_Version *elm_version = &_version;
26 _elm_dangerous_call_check(const char *call)
31 snprintf(buf, sizeof(buf), "%i.%i.%i.%i", VMAJ, VMIN, VMIC, VREV);
32 eval = getenv("ELM_NO_FINGER_WAGGLING");
33 if ((eval) && (!strcmp(eval, buf)))
35 printf("ELEMENTARY FINGER WAGGLE!!!!!!!!!!\n"
38 "PLEASE see the API documentation for this function. This call\n"
39 "should almost never be used. Only in very special cases.\n"
41 "To remove this warning please set the environment variable:\n"
42 " ELM_NO_FINGER_WAGGLING\n"
43 "To the value of the Elementary version + revision number. e.g.:\n"
51 static Eina_Bool _elm_signal_exit(void *data,
55 static Eina_Prefix *pfx = NULL;
56 char *_elm_appname = NULL;
57 const char *_elm_data_dir = NULL;
58 const char *_elm_lib_dir = NULL;
59 int _elm_log_dom = -1;
61 EAPI int ELM_EVENT_POLICY_CHANGED = 0;
63 static int _elm_init_count = 0;
64 static int _elm_sub_init_count = 0;
65 static int _elm_ql_init_count = 0;
66 static int _elm_policies[ELM_POLICY_LAST];
67 static Ecore_Event_Handler *_elm_exit_handler = NULL;
68 static Eina_Bool quicklaunch_on = 0;
71 _elm_signal_exit(void *data __UNUSED__,
72 int ev_type __UNUSED__,
76 return ECORE_CALLBACK_PASS_ON;
82 edje_scale_set(_elm_config->scale);
83 _elm_win_rescale(NULL, EINA_FALSE);
84 _elm_ews_wm_rescale(NULL, EINA_FALSE);
87 static void *app_mainfunc = NULL;
88 static const char *app_domain = NULL;
89 static const char *app_checkfile = NULL;
91 static const char *app_compile_bin_dir = NULL;
92 static const char *app_compile_lib_dir = NULL;
93 static const char *app_compile_data_dir = NULL;
94 static const char *app_compile_locale_dir = NULL;
95 static const char *app_prefix_dir = NULL;
96 static const char *app_bin_dir = NULL;
97 static const char *app_lib_dir = NULL;
98 static const char *app_data_dir = NULL;
99 static const char *app_locale_dir = NULL;
101 static Eina_Prefix *app_pfx = NULL;
108 const char *dirs[4] = { NULL, NULL, NULL, NULL };
109 char *caps = NULL, *p1, *p2;
113 if (!app_domain) return;
115 ecore_app_args_get(&argc, &argv);
116 if (argc < 1) return;
118 dirs[0] = app_compile_bin_dir;
119 dirs[1] = app_compile_lib_dir;
120 dirs[2] = app_compile_data_dir;
121 dirs[3] = app_compile_locale_dir;
123 if (!dirs[0]) dirs[0] = "/usr/local/bin";
124 if (!dirs[1]) dirs[1] = "/usr/local/lib";
127 snprintf(buf, sizeof(buf), "/usr/local/share/%s", app_domain);
130 if (!dirs[3]) dirs[3] = dirs[2];
134 caps = alloca(strlen(app_domain) + 1);
135 for (p1 = (char *)app_domain, p2 = caps; *p1; p1++, p2++)
139 app_pfx = eina_prefix_new(argv[0], app_mainfunc, caps, app_domain,
140 app_checkfile, dirs[0], dirs[1], dirs[2], dirs[3]);
144 _prefix_shutdown(void)
146 if (app_pfx) eina_prefix_free(app_pfx);
147 if (app_domain) eina_stringshare_del(app_domain);
148 if (app_checkfile) eina_stringshare_del(app_checkfile);
149 if (app_compile_bin_dir) eina_stringshare_del(app_compile_bin_dir);
150 if (app_compile_lib_dir) eina_stringshare_del(app_compile_lib_dir);
151 if (app_compile_data_dir) eina_stringshare_del(app_compile_data_dir);
152 if (app_compile_locale_dir) eina_stringshare_del(app_compile_locale_dir);
153 if (app_prefix_dir) eina_stringshare_del(app_prefix_dir);
154 if (app_bin_dir) eina_stringshare_del(app_bin_dir);
155 if (app_lib_dir) eina_stringshare_del(app_lib_dir);
156 if (app_data_dir) eina_stringshare_del(app_data_dir);
157 if (app_locale_dir) eina_stringshare_del(app_locale_dir);
160 app_checkfile = NULL;
161 app_compile_bin_dir = NULL;
162 app_compile_lib_dir = NULL;
163 app_compile_data_dir = NULL;
164 app_compile_locale_dir = NULL;
165 app_prefix_dir = NULL;
169 app_locale_dir = NULL;
178 if (_elm_init_count > 1) return _elm_init_count;
179 elm_quicklaunch_init(argc, argv);
180 elm_quicklaunch_sub_init(argc, argv);
182 return _elm_init_count;
189 if (_elm_init_count > 0) return _elm_init_count;
191 while (_elm_win_deferred_free) ecore_main_loop_iterate();
193 // _prefix_shutdown();
194 elm_quicklaunch_sub_shutdown();
195 elm_quicklaunch_shutdown();
196 return _elm_init_count;
200 elm_app_info_set(void *mainfunc, const char *dom, const char *checkfile)
202 app_mainfunc = mainfunc;
203 eina_stringshare_replace(&app_domain, dom);
204 eina_stringshare_replace(&app_checkfile, checkfile);
208 elm_app_compile_bin_dir_set(const char *dir)
210 eina_stringshare_replace(&app_compile_bin_dir, dir);
214 elm_app_compile_lib_dir_set(const char *dir)
216 eina_stringshare_replace(&app_compile_lib_dir, dir);
220 elm_app_compile_data_dir_set(const char *dir)
222 eina_stringshare_replace(&app_compile_data_dir, dir);
226 elm_app_compile_locale_set(const char *dir)
228 eina_stringshare_replace(&app_compile_locale_dir, dir);
232 elm_app_prefix_dir_get(void)
234 if (app_prefix_dir) return app_prefix_dir;
236 if (!app_pfx) return "";
237 app_prefix_dir = eina_prefix_get(app_pfx);
238 return app_prefix_dir;
242 elm_app_bin_dir_get(void)
244 if (app_bin_dir) return app_bin_dir;
246 if (!app_pfx) return "";
247 app_bin_dir = eina_prefix_bin_get(app_pfx);
252 elm_app_lib_dir_get(void)
254 if (app_lib_dir) return app_lib_dir;
256 if (!app_pfx) return "";
257 app_lib_dir = eina_prefix_lib_get(app_pfx);
262 elm_app_data_dir_get(void)
264 if (app_data_dir) return app_data_dir;
266 if (!app_pfx) return "";
267 app_data_dir = eina_prefix_data_get(app_pfx);
272 elm_app_locale_dir_get(void)
274 if (app_locale_dir) return app_locale_dir;
276 if (!app_pfx) return "";
277 app_locale_dir = eina_prefix_locale_get(app_pfx);
278 return app_locale_dir;
282 static int _elm_need_e_dbus = 0;
285 elm_need_e_dbus(void)
288 if (_elm_need_e_dbus++) return EINA_TRUE;
297 _elm_unneed_e_dbus(void)
300 if (--_elm_need_e_dbus) return;
302 _elm_need_e_dbus = 0;
308 static int _elm_need_efreet = 0;
311 elm_need_efreet(void)
314 if (_elm_need_efreet++) return EINA_TRUE;
322 list = efreet_icon_extra_list_get();
325 e_user_dir_concat_static(buf, "icons");
326 *list = eina_list_prepend(*list, (void *)eina_stringshare_add(buf));
327 e_prefix_data_concat_static(buf, "data/icons");
328 *list = eina_list_prepend(*list, (void *)eina_stringshare_add(buf));
339 _elm_unneed_efreet(void)
342 if (--_elm_need_efreet) return;
344 _elm_need_efreet = 0;
345 efreet_trash_shutdown();
346 efreet_mime_shutdown();
352 elm_quicklaunch_mode_set(Eina_Bool ql_on)
354 quicklaunch_on = ql_on;
358 elm_quicklaunch_mode_get(void)
360 return quicklaunch_on;
364 elm_quicklaunch_init(int argc,
367 _elm_ql_init_count++;
368 if (_elm_ql_init_count > 1) return _elm_ql_init_count;
370 _elm_log_dom = eina_log_domain_register("elementary", EINA_COLOR_LIGHTBLUE);
373 EINA_LOG_ERR("could not register elementary log domain.");
374 _elm_log_dom = EINA_LOG_DOMAIN_GLOBAL;
380 #ifdef HAVE_ELEMENTARY_EMAP
383 ecore_app_args_set(argc, (const char **)argv);
385 memset(_elm_policies, 0, sizeof(_elm_policies));
386 if (!ELM_EVENT_POLICY_CHANGED)
387 ELM_EVENT_POLICY_CHANGED = ecore_event_type_new();
391 _elm_exit_handler = ecore_event_handler_add(ECORE_EVENT_SIGNAL_EXIT, _elm_signal_exit, NULL);
393 if (argv) _elm_appname = strdup(ecore_file_file_get(argv[0]));
395 pfx = eina_prefix_new(argv ? argv[0] : NULL, elm_quicklaunch_init,
396 "ELM", "elementary", "config/profile.cfg",
397 PACKAGE_LIB_DIR, /* don't have a bin dir currently */
403 _elm_data_dir = eina_stringshare_add(eina_prefix_data_get(pfx));
404 _elm_lib_dir = eina_stringshare_add(eina_prefix_lib_get(pfx));
406 if (!_elm_data_dir) _elm_data_dir = eina_stringshare_add("/");
407 if (!_elm_lib_dir) _elm_lib_dir = eina_stringshare_add("/");
409 return _elm_ql_init_count;
413 elm_quicklaunch_sub_init(int argc,
416 _elm_sub_init_count++;
417 if (_elm_sub_init_count > 1) return _elm_sub_init_count;
421 #ifdef SEMI_BROKEN_QUICKLAUNCH
422 return _elm_sub_init_count;
427 ecore_app_args_set(argc, (const char **)argv);
432 _elm_config_sub_init();
433 ecore_evas_init(); // FIXME: check errors
434 #ifdef HAVE_ELEMENTARY_ECORE_IMF
437 #ifdef HAVE_ELEMENTARY_ECORE_CON
439 ecore_con_url_init();
443 return _elm_sub_init_count;
447 elm_quicklaunch_sub_shutdown(void)
449 _elm_sub_init_count--;
450 if (_elm_sub_init_count > 0) return _elm_sub_init_count;
453 #ifdef SEMI_BROKEN_QUICKLAUNCH
454 return _elm_sub_init_count;
460 _elm_module_shutdown();
461 _elm_ews_wm_shutdown();
462 #ifdef HAVE_ELEMENTARY_ECORE_CON
463 ecore_con_url_shutdown();
464 ecore_con_shutdown();
466 #ifdef HAVE_ELEMENTARY_ECORE_IMF
467 ecore_imf_shutdown();
469 ecore_evas_shutdown();
470 _elm_config_sub_shutdown();
471 #define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
472 if (ENGINE_COMPARE(ELM_SOFTWARE_X11) ||
473 ENGINE_COMPARE(ELM_SOFTWARE_16_X11) ||
474 ENGINE_COMPARE(ELM_XRENDER_X11) ||
475 ENGINE_COMPARE(ELM_OPENGL_X11) ||
476 ENGINE_COMPARE(ELM_SOFTWARE_SDL) ||
477 ENGINE_COMPARE(ELM_SOFTWARE_16_SDL) ||
478 ENGINE_COMPARE(ELM_OPENGL_SDL) ||
479 ENGINE_COMPARE(ELM_OPENGL_COCOA) ||
480 ENGINE_COMPARE(ELM_SOFTWARE_WIN32) ||
481 ENGINE_COMPARE(ELM_SOFTWARE_16_WINCE) ||
482 ENGINE_COMPARE(ELM_EWS))
483 #undef ENGINE_COMPARE
484 evas_cserve_disconnect();
488 return _elm_sub_init_count;
492 elm_quicklaunch_shutdown(void)
494 _elm_ql_init_count--;
495 if (_elm_ql_init_count > 0) return _elm_ql_init_count;
496 if (pfx) eina_prefix_free(pfx);
498 eina_stringshare_del(_elm_data_dir);
499 _elm_data_dir = NULL;
500 eina_stringshare_del(_elm_lib_dir);
506 _elm_config_shutdown();
508 ecore_event_handler_del(_elm_exit_handler);
509 _elm_exit_handler = NULL;
511 _elm_theme_shutdown();
512 _elm_unneed_efreet();
513 _elm_unneed_e_dbus();
514 _elm_unneed_ethumb();
516 ecore_file_shutdown();
518 #ifdef HAVE_ELEMENTARY_EMAP
525 if ((_elm_log_dom > -1) && (_elm_log_dom != EINA_LOG_DOMAIN_GLOBAL))
527 eina_log_domain_unregister(_elm_log_dom);
531 _elm_widget_type_clear();
534 return _elm_ql_init_count;
538 elm_quicklaunch_seed(void)
540 #ifndef SEMI_BROKEN_QUICKLAUNCH
543 Evas_Object *win, *bg, *bt;
545 win = elm_win_add(NULL, "seed", ELM_WIN_BASIC);
546 bg = elm_bg_add(win);
547 elm_win_resize_object_add(win, bg);
548 evas_object_show(bg);
549 bt = elm_button_add(win);
550 elm_object_text_set(bt, " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~-_=+\\|]}[{;:'\",<.>/?");
551 elm_win_resize_object_add(win, bt);
552 ecore_main_loop_iterate();
553 evas_object_del(win);
554 ecore_main_loop_iterate();
555 #define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
556 if (ENGINE_COMPARE(ELM_SOFTWARE_X11) ||
557 ENGINE_COMPARE(ELM_SOFTWARE_16_X11) ||
558 ENGINE_COMPARE(ELM_XRENDER_X11) ||
559 ENGINE_COMPARE(ELM_OPENGL_X11))
560 #undef ENGINE_COMPARE
562 # ifdef HAVE_ELEMENTARY_X
566 ecore_main_loop_iterate();
572 static void *qr_handle = NULL;
574 static int (*qr_main)(int argc,
578 elm_quicklaunch_prepare(int argc __UNUSED__,
582 char *exe = elm_quicklaunch_exe_path_get(argv[0]);
585 ERR("requested quicklaunch binary '%s' does not exist\n", argv[0]);
593 exe2 = malloc(strlen(exe) + 1 + 10);
595 p = strrchr(exe2, '/');
598 exename = alloca(strlen(p) + 1);
601 strcat(p, "../lib/");
604 if (!access(exe2, R_OK | X_OK))
612 qr_handle = dlopen(exe, RTLD_NOW | RTLD_GLOBAL);
615 fprintf(stderr, "dlerr: %s\n", dlerror());
616 WRN("dlopen('%s') failed: %s", exe, dlerror());
620 INF("dlopen('%s') = %p", exe, qr_handle);
621 qr_main = dlsym(qr_handle, "elm_main");
622 INF("dlsym(%p, 'elm_main') = %p", qr_handle, qr_main);
625 WRN("not quicklauncher capable: no elm_main in '%s'", exe);
644 extern char **environ;
649 for (i = 0, size = 0; environ[i]; i++)
650 size += strlen(environ[i]) + 1;
652 p = malloc((i + 1) * sizeof(char *));
657 for (i = 0; oldenv[i]; i++)
658 environ[i] = strdup(oldenv[i]);
665 elm_quicklaunch_fork(int argc,
668 void (postfork_func) (void *data),
678 // need to accept current environment from elementary_run
685 if (child > 0) return EINA_TRUE;
688 perror("could not fork");
693 perror("could not chdir");
694 args = alloca((argc + 1) * sizeof(char *));
695 for (i = 0; i < argc; i++) args[i] = argv[i];
697 WRN("%s not quicklaunch capable, fallback...", argv[0]);
698 execvp(argv[0], args);
699 ERR("failed to execute '%s': %s", argv[0], strerror(errno));
703 if (child > 0) return EINA_TRUE;
706 perror("could not fork");
709 if (postfork_func) postfork_func(postfork_data);
713 #ifdef SEMI_BROKEN_QUICKLAUNCH
714 ecore_app_args_set(argc, (const char **)argv);
717 _elm_config_sub_init();
718 #define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
719 if (ENGINE_COMPARE(ELM_SOFTWARE_X11) ||
720 ENGINE_COMPARE(ELM_SOFTWARE_16_X11) ||
721 ENGINE_COMPARE(ELM_XRENDER_X11) ||
722 ENGINE_COMPARE(ELM_OPENGL_X11))
723 #undef ENGINE_COMPARE
725 # ifdef HAVE_ELEMENTARY_X
729 ecore_evas_init(); // FIXME: check errors
730 # ifdef HAVE_ELEMENTARY_ECORE_IMF
739 perror("could not chdir");
740 // FIXME: this is very linux specific. it changes argv[0] of the process
741 // so ps etc. report what you'd expect. for other unixes and os's this
748 ecore_app_args_get(&real_argc, &real_argv);
749 lastarg = real_argv[real_argc - 1] + strlen(real_argv[real_argc - 1]);
750 for (p = real_argv[0]; p < lastarg; p++) *p = 0;
751 strcpy(real_argv[0], argv[0]);
753 ecore_app_args_set(argc, (const char **)argv);
754 ret = qr_main(argc, argv);
768 elm_quicklaunch_cleanup(void)
781 elm_quicklaunch_fallback(int argc,
785 elm_quicklaunch_init(argc, argv);
786 elm_quicklaunch_sub_init(argc, argv);
787 elm_quicklaunch_prepare(argc, argv);
788 ret = qr_main(argc, argv);
794 elm_quicklaunch_exe_path_get(const char *exe)
796 static char *path = NULL;
797 static Eina_List *pathlist = NULL;
801 if (exe[0] == '/') return strdup(exe);
802 if ((exe[0] == '.') && (exe[1] == '/')) return strdup(exe);
803 if ((exe[0] == '.') && (exe[1] == '.') && (exe[2] == '/')) return strdup(exe);
808 path = getenv("PATH");
809 buf2 = alloca(strlen(path) + 1);
814 if ((*p == ':') || (!*p))
819 strncpy(buf2, pp, len);
821 pathlist = eina_list_append(pathlist, eina_stringshare_add(buf2));
833 EINA_LIST_FOREACH(pathlist, l, pathitr)
835 snprintf(buf, sizeof(buf), "%s/%s", pathitr, exe);
836 if (!access(buf, R_OK | X_OK)) return strdup(buf);
844 ecore_main_loop_begin();
850 ecore_main_loop_quit();
854 elm_policy_set(unsigned int policy,
857 Elm_Event_Policy_Changed *ev;
859 if (policy >= ELM_POLICY_LAST)
862 if (value == _elm_policies[policy])
865 /* TODO: validade policy? */
867 ev = malloc(sizeof(*ev));
869 ev->new_value = value;
870 ev->old_value = _elm_policies[policy];
872 _elm_policies[policy] = value;
874 ecore_event_add(ELM_EVENT_POLICY_CHANGED, ev, NULL, NULL);
880 elm_policy_get(unsigned int policy)
882 if (policy >= ELM_POLICY_LAST)
884 return _elm_policies[policy];
888 elm_language_set(const char *lang)
890 setlocale(LC_ALL, lang);
891 _elm_win_translate();
895 elm_object_mirrored_get(const Evas_Object *obj)
897 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
898 return elm_widget_mirrored_get(obj);
902 elm_object_mirrored_set(Evas_Object *obj, Eina_Bool mirrored)
904 EINA_SAFETY_ON_NULL_RETURN(obj);
905 elm_widget_mirrored_set(obj, mirrored);
909 elm_object_mirrored_automatic_get(const Evas_Object *obj)
911 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
912 return elm_widget_mirrored_automatic_get(obj);
916 elm_object_mirrored_automatic_set(Evas_Object *obj, Eina_Bool automatic)
918 EINA_SAFETY_ON_NULL_RETURN(obj);
919 elm_widget_mirrored_automatic_set(obj, automatic);
927 elm_object_scale_set(Evas_Object *obj,
930 EINA_SAFETY_ON_NULL_RETURN(obj);
931 elm_widget_scale_set(obj, scale);
935 elm_object_scale_get(const Evas_Object *obj)
937 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, 0.0);
938 return elm_widget_scale_get(obj);
942 elm_object_part_text_set(Evas_Object *obj, const char *part, const char *label)
944 EINA_SAFETY_ON_NULL_RETURN(obj);
945 elm_widget_text_part_set(obj, part, label);
949 elm_object_part_text_get(const Evas_Object *obj, const char *part)
951 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
952 return elm_widget_text_part_get(obj, part);
956 elm_object_domain_translatable_text_part_set(Evas_Object *obj, const char *part, const char *domain, const char *text)
958 EINA_SAFETY_ON_NULL_RETURN(obj);
959 elm_widget_domain_translatable_text_part_set(obj, part, domain, text);
963 elm_object_translatable_text_part_get(const Evas_Object *obj, const char *part)
965 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
966 return elm_widget_translatable_text_part_get(obj, part);
970 elm_object_part_content_set(Evas_Object *obj, const char *part, Evas_Object *content)
972 EINA_SAFETY_ON_NULL_RETURN(obj);
973 elm_widget_content_part_set(obj, part, content);
977 elm_object_part_content_get(const Evas_Object *obj, const char *part)
979 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
980 return elm_widget_content_part_get(obj, part);
984 elm_object_part_content_unset(Evas_Object *obj, const char *part)
986 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
987 return elm_widget_content_part_unset(obj, part);
991 elm_object_style_set(Evas_Object *obj,
994 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
995 return elm_widget_style_set(obj, style);
999 elm_object_style_get(const Evas_Object *obj)
1001 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1002 return elm_widget_style_get(obj);
1006 elm_object_disabled_set(Evas_Object *obj,
1009 EINA_SAFETY_ON_NULL_RETURN(obj);
1010 elm_widget_disabled_set(obj, disabled);
1014 elm_object_disabled_get(const Evas_Object *obj)
1016 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1017 return elm_widget_disabled_get(obj);
1021 elm_cache_all_flush(void)
1026 edje_file_cache_flush();
1027 edje_collection_cache_flush();
1029 EINA_LIST_FOREACH(_elm_win_list, l, obj)
1031 Evas *e = evas_object_evas_get(obj);
1032 evas_image_cache_flush(e);
1033 evas_font_cache_flush(e);
1034 evas_render_dump(e);
1039 elm_object_focus_get(const Evas_Object *obj)
1041 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1042 return elm_widget_focus_get(obj);
1046 elm_object_focus_set(Evas_Object *obj,
1049 EINA_SAFETY_ON_NULL_RETURN(obj);
1051 if (focus == elm_widget_focus_get(obj)) return;
1054 elm_widget_focus_cycle(obj, ELM_FOCUS_NEXT);
1056 elm_widget_focused_object_clear(obj);
1060 elm_object_focus_allow_set(Evas_Object *obj,
1063 EINA_SAFETY_ON_NULL_RETURN(obj);
1064 elm_widget_can_focus_set(obj, enable);
1065 /*FIXME: According to the elm_object_focus_allow_get(), child_can_focus field
1066 of the parent should be updated. Otherwise, the checking of it's child focus allow states should not be in elm_object_focus_allow_get() */
1070 elm_object_focus_allow_get(const Evas_Object *obj)
1072 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1073 return (elm_widget_can_focus_get(obj)) || (elm_widget_child_can_focus_get(obj));
1077 elm_object_focus_custom_chain_set(Evas_Object *obj,
1080 EINA_SAFETY_ON_NULL_RETURN(obj);
1081 elm_widget_focus_custom_chain_set(obj, objs);
1085 elm_object_focus_custom_chain_unset(Evas_Object *obj)
1087 EINA_SAFETY_ON_NULL_RETURN(obj);
1088 elm_widget_focus_custom_chain_unset(obj);
1091 EAPI const Eina_List *
1092 elm_object_focus_custom_chain_get(const Evas_Object *obj)
1094 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1095 return elm_widget_focus_custom_chain_get(obj);
1099 elm_object_focus_custom_chain_append(Evas_Object *obj,
1101 Evas_Object *relative_child)
1103 EINA_SAFETY_ON_NULL_RETURN(obj);
1104 elm_widget_focus_custom_chain_append(obj, child, relative_child);
1108 elm_object_focus_custom_chain_prepend(Evas_Object *obj,
1110 Evas_Object *relative_child)
1112 EINA_SAFETY_ON_NULL_RETURN(obj);
1113 elm_widget_focus_custom_chain_prepend(obj, child, relative_child);
1116 EINA_DEPRECATED EAPI void
1117 elm_object_focus_cycle(Evas_Object *obj,
1118 Elm_Focus_Direction dir)
1120 elm_object_focus_next(obj, dir);
1124 elm_object_focus_next(Evas_Object *obj,
1125 Elm_Focus_Direction dir)
1127 EINA_SAFETY_ON_NULL_RETURN(obj);
1128 elm_widget_focus_cycle(obj, dir);
1132 elm_object_tree_focus_allow_set(Evas_Object *obj,
1133 Eina_Bool tree_focusable)
1135 EINA_SAFETY_ON_NULL_RETURN(obj);
1136 elm_widget_tree_unfocusable_set(obj, !tree_focusable);
1140 elm_object_tree_focus_allow_get(const Evas_Object *obj)
1142 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1143 return !elm_widget_tree_unfocusable_get(obj);
1147 elm_object_scroll_hold_push(Evas_Object *obj)
1149 EINA_SAFETY_ON_NULL_RETURN(obj);
1150 elm_widget_scroll_hold_push(obj);
1154 elm_object_scroll_hold_pop(Evas_Object *obj)
1156 EINA_SAFETY_ON_NULL_RETURN(obj);
1157 elm_widget_scroll_hold_pop(obj);
1161 elm_object_scroll_freeze_push(Evas_Object *obj)
1163 EINA_SAFETY_ON_NULL_RETURN(obj);
1164 elm_widget_scroll_freeze_push(obj);
1168 elm_object_scroll_lock_x_set(Evas_Object *obj,
1171 EINA_SAFETY_ON_NULL_RETURN(obj);
1172 elm_widget_drag_lock_x_set(obj, lock);
1176 elm_object_scroll_lock_y_set(Evas_Object *obj,
1179 EINA_SAFETY_ON_NULL_RETURN(obj);
1180 elm_widget_drag_lock_y_set(obj, lock);
1184 elm_object_scroll_lock_x_get(const Evas_Object *obj)
1186 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1187 return elm_widget_drag_lock_x_get(obj);
1191 elm_object_scroll_lock_y_get(const Evas_Object *obj)
1193 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1194 return elm_widget_drag_lock_y_get(obj);
1198 elm_object_scroll_freeze_pop(Evas_Object *obj)
1200 EINA_SAFETY_ON_NULL_RETURN(obj);
1201 elm_widget_scroll_freeze_pop(obj);
1205 elm_object_widget_check(const Evas_Object *obj)
1207 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1208 return elm_widget_is(obj);
1212 elm_object_parent_widget_get(const Evas_Object *obj)
1214 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1215 return elm_widget_parent_widget_get(obj);
1219 elm_object_top_widget_get(const Evas_Object *obj)
1221 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1222 return elm_widget_top_get(obj);
1226 elm_object_widget_type_get(const Evas_Object *obj)
1228 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1229 return elm_widget_type_get(obj);
1233 elm_object_signal_emit(Evas_Object *obj,
1234 const char *emission,
1237 EINA_SAFETY_ON_NULL_RETURN(obj);
1238 elm_widget_signal_emit(obj, emission, source);
1242 elm_object_signal_callback_add(Evas_Object *obj, const char *emission, const char *source, Edje_Signal_Cb func, void *data)
1244 EINA_SAFETY_ON_NULL_RETURN(obj);
1245 EINA_SAFETY_ON_NULL_RETURN(func);
1246 elm_widget_signal_callback_add(obj, emission, source, func, data);
1250 elm_object_signal_callback_del(Evas_Object *obj, const char *emission, const char *source, Edje_Signal_Cb func)
1252 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1253 EINA_SAFETY_ON_NULL_RETURN_VAL(func, NULL);
1254 return elm_widget_signal_callback_del(obj, emission, source, func);
1258 elm_object_event_callback_add(Evas_Object *obj, Elm_Event_Cb func, const void *data)
1260 EINA_SAFETY_ON_NULL_RETURN(obj);
1261 EINA_SAFETY_ON_NULL_RETURN(func);
1262 elm_widget_event_callback_add(obj, func, data);
1266 elm_object_event_callback_del(Evas_Object *obj, Elm_Event_Cb func, const void *data)
1268 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1269 EINA_SAFETY_ON_NULL_RETURN_VAL(func, NULL);
1270 return elm_widget_event_callback_del(obj, func, data);
1274 elm_object_tree_dump(const Evas_Object *top)
1277 elm_widget_tree_dump(top);
1285 elm_object_tree_dot_dump(const Evas_Object *top,
1289 FILE *f = fopen(file, "wb");
1290 elm_widget_tree_dot_dump(top, f);
1300 elm_coords_finger_size_adjust(int times_w,
1305 if ((w) && (*w < (_elm_config->finger_size * times_w)))
1306 *w = _elm_config->finger_size * times_w;
1307 if ((h) && (*h < (_elm_config->finger_size * times_h)))
1308 *h = _elm_config->finger_size * times_h;
1312 elm_object_item_widget_get(const Elm_Object_Item *it)
1318 elm_object_item_part_content_set(Elm_Object_Item *it,
1320 Evas_Object *content)
1322 _elm_widget_item_part_content_set((Elm_Widget_Item *)it, part, content);
1326 elm_object_item_part_content_get(const Elm_Object_Item *it,
1329 return _elm_widget_item_part_content_get((Elm_Widget_Item *)it, part);
1333 elm_object_item_part_content_unset(Elm_Object_Item *it, const char *part)
1335 return _elm_widget_item_part_content_unset((Elm_Widget_Item *)it, part);
1339 elm_object_item_part_text_set(Elm_Object_Item *it,
1343 _elm_widget_item_part_text_set((Elm_Widget_Item *)it, part, label);
1347 elm_object_item_part_text_get(const Elm_Object_Item *it, const char *part)
1349 return _elm_widget_item_part_text_get((Elm_Widget_Item *)it, part);
1353 elm_object_access_info_set(Evas_Object *obj, const char *txt)
1355 elm_widget_access_info_set(obj, txt);
1359 elm_object_name_find(const Evas_Object *obj, const char *name, int recurse)
1361 return elm_widget_name_find(obj, name, recurse);
1365 elm_object_item_access_info_set(Elm_Object_Item *it, const char *txt)
1367 _elm_widget_item_access_info_set((Elm_Widget_Item *)it, txt);
1371 elm_object_item_data_get(const Elm_Object_Item *it)
1373 return elm_widget_item_data_get(it);
1377 elm_object_item_data_set(Elm_Object_Item *it, void *data)
1379 elm_widget_item_data_set(it, data);
1383 elm_object_item_signal_emit(Elm_Object_Item *it, const char *emission, const char *source)
1385 _elm_widget_item_signal_emit((Elm_Widget_Item *)it, emission, source);
1388 EAPI void elm_object_item_disabled_set(Elm_Object_Item *it, Eina_Bool disabled)
1390 _elm_widget_item_disabled_set((Elm_Widget_Item *)it, disabled);
1393 EAPI Eina_Bool elm_object_item_disabled_get(const Elm_Object_Item *it)
1395 return _elm_widget_item_disabled_get((Elm_Widget_Item *)it);
1398 EAPI void elm_object_item_del_cb_set(Elm_Object_Item *it, Evas_Smart_Cb del_cb)
1400 _elm_widget_item_del_cb_set((Elm_Widget_Item *)it, del_cb);
1403 EAPI void elm_object_item_del(Elm_Object_Item *it)
1405 _elm_widget_item_del((Elm_Widget_Item *)it);
1409 elm_object_item_tooltip_text_set(Elm_Object_Item *it, const char *text)
1411 elm_widget_item_tooltip_text_set(it, text);
1415 elm_object_item_tooltip_content_cb_set(Elm_Object_Item *it, Elm_Tooltip_Item_Content_Cb func, const void *data, Evas_Smart_Cb del_cb)
1417 elm_widget_item_tooltip_content_cb_set(it, func, data, del_cb);
1421 elm_object_item_tooltip_unset(Elm_Object_Item *it)
1423 elm_widget_item_tooltip_unset(it);
1427 elm_object_item_tooltip_window_mode_set(Elm_Object_Item *it, Eina_Bool disable)
1429 return elm_widget_item_tooltip_window_mode_set(it, disable);
1433 elm_object_item_tooltip_window_mode_get(const Elm_Object_Item *it)
1435 return elm_widget_item_tooltip_window_mode_get(it);
1439 elm_object_item_tooltip_style_set(Elm_Object_Item *it, const char *style)
1441 elm_widget_item_tooltip_style_set(it, style);
1445 elm_object_item_tooltip_style_get(const Elm_Object_Item *it)
1447 return elm_widget_item_tooltip_style_get(it);
1451 elm_object_item_cursor_set(Elm_Object_Item *it, const char *cursor)
1453 elm_widget_item_cursor_set(it, cursor);
1457 elm_object_item_cursor_get(const Elm_Object_Item *it)
1459 return elm_widget_item_cursor_get(it);
1463 elm_object_item_cursor_unset(Elm_Object_Item *it)
1465 elm_widget_item_cursor_unset(it);
1469 elm_object_item_cursor_style_set(Elm_Object_Item *it, const char *style)
1471 elm_widget_item_cursor_style_set(it, style);
1475 elm_object_item_cursor_style_get(const Elm_Object_Item *it)
1477 return elm_widget_item_cursor_style_get(it);
1481 elm_object_item_cursor_engine_only_set(Elm_Object_Item *it, Eina_Bool engine_only)
1483 elm_widget_item_cursor_engine_only_set(it, engine_only);
1487 elm_object_item_cursor_engine_only_get(const Elm_Object_Item *it)
1489 return elm_widget_item_cursor_engine_only_get(it);