2 # include "elementary_config.h"
6 #include <dlfcn.h> /* dlopen,dlclose,etc */
9 #ifdef HAVE_CRT_EXTERNS_H
10 # include <crt_externs.h>
21 #include <Elementary.h>
24 #define SEMI_BROKEN_QUICKLAUNCH 1
26 static Elm_Version _version = { VMAJ, VMIN, VMIC, VREV };
27 EAPI Elm_Version *elm_version = &_version;
30 _elm_dangerous_call_check(const char *call)
35 snprintf(buf, sizeof(buf), "%i.%i.%i.%i", VMAJ, VMIN, VMIC, VREV);
36 eval = getenv("ELM_NO_FINGER_WAGGLING");
37 if ((eval) && (!strcmp(eval, buf)))
39 printf("ELEMENTARY FINGER WAGGLE!!!!!!!!!!\n"
42 "PLEASE see the API documentation for this function. This call\n"
43 "should almost never be used. Only in very special cases.\n"
45 "To remove this warning please set the environment variable:\n"
46 " ELM_NO_FINGER_WAGGLING\n"
47 "To the value of the Elementary version + revision number. e.g.:\n"
55 static Eina_Bool _elm_signal_exit(void *data,
59 static Eina_Prefix *pfx = NULL;
60 char *_elm_appname = NULL;
61 const char *_elm_data_dir = NULL;
62 const char *_elm_lib_dir = NULL;
63 int _elm_log_dom = -1;
65 EAPI int ELM_EVENT_POLICY_CHANGED = 0;
67 static int _elm_init_count = 0;
68 static int _elm_sub_init_count = 0;
69 static int _elm_ql_init_count = 0;
70 static int _elm_policies[ELM_POLICY_LAST];
71 static Ecore_Event_Handler *_elm_exit_handler = NULL;
72 static Eina_Bool quicklaunch_on = 0;
75 _elm_signal_exit(void *data __UNUSED__,
76 int ev_type __UNUSED__,
80 return ECORE_CALLBACK_PASS_ON;
86 edje_scale_set(_elm_config->scale);
87 _elm_win_rescale(NULL, EINA_FALSE);
88 _elm_ews_wm_rescale(NULL, EINA_FALSE);
91 static Eina_Bool _emotion_inited = EINA_FALSE;
94 _elm_emotion_init(void)
96 if (_emotion_inited) return ;
100 _emotion_inited = EINA_TRUE;
105 _elm_emotion_shutdown(void)
107 if (!_emotion_inited) return ;
111 _emotion_inited = EINA_FALSE;
115 static void *app_mainfunc = NULL;
116 static const char *app_domain = NULL;
117 static const char *app_checkfile = NULL;
119 static const char *app_compile_bin_dir = NULL;
120 static const char *app_compile_lib_dir = NULL;
121 static const char *app_compile_data_dir = NULL;
122 static const char *app_compile_locale_dir = NULL;
123 static const char *app_prefix_dir = NULL;
124 static const char *app_bin_dir = NULL;
125 static const char *app_lib_dir = NULL;
126 static const char *app_data_dir = NULL;
127 static const char *app_locale_dir = NULL;
129 static Eina_Prefix *app_pfx = NULL;
136 const char *dirs[4] = { NULL, NULL, NULL, NULL };
137 char *caps = NULL, *p1, *p2;
141 if (!app_domain) return;
143 ecore_app_args_get(&argc, &argv);
144 if (argc < 1) return;
146 dirs[0] = app_compile_bin_dir;
147 dirs[1] = app_compile_lib_dir;
148 dirs[2] = app_compile_data_dir;
149 dirs[3] = app_compile_locale_dir;
151 if (!dirs[0]) dirs[0] = "/usr/local/bin";
152 if (!dirs[1]) dirs[1] = "/usr/local/lib";
155 snprintf(buf, sizeof(buf), "/usr/local/share/%s", app_domain);
158 if (!dirs[3]) dirs[3] = dirs[2];
162 caps = alloca(strlen(app_domain) + 1);
163 for (p1 = (char *)app_domain, p2 = caps; *p1; p1++, p2++)
167 app_pfx = eina_prefix_new(argv[0], app_mainfunc, caps, app_domain,
168 app_checkfile, dirs[0], dirs[1], dirs[2], dirs[3]);
172 _prefix_shutdown(void)
174 if (app_pfx) eina_prefix_free(app_pfx);
175 if (app_domain) eina_stringshare_del(app_domain);
176 if (app_checkfile) eina_stringshare_del(app_checkfile);
177 if (app_compile_bin_dir) eina_stringshare_del(app_compile_bin_dir);
178 if (app_compile_lib_dir) eina_stringshare_del(app_compile_lib_dir);
179 if (app_compile_data_dir) eina_stringshare_del(app_compile_data_dir);
180 if (app_compile_locale_dir) eina_stringshare_del(app_compile_locale_dir);
181 if (app_prefix_dir) eina_stringshare_del(app_prefix_dir);
182 if (app_bin_dir) eina_stringshare_del(app_bin_dir);
183 if (app_lib_dir) eina_stringshare_del(app_lib_dir);
184 if (app_data_dir) eina_stringshare_del(app_data_dir);
185 if (app_locale_dir) eina_stringshare_del(app_locale_dir);
188 app_checkfile = NULL;
189 app_compile_bin_dir = NULL;
190 app_compile_lib_dir = NULL;
191 app_compile_data_dir = NULL;
192 app_compile_locale_dir = NULL;
193 app_prefix_dir = NULL;
197 app_locale_dir = NULL;
206 if (_elm_init_count > 1) return _elm_init_count;
207 elm_quicklaunch_init(argc, argv);
208 elm_quicklaunch_sub_init(argc, argv);
210 return _elm_init_count;
216 if (_elm_init_count <= 0)
218 ERR("Init count not greater than 0 in shutdown.");
222 if (_elm_init_count > 0) return _elm_init_count;
224 while (_elm_win_deferred_free) ecore_main_loop_iterate();
226 // _prefix_shutdown();
227 elm_quicklaunch_sub_shutdown();
228 elm_quicklaunch_shutdown();
229 return _elm_init_count;
233 elm_app_info_set(void *mainfunc, const char *dom, const char *checkfile)
235 app_mainfunc = mainfunc;
236 eina_stringshare_replace(&app_domain, dom);
237 eina_stringshare_replace(&app_checkfile, checkfile);
241 elm_app_compile_bin_dir_set(const char *dir)
243 eina_stringshare_replace(&app_compile_bin_dir, dir);
247 elm_app_compile_lib_dir_set(const char *dir)
249 eina_stringshare_replace(&app_compile_lib_dir, dir);
253 elm_app_compile_data_dir_set(const char *dir)
255 eina_stringshare_replace(&app_compile_data_dir, dir);
259 elm_app_compile_locale_set(const char *dir)
261 eina_stringshare_replace(&app_compile_locale_dir, dir);
265 elm_app_prefix_dir_get(void)
267 if (app_prefix_dir) return app_prefix_dir;
269 if (!app_pfx) return "";
270 app_prefix_dir = eina_prefix_get(app_pfx);
271 return app_prefix_dir;
275 elm_app_bin_dir_get(void)
277 if (app_bin_dir) return app_bin_dir;
279 if (!app_pfx) return "";
280 app_bin_dir = eina_prefix_bin_get(app_pfx);
285 elm_app_lib_dir_get(void)
287 if (app_lib_dir) return app_lib_dir;
289 if (!app_pfx) return "";
290 app_lib_dir = eina_prefix_lib_get(app_pfx);
295 elm_app_data_dir_get(void)
297 if (app_data_dir) return app_data_dir;
299 if (!app_pfx) return "";
300 app_data_dir = eina_prefix_data_get(app_pfx);
305 elm_app_locale_dir_get(void)
307 if (app_locale_dir) return app_locale_dir;
309 if (!app_pfx) return "";
310 app_locale_dir = eina_prefix_locale_get(app_pfx);
311 return app_locale_dir;
315 static int _elm_need_e_dbus = 0;
318 elm_need_e_dbus(void)
321 if (_elm_need_e_dbus++) return EINA_TRUE;
330 _elm_unneed_e_dbus(void)
333 if (--_elm_need_e_dbus) return;
335 _elm_need_e_dbus = 0;
341 static int _elm_need_efreet = 0;
344 elm_need_efreet(void)
347 if (_elm_need_efreet++) return EINA_TRUE;
355 list = efreet_icon_extra_list_get();
358 e_user_dir_concat_static(buf, "icons");
359 *list = eina_list_prepend(*list, (void *)eina_stringshare_add(buf));
360 e_prefix_data_concat_static(buf, "data/icons");
361 *list = eina_list_prepend(*list, (void *)eina_stringshare_add(buf));
372 _elm_unneed_efreet(void)
375 if (--_elm_need_efreet) return;
377 _elm_need_efreet = 0;
378 efreet_trash_shutdown();
379 efreet_mime_shutdown();
385 elm_quicklaunch_mode_set(Eina_Bool ql_on)
387 quicklaunch_on = ql_on;
391 elm_quicklaunch_mode_get(void)
393 return quicklaunch_on;
397 elm_quicklaunch_init(int argc,
400 _elm_ql_init_count++;
401 if (_elm_ql_init_count > 1) return _elm_ql_init_count;
403 _elm_log_dom = eina_log_domain_register("elementary", EINA_COLOR_LIGHTBLUE);
406 EINA_LOG_ERR("could not register elementary log domain.");
407 _elm_log_dom = EINA_LOG_DOMAIN_GLOBAL;
413 #ifdef HAVE_ELEMENTARY_EMAP
416 ecore_app_args_set(argc, (const char **)argv);
418 memset(_elm_policies, 0, sizeof(_elm_policies));
419 if (!ELM_EVENT_POLICY_CHANGED)
420 ELM_EVENT_POLICY_CHANGED = ecore_event_type_new();
424 _elm_exit_handler = ecore_event_handler_add(ECORE_EVENT_SIGNAL_EXIT, _elm_signal_exit, NULL);
426 if (argv) _elm_appname = strdup(ecore_file_file_get(argv[0]));
428 pfx = eina_prefix_new(argv ? argv[0] : NULL, elm_quicklaunch_init,
429 "ELM", "elementary", "config/profile.cfg",
430 PACKAGE_LIB_DIR, /* don't have a bin dir currently */
436 _elm_data_dir = eina_stringshare_add(eina_prefix_data_get(pfx));
437 _elm_lib_dir = eina_stringshare_add(eina_prefix_lib_get(pfx));
439 if (!_elm_data_dir) _elm_data_dir = eina_stringshare_add("/");
440 if (!_elm_lib_dir) _elm_lib_dir = eina_stringshare_add("/");
442 return _elm_ql_init_count;
446 elm_quicklaunch_sub_init(int argc,
449 _elm_sub_init_count++;
450 if (_elm_sub_init_count > 1) return _elm_sub_init_count;
454 #ifdef SEMI_BROKEN_QUICKLAUNCH
455 return _elm_sub_init_count;
461 ecore_app_args_set(argc, (const char **)argv);
466 _elm_config_sub_init();
467 ecore_evas_init(); // FIXME: check errors
468 #ifdef HAVE_ELEMENTARY_ECORE_IMF
471 #ifdef HAVE_ELEMENTARY_ECORE_CON
473 ecore_con_url_init();
477 return _elm_sub_init_count;
481 elm_quicklaunch_sub_shutdown(void)
483 _elm_sub_init_count--;
484 if (_elm_sub_init_count > 0) return _elm_sub_init_count;
487 #ifdef SEMI_BROKEN_QUICKLAUNCH
488 return _elm_sub_init_count;
494 _elm_module_shutdown();
495 _elm_ews_wm_shutdown();
496 #ifdef HAVE_ELEMENTARY_ECORE_CON
497 ecore_con_url_shutdown();
498 ecore_con_shutdown();
500 #ifdef HAVE_ELEMENTARY_ECORE_IMF
501 ecore_imf_shutdown();
503 ecore_evas_shutdown();
504 _elm_config_sub_shutdown();
505 #define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
506 if (ENGINE_COMPARE(ELM_SOFTWARE_X11) ||
507 ENGINE_COMPARE(ELM_SOFTWARE_16_X11) ||
508 ENGINE_COMPARE(ELM_XRENDER_X11) ||
509 ENGINE_COMPARE(ELM_OPENGL_X11) ||
510 ENGINE_COMPARE(ELM_SOFTWARE_SDL) ||
511 ENGINE_COMPARE(ELM_SOFTWARE_16_SDL) ||
512 ENGINE_COMPARE(ELM_OPENGL_SDL) ||
513 ENGINE_COMPARE(ELM_OPENGL_COCOA) ||
514 ENGINE_COMPARE(ELM_SOFTWARE_WIN32) ||
515 ENGINE_COMPARE(ELM_SOFTWARE_16_WINCE) ||
516 ENGINE_COMPARE(ELM_EWS))
517 #undef ENGINE_COMPARE
518 evas_cserve_disconnect();
522 return _elm_sub_init_count;
526 elm_quicklaunch_shutdown(void)
528 _elm_ql_init_count--;
529 if (_elm_ql_init_count > 0) return _elm_ql_init_count;
530 if (pfx) eina_prefix_free(pfx);
532 eina_stringshare_del(_elm_data_dir);
533 _elm_data_dir = NULL;
534 eina_stringshare_del(_elm_lib_dir);
540 _elm_config_shutdown();
542 ecore_event_handler_del(_elm_exit_handler);
543 _elm_exit_handler = NULL;
545 _elm_theme_shutdown();
546 _elm_unneed_efreet();
547 _elm_unneed_e_dbus();
548 _elm_unneed_ethumb();
550 ecore_file_shutdown();
552 #ifdef HAVE_ELEMENTARY_EMAP
556 _elm_emotion_shutdown();
562 if ((_elm_log_dom > -1) && (_elm_log_dom != EINA_LOG_DOMAIN_GLOBAL))
564 eina_log_domain_unregister(_elm_log_dom);
569 return _elm_ql_init_count;
573 elm_quicklaunch_seed(void)
575 #ifndef SEMI_BROKEN_QUICKLAUNCH
578 Evas_Object *win, *bg, *bt;
580 win = elm_win_add(NULL, "seed", ELM_WIN_BASIC);
581 bg = elm_bg_add(win);
582 elm_win_resize_object_add(win, bg);
583 evas_object_show(bg);
584 bt = elm_button_add(win);
585 elm_object_text_set(bt, " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~-_=+\\|]}[{;:'\",<.>/?");
586 elm_win_resize_object_add(win, bt);
587 ecore_main_loop_iterate();
588 evas_object_del(win);
589 ecore_main_loop_iterate();
590 #define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
591 if (ENGINE_COMPARE(ELM_SOFTWARE_X11) ||
592 ENGINE_COMPARE(ELM_SOFTWARE_16_X11) ||
593 ENGINE_COMPARE(ELM_XRENDER_X11) ||
594 ENGINE_COMPARE(ELM_OPENGL_X11))
595 #undef ENGINE_COMPARE
597 # ifdef HAVE_ELEMENTARY_X
601 ecore_main_loop_iterate();
607 static void *qr_handle = NULL;
609 static int (*qr_main)(int argc,
613 elm_quicklaunch_prepare(int argc,
619 if (argc <= 0 || argv == NULL) return EINA_FALSE;
621 exe = elm_quicklaunch_exe_path_get(argv[0]);
624 ERR("requested quicklaunch binary '%s' does not exist\n", argv[0]);
632 exe2 = malloc(strlen(exe) + 1 + 10);
634 p = strrchr(exe2, '/');
637 exename = alloca(strlen(p) + 1);
640 strcat(p, "../lib/");
643 if (!access(exe2, R_OK | X_OK))
651 qr_handle = dlopen(exe, RTLD_NOW | RTLD_GLOBAL);
654 fprintf(stderr, "dlerr: %s\n", dlerror());
655 WRN("dlopen('%s') failed: %s", exe, dlerror());
659 INF("dlopen('%s') = %p", exe, qr_handle);
660 qr_main = dlsym(qr_handle, "elm_main");
661 INF("dlsym(%p, 'elm_main') = %p", qr_handle, qr_main);
664 WRN("not quicklauncher capable: no elm_main in '%s'", exe);
679 elm_quicklaunch_fork(int argc,
682 void (postfork_func) (void *data),
695 if (child > 0) return EINA_TRUE;
698 perror("could not fork");
702 if (chdir(cwd) != 0) perror("could not chdir");
703 args = alloca((argc + 1) * sizeof(char *));
704 for (i = 0; i < argc; i++) args[i] = argv[i];
706 WRN("%s not quicklaunch capable, fallback...", argv[0]);
707 execvp(argv[0], args);
708 ERR("failed to execute '%s': %s", argv[0], strerror(errno));
712 if (child > 0) return EINA_TRUE;
715 perror("could not fork");
718 if (postfork_func) postfork_func(postfork_data);
724 if (_elm_appname) free(_elm_appname);
726 if ((argv) && (argv[0]))
727 _elm_appname = strdup(ecore_file_file_get(argv[0]));
729 #ifdef SEMI_BROKEN_QUICKLAUNCH
730 ecore_app_args_set(argc, (const char **)argv);
734 _elm_config_sub_init();
735 #define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
736 if (ENGINE_COMPARE(ELM_SOFTWARE_X11) ||
737 ENGINE_COMPARE(ELM_SOFTWARE_16_X11) ||
738 ENGINE_COMPARE(ELM_XRENDER_X11) ||
739 ENGINE_COMPARE(ELM_OPENGL_X11))
740 #undef ENGINE_COMPARE
742 # ifdef HAVE_ELEMENTARY_X
746 ecore_evas_init(); // FIXME: check errors
747 # ifdef HAVE_ELEMENTARY_ECORE_IMF
754 if (chdir(cwd) != 0) perror("could not chdir");
755 ecore_app_args_set(argc, (const char **)argv);
756 ret = qr_main(argc, argv);
770 elm_quicklaunch_cleanup(void)
783 elm_quicklaunch_fallback(int argc,
787 elm_quicklaunch_init(argc, argv);
788 elm_quicklaunch_sub_init(argc, argv);
789 elm_quicklaunch_prepare(argc, argv);
790 ret = qr_main(argc, argv);
796 elm_quicklaunch_exe_path_get(const char *exe)
798 static char *path = NULL;
799 static Eina_List *pathlist = NULL;
803 if (exe[0] == '/') return strdup(exe);
804 if ((exe[0] == '.') && (exe[1] == '/')) return strdup(exe);
805 if ((exe[0] == '.') && (exe[1] == '.') && (exe[2] == '/')) return strdup(exe);
810 path = getenv("PATH");
811 buf2 = alloca(strlen(path) + 1);
816 if ((*p == ':') || (!*p))
821 strncpy(buf2, pp, len);
823 pathlist = eina_list_append(pathlist, eina_stringshare_add(buf2));
835 EINA_LIST_FOREACH(pathlist, l, pathitr)
837 snprintf(buf, sizeof(buf), "%s/%s", pathitr, exe);
838 if (!access(buf, R_OK | X_OK)) return strdup(buf);
846 ecore_main_loop_begin();
852 ecore_main_loop_quit();
854 if (elm_policy_get(ELM_POLICY_EXIT) == ELM_POLICY_EXIT_WINDOWS_DEL)
856 Eina_List *l, *l_next;
859 EINA_LIST_FOREACH_SAFE(_elm_win_list, l, l_next, win)
860 evas_object_del(win);
864 //FIXME: Use Elm_Policy Parameter when 2.0 is released.
866 elm_policy_set(unsigned int policy,
869 Elm_Event_Policy_Changed *ev;
871 if (policy >= ELM_POLICY_LAST)
874 if (value == _elm_policies[policy])
877 /* TODO: validate policy? */
879 ev = malloc(sizeof(*ev));
881 ev->new_value = value;
882 ev->old_value = _elm_policies[policy];
884 _elm_policies[policy] = value;
886 ecore_event_add(ELM_EVENT_POLICY_CHANGED, ev, NULL, NULL);
891 //FIXME: Use Elm_Policy Parameter when 2.0 is released.
893 elm_policy_get(unsigned int policy)
895 if (policy >= ELM_POLICY_LAST)
897 return _elm_policies[policy];
901 elm_language_set(const char *lang)
903 setlocale(LC_ALL, lang);
904 _elm_win_translate();
908 elm_object_mirrored_get(const Evas_Object *obj)
910 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
911 return elm_widget_mirrored_get(obj);
915 elm_object_mirrored_set(Evas_Object *obj, Eina_Bool mirrored)
917 EINA_SAFETY_ON_NULL_RETURN(obj);
918 elm_widget_mirrored_set(obj, mirrored);
922 elm_object_mirrored_automatic_get(const Evas_Object *obj)
924 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
925 return elm_widget_mirrored_automatic_get(obj);
929 elm_object_mirrored_automatic_set(Evas_Object *obj, Eina_Bool automatic)
931 EINA_SAFETY_ON_NULL_RETURN(obj);
932 elm_widget_mirrored_automatic_set(obj, automatic);
940 elm_object_scale_set(Evas_Object *obj,
943 EINA_SAFETY_ON_NULL_RETURN(obj);
944 elm_widget_scale_set(obj, scale);
948 elm_object_scale_get(const Evas_Object *obj)
950 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, 0.0);
951 return elm_widget_scale_get(obj);
955 elm_object_part_text_set(Evas_Object *obj, const char *part, const char *label)
957 EINA_SAFETY_ON_NULL_RETURN(obj);
958 elm_widget_text_part_set(obj, part, label);
962 elm_object_part_text_get(const Evas_Object *obj, const char *part)
964 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
965 return elm_widget_text_part_get(obj, part);
969 elm_object_domain_translatable_part_text_set(Evas_Object *obj, const char *part, const char *domain, const char *text)
971 EINA_SAFETY_ON_NULL_RETURN(obj);
972 elm_widget_domain_translatable_part_text_set(obj, part, domain, text);
976 elm_object_translatable_part_text_get(const Evas_Object *obj, const char *part)
978 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
979 return elm_widget_translatable_part_text_get(obj, part);
983 elm_object_domain_part_text_translatable_set(Evas_Object *obj, const char *part, const char *domain, Eina_Bool translatable)
985 EINA_SAFETY_ON_NULL_RETURN(obj);
986 elm_widget_domain_part_text_translatable_set(obj, part, domain, translatable);
989 EINA_DEPRECATED EAPI void
990 elm_object_domain_translatable_text_part_set(Evas_Object *obj, const char *part, const char *domain, const char *text)
992 elm_object_domain_translatable_part_text_set(obj, part, domain, text);
995 EINA_DEPRECATED EAPI const char *
996 elm_object_translatable_text_part_get(const Evas_Object *obj, const char *part)
998 return elm_object_translatable_part_text_get(obj, part);
1002 elm_object_part_content_set(Evas_Object *obj, const char *part, Evas_Object *content)
1004 EINA_SAFETY_ON_NULL_RETURN(obj);
1005 elm_widget_content_part_set(obj, part, content);
1009 elm_object_part_content_get(const Evas_Object *obj, const char *part)
1011 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1012 return elm_widget_content_part_get(obj, part);
1016 elm_object_part_content_unset(Evas_Object *obj, const char *part)
1018 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1019 return elm_widget_content_part_unset(obj, part);
1023 elm_object_part_access_register(Evas_Object *obj, const char *part)
1025 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1026 EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
1027 if (!evas_object_smart_type_check(obj, "elm_layout"))
1029 ERR("Only for parts of a layout, access object can be registered");
1033 Evas_Object *edj = elm_layout_edje_get(obj);
1034 return _elm_access_edje_object_part_object_register(obj, edj, part);
1038 elm_object_style_set(Evas_Object *obj,
1041 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1042 return elm_widget_style_set(obj, style);
1046 elm_object_style_get(const Evas_Object *obj)
1048 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1049 return elm_widget_style_get(obj);
1053 elm_object_disabled_set(Evas_Object *obj,
1056 EINA_SAFETY_ON_NULL_RETURN(obj);
1057 elm_widget_disabled_set(obj, disabled);
1061 elm_object_disabled_get(const Evas_Object *obj)
1063 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1064 return elm_widget_disabled_get(obj);
1068 elm_cache_all_flush(void)
1073 edje_file_cache_flush();
1074 edje_collection_cache_flush();
1076 EINA_LIST_FOREACH(_elm_win_list, l, obj)
1078 Evas *e = evas_object_evas_get(obj);
1079 evas_image_cache_flush(e);
1080 evas_font_cache_flush(e);
1081 evas_render_dump(e);
1086 elm_object_focus_get(const Evas_Object *obj)
1088 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1089 return elm_widget_focus_get(obj);
1093 elm_object_focus_set(Evas_Object *obj,
1096 EINA_SAFETY_ON_NULL_RETURN(obj);
1098 if (elm_widget_is(obj))
1102 //if the focus_next api of each widget does not use elm_object_focus_set();
1103 //you don't need to check the highlight with elm_widget_highlight_get();
1104 if (focus == elm_widget_focus_get(obj)) return;
1106 // ugly, but, special case for inlined windows
1107 type = evas_object_type_get(obj);
1108 if ((type) && (!strcmp(type, "elm_win")))
1110 Evas_Object *inlined = elm_win_inlined_image_object_get(obj);
1114 evas_object_focus_set(inlined, focus);
1119 elm_widget_focus_cycle(obj, ELM_FOCUS_NEXT);
1121 elm_widget_focused_object_clear(obj);
1125 evas_object_focus_set(obj, focus);
1130 elm_object_focus_allow_set(Evas_Object *obj,
1133 EINA_SAFETY_ON_NULL_RETURN(obj);
1134 elm_widget_can_focus_set(obj, enable);
1135 /*FIXME: According to the elm_object_focus_allow_get(), child_can_focus field
1136 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() */
1140 elm_object_focus_allow_get(const Evas_Object *obj)
1142 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1143 return (elm_widget_can_focus_get(obj)) || (elm_widget_child_can_focus_get(obj));
1147 elm_object_focus_custom_chain_set(Evas_Object *obj,
1150 EINA_SAFETY_ON_NULL_RETURN(obj);
1151 elm_widget_focus_custom_chain_set(obj, objs);
1155 elm_object_focus_custom_chain_unset(Evas_Object *obj)
1157 EINA_SAFETY_ON_NULL_RETURN(obj);
1158 elm_widget_focus_custom_chain_unset(obj);
1161 EAPI const Eina_List *
1162 elm_object_focus_custom_chain_get(const Evas_Object *obj)
1164 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1165 return elm_widget_focus_custom_chain_get(obj);
1169 elm_object_focus_custom_chain_append(Evas_Object *obj,
1171 Evas_Object *relative_child)
1173 EINA_SAFETY_ON_NULL_RETURN(obj);
1174 elm_widget_focus_custom_chain_append(obj, child, relative_child);
1178 elm_object_focus_custom_chain_prepend(Evas_Object *obj,
1180 Evas_Object *relative_child)
1182 EINA_SAFETY_ON_NULL_RETURN(obj);
1183 elm_widget_focus_custom_chain_prepend(obj, child, relative_child);
1186 EINA_DEPRECATED EAPI void
1187 elm_object_focus_cycle(Evas_Object *obj,
1188 Elm_Focus_Direction dir)
1190 elm_object_focus_next(obj, dir);
1194 elm_object_focus_next(Evas_Object *obj,
1195 Elm_Focus_Direction dir)
1197 EINA_SAFETY_ON_NULL_RETURN(obj);
1198 elm_widget_focus_cycle(obj, dir);
1202 elm_object_focus_next_object_get(const Evas_Object *obj,
1203 Elm_Focus_Direction dir)
1205 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1206 return elm_widget_focus_next_object_get(obj, dir);
1210 elm_object_focus_next_object_set(Evas_Object *obj,
1212 Elm_Focus_Direction dir)
1214 EINA_SAFETY_ON_NULL_RETURN(obj);
1215 elm_widget_focus_next_object_set(obj, next, dir);
1219 elm_object_focused_object_get(const Evas_Object *obj)
1221 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1222 return elm_widget_focused_object_get(obj);
1226 elm_object_tree_focus_allow_set(Evas_Object *obj,
1227 Eina_Bool tree_focusable)
1229 EINA_SAFETY_ON_NULL_RETURN(obj);
1230 elm_widget_tree_unfocusable_set(obj, !tree_focusable);
1234 elm_object_tree_focus_allow_get(const Evas_Object *obj)
1236 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1237 return !elm_widget_tree_unfocusable_get(obj);
1241 elm_object_scroll_hold_push(Evas_Object *obj)
1243 EINA_SAFETY_ON_NULL_RETURN(obj);
1244 elm_widget_scroll_hold_push(obj);
1248 elm_object_scroll_hold_pop(Evas_Object *obj)
1250 EINA_SAFETY_ON_NULL_RETURN(obj);
1251 elm_widget_scroll_hold_pop(obj);
1255 elm_object_scroll_hold_get(const Evas_Object *obj)
1257 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, 0);
1258 return elm_widget_scroll_hold_get(obj);
1262 elm_object_scroll_freeze_push(Evas_Object *obj)
1264 EINA_SAFETY_ON_NULL_RETURN(obj);
1265 elm_widget_scroll_freeze_push(obj);
1269 elm_object_scroll_freeze_pop(Evas_Object *obj)
1271 EINA_SAFETY_ON_NULL_RETURN(obj);
1272 elm_widget_scroll_freeze_pop(obj);
1276 elm_object_scroll_freeze_get(const Evas_Object *obj)
1278 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, 0);
1279 return elm_widget_scroll_freeze_get(obj);
1283 elm_object_scroll_lock_x_set(Evas_Object *obj,
1286 EINA_SAFETY_ON_NULL_RETURN(obj);
1287 elm_widget_drag_lock_x_set(obj, lock);
1291 elm_object_scroll_lock_y_set(Evas_Object *obj,
1294 EINA_SAFETY_ON_NULL_RETURN(obj);
1295 elm_widget_drag_lock_y_set(obj, lock);
1299 elm_object_scroll_lock_x_get(const Evas_Object *obj)
1301 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1302 return elm_widget_drag_lock_x_get(obj);
1306 elm_object_scroll_lock_y_get(const Evas_Object *obj)
1308 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1309 return elm_widget_drag_lock_y_get(obj);
1313 elm_object_widget_check(const Evas_Object *obj)
1315 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1316 return elm_widget_is(obj);
1320 elm_object_parent_widget_get(const Evas_Object *obj)
1322 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1323 return elm_widget_parent_widget_get(obj);
1327 elm_object_top_widget_get(const Evas_Object *obj)
1329 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1330 return elm_widget_top_get(obj);
1334 elm_object_widget_type_get(const Evas_Object *obj)
1336 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1337 return elm_widget_type_get(obj);
1341 elm_object_signal_emit(Evas_Object *obj,
1342 const char *emission,
1345 EINA_SAFETY_ON_NULL_RETURN(obj);
1346 elm_widget_signal_emit(obj, emission, source);
1350 elm_object_signal_callback_add(Evas_Object *obj, const char *emission, const char *source, Edje_Signal_Cb func, void *data)
1352 EINA_SAFETY_ON_NULL_RETURN(obj);
1353 EINA_SAFETY_ON_NULL_RETURN(func);
1354 elm_widget_signal_callback_add(obj, emission, source, func, data);
1358 elm_object_signal_callback_del(Evas_Object *obj, const char *emission, const char *source, Edje_Signal_Cb func)
1360 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1361 EINA_SAFETY_ON_NULL_RETURN_VAL(func, NULL);
1362 return elm_widget_signal_callback_del(obj, emission, source, func);
1366 elm_object_event_callback_add(Evas_Object *obj, Elm_Event_Cb func, const void *data)
1368 EINA_SAFETY_ON_NULL_RETURN(obj);
1369 EINA_SAFETY_ON_NULL_RETURN(func);
1370 elm_widget_event_callback_add(obj, func, data);
1374 elm_object_event_callback_del(Evas_Object *obj, Elm_Event_Cb func, const void *data)
1376 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1377 EINA_SAFETY_ON_NULL_RETURN_VAL(func, NULL);
1378 return elm_widget_event_callback_del(obj, func, data);
1382 elm_object_tree_dump(const Evas_Object *top)
1385 elm_widget_tree_dump(top);
1393 elm_object_tree_dot_dump(const Evas_Object *top,
1397 FILE *f = fopen(file, "wb");
1398 elm_widget_tree_dot_dump(top, f);
1408 elm_coords_finger_size_adjust(int times_w,
1413 if ((w) && (*w < (elm_config_finger_size_get() * times_w)))
1414 *w = elm_config_finger_size_get() * times_w;
1415 if ((h) && (*h < (elm_config_finger_size_get() * times_h)))
1416 *h = elm_config_finger_size_get() * times_h;
1420 elm_object_item_widget_get(const Elm_Object_Item *it)
1422 return elm_widget_item_widget_get(it);
1426 elm_object_item_part_content_set(Elm_Object_Item *it,
1428 Evas_Object *content)
1430 _elm_widget_item_part_content_set((Elm_Widget_Item *)it, part, content);
1434 elm_object_item_part_content_get(const Elm_Object_Item *it,
1437 return _elm_widget_item_part_content_get((Elm_Widget_Item *)it, part);
1441 elm_object_item_part_content_unset(Elm_Object_Item *it, const char *part)
1443 return _elm_widget_item_part_content_unset((Elm_Widget_Item *)it, part);
1447 elm_object_item_part_text_set(Elm_Object_Item *it,
1451 _elm_widget_item_part_text_set((Elm_Widget_Item *)it, part, label);
1455 elm_object_item_part_text_get(const Elm_Object_Item *it, const char *part)
1457 return _elm_widget_item_part_text_get((Elm_Widget_Item *)it, part);
1461 elm_object_item_domain_translatable_part_text_set(Elm_Object_Item *it, const char *part, const char *domain, const char *text)
1463 _elm_widget_item_domain_translatable_part_text_set((Elm_Widget_Item *)it, part, domain, text);
1467 elm_object_item_translatable_part_text_get(const Elm_Object_Item *it, const char *part)
1469 return _elm_widget_item_translatable_part_text_get((Elm_Widget_Item *)it, part);
1473 elm_object_item_domain_part_text_translatable_set(Elm_Object_Item *it, const char *part, const char *domain, Eina_Bool translatable)
1475 _elm_widget_item_domain_part_text_translatable_set((Elm_Widget_Item *)it, part, domain, translatable);
1479 elm_object_access_info_set(Evas_Object *obj, const char *txt)
1481 elm_widget_access_info_set(obj, txt);
1485 elm_object_name_find(const Evas_Object *obj, const char *name, int recurse)
1487 return elm_widget_name_find(obj, name, recurse);
1491 elm_object_orientation_mode_disabled_set(Evas_Object *obj, Eina_Bool disabled)
1493 elm_widget_orientation_mode_disabled_set(obj, disabled);
1497 elm_object_orientation_mode_disabled_get(const Evas_Object *obj)
1499 return elm_widget_orientation_mode_disabled_get(obj);
1503 elm_object_item_access_info_set(Elm_Object_Item *it, const char *txt)
1505 _elm_widget_item_access_info_set((Elm_Widget_Item *)it, txt);
1509 elm_object_item_part_access_register(Elm_Object_Item *item, const char *part)
1511 EINA_SAFETY_ON_NULL_RETURN_VAL(item, NULL);
1512 EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
1514 Elm_Widget_Item *it = (Elm_Widget_Item *)item;
1516 Evas_Object *parent;
1518 const char *type = elm_widget_type_get(VIEW(item));
1520 if (type && !strcmp(type, "elm_layout"))
1522 edj = elm_layout_edje_get(VIEW(item));
1523 parent = VIEW(item);
1528 parent = WIDGET(item);
1531 elm_object_item_access_unregister(item);
1533 _elm_access_edje_object_part_object_register(parent, edj, part);
1534 return it->access_obj;
1538 elm_object_item_access_register(Elm_Object_Item *item)
1540 Elm_Widget_Item *it;
1542 it = (Elm_Widget_Item *)item;
1544 _elm_access_widget_item_register(it);
1546 if (it) return it->access_obj;
1551 elm_object_item_access_unregister(Elm_Object_Item *item)
1553 _elm_access_widget_item_unregister((Elm_Widget_Item *)item);
1557 elm_object_item_access_object_get(const Elm_Object_Item *item)
1559 if (!item) return NULL;
1560 return ((Elm_Widget_Item *)item)->access_obj;
1564 elm_object_item_access_order_set(Elm_Object_Item *item, Eina_List *objs)
1566 _elm_access_widget_item_access_order_set((Elm_Widget_Item *)item, objs);
1569 EAPI const Eina_List *
1570 elm_object_item_access_order_get(const Elm_Object_Item *item)
1572 return _elm_access_widget_item_access_order_get((Elm_Widget_Item *)item);
1576 elm_object_item_access_order_unset(Elm_Object_Item *item)
1578 _elm_access_widget_item_access_order_unset((Elm_Widget_Item *)item);
1582 elm_object_item_data_get(const Elm_Object_Item *it)
1584 return elm_widget_item_data_get(it);
1588 elm_object_item_data_set(Elm_Object_Item *it, void *data)
1590 elm_widget_item_data_set(it, data);
1594 elm_object_item_signal_emit(Elm_Object_Item *it, const char *emission, const char *source)
1596 _elm_widget_item_signal_emit((Elm_Widget_Item *)it, emission, source);
1600 elm_object_item_signal_callback_add(Elm_Object_Item *it, const char *emission, const char *source, Elm_Object_Item_Signal_Cb func, void *data)
1602 _elm_widget_item_signal_callback_add((Elm_Widget_Item *)it, emission, source, (Elm_Widget_Item_Signal_Cb) func, data);
1606 elm_object_item_signal_callback_del(Elm_Object_Item *it, const char *emission, const char *source, Elm_Object_Item_Signal_Cb func)
1608 return _elm_widget_item_signal_callback_del((Elm_Widget_Item *)it, emission, source, (Elm_Widget_Item_Signal_Cb) func);
1611 EAPI void elm_object_item_disabled_set(Elm_Object_Item *it, Eina_Bool disabled)
1613 _elm_widget_item_disabled_set((Elm_Widget_Item *)it, disabled);
1616 EAPI Eina_Bool elm_object_item_disabled_get(const Elm_Object_Item *it)
1618 return _elm_widget_item_disabled_get((Elm_Widget_Item *)it);
1621 EAPI void elm_object_item_del_cb_set(Elm_Object_Item *it, Evas_Smart_Cb del_cb)
1623 _elm_widget_item_del_cb_set((Elm_Widget_Item *)it, del_cb);
1626 EAPI void elm_object_item_del(Elm_Object_Item *it)
1628 _elm_widget_item_del((Elm_Widget_Item *)it);
1632 elm_object_item_tooltip_text_set(Elm_Object_Item *it, const char *text)
1634 elm_widget_item_tooltip_text_set(it, text);
1638 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)
1640 elm_widget_item_tooltip_content_cb_set(it, func, data, del_cb);
1644 elm_object_item_tooltip_unset(Elm_Object_Item *it)
1646 elm_widget_item_tooltip_unset(it);
1650 elm_object_item_tooltip_window_mode_set(Elm_Object_Item *it, Eina_Bool disable)
1652 return elm_widget_item_tooltip_window_mode_set(it, disable);
1656 elm_object_item_tooltip_window_mode_get(const Elm_Object_Item *it)
1658 return elm_widget_item_tooltip_window_mode_get(it);
1662 elm_object_item_tooltip_style_set(Elm_Object_Item *it, const char *style)
1664 elm_widget_item_tooltip_style_set(it, style);
1668 elm_object_item_tooltip_style_get(const Elm_Object_Item *it)
1670 return elm_widget_item_tooltip_style_get(it);
1674 elm_object_item_cursor_set(Elm_Object_Item *it, const char *cursor)
1676 elm_widget_item_cursor_set(it, cursor);
1680 elm_object_item_cursor_get(const Elm_Object_Item *it)
1682 return elm_widget_item_cursor_get(it);
1686 elm_object_item_cursor_unset(Elm_Object_Item *it)
1688 elm_widget_item_cursor_unset(it);
1692 elm_object_item_cursor_style_set(Elm_Object_Item *it, const char *style)
1694 elm_widget_item_cursor_style_set(it, style);
1698 elm_object_item_cursor_style_get(const Elm_Object_Item *it)
1700 return elm_widget_item_cursor_style_get(it);
1704 elm_object_item_cursor_engine_only_set(Elm_Object_Item *it, Eina_Bool engine_only)
1706 elm_widget_item_cursor_engine_only_set(it, engine_only);
1710 elm_object_item_cursor_engine_only_get(const Elm_Object_Item *it)
1712 return elm_widget_item_cursor_engine_only_get(it);