aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/elementary/src/lib/elm_main.c
diff options
context:
space:
mode:
authorDavid Walter Seikel2012-04-22 09:20:32 +1000
committerDavid Walter Seikel2012-04-22 09:20:32 +1000
commit3ad3455551be0d7859ecb02290376206d5e66498 (patch)
tree497917e12b4d7f458dff9765d9b53f64c4e03fc3 /libraries/elementary/src/lib/elm_main.c
parentUpdate EFL to latest beta. (diff)
downloadSledjHamr-3ad3455551be0d7859ecb02290376206d5e66498.zip
SledjHamr-3ad3455551be0d7859ecb02290376206d5e66498.tar.gz
SledjHamr-3ad3455551be0d7859ecb02290376206d5e66498.tar.bz2
SledjHamr-3ad3455551be0d7859ecb02290376206d5e66498.tar.xz
And actually include new files, plus elementary libraries.
Diffstat (limited to 'libraries/elementary/src/lib/elm_main.c')
-rw-r--r--libraries/elementary/src/lib/elm_main.c1490
1 files changed, 1490 insertions, 0 deletions
diff --git a/libraries/elementary/src/lib/elm_main.c b/libraries/elementary/src/lib/elm_main.c
new file mode 100644
index 0000000..4f860ba
--- /dev/null
+++ b/libraries/elementary/src/lib/elm_main.c
@@ -0,0 +1,1490 @@
1#ifdef HAVE_CONFIG_H
2# include "elementary_config.h"
3#endif
4
5#ifdef HAVE_FORK
6#include <dlfcn.h> /* dlopen,dlclose,etc */
7#endif
8
9#ifdef HAVE_CRT_EXTERNS_H
10# include <crt_externs.h>
11#endif
12
13#ifdef HAVE_EVIL
14# include <Evil.h>
15#endif
16
17#include <Elementary.h>
18#include "elm_priv.h"
19
20#define SEMI_BROKEN_QUICKLAUNCH 1
21
22static Elm_Version _version = { VMAJ, VMIN, VMIC, VREV };
23EAPI Elm_Version *elm_version = &_version;
24
25Eina_Bool
26_elm_dangerous_call_check(const char *call)
27{
28 char buf[256];
29 const char *eval;
30
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)))
34 return 0;
35 printf("ELEMENTARY FINGER WAGGLE!!!!!!!!!!\n"
36 "\n"
37 " %s() used.\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"
40 "\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"
44 " 1.2.5.40295\n"
45 "\n"
46 ,
47 call);
48 return 1;
49}
50
51static Eina_Bool _elm_signal_exit(void *data,
52 int ev_type,
53 void *ev);
54
55static Eina_Prefix *pfx = NULL;
56char *_elm_appname = NULL;
57const char *_elm_data_dir = NULL;
58const char *_elm_lib_dir = NULL;
59int _elm_log_dom = -1;
60
61EAPI int ELM_EVENT_POLICY_CHANGED = 0;
62
63static int _elm_init_count = 0;
64static int _elm_sub_init_count = 0;
65static int _elm_ql_init_count = 0;
66static int _elm_policies[ELM_POLICY_LAST];
67static Ecore_Event_Handler *_elm_exit_handler = NULL;
68static Eina_Bool quicklaunch_on = 0;
69
70static Eina_Bool
71_elm_signal_exit(void *data __UNUSED__,
72 int ev_type __UNUSED__,
73 void *ev __UNUSED__)
74{
75 elm_exit();
76 return ECORE_CALLBACK_PASS_ON;
77}
78
79void
80_elm_rescale(void)
81{
82 edje_scale_set(_elm_config->scale);
83 _elm_win_rescale(NULL, EINA_FALSE);
84 _elm_ews_wm_rescale(NULL, EINA_FALSE);
85}
86
87static void *app_mainfunc = NULL;
88static const char *app_domain = NULL;
89static const char *app_checkfile = NULL;
90
91static const char *app_compile_bin_dir = NULL;
92static const char *app_compile_lib_dir = NULL;
93static const char *app_compile_data_dir = NULL;
94static const char *app_compile_locale_dir = NULL;
95static const char *app_prefix_dir = NULL;
96static const char *app_bin_dir = NULL;
97static const char *app_lib_dir = NULL;
98static const char *app_data_dir = NULL;
99static const char *app_locale_dir = NULL;
100
101static Eina_Prefix *app_pfx = NULL;
102
103static void
104_prefix_check(void)
105{
106 int argc = 0;
107 char **argv = NULL;
108 const char *dirs[4] = { NULL, NULL, NULL, NULL };
109 char *caps = NULL, *p1, *p2;
110 char buf[PATH_MAX];
111
112 if (app_pfx) return;
113 if (!app_domain) return;
114
115 ecore_app_args_get(&argc, &argv);
116 if (argc < 1) return;
117
118 dirs[0] = app_compile_bin_dir;
119 dirs[1] = app_compile_lib_dir;
120 dirs[2] = app_compile_data_dir;
121 dirs[3] = app_compile_locale_dir;
122
123 if (!dirs[0]) dirs[0] = "/usr/local/bin";
124 if (!dirs[1]) dirs[1] = "/usr/local/lib";
125 if (!dirs[2])
126 {
127 snprintf(buf, sizeof(buf), "/usr/local/share/%s", app_domain);
128 dirs[2] = buf;
129 }
130 if (!dirs[3]) dirs[3] = dirs[2];
131
132 if (app_domain)
133 {
134 caps = alloca(strlen(app_domain) + 1);
135 for (p1 = (char *)app_domain, p2 = caps; *p1; p1++, p2++)
136 *p2 = toupper(*p1);
137 *p2 = 0;
138 }
139 app_pfx = eina_prefix_new(argv[0], app_mainfunc, caps, app_domain,
140 app_checkfile, dirs[0], dirs[1], dirs[2], dirs[3]);
141}
142
143static void
144_prefix_shutdown(void)
145{
146 if (app_pfx) eina_prefix_free(app_pfx);
147 if (app_domain) eina_stringshare_del(app_domain);
148 if (app_checkfile) eina_stringshare_del(app_checkfile);
149 if (app_compile_bin_dir) eina_stringshare_del(app_compile_bin_dir);
150 if (app_compile_lib_dir) eina_stringshare_del(app_compile_lib_dir);
151 if (app_compile_data_dir) eina_stringshare_del(app_compile_data_dir);
152 if (app_compile_locale_dir) eina_stringshare_del(app_compile_locale_dir);
153 if (app_prefix_dir) eina_stringshare_del(app_prefix_dir);
154 if (app_bin_dir) eina_stringshare_del(app_bin_dir);
155 if (app_lib_dir) eina_stringshare_del(app_lib_dir);
156 if (app_data_dir) eina_stringshare_del(app_data_dir);
157 if (app_locale_dir) eina_stringshare_del(app_locale_dir);
158 app_mainfunc = NULL;
159 app_domain = NULL;
160 app_checkfile = NULL;
161 app_compile_bin_dir = NULL;
162 app_compile_lib_dir = NULL;
163 app_compile_data_dir = NULL;
164 app_compile_locale_dir = NULL;
165 app_prefix_dir = NULL;
166 app_bin_dir = NULL;
167 app_lib_dir = NULL;
168 app_data_dir = NULL;
169 app_locale_dir = NULL;
170 app_pfx = NULL;
171}
172
173EAPI int
174elm_init(int argc,
175 char **argv)
176{
177 _elm_init_count++;
178 if (_elm_init_count > 1) return _elm_init_count;
179 elm_quicklaunch_init(argc, argv);
180 elm_quicklaunch_sub_init(argc, argv);
181 _prefix_shutdown();
182 return _elm_init_count;
183}
184
185EAPI int
186elm_shutdown(void)
187{
188 _elm_init_count--;
189 if (_elm_init_count > 0) return _elm_init_count;
190 _elm_win_shutdown();
191 while (_elm_win_deferred_free) ecore_main_loop_iterate();
192// wrningz :(
193// _prefix_shutdown();
194 elm_quicklaunch_sub_shutdown();
195 elm_quicklaunch_shutdown();
196 return _elm_init_count;
197}
198
199EAPI void
200elm_app_info_set(void *mainfunc, const char *dom, const char *checkfile)
201{
202 app_mainfunc = mainfunc;
203 eina_stringshare_replace(&app_domain, dom);
204 eina_stringshare_replace(&app_checkfile, checkfile);
205}
206
207EAPI void
208elm_app_compile_bin_dir_set(const char *dir)
209{
210 eina_stringshare_replace(&app_compile_bin_dir, dir);
211}
212
213EAPI void
214elm_app_compile_lib_dir_set(const char *dir)
215{
216 eina_stringshare_replace(&app_compile_lib_dir, dir);
217}
218
219EAPI void
220elm_app_compile_data_dir_set(const char *dir)
221{
222 eina_stringshare_replace(&app_compile_data_dir, dir);
223}
224
225EAPI void
226elm_app_compile_locale_set(const char *dir)
227{
228 eina_stringshare_replace(&app_compile_locale_dir, dir);
229}
230
231EAPI const char *
232elm_app_prefix_dir_get(void)
233{
234 if (app_prefix_dir) return app_prefix_dir;
235 _prefix_check();
236 if (!app_pfx) return "";
237 app_prefix_dir = eina_prefix_get(app_pfx);
238 return app_prefix_dir;
239}
240
241EAPI const char *
242elm_app_bin_dir_get(void)
243{
244 if (app_bin_dir) return app_bin_dir;
245 _prefix_check();
246 if (!app_pfx) return "";
247 app_bin_dir = eina_prefix_bin_get(app_pfx);
248 return app_bin_dir;
249}
250
251EAPI const char *
252elm_app_lib_dir_get(void)
253{
254 if (app_lib_dir) return app_lib_dir;
255 _prefix_check();
256 if (!app_pfx) return "";
257 app_lib_dir = eina_prefix_lib_get(app_pfx);
258 return app_lib_dir;
259}
260
261EAPI const char *
262elm_app_data_dir_get(void)
263{
264 if (app_data_dir) return app_data_dir;
265 _prefix_check();
266 if (!app_pfx) return "";
267 app_data_dir = eina_prefix_data_get(app_pfx);
268 return app_data_dir;
269}
270
271EAPI const char *
272elm_app_locale_dir_get(void)
273{
274 if (app_locale_dir) return app_locale_dir;
275 _prefix_check();
276 if (!app_pfx) return "";
277 app_locale_dir = eina_prefix_locale_get(app_pfx);
278 return app_locale_dir;
279}
280
281#ifdef ELM_EDBUS
282static int _elm_need_e_dbus = 0;
283#endif
284EAPI Eina_Bool
285elm_need_e_dbus(void)
286{
287#ifdef ELM_EDBUS
288 if (_elm_need_e_dbus++) return EINA_TRUE;
289 e_dbus_init();
290 return EINA_TRUE;
291#else
292 return EINA_FALSE;
293#endif
294}
295
296static void
297_elm_unneed_e_dbus(void)
298{
299#ifdef ELM_EDBUS
300 if (--_elm_need_e_dbus) return;
301
302 _elm_need_e_dbus = 0;
303 e_dbus_shutdown();
304#endif
305}
306
307#ifdef ELM_EFREET
308static int _elm_need_efreet = 0;
309#endif
310EAPI Eina_Bool
311elm_need_efreet(void)
312{
313#ifdef ELM_EFREET
314 if (_elm_need_efreet++) return EINA_TRUE;
315 efreet_init();
316 efreet_mime_init();
317 efreet_trash_init();
318 /*
319 {
320 Eina_List **list;
321
322 list = efreet_icon_extra_list_get();
323 if (list)
324 {
325 e_user_dir_concat_static(buf, "icons");
326 *list = eina_list_prepend(*list, (void *)eina_stringshare_add(buf));
327 e_prefix_data_concat_static(buf, "data/icons");
328 *list = eina_list_prepend(*list, (void *)eina_stringshare_add(buf));
329 }
330 }
331 */
332 return EINA_TRUE;
333#else
334 return EINA_FALSE;
335#endif
336}
337
338static void
339_elm_unneed_efreet(void)
340{
341#ifdef ELM_EFREET
342 if (--_elm_need_efreet) return;
343
344 _elm_need_efreet = 0;
345 efreet_trash_shutdown();
346 efreet_mime_shutdown();
347 efreet_shutdown();
348#endif
349}
350
351EAPI void
352elm_quicklaunch_mode_set(Eina_Bool ql_on)
353{
354 quicklaunch_on = ql_on;
355}
356
357EAPI Eina_Bool
358elm_quicklaunch_mode_get(void)
359{
360 return quicklaunch_on;
361}
362
363EAPI int
364elm_quicklaunch_init(int argc,
365 char **argv)
366{
367 _elm_ql_init_count++;
368 if (_elm_ql_init_count > 1) return _elm_ql_init_count;
369 eina_init();
370 _elm_log_dom = eina_log_domain_register("elementary", EINA_COLOR_LIGHTBLUE);
371 if (!_elm_log_dom)
372 {
373 EINA_LOG_ERR("could not register elementary log domain.");
374 _elm_log_dom = EINA_LOG_DOMAIN_GLOBAL;
375 }
376
377 eet_init();
378 ecore_init();
379
380#ifdef HAVE_ELEMENTARY_EMAP
381 emap_init();
382#endif
383 ecore_app_args_set(argc, (const char **)argv);
384
385 memset(_elm_policies, 0, sizeof(_elm_policies));
386 if (!ELM_EVENT_POLICY_CHANGED)
387 ELM_EVENT_POLICY_CHANGED = ecore_event_type_new();
388
389 ecore_file_init();
390
391 _elm_exit_handler = ecore_event_handler_add(ECORE_EVENT_SIGNAL_EXIT, _elm_signal_exit, NULL);
392
393 if (argv) _elm_appname = strdup(ecore_file_file_get(argv[0]));
394
395 pfx = eina_prefix_new(argv ? argv[0] : NULL, elm_quicklaunch_init,
396 "ELM", "elementary", "config/profile.cfg",
397 PACKAGE_LIB_DIR, /* don't have a bin dir currently */
398 PACKAGE_LIB_DIR,
399 PACKAGE_DATA_DIR,
400 LOCALE_DIR);
401 if (pfx)
402 {
403 _elm_data_dir = eina_stringshare_add(eina_prefix_data_get(pfx));
404 _elm_lib_dir = eina_stringshare_add(eina_prefix_lib_get(pfx));
405 }
406 if (!_elm_data_dir) _elm_data_dir = eina_stringshare_add("/");
407 if (!_elm_lib_dir) _elm_lib_dir = eina_stringshare_add("/");
408
409 return _elm_ql_init_count;
410}
411
412EAPI int
413elm_quicklaunch_sub_init(int argc,
414 char **argv)
415{
416 _elm_sub_init_count++;
417 if (_elm_sub_init_count > 1) return _elm_sub_init_count;
418 if (quicklaunch_on)
419 {
420 _elm_config_init();
421#ifdef SEMI_BROKEN_QUICKLAUNCH
422 return _elm_sub_init_count;
423#endif
424 }
425 if (!quicklaunch_on)
426 {
427 ecore_app_args_set(argc, (const char **)argv);
428 evas_init();
429 edje_init();
430 _elm_module_init();
431 _elm_config_init();
432 _elm_config_sub_init();
433 ecore_evas_init(); // FIXME: check errors
434#ifdef HAVE_ELEMENTARY_ECORE_IMF
435 ecore_imf_init();
436#endif
437#ifdef HAVE_ELEMENTARY_ECORE_CON
438 ecore_con_init();
439 ecore_con_url_init();
440#endif
441 _elm_ews_wm_init();
442 }
443 return _elm_sub_init_count;
444}
445
446EAPI int
447elm_quicklaunch_sub_shutdown(void)
448{
449 _elm_sub_init_count--;
450 if (_elm_sub_init_count > 0) return _elm_sub_init_count;
451 if (quicklaunch_on)
452 {
453#ifdef SEMI_BROKEN_QUICKLAUNCH
454 return _elm_sub_init_count;
455#endif
456 }
457 if (!quicklaunch_on)
458 {
459 _elm_win_shutdown();
460 _elm_module_shutdown();
461 _elm_ews_wm_shutdown();
462#ifdef HAVE_ELEMENTARY_ECORE_CON
463 ecore_con_url_shutdown();
464 ecore_con_shutdown();
465#endif
466#ifdef HAVE_ELEMENTARY_ECORE_IMF
467 ecore_imf_shutdown();
468#endif
469 ecore_evas_shutdown();
470 _elm_config_sub_shutdown();
471#define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
472 if (ENGINE_COMPARE(ELM_SOFTWARE_X11) ||
473 ENGINE_COMPARE(ELM_SOFTWARE_16_X11) ||
474 ENGINE_COMPARE(ELM_XRENDER_X11) ||
475 ENGINE_COMPARE(ELM_OPENGL_X11) ||
476 ENGINE_COMPARE(ELM_SOFTWARE_SDL) ||
477 ENGINE_COMPARE(ELM_SOFTWARE_16_SDL) ||
478 ENGINE_COMPARE(ELM_OPENGL_SDL) ||
479 ENGINE_COMPARE(ELM_OPENGL_COCOA) ||
480 ENGINE_COMPARE(ELM_SOFTWARE_WIN32) ||
481 ENGINE_COMPARE(ELM_SOFTWARE_16_WINCE) ||
482 ENGINE_COMPARE(ELM_EWS))
483#undef ENGINE_COMPARE
484 evas_cserve_disconnect();
485 edje_shutdown();
486 evas_shutdown();
487 }
488 return _elm_sub_init_count;
489}
490
491EAPI int
492elm_quicklaunch_shutdown(void)
493{
494 _elm_ql_init_count--;
495 if (_elm_ql_init_count > 0) return _elm_ql_init_count;
496 if (pfx) eina_prefix_free(pfx);
497 pfx = NULL;
498 eina_stringshare_del(_elm_data_dir);
499 _elm_data_dir = NULL;
500 eina_stringshare_del(_elm_lib_dir);
501 _elm_lib_dir = NULL;
502
503 free(_elm_appname);
504 _elm_appname = NULL;
505
506 _elm_config_shutdown();
507
508 ecore_event_handler_del(_elm_exit_handler);
509 _elm_exit_handler = NULL;
510
511 _elm_theme_shutdown();
512 _elm_unneed_efreet();
513 _elm_unneed_e_dbus();
514 _elm_unneed_ethumb();
515 _elm_unneed_web();
516 ecore_file_shutdown();
517
518#ifdef HAVE_ELEMENTARY_EMAP
519 emap_shutdown();
520#endif
521
522 ecore_shutdown();
523 eet_shutdown();
524
525 if ((_elm_log_dom > -1) && (_elm_log_dom != EINA_LOG_DOMAIN_GLOBAL))
526 {
527 eina_log_domain_unregister(_elm_log_dom);
528 _elm_log_dom = -1;
529 }
530
531 _elm_widget_type_clear();
532
533 eina_shutdown();
534 return _elm_ql_init_count;
535}
536
537EAPI void
538elm_quicklaunch_seed(void)
539{
540#ifndef SEMI_BROKEN_QUICKLAUNCH
541 if (quicklaunch_on)
542 {
543 Evas_Object *win, *bg, *bt;
544
545 win = elm_win_add(NULL, "seed", ELM_WIN_BASIC);
546 bg = elm_bg_add(win);
547 elm_win_resize_object_add(win, bg);
548 evas_object_show(bg);
549 bt = elm_button_add(win);
550 elm_object_text_set(bt, " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~-_=+\\|]}[{;:'\",<.>/?");
551 elm_win_resize_object_add(win, bt);
552 ecore_main_loop_iterate();
553 evas_object_del(win);
554 ecore_main_loop_iterate();
555#define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
556 if (ENGINE_COMPARE(ELM_SOFTWARE_X11) ||
557 ENGINE_COMPARE(ELM_SOFTWARE_16_X11) ||
558 ENGINE_COMPARE(ELM_XRENDER_X11) ||
559 ENGINE_COMPARE(ELM_OPENGL_X11))
560#undef ENGINE_COMPARE
561 {
562# ifdef HAVE_ELEMENTARY_X
563 ecore_x_sync();
564# endif
565 }
566 ecore_main_loop_iterate();
567 }
568#endif
569}
570
571#ifdef HAVE_FORK
572static void *qr_handle = NULL;
573#endif
574static int (*qr_main)(int argc,
575 char **argv) = NULL;
576
577EAPI Eina_Bool
578elm_quicklaunch_prepare(int argc __UNUSED__,
579 char **argv)
580{
581#ifdef HAVE_FORK
582 char *exe = elm_quicklaunch_exe_path_get(argv[0]);
583 if (!exe)
584 {
585 ERR("requested quicklaunch binary '%s' does not exist\n", argv[0]);
586 return EINA_FALSE;
587 }
588 else
589 {
590 char *exe2, *p;
591 char *exename;
592
593 exe2 = malloc(strlen(exe) + 1 + 10);
594 strcpy(exe2, exe);
595 p = strrchr(exe2, '/');
596 if (p) p++;
597 else p = exe2;
598 exename = alloca(strlen(p) + 1);
599 strcpy(exename, p);
600 *p = 0;
601 strcat(p, "../lib/");
602 strcat(p, exename);
603 strcat(p, ".so");
604 if (!access(exe2, R_OK | X_OK))
605 {
606 free(exe);
607 exe = exe2;
608 }
609 else
610 free(exe2);
611 }
612 qr_handle = dlopen(exe, RTLD_NOW | RTLD_GLOBAL);
613 if (!qr_handle)
614 {
615 fprintf(stderr, "dlerr: %s\n", dlerror());
616 WRN("dlopen('%s') failed: %s", exe, dlerror());
617 free(exe);
618 return EINA_FALSE;
619 }
620 INF("dlopen('%s') = %p", exe, qr_handle);
621 qr_main = dlsym(qr_handle, "elm_main");
622 INF("dlsym(%p, 'elm_main') = %p", qr_handle, qr_main);
623 if (!qr_main)
624 {
625 WRN("not quicklauncher capable: no elm_main in '%s'", exe);
626 dlclose(qr_handle);
627 qr_handle = NULL;
628 free(exe);
629 return EINA_FALSE;
630 }
631 free(exe);
632 return EINA_TRUE;
633#else
634 return EINA_FALSE;
635 (void)argv;
636#endif
637}
638
639#ifdef HAVE_FORK
640static void
641save_env(void)
642{
643 int i, size;
644 extern char **environ;
645 char **oldenv, **p;
646
647 oldenv = environ;
648
649 for (i = 0, size = 0; environ[i]; i++)
650 size += strlen(environ[i]) + 1;
651
652 p = malloc((i + 1) * sizeof(char *));
653 if (!p) return;
654
655 environ = p;
656
657 for (i = 0; oldenv[i]; i++)
658 environ[i] = strdup(oldenv[i]);
659 environ[i] = NULL;
660}
661
662#endif
663
664EAPI Eina_Bool
665elm_quicklaunch_fork(int argc,
666 char **argv,
667 char *cwd,
668 void (postfork_func) (void *data),
669 void *postfork_data)
670{
671#ifdef HAVE_FORK
672 pid_t child;
673 int ret;
674 int real_argc;
675 char **real_argv;
676
677 // FIXME:
678 // need to accept current environment from elementary_run
679 if (!qr_main)
680 {
681 int i;
682 char **args;
683
684 child = fork();
685 if (child > 0) return EINA_TRUE;
686 else if (child < 0)
687 {
688 perror("could not fork");
689 return EINA_FALSE;
690 }
691 setsid();
692 if (chdir(cwd) != 0)
693 perror("could not chdir");
694 args = alloca((argc + 1) * sizeof(char *));
695 for (i = 0; i < argc; i++) args[i] = argv[i];
696 args[argc] = NULL;
697 WRN("%s not quicklaunch capable, fallback...", argv[0]);
698 execvp(argv[0], args);
699 ERR("failed to execute '%s': %s", argv[0], strerror(errno));
700 exit(-1);
701 }
702 child = fork();
703 if (child > 0) return EINA_TRUE;
704 else if (child < 0)
705 {
706 perror("could not fork");
707 return EINA_FALSE;
708 }
709 if (postfork_func) postfork_func(postfork_data);
710
711 if (quicklaunch_on)
712 {
713#ifdef SEMI_BROKEN_QUICKLAUNCH
714 ecore_app_args_set(argc, (const char **)argv);
715 evas_init();
716 edje_init();
717 _elm_config_sub_init();
718#define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
719 if (ENGINE_COMPARE(ELM_SOFTWARE_X11) ||
720 ENGINE_COMPARE(ELM_SOFTWARE_16_X11) ||
721 ENGINE_COMPARE(ELM_XRENDER_X11) ||
722 ENGINE_COMPARE(ELM_OPENGL_X11))
723#undef ENGINE_COMPARE
724 {
725# ifdef HAVE_ELEMENTARY_X
726 ecore_x_init(NULL);
727# endif
728 }
729 ecore_evas_init(); // FIXME: check errors
730# ifdef HAVE_ELEMENTARY_ECORE_IMF
731 ecore_imf_init();
732# endif
733 _elm_module_init();
734#endif
735 }
736
737 setsid();
738 if (chdir(cwd) != 0)
739 perror("could not chdir");
740 // FIXME: this is very linux specific. it changes argv[0] of the process
741 // so ps etc. report what you'd expect. for other unixes and os's this
742 // may just not work
743 save_env();
744 if (argv)
745 {
746 char *lastarg, *p;
747
748 ecore_app_args_get(&real_argc, &real_argv);
749 lastarg = real_argv[real_argc - 1] + strlen(real_argv[real_argc - 1]);
750 for (p = real_argv[0]; p < lastarg; p++) *p = 0;
751 strcpy(real_argv[0], argv[0]);
752 }
753 ecore_app_args_set(argc, (const char **)argv);
754 ret = qr_main(argc, argv);
755 exit(ret);
756 return EINA_TRUE;
757#else
758 return EINA_FALSE;
759 (void)argc;
760 (void)argv;
761 (void)cwd;
762 (void)postfork_func;
763 (void)postfork_data;
764#endif
765}
766
767EAPI void
768elm_quicklaunch_cleanup(void)
769{
770#ifdef HAVE_FORK
771 if (qr_handle)
772 {
773 dlclose(qr_handle);
774 qr_handle = NULL;
775 qr_main = NULL;
776 }
777#endif
778}
779
780EAPI int
781elm_quicklaunch_fallback(int argc,
782 char **argv)
783{
784 int ret;
785 elm_quicklaunch_init(argc, argv);
786 elm_quicklaunch_sub_init(argc, argv);
787 elm_quicklaunch_prepare(argc, argv);
788 ret = qr_main(argc, argv);
789 exit(ret);
790 return ret;
791}
792
793EAPI char *
794elm_quicklaunch_exe_path_get(const char *exe)
795{
796 static char *path = NULL;
797 static Eina_List *pathlist = NULL;
798 const char *pathitr;
799 const Eina_List *l;
800 char buf[PATH_MAX];
801 if (exe[0] == '/') return strdup(exe);
802 if ((exe[0] == '.') && (exe[1] == '/')) return strdup(exe);
803 if ((exe[0] == '.') && (exe[1] == '.') && (exe[2] == '/')) return strdup(exe);
804 if (!path)
805 {
806 const char *p, *pp;
807 char *buf2;
808 path = getenv("PATH");
809 buf2 = alloca(strlen(path) + 1);
810 p = path;
811 pp = p;
812 for (;; )
813 {
814 if ((*p == ':') || (!*p))
815 {
816 int len;
817
818 len = p - pp;
819 strncpy(buf2, pp, len);
820 buf2[len] = 0;
821 pathlist = eina_list_append(pathlist, eina_stringshare_add(buf2));
822 if (!*p) break;
823 p++;
824 pp = p;
825 }
826 else
827 {
828 if (!*p) break;
829 p++;
830 }
831 }
832 }
833 EINA_LIST_FOREACH(pathlist, l, pathitr)
834 {
835 snprintf(buf, sizeof(buf), "%s/%s", pathitr, exe);
836 if (!access(buf, R_OK | X_OK)) return strdup(buf);
837 }
838 return NULL;
839}
840
841EAPI void
842elm_run(void)
843{
844 ecore_main_loop_begin();
845}
846
847EAPI void
848elm_exit(void)
849{
850 ecore_main_loop_quit();
851}
852
853EAPI Eina_Bool
854elm_policy_set(unsigned int policy,
855 int value)
856{
857 Elm_Event_Policy_Changed *ev;
858
859 if (policy >= ELM_POLICY_LAST)
860 return EINA_FALSE;
861
862 if (value == _elm_policies[policy])
863 return EINA_TRUE;
864
865 /* TODO: validade policy? */
866
867 ev = malloc(sizeof(*ev));
868 ev->policy = policy;
869 ev->new_value = value;
870 ev->old_value = _elm_policies[policy];
871
872 _elm_policies[policy] = value;
873
874 ecore_event_add(ELM_EVENT_POLICY_CHANGED, ev, NULL, NULL);
875
876 return EINA_TRUE;
877}
878
879EAPI int
880elm_policy_get(unsigned int policy)
881{
882 if (policy >= ELM_POLICY_LAST)
883 return 0;
884 return _elm_policies[policy];
885}
886
887EAPI void
888elm_language_set(const char *lang)
889{
890 setlocale(LC_ALL, lang);
891 _elm_win_translate();
892}
893
894EAPI Eina_Bool
895elm_object_mirrored_get(const Evas_Object *obj)
896{
897 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
898 return elm_widget_mirrored_get(obj);
899}
900
901EAPI void
902elm_object_mirrored_set(Evas_Object *obj, Eina_Bool mirrored)
903{
904 EINA_SAFETY_ON_NULL_RETURN(obj);
905 elm_widget_mirrored_set(obj, mirrored);
906}
907
908EAPI Eina_Bool
909elm_object_mirrored_automatic_get(const Evas_Object *obj)
910{
911 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
912 return elm_widget_mirrored_automatic_get(obj);
913}
914
915EAPI void
916elm_object_mirrored_automatic_set(Evas_Object *obj, Eina_Bool automatic)
917{
918 EINA_SAFETY_ON_NULL_RETURN(obj);
919 elm_widget_mirrored_automatic_set(obj, automatic);
920}
921
922/**
923 * @}
924 */
925
926EAPI void
927elm_object_scale_set(Evas_Object *obj,
928 double scale)
929{
930 EINA_SAFETY_ON_NULL_RETURN(obj);
931 elm_widget_scale_set(obj, scale);
932}
933
934EAPI double
935elm_object_scale_get(const Evas_Object *obj)
936{
937 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, 0.0);
938 return elm_widget_scale_get(obj);
939}
940
941EAPI void
942elm_object_part_text_set(Evas_Object *obj, const char *part, const char *label)
943{
944 EINA_SAFETY_ON_NULL_RETURN(obj);
945 elm_widget_text_part_set(obj, part, label);
946}
947
948EAPI const char *
949elm_object_part_text_get(const Evas_Object *obj, const char *part)
950{
951 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
952 return elm_widget_text_part_get(obj, part);
953}
954
955EAPI void
956elm_object_domain_translatable_text_part_set(Evas_Object *obj, const char *part, const char *domain, const char *text)
957{
958 EINA_SAFETY_ON_NULL_RETURN(obj);
959 elm_widget_domain_translatable_text_part_set(obj, part, domain, text);
960}
961
962EAPI const char *
963elm_object_translatable_text_part_get(const Evas_Object *obj, const char *part)
964{
965 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
966 return elm_widget_translatable_text_part_get(obj, part);
967}
968
969EAPI void
970elm_object_part_content_set(Evas_Object *obj, const char *part, Evas_Object *content)
971{
972 EINA_SAFETY_ON_NULL_RETURN(obj);
973 elm_widget_content_part_set(obj, part, content);
974}
975
976EAPI Evas_Object *
977elm_object_part_content_get(const Evas_Object *obj, const char *part)
978{
979 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
980 return elm_widget_content_part_get(obj, part);
981}
982
983EAPI Evas_Object *
984elm_object_part_content_unset(Evas_Object *obj, const char *part)
985{
986 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
987 return elm_widget_content_part_unset(obj, part);
988}
989
990EAPI Eina_Bool
991elm_object_style_set(Evas_Object *obj,
992 const char *style)
993{
994 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
995 return elm_widget_style_set(obj, style);
996}
997
998EAPI const char *
999elm_object_style_get(const Evas_Object *obj)
1000{
1001 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1002 return elm_widget_style_get(obj);
1003}
1004
1005EAPI void
1006elm_object_disabled_set(Evas_Object *obj,
1007 Eina_Bool disabled)
1008{
1009 EINA_SAFETY_ON_NULL_RETURN(obj);
1010 elm_widget_disabled_set(obj, disabled);
1011}
1012
1013EAPI Eina_Bool
1014elm_object_disabled_get(const Evas_Object *obj)
1015{
1016 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1017 return elm_widget_disabled_get(obj);
1018}
1019
1020EAPI void
1021elm_cache_all_flush(void)
1022{
1023 const Eina_List *l;
1024 Evas_Object *obj;
1025
1026 edje_file_cache_flush();
1027 edje_collection_cache_flush();
1028 eet_clearcache();
1029 EINA_LIST_FOREACH(_elm_win_list, l, obj)
1030 {
1031 Evas *e = evas_object_evas_get(obj);
1032 evas_image_cache_flush(e);
1033 evas_font_cache_flush(e);
1034 evas_render_dump(e);
1035 }
1036}
1037
1038EAPI Eina_Bool
1039elm_object_focus_get(const Evas_Object *obj)
1040{
1041 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1042 return elm_widget_focus_get(obj);
1043}
1044
1045EAPI void
1046elm_object_focus_set(Evas_Object *obj,
1047 Eina_Bool focus)
1048{
1049 EINA_SAFETY_ON_NULL_RETURN(obj);
1050
1051 if (focus == elm_widget_focus_get(obj)) return;
1052
1053 if (focus)
1054 elm_widget_focus_cycle(obj, ELM_FOCUS_NEXT);
1055 else
1056 elm_widget_focused_object_clear(obj);
1057}
1058
1059EAPI void
1060elm_object_focus_allow_set(Evas_Object *obj,
1061 Eina_Bool enable)
1062{
1063 EINA_SAFETY_ON_NULL_RETURN(obj);
1064 elm_widget_can_focus_set(obj, enable);
1065/*FIXME: According to the elm_object_focus_allow_get(), child_can_focus field
1066of the parent should be updated. Otherwise, the checking of it's child focus allow states should not be in elm_object_focus_allow_get() */
1067}
1068
1069EAPI Eina_Bool
1070elm_object_focus_allow_get(const Evas_Object *obj)
1071{
1072 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1073 return (elm_widget_can_focus_get(obj)) || (elm_widget_child_can_focus_get(obj));
1074}
1075
1076EAPI void
1077elm_object_focus_custom_chain_set(Evas_Object *obj,
1078 Eina_List *objs)
1079{
1080 EINA_SAFETY_ON_NULL_RETURN(obj);
1081 elm_widget_focus_custom_chain_set(obj, objs);
1082}
1083
1084EAPI void
1085elm_object_focus_custom_chain_unset(Evas_Object *obj)
1086{
1087 EINA_SAFETY_ON_NULL_RETURN(obj);
1088 elm_widget_focus_custom_chain_unset(obj);
1089}
1090
1091EAPI const Eina_List *
1092elm_object_focus_custom_chain_get(const Evas_Object *obj)
1093{
1094 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1095 return elm_widget_focus_custom_chain_get(obj);
1096}
1097
1098EAPI void
1099elm_object_focus_custom_chain_append(Evas_Object *obj,
1100 Evas_Object *child,
1101 Evas_Object *relative_child)
1102{
1103 EINA_SAFETY_ON_NULL_RETURN(obj);
1104 elm_widget_focus_custom_chain_append(obj, child, relative_child);
1105}
1106
1107EAPI void
1108elm_object_focus_custom_chain_prepend(Evas_Object *obj,
1109 Evas_Object *child,
1110 Evas_Object *relative_child)
1111{
1112 EINA_SAFETY_ON_NULL_RETURN(obj);
1113 elm_widget_focus_custom_chain_prepend(obj, child, relative_child);
1114}
1115
1116EINA_DEPRECATED EAPI void
1117elm_object_focus_cycle(Evas_Object *obj,
1118 Elm_Focus_Direction dir)
1119{
1120 elm_object_focus_next(obj, dir);
1121}
1122
1123EAPI void
1124elm_object_focus_next(Evas_Object *obj,
1125 Elm_Focus_Direction dir)
1126{
1127 EINA_SAFETY_ON_NULL_RETURN(obj);
1128 elm_widget_focus_cycle(obj, dir);
1129}
1130
1131EAPI void
1132elm_object_tree_focus_allow_set(Evas_Object *obj,
1133 Eina_Bool tree_focusable)
1134{
1135 EINA_SAFETY_ON_NULL_RETURN(obj);
1136 elm_widget_tree_unfocusable_set(obj, !tree_focusable);
1137}
1138
1139EAPI Eina_Bool
1140elm_object_tree_focus_allow_get(const Evas_Object *obj)
1141{
1142 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1143 return !elm_widget_tree_unfocusable_get(obj);
1144}
1145
1146EAPI void
1147elm_object_scroll_hold_push(Evas_Object *obj)
1148{
1149 EINA_SAFETY_ON_NULL_RETURN(obj);
1150 elm_widget_scroll_hold_push(obj);
1151}
1152
1153EAPI void
1154elm_object_scroll_hold_pop(Evas_Object *obj)
1155{
1156 EINA_SAFETY_ON_NULL_RETURN(obj);
1157 elm_widget_scroll_hold_pop(obj);
1158}
1159
1160EAPI void
1161elm_object_scroll_freeze_push(Evas_Object *obj)
1162{
1163 EINA_SAFETY_ON_NULL_RETURN(obj);
1164 elm_widget_scroll_freeze_push(obj);
1165}
1166
1167EAPI void
1168elm_object_scroll_lock_x_set(Evas_Object *obj,
1169 Eina_Bool lock)
1170{
1171 EINA_SAFETY_ON_NULL_RETURN(obj);
1172 elm_widget_drag_lock_x_set(obj, lock);
1173}
1174
1175EAPI void
1176elm_object_scroll_lock_y_set(Evas_Object *obj,
1177 Eina_Bool lock)
1178{
1179 EINA_SAFETY_ON_NULL_RETURN(obj);
1180 elm_widget_drag_lock_y_set(obj, lock);
1181}
1182
1183EAPI Eina_Bool
1184elm_object_scroll_lock_x_get(const Evas_Object *obj)
1185{
1186 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1187 return elm_widget_drag_lock_x_get(obj);
1188}
1189
1190EAPI Eina_Bool
1191elm_object_scroll_lock_y_get(const Evas_Object *obj)
1192{
1193 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1194 return elm_widget_drag_lock_y_get(obj);
1195}
1196
1197EAPI void
1198elm_object_scroll_freeze_pop(Evas_Object *obj)
1199{
1200 EINA_SAFETY_ON_NULL_RETURN(obj);
1201 elm_widget_scroll_freeze_pop(obj);
1202}
1203
1204EAPI Eina_Bool
1205elm_object_widget_check(const Evas_Object *obj)
1206{
1207 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
1208 return elm_widget_is(obj);
1209}
1210
1211EAPI Evas_Object *
1212elm_object_parent_widget_get(const Evas_Object *obj)
1213{
1214 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1215 return elm_widget_parent_widget_get(obj);
1216}
1217
1218EAPI Evas_Object *
1219elm_object_top_widget_get(const Evas_Object *obj)
1220{
1221 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1222 return elm_widget_top_get(obj);
1223}
1224
1225EAPI const char *
1226elm_object_widget_type_get(const Evas_Object *obj)
1227{
1228 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1229 return elm_widget_type_get(obj);
1230}
1231
1232EAPI void
1233elm_object_signal_emit(Evas_Object *obj,
1234 const char *emission,
1235 const char *source)
1236{
1237 EINA_SAFETY_ON_NULL_RETURN(obj);
1238 elm_widget_signal_emit(obj, emission, source);
1239}
1240
1241EAPI void
1242elm_object_signal_callback_add(Evas_Object *obj, const char *emission, const char *source, Edje_Signal_Cb func, void *data)
1243{
1244 EINA_SAFETY_ON_NULL_RETURN(obj);
1245 EINA_SAFETY_ON_NULL_RETURN(func);
1246 elm_widget_signal_callback_add(obj, emission, source, func, data);
1247}
1248
1249EAPI void *
1250elm_object_signal_callback_del(Evas_Object *obj, const char *emission, const char *source, Edje_Signal_Cb func)
1251{
1252 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1253 EINA_SAFETY_ON_NULL_RETURN_VAL(func, NULL);
1254 return elm_widget_signal_callback_del(obj, emission, source, func);
1255}
1256
1257EAPI void
1258elm_object_event_callback_add(Evas_Object *obj, Elm_Event_Cb func, const void *data)
1259{
1260 EINA_SAFETY_ON_NULL_RETURN(obj);
1261 EINA_SAFETY_ON_NULL_RETURN(func);
1262 elm_widget_event_callback_add(obj, func, data);
1263}
1264
1265EAPI void *
1266elm_object_event_callback_del(Evas_Object *obj, Elm_Event_Cb func, const void *data)
1267{
1268 EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
1269 EINA_SAFETY_ON_NULL_RETURN_VAL(func, NULL);
1270 return elm_widget_event_callback_del(obj, func, data);
1271}
1272
1273EAPI void
1274elm_object_tree_dump(const Evas_Object *top)
1275{
1276#ifdef ELM_DEBUG
1277 elm_widget_tree_dump(top);
1278#else
1279 return;
1280 (void)top;
1281#endif
1282}
1283
1284EAPI void
1285elm_object_tree_dot_dump(const Evas_Object *top,
1286 const char *file)
1287{
1288#ifdef ELM_DEBUG
1289 FILE *f = fopen(file, "wb");
1290 elm_widget_tree_dot_dump(top, f);
1291 fclose(f);
1292#else
1293 return;
1294 (void)top;
1295 (void)file;
1296#endif
1297}
1298
1299EAPI void
1300elm_coords_finger_size_adjust(int times_w,
1301 Evas_Coord *w,
1302 int times_h,
1303 Evas_Coord *h)
1304{
1305 if ((w) && (*w < (_elm_config->finger_size * times_w)))
1306 *w = _elm_config->finger_size * times_w;
1307 if ((h) && (*h < (_elm_config->finger_size * times_h)))
1308 *h = _elm_config->finger_size * times_h;
1309}
1310
1311EAPI Evas_Object *
1312elm_object_item_widget_get(const Elm_Object_Item *it)
1313{
1314 return WIDGET(it);
1315}
1316
1317EAPI void
1318elm_object_item_part_content_set(Elm_Object_Item *it,
1319 const char *part,
1320 Evas_Object *content)
1321{
1322 _elm_widget_item_part_content_set((Elm_Widget_Item *)it, part, content);
1323}
1324
1325EAPI Evas_Object *
1326elm_object_item_part_content_get(const Elm_Object_Item *it,
1327 const char *part)
1328{
1329 return _elm_widget_item_part_content_get((Elm_Widget_Item *)it, part);
1330}
1331
1332EAPI Evas_Object *
1333elm_object_item_part_content_unset(Elm_Object_Item *it, const char *part)
1334{
1335 return _elm_widget_item_part_content_unset((Elm_Widget_Item *)it, part);
1336}
1337
1338EAPI void
1339elm_object_item_part_text_set(Elm_Object_Item *it,
1340 const char *part,
1341 const char *label)
1342{
1343 _elm_widget_item_part_text_set((Elm_Widget_Item *)it, part, label);
1344}
1345
1346EAPI const char *
1347elm_object_item_part_text_get(const Elm_Object_Item *it, const char *part)
1348{
1349 return _elm_widget_item_part_text_get((Elm_Widget_Item *)it, part);
1350}
1351
1352EAPI void
1353elm_object_access_info_set(Evas_Object *obj, const char *txt)
1354{
1355 elm_widget_access_info_set(obj, txt);
1356}
1357
1358EAPI Evas_Object *
1359elm_object_name_find(const Evas_Object *obj, const char *name, int recurse)
1360{
1361 return elm_widget_name_find(obj, name, recurse);
1362}
1363
1364EAPI void
1365elm_object_item_access_info_set(Elm_Object_Item *it, const char *txt)
1366{
1367 _elm_widget_item_access_info_set((Elm_Widget_Item *)it, txt);
1368}
1369
1370EAPI void *
1371elm_object_item_data_get(const Elm_Object_Item *it)
1372{
1373 return elm_widget_item_data_get(it);
1374}
1375
1376EAPI void
1377elm_object_item_data_set(Elm_Object_Item *it, void *data)
1378{
1379 elm_widget_item_data_set(it, data);
1380}
1381
1382EAPI void
1383elm_object_item_signal_emit(Elm_Object_Item *it, const char *emission, const char *source)
1384{
1385 _elm_widget_item_signal_emit((Elm_Widget_Item *)it, emission, source);
1386}
1387
1388EAPI void elm_object_item_disabled_set(Elm_Object_Item *it, Eina_Bool disabled)
1389{
1390 _elm_widget_item_disabled_set((Elm_Widget_Item *)it, disabled);
1391}
1392
1393EAPI Eina_Bool elm_object_item_disabled_get(const Elm_Object_Item *it)
1394{
1395 return _elm_widget_item_disabled_get((Elm_Widget_Item *)it);
1396}
1397
1398EAPI void elm_object_item_del_cb_set(Elm_Object_Item *it, Evas_Smart_Cb del_cb)
1399{
1400 _elm_widget_item_del_cb_set((Elm_Widget_Item *)it, del_cb);
1401}
1402
1403EAPI void elm_object_item_del(Elm_Object_Item *it)
1404{
1405 _elm_widget_item_del((Elm_Widget_Item *)it);
1406}
1407
1408EAPI void
1409elm_object_item_tooltip_text_set(Elm_Object_Item *it, const char *text)
1410{
1411 elm_widget_item_tooltip_text_set(it, text);
1412}
1413
1414EAPI void
1415elm_object_item_tooltip_content_cb_set(Elm_Object_Item *it, Elm_Tooltip_Item_Content_Cb func, const void *data, Evas_Smart_Cb del_cb)
1416{
1417 elm_widget_item_tooltip_content_cb_set(it, func, data, del_cb);
1418}
1419
1420EAPI void
1421elm_object_item_tooltip_unset(Elm_Object_Item *it)
1422{
1423 elm_widget_item_tooltip_unset(it);
1424}
1425
1426EAPI Eina_Bool
1427elm_object_item_tooltip_window_mode_set(Elm_Object_Item *it, Eina_Bool disable)
1428{
1429 return elm_widget_item_tooltip_window_mode_set(it, disable);
1430}
1431
1432EAPI Eina_Bool
1433elm_object_item_tooltip_window_mode_get(const Elm_Object_Item *it)
1434{
1435 return elm_widget_item_tooltip_window_mode_get(it);
1436}
1437
1438EAPI void
1439elm_object_item_tooltip_style_set(Elm_Object_Item *it, const char *style)
1440{
1441 elm_widget_item_tooltip_style_set(it, style);
1442}
1443
1444EAPI const char *
1445elm_object_item_tooltip_style_get(const Elm_Object_Item *it)
1446{
1447 return elm_widget_item_tooltip_style_get(it);
1448}
1449
1450EAPI void
1451elm_object_item_cursor_set(Elm_Object_Item *it, const char *cursor)
1452{
1453 elm_widget_item_cursor_set(it, cursor);
1454}
1455
1456EAPI const char *
1457elm_object_item_cursor_get(const Elm_Object_Item *it)
1458{
1459 return elm_widget_item_cursor_get(it);
1460}
1461
1462EAPI void
1463elm_object_item_cursor_unset(Elm_Object_Item *it)
1464{
1465 elm_widget_item_cursor_unset(it);
1466}
1467
1468EAPI void
1469elm_object_item_cursor_style_set(Elm_Object_Item *it, const char *style)
1470{
1471 elm_widget_item_cursor_style_set(it, style);
1472}
1473
1474EAPI const char *
1475elm_object_item_cursor_style_get(const Elm_Object_Item *it)
1476{
1477 return elm_widget_item_cursor_style_get(it);
1478}
1479
1480EAPI void
1481elm_object_item_cursor_engine_only_set(Elm_Object_Item *it, Eina_Bool engine_only)
1482{
1483 elm_widget_item_cursor_engine_only_set(it, engine_only);
1484}
1485
1486EAPI Eina_Bool
1487elm_object_item_cursor_engine_only_get(const Elm_Object_Item *it)
1488{
1489 return elm_widget_item_cursor_engine_only_get(it);
1490}