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;
112 if (!app_domain) return;
114 ecore_app_args_get(&argc, &argv);
115 if (argc < 1) return;
117 dirs[0] = app_compile_bin_dir;
118 dirs[1] = app_compile_lib_dir;
119 dirs[2] = app_compile_data_dir;
120 dirs[3] = app_compile_locale_dir;
122 if (!dirs[1]) dirs[1] = dirs[0];
123 if (!dirs[0]) dirs[0] = dirs[1];
124 if (!dirs[3]) dirs[3] = dirs[2];
125 if (!dirs[2]) dirs[2] = dirs[3];
129 caps = alloca(strlen(app_domain) + 1);
130 for (p1 = (char *)app_domain, p2 = caps; *p1; p1++, p2++)
134 app_pfx = eina_prefix_new(argv[0], app_mainfunc, caps, app_domain,
135 app_checkfile, dirs[0], dirs[1], dirs[2], dirs[3]);
139 _prefix_shutdown(void)
141 if (app_pfx) eina_prefix_free(app_pfx);
142 if (app_domain) eina_stringshare_del(app_domain);
143 if (app_checkfile) eina_stringshare_del(app_checkfile);
144 if (app_compile_bin_dir) eina_stringshare_del(app_compile_bin_dir);
145 if (app_compile_lib_dir) eina_stringshare_del(app_compile_lib_dir);
146 if (app_compile_data_dir) eina_stringshare_del(app_compile_data_dir);
147 if (app_compile_locale_dir) eina_stringshare_del(app_compile_locale_dir);
148 if (app_prefix_dir) eina_stringshare_del(app_prefix_dir);
149 if (app_bin_dir) eina_stringshare_del(app_bin_dir);
150 if (app_lib_dir) eina_stringshare_del(app_lib_dir);
151 if (app_data_dir) eina_stringshare_del(app_data_dir);
152 if (app_locale_dir) eina_stringshare_del(app_locale_dir);
155 app_checkfile = NULL;
156 app_compile_bin_dir = NULL;
157 app_compile_lib_dir = NULL;
158 app_compile_data_dir = NULL;
159 app_compile_locale_dir = NULL;
160 app_prefix_dir = NULL;
164 app_locale_dir = NULL;
173 if (_elm_init_count > 1) return _elm_init_count;
174 elm_quicklaunch_init(argc, argv);
175 elm_quicklaunch_sub_init(argc, argv);
177 return _elm_init_count;
184 if (_elm_init_count > 0) return _elm_init_count;
186 while (_elm_win_deferred_free) ecore_main_loop_iterate();
188 // _prefix_shutdown();
189 elm_quicklaunch_sub_shutdown();
190 elm_quicklaunch_shutdown();
191 return _elm_init_count;
195 elm_app_info_set(void *mainfunc, const char *dom, const char *checkfile)
197 app_mainfunc = mainfunc;
198 eina_stringshare_replace(&app_domain, dom);
199 eina_stringshare_replace(&app_checkfile, checkfile);
203 elm_app_compile_bin_dir_set(const char *dir)
205 eina_stringshare_replace(&app_compile_bin_dir, dir);
209 elm_app_compile_lib_dir_set(const char *dir)
211 eina_stringshare_replace(&app_compile_lib_dir, dir);
215 elm_app_compile_data_dir_set(const char *dir)
217 eina_stringshare_replace(&app_compile_data_dir, dir);
221 elm_app_compile_locale_set(const char *dir)
223 eina_stringshare_replace(&app_compile_locale_dir, dir);
227 elm_app_prefix_dir_get(void)
229 if (app_prefix_dir) return app_prefix_dir;
231 if (!app_pfx) return "";
232 app_prefix_dir = eina_prefix_get(app_pfx);
233 return app_prefix_dir;
237 elm_app_bin_dir_get(void)
239 if (app_bin_dir) return app_bin_dir;
241 if (!app_pfx) return "";
242 app_bin_dir = eina_prefix_bin_get(app_pfx);
247 elm_app_lib_dir_get(void)
249 if (app_lib_dir) return app_lib_dir;
251 if (!app_pfx) return "";
252 app_lib_dir = eina_prefix_lib_get(app_pfx);
257 elm_app_data_dir_get(void)
259 if (app_data_dir) return app_data_dir;
261 if (!app_pfx) return "";
262 app_data_dir = eina_prefix_data_get(app_pfx);
267 elm_app_locale_dir_get(void)
269 if (app_locale_dir) return app_locale_dir;
271 if (!app_pfx) return "";
272 app_locale_dir = eina_prefix_locale_get(app_pfx);
273 return app_locale_dir;
277 static int _elm_need_e_dbus = 0;
280 elm_need_e_dbus(void)
283 if (_elm_need_e_dbus++) return EINA_TRUE;
292 _elm_unneed_e_dbus(void)
295 if (--_elm_need_e_dbus) return;
297 _elm_need_e_dbus = 0;
303 static int _elm_need_efreet = 0;
306 elm_need_efreet(void)
309 if (_elm_need_efreet++) return EINA_TRUE;
317 list = efreet_icon_extra_list_get();
320 e_user_dir_concat_static(buf, "icons");
321 *list = eina_list_prepend(*list, (void *)eina_stringshare_add(buf));
322 e_prefix_data_concat_static(buf, "data/icons");
323 *list = eina_list_prepend(*list, (void *)eina_stringshare_add(buf));
334 _elm_unneed_efreet(void)
337 if (--_elm_need_efreet) return;
339 _elm_need_efreet = 0;
340 efreet_trash_shutdown();
341 efreet_mime_shutdown();
347 elm_quicklaunch_mode_set(Eina_Bool ql_on)
349 quicklaunch_on = ql_on;
353 elm_quicklaunch_mode_get(void)
355 return quicklaunch_on;
359 elm_quicklaunch_init(int argc,
362 _elm_ql_init_count++;
363 if (_elm_ql_init_count > 1) return _elm_ql_init_count;
365 _elm_log_dom = eina_log_domain_register("elementary", EINA_COLOR_LIGHTBLUE);
368 EINA_LOG_ERR("could not register elementary log domain.");
369 _elm_log_dom = EINA_LOG_DOMAIN_GLOBAL;
375 #ifdef HAVE_ELEMENTARY_EMAP
378 ecore_app_args_set(argc, (const char **)argv);
380 memset(_elm_policies, 0, sizeof(_elm_policies));
381 if (!ELM_EVENT_POLICY_CHANGED)
382 ELM_EVENT_POLICY_CHANGED = ecore_event_type_new();
386 _elm_exit_handler = ecore_event_handler_add(ECORE_EVENT_SIGNAL_EXIT, _elm_signal_exit, NULL);
388 if (argv) _elm_appname = strdup(ecore_file_file_get(argv[0]));
390 pfx = eina_prefix_new(argv[0], elm_quicklaunch_init,
391 "ELM", "elementary", "config/profile.cfg",
392 PACKAGE_LIB_DIR, /* don't have a bin dir currently */
398 _elm_data_dir = eina_stringshare_add(eina_prefix_data_get(pfx));
399 _elm_lib_dir = eina_stringshare_add(eina_prefix_lib_get(pfx));
401 if (!_elm_data_dir) _elm_data_dir = eina_stringshare_add("/");
402 if (!_elm_lib_dir) _elm_lib_dir = eina_stringshare_add("/");
405 return _elm_ql_init_count;
409 elm_quicklaunch_sub_init(int argc,
412 _elm_sub_init_count++;
413 if (_elm_sub_init_count > 1) return _elm_sub_init_count;
416 #ifdef SEMI_BROKEN_QUICKLAUNCH
417 return _elm_sub_init_count;
422 ecore_app_args_set(argc, (const char **)argv);
426 _elm_config_sub_init();
427 ecore_evas_init(); // FIXME: check errors
430 ecore_con_url_init();
433 return _elm_sub_init_count;
437 elm_quicklaunch_sub_shutdown(void)
439 _elm_sub_init_count--;
440 if (_elm_sub_init_count > 0) return _elm_sub_init_count;
443 #ifdef SEMI_BROKEN_QUICKLAUNCH
444 return _elm_sub_init_count;
450 _elm_module_shutdown();
451 _elm_ews_wm_shutdown();
452 ecore_con_url_shutdown();
453 ecore_con_shutdown();
454 ecore_imf_shutdown();
455 ecore_evas_shutdown();
456 _elm_config_sub_shutdown();
457 #define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
458 if (ENGINE_COMPARE(ELM_SOFTWARE_X11) ||
459 ENGINE_COMPARE(ELM_SOFTWARE_16_X11) ||
460 ENGINE_COMPARE(ELM_XRENDER_X11) ||
461 ENGINE_COMPARE(ELM_OPENGL_X11) ||
462 ENGINE_COMPARE(ELM_SOFTWARE_SDL) ||
463 ENGINE_COMPARE(ELM_SOFTWARE_16_SDL) ||
464 ENGINE_COMPARE(ELM_OPENGL_SDL) ||
465 ENGINE_COMPARE(ELM_OPENGL_COCOA) ||
466 ENGINE_COMPARE(ELM_SOFTWARE_WIN32) ||
467 ENGINE_COMPARE(ELM_SOFTWARE_16_WINCE) ||
468 ENGINE_COMPARE(ELM_EWS))
469 #undef ENGINE_COMPARE
470 evas_cserve_disconnect();
474 return _elm_sub_init_count;
478 elm_quicklaunch_shutdown(void)
480 _elm_ql_init_count--;
481 if (_elm_ql_init_count > 0) return _elm_ql_init_count;
482 if (pfx) eina_prefix_free(pfx);
484 eina_stringshare_del(_elm_data_dir);
485 _elm_data_dir = NULL;
486 eina_stringshare_del(_elm_lib_dir);
492 _elm_config_shutdown();
494 ecore_event_handler_del(_elm_exit_handler);
495 _elm_exit_handler = NULL;
497 _elm_theme_shutdown();
498 _elm_unneed_efreet();
499 _elm_unneed_e_dbus();
500 _elm_unneed_ethumb();
502 ecore_file_shutdown();
504 #ifdef HAVE_ELEMENTARY_EMAP
511 if ((_elm_log_dom > -1) && (_elm_log_dom != EINA_LOG_DOMAIN_GLOBAL))
513 eina_log_domain_unregister(_elm_log_dom);
517 _elm_widget_type_clear();
520 return _elm_ql_init_count;
524 elm_quicklaunch_seed(void)
526 #ifndef SEMI_BROKEN_QUICKLAUNCH
529 Evas_Object *win, *bg, *bt;
531 win = elm_win_add(NULL, "seed", ELM_WIN_BASIC);
532 bg = elm_bg_add(win);
533 elm_win_resize_object_add(win, bg);
534 evas_object_show(bg);
535 bt = elm_button_add(win);
536 elm_button_label_set(bt, " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~-_=+\\|]}[{;:'\",<.>/?");
537 elm_win_resize_object_add(win, bt);
538 ecore_main_loop_iterate();
539 evas_object_del(win);
540 ecore_main_loop_iterate();
541 #define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
542 if (ENGINE_COMPARE(ELM_SOFTWARE_X11) ||
543 ENGINE_COMPARE(ELM_SOFTWARE_16_X11) ||
544 ENGINE_COMPARE(ELM_XRENDER_X11) ||
545 ENGINE_COMPARE(ELM_OPENGL_X11))
546 #undef ENGINE_COMPARE
548 # ifdef HAVE_ELEMENTARY_X
552 ecore_main_loop_iterate();
558 static void *qr_handle = NULL;
560 static int (*qr_main)(int argc,
564 elm_quicklaunch_prepare(int argc __UNUSED__,
568 char *exe = elm_quicklaunch_exe_path_get(argv[0]);
571 ERR("requested quicklaunch binary '%s' does not exist\n", argv[0]);
579 exe2 = malloc(strlen(exe) + 1 + 10);
581 p = strrchr(exe2, '/');
584 exename = alloca(strlen(p) + 1);
587 strcat(p, "../lib/");
590 if (!access(exe2, R_OK | X_OK))
598 qr_handle = dlopen(exe, RTLD_NOW | RTLD_GLOBAL);
601 fprintf(stderr, "dlerr: %s\n", dlerror());
602 WRN("dlopen('%s') failed: %s", exe, dlerror());
606 INF("dlopen('%s') = %p", exe, qr_handle);
607 qr_main = dlsym(qr_handle, "elm_main");
608 INF("dlsym(%p, 'elm_main') = %p", qr_handle, qr_main);
611 WRN("not quicklauncher capable: no elm_main in '%s'", exe);
630 extern char **environ;
635 for (i = 0, size = 0; environ[i]; i++)
636 size += strlen(environ[i]) + 1;
638 p = malloc((i + 1) * sizeof(char *));
643 for (i = 0; oldenv[i]; i++)
644 environ[i] = strdup(oldenv[i]);
651 elm_quicklaunch_fork(int argc,
654 void (postfork_func) (void *data),
664 // need to accept current environment from elementary_run
671 if (child > 0) return EINA_TRUE;
674 perror("could not fork");
679 perror("could not chdir");
680 args = alloca((argc + 1) * sizeof(char *));
681 for (i = 0; i < argc; i++) args[i] = argv[i];
683 WRN("%s not quicklaunch capable, fallback...", argv[0]);
684 execvp(argv[0], args);
685 ERR("failed to execute '%s': %s", argv[0], strerror(errno));
689 if (child > 0) return EINA_TRUE;
692 perror("could not fork");
695 if (postfork_func) postfork_func(postfork_data);
699 #ifdef SEMI_BROKEN_QUICKLAUNCH
700 ecore_app_args_set(argc, (const char **)argv);
703 _elm_config_sub_init();
704 #define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
705 if (ENGINE_COMPARE(ELM_SOFTWARE_X11) ||
706 ENGINE_COMPARE(ELM_SOFTWARE_16_X11) ||
707 ENGINE_COMPARE(ELM_XRENDER_X11) ||
708 ENGINE_COMPARE(ELM_OPENGL_X11))
709 #undef ENGINE_COMPARE
711 # ifdef HAVE_ELEMENTARY_X
715 ecore_evas_init(); // FIXME: check errors
723 perror("could not chdir");
724 // FIXME: this is very linux specific. it changes argv[0] of the process
725 // so ps etc. report what you'd expect. for other unixes and os's this
732 ecore_app_args_get(&real_argc, &real_argv);
733 lastarg = real_argv[real_argc - 1] + strlen(real_argv[real_argc - 1]);
734 for (p = real_argv[0]; p < lastarg; p++) *p = 0;
735 strcpy(real_argv[0], argv[0]);
737 ecore_app_args_set(argc, (const char **)argv);
738 ret = qr_main(argc, argv);
752 elm_quicklaunch_cleanup(void)
765 elm_quicklaunch_fallback(int argc,
769 elm_quicklaunch_init(argc, argv);
770 elm_quicklaunch_sub_init(argc, argv);
771 elm_quicklaunch_prepare(argc, argv);
772 ret = qr_main(argc, argv);
778 elm_quicklaunch_exe_path_get(const char *exe)
780 static char *path = NULL;
781 static Eina_List *pathlist = NULL;
785 if (exe[0] == '/') return strdup(exe);
786 if ((exe[0] == '.') && (exe[1] == '/')) return strdup(exe);
787 if ((exe[0] == '.') && (exe[1] == '.') && (exe[2] == '/')) return strdup(exe);
792 path = getenv("PATH");
793 buf2 = alloca(strlen(path) + 1);
798 if ((*p == ':') || (!*p))
803 strncpy(buf2, pp, len);
805 pathlist = eina_list_append(pathlist, eina_stringshare_add(buf2));
817 EINA_LIST_FOREACH(pathlist, l, pathitr)
819 snprintf(buf, sizeof(buf), "%s/%s", pathitr, exe);
820 if (!access(buf, R_OK | X_OK)) return strdup(buf);
828 ecore_main_loop_begin();
834 ecore_main_loop_quit();
838 elm_policy_set(unsigned int policy,
841 Elm_Event_Policy_Changed *ev;
843 if (policy >= ELM_POLICY_LAST)
846 if (value == _elm_policies[policy])
849 /* TODO: validade policy? */
851 ev = malloc(sizeof(*ev));
853 ev->new_value = value;
854 ev->old_value = _elm_policies[policy];
856 _elm_policies[policy] = value;
858 ecore_event_add(ELM_EVENT_POLICY_CHANGED, ev, NULL, NULL);
864 elm_policy_get(unsigned int policy)
866 if (policy >= ELM_POLICY_LAST)
868 return _elm_policies[policy];
872 elm_language_set(const char *lang)
874 setlocale(LC_ALL, lang);
875 _elm_win_translate();
879 elm_object_mirrored_get(const Evas_Object *obj)
881 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
882 return elm_widget_mirrored_get(obj);
886 elm_object_mirrored_set(Evas_Object *obj, Eina_Bool mirrored)
888 EINA_SAFETY_ON_NULL_RETURN(obj);
889 elm_widget_mirrored_set(obj, mirrored);
893 elm_object_mirrored_automatic_get(const Evas_Object *obj)
895 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
896 return elm_widget_mirrored_automatic_get(obj);
900 elm_object_mirrored_automatic_set(Evas_Object *obj, Eina_Bool automatic)
902 EINA_SAFETY_ON_NULL_RETURN(obj);
903 elm_widget_mirrored_automatic_set(obj, automatic);
911 elm_object_scale_set(Evas_Object *obj,
914 EINA_SAFETY_ON_NULL_RETURN(obj);
915 elm_widget_scale_set(obj, scale);
919 elm_object_scale_get(const Evas_Object *obj)
921 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, 0.0);
922 return elm_widget_scale_get(obj);
926 elm_object_text_part_set(Evas_Object *obj, const char *part, const char *label)
928 EINA_SAFETY_ON_NULL_RETURN(obj);
929 elm_widget_text_part_set(obj, part, label);
933 elm_object_text_part_get(const Evas_Object *obj, const char *part)
935 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
936 return elm_widget_text_part_get(obj, part);
940 elm_object_part_text_set(Evas_Object *obj, const char *part, const char *label)
942 EINA_SAFETY_ON_NULL_RETURN(obj);
943 elm_widget_text_part_set(obj, part, label);
947 elm_object_part_text_get(const Evas_Object *obj, const char *part)
949 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
950 return elm_widget_text_part_get(obj, part);
954 elm_object_domain_translatable_text_part_set(Evas_Object *obj, const char *part, const char *domain, const char *text)
956 EINA_SAFETY_ON_NULL_RETURN(obj);
957 elm_widget_domain_translatable_text_part_set(obj, part, domain, text);
961 elm_object_translatable_text_part_get(const Evas_Object *obj, const char *part)
963 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
964 return elm_widget_translatable_text_part_get(obj, part);
968 elm_object_part_content_set(Evas_Object *obj, const char *part, Evas_Object *content)
970 EINA_SAFETY_ON_NULL_RETURN(obj);
971 elm_widget_content_part_set(obj, part, content);
975 elm_object_content_part_set(Evas_Object *obj, const char *part, Evas_Object *content)
977 EINA_SAFETY_ON_NULL_RETURN(obj);
978 elm_widget_content_part_set(obj, part, content);
983 elm_object_part_content_get(const Evas_Object *obj, const char *part)
985 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
986 return elm_widget_content_part_get(obj, part);
990 elm_object_content_part_get(const Evas_Object *obj, const char *part)
992 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
993 return elm_widget_content_part_get(obj, part);
997 elm_object_part_content_unset(Evas_Object *obj, const char *part)
999 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1000 return elm_widget_content_part_unset(obj, part);
1005 elm_object_content_part_unset(Evas_Object *obj, const char *part)
1007 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1008 return elm_widget_content_part_unset(obj, part);
1014 return _elm_config->scale;
1018 elm_scale_set(double scale)
1020 if (_elm_config->scale == scale) return;
1021 _elm_config->scale = scale;
1026 elm_scale_all_set(double scale)
1028 elm_scale_set(scale);
1029 _elm_config_all_update();
1033 elm_password_show_last_get(void)
1035 return _elm_config->password_show_last;
1039 elm_password_show_last_set(Eina_Bool password_show_last)
1041 if (_elm_config->password_show_last == password_show_last) return;
1042 _elm_config->password_show_last = password_show_last;
1043 edje_password_show_last_set(_elm_config->password_show_last);
1047 elm_password_show_last_timeout_get(void)
1049 return _elm_config->password_show_last_timeout;
1053 elm_password_show_last_timeout_set(double password_show_last_timeout)
1055 if (_elm_config->password_show_last_timeout == password_show_last_timeout) return;
1056 _elm_config->password_show_last_timeout = password_show_last_timeout;
1057 edje_password_show_last_timeout_set(_elm_config->password_show_last_timeout);
1061 elm_object_style_set(Evas_Object *obj,
1064 EINA_SAFETY_ON_NULL_RETURN(obj);
1065 elm_widget_style_set(obj, style);
1069 elm_object_style_get(const Evas_Object *obj)
1071 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1072 return elm_widget_style_get(obj);
1076 elm_object_disabled_set(Evas_Object *obj,
1079 EINA_SAFETY_ON_NULL_RETURN(obj);
1080 elm_widget_disabled_set(obj, disabled);
1084 elm_object_disabled_get(const Evas_Object *obj)
1086 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1087 return elm_widget_disabled_get(obj);
1091 elm_config_save(void)
1093 return _elm_config_save();
1097 elm_config_reload(void)
1099 _elm_config_reload();
1103 elm_profile_current_get(void)
1105 return _elm_config_current_profile_get();
1109 elm_profile_dir_get(const char *profile,
1112 return _elm_config_profile_dir_get(profile, is_user);
1116 elm_profile_dir_free(const char *p_dir)
1118 free((void *)p_dir);
1122 elm_profile_list_get(void)
1124 return _elm_config_profiles_list();
1128 elm_profile_list_free(Eina_List *l)
1132 EINA_LIST_FREE(l, dir)
1133 eina_stringshare_del(dir);
1137 elm_profile_set(const char *profile)
1139 EINA_SAFETY_ON_NULL_RETURN(profile);
1140 _elm_config_profile_set(profile);
1144 elm_profile_all_set(const char *profile)
1146 _elm_config_profile_set(profile);
1147 _elm_config_all_update();
1151 elm_engine_current_get(void)
1153 return _elm_config->engine;
1157 elm_engine_set(const char *engine)
1159 EINA_SAFETY_ON_NULL_RETURN(engine);
1161 _elm_config_engine_set(engine);
1164 EAPI const Eina_List *
1165 elm_text_classes_list_get(void)
1167 return _elm_config_text_classes_get();
1171 elm_text_classes_list_free(const Eina_List *list)
1173 _elm_config_text_classes_free((Eina_List *)list);
1176 EAPI const Eina_List *
1177 elm_font_overlay_list_get(void)
1179 return _elm_config_font_overlays_list();
1183 elm_font_overlay_set(const char *text_class,
1185 Evas_Font_Size size)
1187 _elm_config_font_overlay_set(text_class, font, size);
1191 elm_font_overlay_unset(const char *text_class)
1193 _elm_config_font_overlay_remove(text_class);
1197 elm_font_overlay_apply(void)
1199 _elm_config_font_overlay_apply();
1203 elm_font_overlay_all_apply(void)
1205 elm_font_overlay_apply();
1206 _elm_config_all_update();
1209 EAPI Elm_Font_Properties *
1210 elm_font_properties_get(const char *font)
1212 EINA_SAFETY_ON_NULL_RETURN_VAL(font, NULL);
1213 return _elm_font_properties_get(NULL, font);
1217 elm_font_properties_free(Elm_Font_Properties *efp)
1221 EINA_SAFETY_ON_NULL_RETURN(efp);
1222 EINA_LIST_FREE(efp->styles, str)
1223 if (str) eina_stringshare_del(str);
1224 if (efp->name) eina_stringshare_del(efp->name);
1229 elm_font_fontconfig_name_get(const char *name,
1234 EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL);
1235 if (!style || style[0] == 0) return eina_stringshare_add(name);
1236 snprintf(buf, 256, "%s" ELM_FONT_TOKEN_STYLE "%s", name, style);
1237 return eina_stringshare_add(buf);
1241 elm_font_fontconfig_name_free(const char *name)
1243 eina_stringshare_del(name);
1247 elm_font_available_hash_add(Eina_List *list)
1249 Eina_Hash *font_hash;
1255 /* populate with default font families */
1256 font_hash = _elm_font_available_hash_add(font_hash, "Sans:style=Regular");
1257 font_hash = _elm_font_available_hash_add(font_hash, "Sans:style=Bold");
1258 font_hash = _elm_font_available_hash_add(font_hash, "Sans:style=Oblique");
1259 font_hash = _elm_font_available_hash_add(font_hash,
1260 "Sans:style=Bold Oblique");
1262 font_hash = _elm_font_available_hash_add(font_hash, "Serif:style=Regular");
1263 font_hash = _elm_font_available_hash_add(font_hash, "Serif:style=Bold");
1264 font_hash = _elm_font_available_hash_add(font_hash, "Serif:style=Oblique");
1265 font_hash = _elm_font_available_hash_add(font_hash,
1266 "Serif:style=Bold Oblique");
1268 font_hash = _elm_font_available_hash_add(font_hash,
1269 "Monospace:style=Regular");
1270 font_hash = _elm_font_available_hash_add(font_hash,
1271 "Monospace:style=Bold");
1272 font_hash = _elm_font_available_hash_add(font_hash,
1273 "Monospace:style=Oblique");
1274 font_hash = _elm_font_available_hash_add(font_hash,
1275 "Monospace:style=Bold Oblique");
1277 EINA_LIST_FOREACH(list, l, key)
1278 font_hash = _elm_font_available_hash_add(font_hash, key);
1284 elm_font_available_hash_del(Eina_Hash *hash)
1286 _elm_font_available_hash_del(hash);
1290 elm_finger_size_get(void)
1292 return _elm_config->finger_size;
1296 elm_finger_size_set(Evas_Coord size)
1298 if (_elm_config->finger_size == size) return;
1299 _elm_config->finger_size = size;
1304 elm_finger_size_all_set(Evas_Coord size)
1306 elm_finger_size_set(size);
1307 _elm_config_all_update();
1311 elm_coords_finger_size_adjust(int times_w,
1316 if ((w) && (*w < (_elm_config->finger_size * times_w)))
1317 *w = _elm_config->finger_size * times_w;
1318 if ((h) && (*h < (_elm_config->finger_size * times_h)))
1319 *h = _elm_config->finger_size * times_h;
1328 edje_file_cache_flush();
1329 edje_collection_cache_flush();
1331 EINA_LIST_FOREACH(_elm_win_list, l, obj)
1333 Evas *e = evas_object_evas_get(obj);
1334 evas_image_cache_flush(e);
1335 evas_font_cache_flush(e);
1336 evas_render_dump(e);
1341 elm_cache_flush_interval_get(void)
1343 return _elm_config->cache_flush_poll_interval;
1347 elm_cache_flush_interval_set(int size)
1349 if (_elm_config->cache_flush_poll_interval == size) return;
1350 _elm_config->cache_flush_poll_interval = size;
1356 elm_cache_flush_interval_all_set(int size)
1358 elm_cache_flush_interval_set(size);
1359 _elm_config_all_update();
1363 elm_cache_flush_enabled_get(void)
1365 return _elm_config->cache_flush_enable;
1369 elm_cache_flush_enabled_set(Eina_Bool enabled)
1371 enabled = !!enabled;
1372 if (_elm_config->cache_flush_enable == enabled) return;
1373 _elm_config->cache_flush_enable = enabled;
1379 elm_cache_flush_enabled_all_set(Eina_Bool enabled)
1381 elm_cache_flush_enabled_set(enabled);
1382 _elm_config_all_update();
1386 elm_font_cache_get(void)
1388 return _elm_config->font_cache;
1392 elm_font_cache_set(int size)
1394 if (_elm_config->font_cache == size) return;
1395 _elm_config->font_cache = size;
1401 elm_font_cache_all_set(int size)
1403 elm_font_cache_set(size);
1404 _elm_config_all_update();
1408 elm_image_cache_get(void)
1410 return _elm_config->image_cache;
1414 elm_image_cache_set(int size)
1416 if (_elm_config->image_cache == size) return;
1417 _elm_config->image_cache = size;
1423 elm_image_cache_all_set(int size)
1425 elm_image_cache_set(size);
1426 _elm_config_all_update();
1430 elm_edje_file_cache_get(void)
1432 return _elm_config->edje_cache;
1436 elm_edje_file_cache_set(int size)
1438 if (_elm_config->edje_cache == size) return;
1439 _elm_config->edje_cache = size;
1445 elm_edje_file_cache_all_set(int size)
1447 elm_edje_file_cache_set(size);
1448 _elm_config_all_update();
1452 elm_edje_collection_cache_get(void)
1454 return _elm_config->edje_collection_cache;
1458 elm_edje_collection_cache_set(int size)
1460 if (_elm_config->edje_collection_cache == size) return;
1461 _elm_config->edje_collection_cache = size;
1467 elm_edje_collection_cache_all_set(int size)
1469 elm_edje_collection_cache_set(size);
1470 _elm_config_all_update();
1474 elm_object_focus_get(const Evas_Object *obj)
1476 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1477 return elm_widget_focus_get(obj);
1481 elm_object_focus_set(Evas_Object *obj,
1484 EINA_SAFETY_ON_NULL_RETURN(obj);
1487 if (elm_widget_focus_get(obj)) return;
1488 elm_widget_focus_cycle(obj, ELM_FOCUS_NEXT);
1492 if (!elm_widget_can_focus_get(obj)) return;
1493 elm_widget_focused_object_clear(obj);
1498 elm_object_focus(Evas_Object *obj)
1500 EINA_SAFETY_ON_NULL_RETURN(obj);
1501 elm_object_focus_set(obj, EINA_TRUE);
1505 elm_object_unfocus(Evas_Object *obj)
1507 EINA_SAFETY_ON_NULL_RETURN(obj);
1508 elm_object_focus_set(obj, EINA_FALSE);
1512 elm_object_focus_allow_set(Evas_Object *obj,
1515 EINA_SAFETY_ON_NULL_RETURN(obj);
1516 elm_widget_can_focus_set(obj, enable);
1520 elm_object_focus_allow_get(const Evas_Object *obj)
1522 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1523 return (elm_widget_can_focus_get(obj)) || (elm_widget_child_can_focus_get(obj));
1527 elm_object_focus_custom_chain_set(Evas_Object *obj,
1530 EINA_SAFETY_ON_NULL_RETURN(obj);
1531 elm_widget_focus_custom_chain_set(obj, objs);
1535 elm_object_focus_custom_chain_unset(Evas_Object *obj)
1537 EINA_SAFETY_ON_NULL_RETURN(obj);
1538 elm_widget_focus_custom_chain_unset(obj);
1541 EAPI const Eina_List *
1542 elm_object_focus_custom_chain_get(const Evas_Object *obj)
1544 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1545 return elm_widget_focus_custom_chain_get(obj);
1549 elm_object_focus_custom_chain_append(Evas_Object *obj,
1551 Evas_Object *relative_child)
1553 EINA_SAFETY_ON_NULL_RETURN(obj);
1554 EINA_SAFETY_ON_NULL_RETURN(child);
1555 elm_widget_focus_custom_chain_append(obj, child, relative_child);
1559 elm_object_focus_custom_chain_prepend(Evas_Object *obj,
1561 Evas_Object *relative_child)
1563 EINA_SAFETY_ON_NULL_RETURN(obj);
1564 EINA_SAFETY_ON_NULL_RETURN(child);
1565 elm_widget_focus_custom_chain_prepend(obj, child, relative_child);
1569 elm_object_focus_cycle(Evas_Object *obj,
1570 Elm_Focus_Direction dir)
1572 EINA_SAFETY_ON_NULL_RETURN(obj);
1573 elm_widget_focus_cycle(obj, dir);
1577 elm_object_focus_direction_go(Evas_Object *obj,
1581 EINA_SAFETY_ON_NULL_RETURN(obj);
1582 elm_widget_focus_direction_go(obj, x, y);
1586 elm_object_tree_unfocusable_set(Evas_Object *obj,
1587 Eina_Bool tree_unfocusable)
1589 EINA_SAFETY_ON_NULL_RETURN(obj);
1590 elm_widget_tree_unfocusable_set(obj, tree_unfocusable);
1594 elm_object_tree_unfocusable_get(const Evas_Object *obj)
1596 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1597 return elm_widget_tree_unfocusable_get(obj);
1601 elm_focus_highlight_enabled_get(void)
1603 return _elm_config->focus_highlight_enable;
1607 elm_focus_highlight_enabled_set(Eina_Bool enable)
1609 _elm_config->focus_highlight_enable = !!enable;
1613 elm_focus_highlight_animate_get(void)
1615 return _elm_config->focus_highlight_animate;
1619 elm_focus_highlight_animate_set(Eina_Bool animate)
1621 _elm_config->focus_highlight_animate = !!animate;
1625 elm_scroll_bounce_enabled_get(void)
1627 return _elm_config->thumbscroll_bounce_enable;
1631 elm_scroll_bounce_enabled_set(Eina_Bool enabled)
1633 _elm_config->thumbscroll_bounce_enable = enabled;
1637 elm_scroll_bounce_enabled_all_set(Eina_Bool enabled)
1639 elm_scroll_bounce_enabled_set(enabled);
1640 _elm_config_all_update();
1644 elm_scroll_bounce_friction_get(void)
1646 return _elm_config->thumbscroll_bounce_friction;
1650 elm_scroll_bounce_friction_set(double friction)
1652 _elm_config->thumbscroll_bounce_friction = friction;
1656 elm_scroll_bounce_friction_all_set(double friction)
1658 elm_scroll_bounce_friction_set(friction);
1659 _elm_config_all_update();
1663 elm_scroll_page_scroll_friction_get(void)
1665 return _elm_config->page_scroll_friction;
1669 elm_scroll_page_scroll_friction_set(double friction)
1671 _elm_config->page_scroll_friction = friction;
1675 elm_scroll_page_scroll_friction_all_set(double friction)
1677 elm_scroll_page_scroll_friction_set(friction);
1678 _elm_config_all_update();
1682 elm_scroll_bring_in_scroll_friction_get(void)
1684 return _elm_config->bring_in_scroll_friction;
1688 elm_scroll_bring_in_scroll_friction_set(double friction)
1690 _elm_config->bring_in_scroll_friction = friction;
1694 elm_scroll_bring_in_scroll_friction_all_set(double friction)
1696 elm_scroll_bring_in_scroll_friction_set(friction);
1697 _elm_config_all_update();
1701 elm_scroll_zoom_friction_get(void)
1703 return _elm_config->zoom_friction;
1707 elm_scroll_zoom_friction_set(double friction)
1709 _elm_config->zoom_friction = friction;
1713 elm_scroll_zoom_friction_all_set(double friction)
1715 elm_scroll_zoom_friction_set(friction);
1716 _elm_config_all_update();
1720 elm_scroll_thumbscroll_enabled_get(void)
1722 return _elm_config->thumbscroll_enable;
1726 elm_scroll_thumbscroll_enabled_set(Eina_Bool enabled)
1728 _elm_config->thumbscroll_enable = enabled;
1732 elm_scroll_thumbscroll_enabled_all_set(Eina_Bool enabled)
1734 elm_scroll_thumbscroll_enabled_set(enabled);
1735 _elm_config_all_update();
1739 elm_scroll_thumbscroll_threshold_get(void)
1741 return _elm_config->thumbscroll_threshold;
1745 elm_scroll_thumbscroll_threshold_set(unsigned int threshold)
1747 _elm_config->thumbscroll_threshold = threshold;
1751 elm_scroll_thumbscroll_threshold_all_set(unsigned int threshold)
1753 elm_scroll_thumbscroll_threshold_set(threshold);
1754 _elm_config_all_update();
1758 elm_scroll_thumbscroll_momentum_threshold_get(void)
1760 return _elm_config->thumbscroll_momentum_threshold;
1764 elm_scroll_thumbscroll_momentum_threshold_set(double threshold)
1766 _elm_config->thumbscroll_momentum_threshold = threshold;
1770 elm_scroll_thumbscroll_momentum_threshold_all_set(double threshold)
1772 elm_scroll_thumbscroll_momentum_threshold_set(threshold);
1773 _elm_config_all_update();
1777 elm_scroll_thumbscroll_friction_get(void)
1779 return _elm_config->thumbscroll_friction;
1783 elm_scroll_thumbscroll_friction_set(double friction)
1785 _elm_config->thumbscroll_friction = friction;
1789 elm_scroll_thumbscroll_friction_all_set(double friction)
1791 elm_scroll_thumbscroll_friction_set(friction);
1792 _elm_config_all_update();
1796 elm_scroll_thumbscroll_border_friction_get(void)
1798 return _elm_config->thumbscroll_border_friction;
1802 elm_scroll_thumbscroll_border_friction_set(double friction)
1804 if (friction < 0.0) friction = 0.0;
1805 if (friction > 1.0) friction = 1.0;
1806 _elm_config->thumbscroll_friction = friction;
1810 elm_scroll_thumbscroll_border_friction_all_set(double friction)
1812 elm_scroll_thumbscroll_border_friction_set(friction);
1813 _elm_config_all_update();
1817 elm_scroll_thumbscroll_sensitivity_friction_get(void)
1819 return _elm_config->thumbscroll_sensitivity_friction;
1823 elm_scroll_thumbscroll_sensitivity_friction_set(double friction)
1825 if (friction < 0.1) friction = 0.1;
1826 if (friction > 1.0) friction = 1.0;
1827 _elm_config->thumbscroll_friction = friction;
1831 elm_scroll_thumbscroll_sensitivity_friction_all_set(double friction)
1833 elm_scroll_thumbscroll_sensitivity_friction_set(friction);
1834 _elm_config_all_update();
1838 elm_object_scroll_hold_push(Evas_Object *obj)
1840 EINA_SAFETY_ON_NULL_RETURN(obj);
1841 elm_widget_scroll_hold_push(obj);
1845 elm_object_scroll_hold_pop(Evas_Object *obj)
1847 EINA_SAFETY_ON_NULL_RETURN(obj);
1848 elm_widget_scroll_hold_pop(obj);
1852 elm_object_scroll_freeze_push(Evas_Object *obj)
1854 EINA_SAFETY_ON_NULL_RETURN(obj);
1855 elm_widget_scroll_freeze_push(obj);
1859 elm_object_scroll_lock_x_set(Evas_Object *obj,
1862 EINA_SAFETY_ON_NULL_RETURN(obj);
1863 elm_widget_drag_lock_x_set(obj, lock);
1867 elm_object_scroll_lock_y_set(Evas_Object *obj,
1870 EINA_SAFETY_ON_NULL_RETURN(obj);
1871 elm_widget_drag_lock_y_set(obj, lock);
1875 elm_object_scroll_lock_x_get(const Evas_Object *obj)
1877 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1878 return elm_widget_drag_lock_x_get(obj);
1882 elm_object_scroll_lock_y_get(const Evas_Object *obj)
1884 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1885 return elm_widget_drag_lock_y_get(obj);
1889 elm_object_scroll_freeze_pop(Evas_Object *obj)
1891 EINA_SAFETY_ON_NULL_RETURN(obj);
1892 elm_widget_scroll_freeze_pop(obj);
1896 elm_object_widget_check(const Evas_Object *obj)
1898 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1899 return elm_widget_is(obj);
1903 elm_object_parent_widget_get(const Evas_Object *obj)
1905 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1906 return elm_widget_parent_widget_get(obj);
1910 elm_object_top_widget_get(const Evas_Object *obj)
1912 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1913 return elm_widget_top_get(obj);
1917 elm_object_widget_type_get(const Evas_Object *obj)
1919 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1920 return elm_widget_type_get(obj);
1924 elm_object_signal_emit(Evas_Object *obj,
1925 const char *emission,
1928 EINA_SAFETY_ON_NULL_RETURN(obj);
1929 elm_widget_signal_emit(obj, emission, source);
1933 elm_object_signal_callback_add(Evas_Object *obj, const char *emission, const char *source, Edje_Signal_Cb func, void *data)
1935 EINA_SAFETY_ON_NULL_RETURN(obj);
1936 EINA_SAFETY_ON_NULL_RETURN(func);
1937 elm_widget_signal_callback_add(obj, emission, source, func, data);
1941 elm_object_signal_callback_del(Evas_Object *obj, const char *emission, const char *source, Edje_Signal_Cb func)
1943 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1944 EINA_SAFETY_ON_NULL_RETURN_VAL(func, NULL);
1945 return elm_widget_signal_callback_del(obj, emission, source, func);
1949 elm_object_event_callback_add(Evas_Object *obj, Elm_Event_Cb func, const void *data)
1951 EINA_SAFETY_ON_NULL_RETURN(obj);
1952 EINA_SAFETY_ON_NULL_RETURN(func);
1953 elm_widget_event_callback_add(obj, func, data);
1957 elm_object_event_callback_del(Evas_Object *obj, Elm_Event_Cb func, const void *data)
1959 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1960 EINA_SAFETY_ON_NULL_RETURN_VAL(func, NULL);
1961 return elm_widget_event_callback_del(obj, func, data);
1965 elm_object_tree_dump(const Evas_Object *top)
1968 elm_widget_tree_dump(top);
1976 elm_object_tree_dot_dump(const Evas_Object *top,
1980 FILE *f = fopen(file, "wb");
1981 elm_widget_tree_dot_dump(top, f);
1991 elm_longpress_timeout_set(double longpress_timeout)
1993 _elm_config->longpress_timeout = longpress_timeout;
1997 elm_longpress_timeout_get(void)
1999 return _elm_config->longpress_timeout;
2003 elm_object_item_object_get(const Elm_Object_Item *it)
2005 return ((Elm_Widget_Item *) it)->widget;
2009 elm_object_item_content_part_set(Elm_Object_Item *it,
2011 Evas_Object *content)
2013 _elm_widget_item_content_part_set((Elm_Widget_Item *) it, part, content);
2017 elm_object_item_content_part_get(const Elm_Object_Item *it,
2020 return _elm_widget_item_content_part_get((Elm_Widget_Item *) it, part);
2024 elm_object_item_content_part_unset(Elm_Object_Item *it, const char *part)
2026 return _elm_widget_item_content_part_unset((Elm_Widget_Item *) it, part);
2030 elm_object_item_text_part_set(Elm_Object_Item *it,
2034 _elm_widget_item_text_part_set((Elm_Widget_Item *) it, part, label);
2038 elm_object_item_text_part_get(const Elm_Object_Item *it, const char *part)
2040 return _elm_widget_item_text_part_get((Elm_Widget_Item *) it, part);
2044 elm_object_access_info_set(Evas_Object *obj, const char *txt)
2046 elm_widget_access_info_set(obj, txt);
2050 elm_object_item_access_info_set(Elm_Object_Item *it, const char *txt)
2052 _elm_widget_item_access_info_set((Elm_Widget_Item *) it, txt);
2056 elm_object_item_data_get(const Elm_Object_Item *it)
2058 return elm_widget_item_data_get(it);
2062 elm_object_item_data_set(Elm_Object_Item *it, void *data)
2064 elm_widget_item_data_set(it, data);
2068 elm_object_item_signal_emit(Elm_Object_Item *it, const char *emission, const char *source)
2070 _elm_widget_item_signal_emit((Elm_Widget_Item *) it, emission, source);
2073 EAPI void elm_object_item_disabled_set(Elm_Object_Item *it, Eina_Bool disabled)
2075 _elm_widget_item_disabled_set((Elm_Widget_Item *) it, disabled);
2078 EAPI Eina_Bool elm_object_item_disabled_get(const Elm_Object_Item *it)
2080 return _elm_widget_item_disabled_get((Elm_Widget_Item *) it);