2 # include "elementary_config.h"
6 # include <dlfcn.h> /* dlopen,dlclose,etc */
9 #ifdef HAVE_CRT_EXTERNS_H
10 # include <crt_externs.h>
19 #include <Elementary.h>
22 #define SEMI_BROKEN_QUICKLAUNCH 1
25 # define LIBEXT ".dll"
30 static Elm_Version _version = { VMAJ, VMIN, VMIC, VREV };
31 static void * _accessibility_currently_highlighted_obj = NULL;
32 EAPI Elm_Version *elm_version = &_version;
35 _elm_dangerous_call_check(const char *call)
40 snprintf(buf, sizeof(buf), "%i.%i.%i.%i", VMAJ, VMIN, VMIC, VREV);
41 eval = getenv("ELM_NO_FINGER_WAGGLING");
42 if ((eval) && (!strcmp(eval, buf)))
44 ERR("ELEMENTARY FINGER WAGGLE!!!!!!!!!!\n"
47 "PLEASE see the API documentation for this function. This call\n"
48 "should almost never be used. Only in very special cases.\n"
50 "To remove this warning please set the environment variable:\n"
51 " ELM_NO_FINGER_WAGGLING\n"
52 "To the value of the Elementary version + revision number. e.g.:\n"
60 static Eina_Bool _elm_signal_exit(void *data,
64 static Eina_Prefix *pfx = NULL;
65 char *_elm_appname = NULL;
66 const char *_elm_data_dir = NULL;
67 const char *_elm_lib_dir = NULL;
68 int _elm_log_dom = -1;
70 EAPI int ELM_EVENT_POLICY_CHANGED = 0;
71 EAPI int ELM_EVENT_PROCESS_BACKGROUND = 0;
72 EAPI int ELM_EVENT_PROCESS_FOREGROUND = 0;
74 static int _elm_init_count = 0;
75 static int _elm_sub_init_count = 0;
76 static int _elm_ql_init_count = 0;
77 static int _elm_policies[ELM_POLICY_LAST];
78 static Ecore_Event_Handler *_elm_exit_handler = NULL;
79 static Eina_Bool quicklaunch_on = 0;
82 _elm_signal_exit(void *data EINA_UNUSED,
83 int ev_type EINA_UNUSED,
87 return ECORE_CALLBACK_PASS_ON;
93 edje_scale_set(_elm_config->scale);
94 _elm_win_rescale(NULL, EINA_FALSE);
95 _elm_ews_wm_rescale(NULL, EINA_FALSE);
98 static Eina_Bool _emotion_inited = EINA_FALSE;
101 _elm_emotion_init(void)
103 if (_emotion_inited) return ;
106 _emotion_inited = EINA_TRUE;
110 _elm_emotion_shutdown(void)
112 if (!_emotion_inited) return ;
115 _emotion_inited = EINA_FALSE;
118 static void *app_mainfunc = NULL;
119 static const char *app_name = NULL;
120 static const char *app_desktop_entry = NULL;
121 static const char *app_domain = NULL;
122 static const char *app_checkfile = NULL;
124 static const char *app_compile_bin_dir = NULL;
125 static const char *app_compile_lib_dir = NULL;
126 static const char *app_compile_data_dir = NULL;
127 static const char *app_compile_locale_dir = NULL;
128 static const char *app_prefix_dir = NULL;
129 static const char *app_bin_dir = NULL;
130 static const char *app_lib_dir = NULL;
131 static const char *app_data_dir = NULL;
132 static const char *app_locale_dir = NULL;
133 static double app_base_scale = 1.0;
135 static Eina_Prefix *app_pfx = NULL;
137 static Ecore_Event_Handler *system_handlers[2] = { NULL, NULL };
144 const char *dirs[4] = { NULL, NULL, NULL, NULL };
145 char *caps = NULL, *p1, *p2;
149 if (!app_domain) return;
151 ecore_app_args_get(&argc, &argv);
152 if (argc < 1) return;
154 dirs[0] = app_compile_bin_dir;
155 dirs[1] = app_compile_lib_dir;
156 dirs[2] = app_compile_data_dir;
157 dirs[3] = app_compile_locale_dir;
159 if (!dirs[0]) dirs[0] = "/usr/local/bin";
160 if (!dirs[1]) dirs[1] = "/usr/local/lib";
163 snprintf(buf, sizeof(buf), "/usr/local/share/%s", app_domain);
166 if (!dirs[3]) dirs[3] = dirs[2];
170 caps = alloca(eina_stringshare_strlen(app_domain) + 1);
171 for (p1 = (char *)app_domain, p2 = caps; *p1; p1++, p2++)
175 app_pfx = eina_prefix_new(argv[0], app_mainfunc, caps, app_domain,
176 app_checkfile, dirs[0], dirs[1], dirs[2], dirs[3]);
180 _prefix_shutdown(void)
182 if (app_pfx) eina_prefix_free(app_pfx);
183 ELM_SAFE_FREE(app_domain, eina_stringshare_del);
184 ELM_SAFE_FREE(app_checkfile, eina_stringshare_del);
185 ELM_SAFE_FREE(app_compile_bin_dir, eina_stringshare_del);
186 ELM_SAFE_FREE(app_compile_lib_dir, eina_stringshare_del);
187 ELM_SAFE_FREE(app_compile_data_dir, eina_stringshare_del);
188 ELM_SAFE_FREE(app_compile_locale_dir, eina_stringshare_del);
190 app_prefix_dir = NULL;
194 app_locale_dir = NULL;
201 void (*shutdown)(void);
202 Eina_Bool (*app_connect)(const char *appname);
206 #define _CLOUSEAU_LOAD_SYMBOL(cls_struct, sym) \
209 (cls_struct).sym = eina_module_symbol_get((cls_struct).handle, "clouseau_" #sym); \
210 if (!(cls_struct).sym) \
212 WRN("Failed loading symbol '%s' from the clouseau library.", "clouseau_" #sym); \
213 eina_module_free((cls_struct).handle); \
214 (cls_struct).handle = NULL; \
221 _elm_clouseau_unload()
223 if (!_clouseau_info.is_init)
226 if (_clouseau_info.shutdown)
228 _clouseau_info.shutdown();
231 if (_clouseau_info.handle)
233 eina_module_free(_clouseau_info.handle);
234 _clouseau_info.handle = NULL;
237 _clouseau_info.is_init = EINA_FALSE;
241 _elm_clouseau_reload()
243 if (!_elm_config->clouseau_enable)
245 _elm_clouseau_unload();
249 if (_clouseau_info.is_init)
252 _clouseau_info.handle = eina_module_new(
253 PACKAGE_LIB_DIR "/libclouseau" LIBEXT);
254 if (!eina_module_load(_clouseau_info.handle))
256 WRN("Failed loading the clouseau library.");
257 eina_module_free(_clouseau_info.handle);
258 _clouseau_info.handle = NULL;
262 _CLOUSEAU_LOAD_SYMBOL(_clouseau_info, init);
263 _CLOUSEAU_LOAD_SYMBOL(_clouseau_info, shutdown);
264 _CLOUSEAU_LOAD_SYMBOL(_clouseau_info, app_connect);
266 _clouseau_info.init();
267 if (!_clouseau_info.app_connect(elm_app_name_get()))
269 ERR("Failed connecting to the clouseau server.");
272 _clouseau_info.is_init = EINA_TRUE;
277 Eina_Bool _sys_memory_changed(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
279 Ecore_Memory_State state = ecore_memory_state_get();
281 if (state != ECORE_MEMORY_STATE_LOW)
282 return ECORE_CALLBACK_PASS_ON;
284 elm_cache_all_flush();
285 return ECORE_CALLBACK_PASS_ON;
288 Eina_Bool _sys_lang_changed(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
292 lang = getenv("LANG");
294 lang = getenv("LC_MESSAGES");
296 lang = getenv("LC_ALL");
299 elm_language_set(lang);
301 ERR("Language not set in environment");
303 return ECORE_CALLBACK_PASS_ON;
311 //TIZEN_ONLY(20160628): Add Performance log for cold booting
313 traceBegin(TTRACE_TAG_EFL, "elm_init");
318 if (_elm_init_count > 1)
320 //TIZEN_ONLY(20160628): Add Performance log for cold booting
322 traceEnd(TTRACE_TAG_EFL);
325 return _elm_init_count;
327 elm_quicklaunch_init(argc, argv);
328 elm_quicklaunch_sub_init(argc, argv);
331 system_handlers[0] = ecore_event_handler_add(ECORE_EVENT_MEMORY_STATE, _sys_memory_changed, NULL);
332 system_handlers[1] = ecore_event_handler_add(ECORE_EVENT_LOCALE_CHANGED, _sys_lang_changed, NULL);
333 _accessibility_currently_highlighted_obj = NULL;
335 //TIZEN_ONLY(20160628): Add Performance log for cold booting
337 traceEnd(TTRACE_TAG_EFL);
341 return _elm_init_count;
347 if (_elm_init_count <= 0)
352 if (_elm_init_count > 0) return _elm_init_count;
354 //TIZEN_ONLY(20170413) Handle exception calling elm_shutdown without elm_exit
355 if (_elm_config->atspi_mode != ELM_ATSPI_MODE_OFF)
356 _elm_atspi_bridge_shutdown();
359 ecore_event_handler_del(system_handlers[0]);
360 ecore_event_handler_del(system_handlers[1]);
364 while (_elm_win_deferred_free) ecore_main_loop_iterate();
366 _elm_clouseau_unload();
368 // _prefix_shutdown();
369 ELM_SAFE_FREE(app_name, eina_stringshare_del);
370 ELM_SAFE_FREE(app_desktop_entry, eina_stringshare_del);
372 elm_quicklaunch_sub_shutdown();
373 elm_quicklaunch_shutdown();
374 return _elm_init_count;
378 elm_app_info_set(void *mainfunc, const char *dom, const char *checkfile)
380 app_mainfunc = mainfunc;
381 eina_stringshare_replace(&app_domain, dom);
382 eina_stringshare_replace(&app_checkfile, checkfile);
386 elm_app_name_set(const char *name)
388 eina_stringshare_replace(&app_name, name);
392 elm_app_desktop_entry_set(const char *path)
394 eina_stringshare_replace(&app_desktop_entry, path);
398 elm_app_compile_bin_dir_set(const char *dir)
400 eina_stringshare_replace(&app_compile_bin_dir, dir);
404 elm_app_compile_lib_dir_set(const char *dir)
406 eina_stringshare_replace(&app_compile_lib_dir, dir);
410 elm_app_compile_data_dir_set(const char *dir)
412 eina_stringshare_replace(&app_compile_data_dir, dir);
416 elm_app_compile_locale_set(const char *dir)
418 eina_stringshare_replace(&app_compile_locale_dir, dir);
422 elm_app_name_get(void)
424 if (app_name) return app_name;
430 elm_app_desktop_entry_get(void)
432 if (app_desktop_entry) return app_desktop_entry;
438 elm_app_prefix_dir_get(void)
440 if (app_prefix_dir) return app_prefix_dir;
442 if (!app_pfx) return "";
443 app_prefix_dir = eina_prefix_get(app_pfx);
444 return app_prefix_dir;
448 elm_app_bin_dir_get(void)
450 if (app_bin_dir) return app_bin_dir;
452 if (!app_pfx) return "";
453 app_bin_dir = eina_prefix_bin_get(app_pfx);
458 elm_app_lib_dir_get(void)
460 if (app_lib_dir) return app_lib_dir;
462 if (!app_pfx) return "";
463 app_lib_dir = eina_prefix_lib_get(app_pfx);
468 elm_app_data_dir_get(void)
470 if (app_data_dir) return app_data_dir;
472 if (!app_pfx) return "";
473 app_data_dir = eina_prefix_data_get(app_pfx);
478 elm_app_locale_dir_get(void)
480 if (app_locale_dir) return app_locale_dir;
482 if (!app_pfx) return "";
483 app_locale_dir = eina_prefix_locale_get(app_pfx);
484 return app_locale_dir;
488 elm_app_base_scale_set(double base_scale)
490 if (base_scale < 0.0) return;
491 if (fabs(base_scale) < DBL_EPSILON) return;
492 app_base_scale = base_scale;
496 elm_app_base_scale_get(void)
498 if (app_base_scale > 0.0) return app_base_scale;
502 static Eina_Bool _elm_need_e_dbus = EINA_FALSE;
503 static void *e_dbus_handle = NULL;
506 elm_need_e_dbus(void)
508 int (*init_func)(void) = NULL;
510 if (_elm_need_e_dbus) return EINA_TRUE;
511 /* We use RTLD_NOLOAD when available, so we are sure to use the 'libeldbus' that was linked to the binary */
513 # define RTLD_NOLOAD RTLD_GLOBAL
515 if (!e_dbus_handle) e_dbus_handle = dlopen("libedbus.so", RTLD_LAZY | RTLD_NOLOAD);
516 if (!e_dbus_handle) e_dbus_handle = dlopen("libedbus.so.1", RTLD_LAZY | RTLD_NOLOAD);
517 if (!e_dbus_handle) return EINA_FALSE;
518 init_func = dlsym(e_dbus_handle, "e_dbus_init");
519 if (!init_func) return EINA_FALSE;
520 _elm_need_e_dbus = EINA_TRUE;
526 _elm_unneed_e_dbus(void)
528 int (*shutdown_func)(void) = NULL;
530 if (!_elm_need_e_dbus) return;
531 shutdown_func = dlsym(e_dbus_handle, "e_dbus_shutdown");
532 if (!shutdown_func) return;
533 _elm_need_e_dbus = EINA_FALSE;
536 dlclose(e_dbus_handle);
537 e_dbus_handle = NULL;
540 static Eina_Bool _elm_need_eldbus = EINA_FALSE;
542 elm_need_eldbus(void)
544 if (_elm_need_eldbus) return EINA_TRUE;
545 _elm_need_eldbus = EINA_TRUE;
551 _elm_unneed_eldbus(void)
553 if (!_elm_need_eldbus) return;
554 _elm_need_eldbus = EINA_FALSE;
559 static Eina_Bool _elm_need_elocation = EINA_FALSE;
562 elm_need_elocation(void)
565 if (_elm_need_elocation) return EINA_TRUE;
566 _elm_need_elocation = EINA_TRUE;
575 _elm_unneed_elocation(void)
578 if (!_elm_need_elocation) return;
579 _elm_need_elocation = EINA_FALSE;
584 static Eina_Bool _elm_need_efreet = EINA_FALSE;
587 elm_need_efreet(void)
589 if (_elm_need_efreet) return EINA_TRUE;
590 if (!efreet_init()) return EINA_FALSE;
591 if (!efreet_mime_init())
596 if (!efreet_trash_init())
598 efreet_mime_shutdown();
602 _elm_need_efreet = EINA_TRUE;
607 list = efreet_icon_extra_list_get();
610 e_user_dir_concat_static(buf, "icons");
611 *list = eina_list_prepend(*list, (void *)eina_stringshare_add(buf));
612 e_prefix_data_concat_static(buf, "data/icons");
613 *list = eina_list_prepend(*list, (void *)eina_stringshare_add(buf));
621 _elm_unneed_efreet(void)
623 if (!_elm_need_efreet) return;
624 _elm_need_efreet = EINA_FALSE;
625 efreet_trash_shutdown();
626 efreet_mime_shutdown();
631 elm_quicklaunch_mode_set(Eina_Bool ql_on)
633 quicklaunch_on = ql_on;
637 elm_quicklaunch_mode_get(void)
639 return quicklaunch_on;
643 elm_quicklaunch_init(int argc,
646 _elm_ql_init_count++;
647 if (_elm_ql_init_count > 1) return _elm_ql_init_count;
649 _elm_log_dom = eina_log_domain_register("elementary", EINA_COLOR_LIGHTBLUE);
652 EINA_LOG_ERR("could not register elementary log domain.");
653 _elm_log_dom = EINA_LOG_DOMAIN_GLOBAL;
660 #ifdef HAVE_ELEMENTARY_EMAP
663 ecore_app_args_set(argc, (const char **)argv);
665 memset(_elm_policies, 0, sizeof(_elm_policies));
666 if (!ELM_EVENT_POLICY_CHANGED)
667 ELM_EVENT_POLICY_CHANGED = ecore_event_type_new();
668 if (!ELM_EVENT_PROCESS_BACKGROUND)
669 ELM_EVENT_PROCESS_BACKGROUND = ecore_event_type_new();
670 if (!ELM_EVENT_PROCESS_FOREGROUND)
671 ELM_EVENT_PROCESS_FOREGROUND = ecore_event_type_new();
673 if (!ecore_file_init())
674 ERR("Elementary cannot init ecore_file");
677 _elm_exit_handler = ecore_event_handler_add(ECORE_EVENT_SIGNAL_EXIT, _elm_signal_exit, NULL);
681 _elm_appname = strdup(ecore_file_file_get(argv[0]));
682 elm_app_name_set(_elm_appname);
685 pfx = eina_prefix_new(argv ? argv[0] : NULL, elm_quicklaunch_init,
686 "ELM", "elementary", "config/profile.cfg",
687 PACKAGE_LIB_DIR, /* don't have a bin dir currently */
693 _elm_data_dir = eina_stringshare_add(eina_prefix_data_get(pfx));
694 _elm_lib_dir = eina_stringshare_add(eina_prefix_lib_get(pfx));
696 if (!_elm_data_dir) _elm_data_dir = eina_stringshare_add("/");
697 if (!_elm_lib_dir) _elm_lib_dir = eina_stringshare_add("/");
699 eina_log_timing(_elm_log_dom,
701 EINA_LOG_STATE_INIT);
705 return _elm_ql_init_count;
709 elm_quicklaunch_sub_init(int argc,
712 _elm_sub_init_count++;
713 if (_elm_sub_init_count > 1) return _elm_sub_init_count;
717 #ifdef SEMI_BROKEN_QUICKLAUNCH
718 return _elm_sub_init_count;
724 ecore_app_args_set(argc, (const char **)argv);
728 _elm_config_sub_init();
729 ecore_evas_init(); // FIXME: check errors
732 ecore_con_url_init();
735 elm_color_class_init();
737 return _elm_sub_init_count;
741 elm_quicklaunch_sub_shutdown(void)
743 _elm_sub_init_count--;
744 if (_elm_sub_init_count > 0) return _elm_sub_init_count;
747 #ifdef SEMI_BROKEN_QUICKLAUNCH
748 return _elm_sub_init_count;
754 _elm_module_shutdown();
755 _elm_prefs_shutdown();
756 _elm_ews_wm_shutdown();
757 ecore_con_url_shutdown();
758 ecore_con_shutdown();
759 ecore_imf_shutdown();
760 ecore_evas_shutdown();
761 _elm_config_sub_shutdown();
764 return _elm_sub_init_count;
768 elm_quicklaunch_shutdown(void)
770 _elm_ql_init_count--;
771 if (_elm_ql_init_count > 0) return _elm_ql_init_count;
773 eina_log_timing(_elm_log_dom,
775 EINA_LOG_STATE_SHUTDOWN);
777 if (pfx) eina_prefix_free(pfx);
779 ELM_SAFE_FREE(_elm_data_dir, eina_stringshare_del);
780 ELM_SAFE_FREE(_elm_lib_dir, eina_stringshare_del);
781 ELM_SAFE_FREE(_elm_appname, free);
783 _elm_config_shutdown();
784 elm_color_class_shutdown();
786 ELM_SAFE_FREE(_elm_exit_handler, ecore_event_handler_del);
788 _elm_theme_shutdown();
789 _elm_unneed_systray();
790 _elm_unneed_sys_notify();
791 _elm_unneed_efreet();
792 _elm_unneed_e_dbus();
793 _elm_unneed_eldbus();
794 _elm_unneed_elocation();
795 _elm_unneed_ethumb();
796 // TIZEN ONLY(20160811) : elm_web is not supported in tizen
799 ecore_file_shutdown();
801 #ifdef HAVE_ELEMENTARY_EMAP
804 _elm_emotion_shutdown();
810 if ((_elm_log_dom > -1) && (_elm_log_dom != EINA_LOG_DOMAIN_GLOBAL))
812 eina_log_domain_unregister(_elm_log_dom);
817 return _elm_ql_init_count;
821 elm_quicklaunch_seed(void)
823 #ifndef SEMI_BROKEN_QUICKLAUNCH
826 Evas_Object *win, *bg, *bt;
828 win = elm_win_add(NULL, "seed", ELM_WIN_BASIC);
829 bg = elm_bg_add(win);
830 elm_win_resize_object_add(win, bg);
831 evas_object_show(bg);
832 bt = elm_button_add(win);
833 elm_object_text_set(bt, " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~-_=+\\|]}[{;:'\",<.>/?");
834 elm_win_resize_object_add(win, bt);
835 ecore_main_loop_iterate();
836 evas_object_del(win);
837 ecore_main_loop_iterate();
838 # ifdef HAVE_ELEMENTARY_X
839 if (ecore_x_display_get()) ecore_x_sync();
841 ecore_main_loop_iterate();
847 static void *qr_handle = NULL;
849 static int (*qr_main)(int argc,
853 elm_quicklaunch_prepare(int argc,
858 char *exe, *exe2, *p;
861 if (argc <= 0 || argv == NULL) return EINA_FALSE;
863 exe = elm_quicklaunch_exe_path_get(argv[0], cwd);
866 ERR("requested quicklaunch binary '%s' does not exist\n", argv[0]);
870 exe2 = malloc(strlen(exe) + 1 + 7 + strlen(LIBEXT));
872 p = strrchr(exe2, '/');
875 exename = alloca(strlen(p) + 1);
878 strcat(p, "../lib/");
881 if (access(exe2, R_OK | X_OK) != 0)
882 ELM_SAFE_FREE(exe2, free);
884 /* Try linking to executable first. Works with PIE files. */
885 qr_handle = dlopen(exe, RTLD_NOW | RTLD_GLOBAL);
888 INF("dlopen('%s') = %p", exe, qr_handle);
889 qr_main = dlsym(qr_handle, "elm_main");
892 INF("dlsym(%p, 'elm_main') = %p", qr_handle, qr_main);
903 WRN("not quicklauncher capable: '%s'", exe);
909 /* Open companion .so file.
910 * Support for legacy quicklaunch apps with separate library.
912 qr_handle = dlopen(exe2, RTLD_NOW | RTLD_GLOBAL);
915 fprintf(stderr, "dlerr: %s\n", dlerror());
916 WRN("dlopen('%s') failed: %s", exe2, dlerror());
920 INF("dlopen('%s') = %p", exe2, qr_handle);
921 qr_main = dlsym(qr_handle, "elm_main");
922 INF("dlsym(%p, 'elm_main') = %p", qr_handle, qr_main);
925 WRN("not quicklauncher capable: no elm_main in '%s'", exe2);
942 elm_quicklaunch_fork(int argc,
945 void (*postfork_func) (void *data),
958 if (child > 0) return EINA_TRUE;
961 perror("could not fork");
965 if (chdir(cwd) != 0) perror("could not chdir");
966 args = alloca((argc + 1) * sizeof(char *));
967 for (i = 0; i < argc; i++) args[i] = argv[i];
969 WRN("%s not quicklaunch capable, fallback...", argv[0]);
970 execvp(argv[0], args);
971 ERR("failed to execute '%s': %s", argv[0], strerror(errno));
975 if (child > 0) return EINA_TRUE;
978 perror("could not fork");
981 if (postfork_func) postfork_func(postfork_data);
984 eina_main_loop_define();
988 ELM_SAFE_FREE(_elm_appname, free);
989 if ((argv) && (argv[0]))
990 _elm_appname = strdup(ecore_file_file_get(argv[0]));
992 #ifdef SEMI_BROKEN_QUICKLAUNCH
993 ecore_app_args_set(argc, (const char **)argv);
996 _elm_config_sub_init();
997 # ifdef HAVE_ELEMENTARY_X
1000 const char *ev = getenv("ELM_DISPLAY");
1001 Eina_Bool have_display = !!getenv("DISPLAY");
1003 if (ev) /* If ELM_DISPLAY is specified */
1005 if (!strcmp(ev, "x11")) /* and it is X11 */
1007 if (!have_display) /* if there is no $DISPLAY */
1009 ERR("$ELM_DISPLAY is set to x11 but $DISPLAY"
1011 init_x = EINA_FALSE;
1013 else /* if there is */
1017 init_x = EINA_FALSE;
1019 else /* ELM_DISPLAY not specified */
1021 if (have_display) /* If there is a $DISPLAY */
1023 else /* No $DISPLAY */
1024 init_x = EINA_FALSE;
1030 ecore_evas_init(); // FIXME: check errors
1036 if (chdir(cwd) != 0) perror("could not chdir");
1037 ecore_app_args_set(argc, (const char **)argv);
1038 if (_elm_config->atspi_mode != ELM_ATSPI_MODE_OFF)
1039 _elm_atspi_bridge_init();
1040 ret = qr_main(argc, argv);
1048 (void)postfork_func;
1049 (void)postfork_data;
1054 elm_quicklaunch_cleanup(void)
1067 elm_quicklaunch_fallback(int argc,
1072 elm_quicklaunch_init(argc, argv);
1073 elm_quicklaunch_sub_init(argc, argv);
1074 elm_quicklaunch_prepare(argc, argv, getcwd(cwd, sizeof(cwd)));
1075 ret = qr_main(argc, argv);
1081 elm_quicklaunch_exe_path_get(const char *exe, const char *cwd)
1083 static char *path = NULL;
1084 static Eina_List *pathlist = NULL;
1085 const char *pathitr;
1088 if (exe[0] == '/') return strdup(exe);
1090 pathlist = eina_list_append(pathlist, eina_stringshare_add(cwd));
1093 if ((exe[0] == '.') && (exe[1] == '/')) return strdup(exe);
1094 if ((exe[0] == '.') && (exe[1] == '.') && (exe[2] == '/')) return strdup(exe);
1100 path = getenv("PATH");
1101 buf2 = alloca(strlen(path) + 1);
1106 if ((*p == ':') || (!*p))
1111 strncpy(buf2, pp, len);
1113 pathlist = eina_list_append(pathlist, eina_stringshare_add(buf2));
1125 EINA_LIST_FOREACH(pathlist, l, pathitr)
1127 snprintf(buf, sizeof(buf), "%s/%s", pathitr, exe);
1128 if (!access(buf, R_OK | X_OK)) return strdup(buf);
1136 if (_elm_config->atspi_mode != ELM_ATSPI_MODE_OFF)
1137 _elm_atspi_bridge_init();
1138 ecore_main_loop_begin();
1144 if (_elm_config->atspi_mode != ELM_ATSPI_MODE_OFF)
1145 _elm_atspi_bridge_shutdown();
1147 ecore_main_loop_quit();
1149 if (elm_policy_get(ELM_POLICY_EXIT) == ELM_POLICY_EXIT_WINDOWS_DEL)
1151 Eina_List *l, *l_next;
1154 EINA_LIST_FOREACH_SAFE(_elm_win_list, l, l_next, win)
1155 evas_object_del(win);
1159 //FIXME: Use Elm_Policy Parameter when 2.0 is released.
1161 elm_policy_set(unsigned int policy,
1164 Elm_Event_Policy_Changed *ev;
1166 if (policy >= ELM_POLICY_LAST)
1169 if (value == _elm_policies[policy])
1172 /* TODO: validate policy? */
1174 ev = malloc(sizeof(*ev));
1175 ev->policy = policy;
1176 ev->new_value = value;
1177 ev->old_value = _elm_policies[policy];
1179 _elm_policies[policy] = value;
1181 ecore_event_add(ELM_EVENT_POLICY_CHANGED, ev, NULL, NULL);
1186 //FIXME: Use Elm_Policy Parameter when 2.0 is released.
1188 elm_policy_get(unsigned int policy)
1190 if (policy >= ELM_POLICY_LAST)
1192 return _elm_policies[policy];
1196 elm_language_set(const char *lang)
1198 setlocale(LC_ALL, lang);
1199 evas_language_reinit();
1200 _elm_win_translate();
1204 elm_object_mirrored_get(const Evas_Object *obj)
1206 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1207 return elm_widget_mirrored_get(obj);
1211 elm_object_mirrored_set(Evas_Object *obj, Eina_Bool mirrored)
1213 EINA_SAFETY_ON_NULL_RETURN(obj);
1214 elm_widget_mirrored_set(obj, mirrored);
1218 elm_object_mirrored_automatic_get(const Evas_Object *obj)
1220 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1221 return elm_widget_mirrored_automatic_get(obj);
1225 elm_object_mirrored_automatic_set(Evas_Object *obj, Eina_Bool automatic)
1227 EINA_SAFETY_ON_NULL_RETURN(obj);
1228 elm_widget_mirrored_automatic_set(obj, automatic);
1236 elm_object_scale_set(Evas_Object *obj,
1239 EINA_SAFETY_ON_NULL_RETURN(obj);
1240 elm_widget_scale_set(obj, scale);
1244 elm_object_scale_get(const Evas_Object *obj)
1246 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, 0.0);
1247 return elm_widget_scale_get(obj);
1251 elm_object_part_text_set(Evas_Object *obj, const char *part, const char *label)
1253 EINA_SAFETY_ON_NULL_RETURN(obj);
1254 elm_widget_part_text_set(obj, part, label);
1258 elm_object_part_text_get(const Evas_Object *obj, const char *part)
1260 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1261 return elm_widget_part_text_get(obj, part);
1265 elm_object_domain_translatable_part_text_set(Evas_Object *obj, const char *part, const char *domain, const char *text)
1267 EINA_SAFETY_ON_NULL_RETURN(obj);
1268 elm_widget_domain_translatable_part_text_set(obj, part, domain, text);
1272 elm_object_translatable_part_text_get(const Evas_Object *obj, const char *part)
1274 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1275 return elm_widget_translatable_part_text_get(obj, part);
1279 elm_object_domain_part_text_translatable_set(Evas_Object *obj, const char *part, const char *domain, Eina_Bool translatable)
1281 EINA_SAFETY_ON_NULL_RETURN(obj);
1282 elm_widget_domain_part_text_translatable_set(obj, part, domain, translatable);
1285 EINA_DEPRECATED EAPI void
1286 elm_object_domain_translatable_text_part_set(Evas_Object *obj, const char *part, const char *domain, const char *text)
1288 elm_object_domain_translatable_part_text_set(obj, part, domain, text);
1291 EINA_DEPRECATED EAPI const char *
1292 elm_object_translatable_text_part_get(const Evas_Object *obj, const char *part)
1294 return elm_object_translatable_part_text_get(obj, part);
1298 elm_object_part_content_set(Evas_Object *obj, const char *part, Evas_Object *content)
1300 EINA_SAFETY_ON_NULL_RETURN(obj);
1301 elm_widget_content_part_set(obj, part, content);
1305 elm_object_part_content_get(const Evas_Object *obj, const char *part)
1307 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1308 return elm_widget_content_part_get(obj, part);
1312 elm_object_part_content_unset(Evas_Object *obj, const char *part)
1314 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1315 return elm_widget_content_part_unset(obj, part);
1319 elm_object_style_set(Evas_Object *obj,
1322 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1323 if (elm_widget_style_set(obj, style))
1329 elm_object_focus_highlight_style_set(Evas_Object *obj,
1332 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1333 return elm_widget_focus_highlight_style_set(obj, style);
1337 elm_object_focus_highlight_style_get(const Evas_Object *obj)
1339 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1340 return elm_widget_focus_highlight_style_get(obj);
1344 elm_object_style_get(const Evas_Object *obj)
1346 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1347 return elm_widget_style_get(obj);
1351 elm_object_disabled_set(Evas_Object *obj,
1354 EINA_SAFETY_ON_NULL_RETURN(obj);
1355 elm_widget_disabled_set(obj, disabled);
1359 elm_object_disabled_get(const Evas_Object *obj)
1361 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1362 return elm_widget_disabled_get(obj);
1366 elm_cache_all_flush(void)
1371 edje_file_cache_flush();
1372 edje_collection_cache_flush();
1374 EINA_LIST_FOREACH(_elm_win_list, l, obj)
1376 Evas *e = evas_object_evas_get(obj);
1377 evas_image_cache_flush(e);
1378 evas_font_cache_flush(e);
1379 evas_render_dump(e);
1384 elm_object_focus_get(const Evas_Object *obj)
1386 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1387 return elm_widget_focus_get(obj);
1391 elm_object_focus_set(Evas_Object *obj,
1394 EINA_SAFETY_ON_NULL_RETURN(obj);
1396 if (elm_widget_is(obj))
1398 if (focus == elm_widget_focus_get(obj)) return;
1400 // ugly, but, special case for inlined windows
1401 if (eo_isa(obj, ELM_WIN_CLASS))
1403 Evas_Object *inlined = elm_win_inlined_image_object_get(obj);
1407 evas_object_focus_set(inlined, focus);
1412 elm_widget_focus_cycle(obj, ELM_FOCUS_NEXT);
1414 elm_widget_focused_object_clear(obj);
1418 evas_object_focus_set(obj, focus);
1423 elm_object_focus_allow_set(Evas_Object *obj,
1426 EINA_SAFETY_ON_NULL_RETURN(obj);
1427 elm_widget_can_focus_set(obj, enable);
1431 elm_object_focus_allow_get(const Evas_Object *obj)
1433 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1434 return (elm_widget_can_focus_get(obj)) || (elm_widget_child_can_focus_get(obj));
1438 elm_object_focus_custom_chain_set(Evas_Object *obj,
1441 EINA_SAFETY_ON_NULL_RETURN(obj);
1442 elm_widget_focus_custom_chain_set(obj, objs);
1446 elm_object_focus_custom_chain_unset(Evas_Object *obj)
1448 EINA_SAFETY_ON_NULL_RETURN(obj);
1449 elm_widget_focus_custom_chain_unset(obj);
1452 EAPI const Eina_List *
1453 elm_object_focus_custom_chain_get(const Evas_Object *obj)
1455 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1456 return elm_widget_focus_custom_chain_get(obj);
1460 elm_object_focus_custom_chain_append(Evas_Object *obj,
1462 Evas_Object *relative_child)
1464 EINA_SAFETY_ON_NULL_RETURN(obj);
1465 elm_widget_focus_custom_chain_append(obj, child, relative_child);
1469 elm_object_focus_custom_chain_prepend(Evas_Object *obj,
1471 Evas_Object *relative_child)
1473 EINA_SAFETY_ON_NULL_RETURN(obj);
1474 elm_widget_focus_custom_chain_prepend(obj, child, relative_child);
1477 EINA_DEPRECATED EAPI void
1478 elm_object_focus_cycle(Evas_Object *obj,
1479 Elm_Focus_Direction dir)
1481 elm_object_focus_next(obj, dir);
1485 elm_object_focus_next(Evas_Object *obj,
1486 Elm_Focus_Direction dir)
1488 EINA_SAFETY_ON_NULL_RETURN(obj);
1489 elm_widget_focus_cycle(obj, dir);
1493 elm_object_focus_next_object_get(const Evas_Object *obj,
1494 Elm_Focus_Direction dir)
1496 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1497 return elm_widget_focus_next_object_get(obj, dir);
1501 elm_object_focus_next_object_set(Evas_Object *obj,
1503 Elm_Focus_Direction dir)
1505 EINA_SAFETY_ON_NULL_RETURN(obj);
1506 elm_widget_focus_next_object_set(obj, next, dir);
1509 EAPI Elm_Object_Item *
1510 elm_object_focus_next_item_get(const Evas_Object *obj,
1511 Elm_Focus_Direction dir)
1513 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1514 return elm_widget_focus_next_item_get(obj, dir);
1518 elm_object_focus_next_item_set(Evas_Object *obj,
1519 Elm_Object_Item *next_item,
1520 Elm_Focus_Direction dir)
1522 EINA_SAFETY_ON_NULL_RETURN(obj);
1523 elm_widget_focus_next_item_set(obj, next_item, dir);
1527 elm_object_focused_object_get(const Evas_Object *obj)
1529 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1530 return elm_widget_focused_object_get(obj);
1534 elm_object_tree_focus_allow_set(Evas_Object *obj,
1535 Eina_Bool tree_focusable)
1537 EINA_SAFETY_ON_NULL_RETURN(obj);
1538 elm_widget_tree_unfocusable_set(obj, !tree_focusable);
1542 elm_object_tree_focus_allow_get(const Evas_Object *obj)
1544 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1545 return !elm_widget_tree_unfocusable_get(obj);
1549 elm_object_focus_move_policy_set(Evas_Object *obj,
1550 Elm_Focus_Move_Policy policy)
1552 EINA_SAFETY_ON_NULL_RETURN(obj);
1553 elm_widget_focus_move_policy_set(obj, policy);
1556 EAPI Elm_Focus_Move_Policy
1557 elm_object_focus_move_policy_get(const Evas_Object *obj)
1559 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1560 return elm_widget_focus_move_policy_get(obj);
1564 elm_object_focus_move_policy_automatic_get(const Evas_Object *obj)
1566 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1567 return elm_widget_focus_move_policy_automatic_get(obj);
1571 elm_object_focus_move_policy_automatic_set(Evas_Object *obj, Eina_Bool automatic)
1573 EINA_SAFETY_ON_NULL_RETURN(obj);
1574 elm_widget_focus_move_policy_automatic_set(obj, automatic);
1578 elm_object_scroll_hold_push(Evas_Object *obj)
1580 EINA_SAFETY_ON_NULL_RETURN(obj);
1581 elm_widget_scroll_hold_push(obj);
1585 elm_object_scroll_hold_pop(Evas_Object *obj)
1587 EINA_SAFETY_ON_NULL_RETURN(obj);
1588 elm_widget_scroll_hold_pop(obj);
1592 elm_object_scroll_hold_get(const Evas_Object *obj)
1594 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, 0);
1595 return elm_widget_scroll_hold_get(obj);
1599 elm_object_scroll_freeze_push(Evas_Object *obj)
1601 EINA_SAFETY_ON_NULL_RETURN(obj);
1602 elm_widget_scroll_freeze_push(obj);
1606 elm_object_scroll_freeze_pop(Evas_Object *obj)
1608 EINA_SAFETY_ON_NULL_RETURN(obj);
1609 elm_widget_scroll_freeze_pop(obj);
1613 elm_object_scroll_freeze_get(const Evas_Object *obj)
1615 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, 0);
1616 return elm_widget_scroll_freeze_get(obj);
1620 elm_object_scroll_lock_x_set(Evas_Object *obj,
1623 EINA_SAFETY_ON_NULL_RETURN(obj);
1624 elm_widget_drag_lock_x_set(obj, lock);
1628 elm_object_scroll_lock_y_set(Evas_Object *obj,
1631 EINA_SAFETY_ON_NULL_RETURN(obj);
1632 elm_widget_drag_lock_y_set(obj, lock);
1636 elm_object_scroll_lock_x_get(const Evas_Object *obj)
1638 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1639 return elm_widget_drag_lock_x_get(obj);
1643 elm_object_scroll_lock_y_get(const Evas_Object *obj)
1645 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1646 return elm_widget_drag_lock_y_get(obj);
1650 elm_object_scroll_item_loop_enabled_set(Evas_Object *obj,
1653 EINA_SAFETY_ON_NULL_RETURN(obj);
1654 elm_widget_item_loop_enabled_set(obj, enable);
1658 elm_object_scroll_item_loop_enabled_get(const Evas_Object *obj)
1660 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1661 return elm_widget_item_loop_enabled_get(obj);
1664 // TIZEN_ONLY(20150705): Genlist item align feature
1666 elm_object_scroll_item_align_enabled_set(Evas_Object *obj,
1667 Eina_Bool scroll_item_align_enable)
1669 EINA_SAFETY_ON_NULL_RETURN(obj);
1670 elm_widget_scroll_item_align_enabled_set(obj, scroll_item_align_enable);
1674 elm_object_scroll_item_align_enabled_get(const Evas_Object *obj)
1676 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1677 return elm_widget_scroll_item_align_enabled_get(obj);
1681 elm_object_scroll_item_valign_set(Evas_Object *obj,
1682 const char *scroll_item_valign)
1684 EINA_SAFETY_ON_NULL_RETURN(obj);
1685 elm_widget_scroll_item_valign_set(obj, scroll_item_valign);
1689 elm_object_scroll_item_valign_get(const Evas_Object *obj)
1691 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1692 return elm_widget_scroll_item_valign_get(obj);
1697 elm_object_widget_check(const Evas_Object *obj)
1699 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1700 return elm_widget_is(obj);
1704 elm_object_parent_widget_get(const Evas_Object *obj)
1706 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1707 return elm_widget_parent_widget_get(obj);
1711 elm_object_top_widget_get(const Evas_Object *obj)
1713 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1714 return elm_widget_top_get(obj);
1718 elm_object_widget_type_get(const Evas_Object *obj)
1720 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1721 return elm_widget_type_get(obj);
1725 elm_object_signal_emit(Evas_Object *obj,
1726 const char *emission,
1729 EINA_SAFETY_ON_NULL_RETURN(obj);
1730 elm_widget_signal_emit(obj, emission, source);
1734 elm_object_signal_callback_add(Evas_Object *obj, const char *emission, const char *source, Edje_Signal_Cb func, void *data)
1736 EINA_SAFETY_ON_NULL_RETURN(obj);
1737 EINA_SAFETY_ON_NULL_RETURN(func);
1738 elm_widget_signal_callback_add(obj, emission, source, func, data);
1742 elm_object_signal_callback_del(Evas_Object *obj, const char *emission, const char *source, Edje_Signal_Cb func)
1744 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1745 EINA_SAFETY_ON_NULL_RETURN_VAL(func, NULL);
1746 return elm_widget_signal_callback_del(obj, emission, source, func);
1750 elm_object_event_callback_add(Evas_Object *obj, Elm_Event_Cb func, const void *data)
1752 EINA_SAFETY_ON_NULL_RETURN(obj);
1753 EINA_SAFETY_ON_NULL_RETURN(func);
1754 elm_widget_event_callback_add(obj, func, data);
1758 elm_object_event_callback_del(Evas_Object *obj, Elm_Event_Cb func, const void *data)
1760 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1761 EINA_SAFETY_ON_NULL_RETURN_VAL(func, NULL);
1762 return elm_widget_event_callback_del(obj, func, data);
1766 elm_object_tree_dump(const Evas_Object *top)
1769 elm_widget_tree_dump(top);
1777 elm_object_tree_dot_dump(const Evas_Object *top,
1781 FILE *f = fopen(file, "wb");
1782 elm_widget_tree_dot_dump(top, f);
1792 elm_coords_finger_size_adjust(int times_w,
1797 if ((w) && (*w < (elm_config_finger_size_get() * times_w)))
1798 *w = elm_config_finger_size_get() * times_w;
1799 if ((h) && (*h < (elm_config_finger_size_get() * times_h)))
1800 *h = elm_config_finger_size_get() * times_h;
1804 // Object item Eo migration defines, will be removed later
1805 #define IF_EO_DO(obj, func) \
1806 if (eo_isa(obj, ELM_WIDGET_ITEM_CLASS)) \
1808 eo_do (obj, func); \
1812 #define IF_EO_RETURN(obj, type, func) \
1813 if (eo_isa(obj, ELM_WIDGET_ITEM_CLASS)) \
1816 eo_do (obj, ret = func); \
1821 elm_object_access_info_set(Evas_Object *obj, const char *txt)
1823 elm_widget_access_info_set(obj, txt);
1827 elm_object_access_info_get(Evas_Object *obj)
1829 return elm_widget_access_info_get(obj);
1833 elm_object_name_find(const Evas_Object *obj, const char *name, int recurse)
1835 return elm_widget_name_find(obj, name, recurse);
1839 elm_object_orientation_mode_disabled_set(Evas_Object *obj, Eina_Bool disabled)
1841 elm_widget_orientation_mode_disabled_set(obj, disabled);
1845 elm_object_orientation_mode_disabled_get(const Evas_Object *obj)
1847 return elm_widget_orientation_mode_disabled_get(obj);
1850 EAPI Elm_Object_Item *
1851 elm_object_focused_item_get(const Evas_Object *obj)
1853 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1854 return elm_widget_focused_item_get(obj);
1858 elm_object_focus_region_show_mode_set(Evas_Object *obj, Elm_Focus_Region_Show_Mode mode)
1860 elm_widget_focus_region_show_mode_set(obj, mode);
1863 EAPI Elm_Focus_Region_Show_Mode
1864 elm_object_focus_region_show_mode_get(const Evas_Object *obj)
1866 return elm_widget_focus_region_show_mode_get(obj);
1870 elm_object_part_access_register(Evas_Object *obj, const char *part)
1872 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1873 EINA_SAFETY_ON_NULL_RETURN_VAL(part, NULL);
1874 if (!evas_object_smart_type_check(obj, "elm_layout"))
1876 ERR("Only for parts of a layout, access object can be registered");
1880 Evas_Object *edj = elm_layout_edje_get(obj);
1881 return _elm_access_edje_object_part_object_register(obj, edj, part);
1884 //TIZEN_ONLY(20160726): add API elm_object_part_access_object_get
1885 EAPI Evas_Object *elm_object_part_access_object_get(const Evas_Object *obj, const char *part)
1887 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1888 return elm_widget_part_access_object_get(obj, part);
1893 _elm_object_accessibility_currently_highlighted_get(void)
1895 return _accessibility_currently_highlighted_obj;
1898 //TIZEN_ONLY(20160329): win: add accessibility highlight (d4753268ad02d0c25c16f815003c70b158879ca7)
1900 elm_object_accessibility_highlight_set(void *obj, Eina_Bool visible)
1902 EINA_SAFETY_ON_NULL_RETURN(obj);
1903 Evas_Object *win = NULL;
1904 Evas_Object *target = NULL;
1906 if (eo_isa(obj, ELM_WIDGET_ITEM_CLASS))
1908 Elm_Widget_Item_Data *id = eo_data_scope_get(obj, ELM_WIDGET_ITEM_CLASS);
1914 if (elm_object_widget_check(target))
1915 win = elm_object_top_widget_get(target);
1917 win = elm_object_top_widget_get(elm_object_parent_widget_get(target));
1918 EINA_SAFETY_ON_NULL_RETURN(win);
1920 if (_accessibility_currently_highlighted_obj == (void*)obj)
1923 _accessibility_currently_highlighted_obj = NULL;
1928 _accessibility_currently_highlighted_obj = obj;
1931 if (eo_isa(target, ELM_LAYOUT_CLASS) && elm_widget_access_highlight_in_theme_get(target))
1935 elm_widget_signal_emit(target, "elm,action,access_highlight,show", "elm");
1939 elm_widget_signal_emit(target, "elm,action,access_highlight,hide", "elm");
1944 _elm_win_object_set_accessibility_highlight(win, target, visible);
1949 //TIZEN_ONLY(20161013): clean up elm color class feature
1951 elm_color_class_color_set(const char *color_class, int r, int g, int b, int a)
1953 Eina_Bool int_ret = EINA_FALSE;
1954 int r2 = 0, g2 = 0, b2 = 0, a2 = 0, r3 = 0, g3 = 0, b3 = 0, a3 = 0;
1956 _elm_color_unpremul(a, &r, &g, &b);
1958 edje_color_class_get(color_class, NULL, NULL, NULL, NULL, &r2, &g2, &b2, &a2, &r3, &g3, &b3, &a3);
1959 int_ret = edje_color_class_set(color_class, r, g, b, a, r2, g2, b2, a2, r3, g3, b3, a3);
1965 elm_color_class_color_get(const char *color_class, int *r, int *g, int *b, int *a)
1967 Eina_Bool int_ret = EINA_FALSE;
1970 int_ret = edje_color_class_get(color_class, r, g, b, &alpha, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
1973 _elm_color_premul(alpha, r, g, b);
1979 elm_color_class_color2_set(const char *color_class, int r, int g, int b, int a)
1981 Eina_Bool int_ret = EINA_FALSE;
1982 int r2 = 0, g2 = 0, b2 = 0, a2 = 0, r3 = 0, g3 = 0, b3 = 0, a3 = 0;
1984 _elm_color_unpremul(a, &r, &g, &b);
1986 edje_color_class_get(color_class, &r2, &g2, &b2, &a2, NULL, NULL, NULL, NULL, &r3, &g3, &b3, &a3);
1987 int_ret = edje_color_class_set(color_class, r2, g2, b2, a2, r, g, b, a, r3, g3, b3, a3);
1993 elm_color_class_color2_get(const char *color_class, int *r, int *g, int *b, int *a)
1995 Eina_Bool int_ret = EINA_FALSE;
1998 int_ret = edje_color_class_get(color_class, NULL, NULL, NULL, NULL, r, g, b, &alpha, NULL, NULL, NULL, NULL);
2001 _elm_color_premul(alpha, r, g, b);
2007 elm_color_class_color3_set(const char *color_class, int r, int g, int b, int a)
2009 Eina_Bool int_ret = EINA_FALSE;
2010 int r2 = 0, g2 = 0, b2 = 0, a2 = 0, r3 = 0, g3 = 0, b3 = 0, a3 = 0;
2012 _elm_color_unpremul(a, &r, &g, &b);
2014 edje_color_class_get(color_class, &r2, &g2, &b2, &a2, &r3, &g3, &b3, &a3, NULL, NULL, NULL, NULL);
2015 int_ret = edje_color_class_set(color_class, r2, g2, b2, a2, r3, g3, b3, a3, r, g, b, a);
2021 elm_color_class_color3_get(const char *color_class, int *r, int *g, int *b, int *a)
2023 Eina_Bool int_ret = EINA_FALSE;
2026 int_ret = edje_color_class_get(color_class, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, r, g, b, &alpha);
2029 _elm_color_premul(alpha, r, g, b);
2035 elm_color_class_del(const char *color_class)
2037 edje_color_class_del(color_class);
2041 elm_object_color_class_color_set(Evas_Object *obj, const char *color_class, int r, int g, int b, int a)
2043 Eina_Bool int_ret = EINA_FALSE;
2045 return eo_do_ret(obj, int_ret, elm_obj_widget_class_color_set(color_class, r, g, b, a));
2049 elm_object_color_class_color_get(Evas_Object *obj, const char *color_class, int *r, int *g, int *b, int *a)
2051 Eina_Bool int_ret = EINA_FALSE;
2053 return eo_do_ret(obj, int_ret, elm_obj_widget_class_color_get(color_class, r, g, b, a));
2057 elm_object_color_class_color2_set(Evas_Object *obj, const char *color_class, int r, int g, int b, int a)
2059 Eina_Bool int_ret = EINA_FALSE;
2061 return eo_do_ret(obj, int_ret, elm_obj_widget_class_color2_set(color_class, r, g, b, a));
2065 elm_object_color_class_color2_get(Evas_Object *obj, const char *color_class, int *r, int *g, int *b, int *a)
2067 Eina_Bool int_ret = EINA_FALSE;
2069 return eo_do_ret(obj, int_ret, elm_obj_widget_class_color2_get(color_class, r, g, b, a));
2073 elm_object_color_class_color3_set(Evas_Object *obj, const char *color_class, int r, int g, int b, int a)
2075 Eina_Bool int_ret = EINA_FALSE;
2077 return eo_do_ret(obj, int_ret, elm_obj_widget_class_color3_set(color_class, r, g, b, a));
2081 elm_object_color_class_color3_get(Evas_Object *obj, const char *color_class, int *r, int *g, int *b, int *a)
2083 Eina_Bool int_ret = EINA_FALSE;
2085 return eo_do_ret(obj, int_ret, elm_obj_widget_class_color3_get(color_class, r, g, b, a));
2089 elm_object_color_class_del(Evas_Object *obj, const char *color_class)
2091 eo_do(obj, elm_obj_widget_class_color_del(color_class));
2095 elm_object_color_class_clear(Evas_Object *obj)
2097 eo_do(obj, elm_obj_widget_class_color_clear());