# include "elementary_config.h"
#endif
-#ifndef _GNU_SOURCE
-# define _GNU_SOURCE
+#ifdef HAVE_FORK
+#include <dlfcn.h> /* dlopen,dlclose,etc */
#endif
-#include <dlfcn.h> /* dlopen,dlclose,etc */
-
#ifdef HAVE_CRT_EXTERNS_H
# include <crt_externs.h>
#endif
static Elm_Version _version = { VMAJ, VMIN, VMIC, VREV };
EAPI Elm_Version *elm_version = &_version;
-/**
- * @defgroup Main Main
- * @ingroup Elementary
- *
- * This group includes functions of elm_main.c
- */
-
Eina_Bool
_elm_dangerous_call_check(const char *call)
{
char buf[256];
const char *eval;
-
+
snprintf(buf, sizeof(buf), "%i.%i.%i.%i", VMAJ, VMIN, VMIC, VREV);
eval = getenv("ELM_NO_FINGER_WAGGLING");
if ((eval) && (!strcmp(eval, buf)))
return 1;
}
-/**
- * @defgroup Start Getting Started
- * @ingroup Main
- *
- * To write an Elementary app, you can get started with the following:
- *
- * @code
- * #include <Elementary.h>
- * #ifndef ELM_LIB_QUICKLAUNCH
- * EAPI int
- * elm_main(int argc, char **argv)
- * {
- * // create window(s) here and do any application init
- * elm_run(); // run main loop
- * elm_shutdown(); // after mainloop finishes running, shutdown
- * return 0; // exit 0 for exit code
- * }
- * #endif
- * ELM_MAIN()
- * @endcode
- *
- * To take full advantage of the quicklaunch architecture for launching
- * processes as quickly as possible (saving time at startup time like
- * connecting to X11, loading and linking shared libraries) you may want to
- * use the following configure.in/configure.ac and Makefile.am and autogen.sh
- * script to generate your files. It is assumed your application uses the
- * main.c file for its code.
- *
- * configure.in/configure.ac:
- *
-@verbatim
-AC_INIT(myapp, 0.0.0, myname@mydomain.com)
-AC_PREREQ(2.52)
-AC_CONFIG_SRCDIR(configure.in)
-
-AM_INIT_AUTOMAKE(1.6 dist-bzip2)
-AM_CONFIG_HEADER(config.h)
-
-AC_C_BIGENDIAN
-AC_ISC_POSIX
-AC_PROG_CC
-AM_PROG_CC_STDC
-AC_HEADER_STDC
-AC_C_CONST
-
-AC_LIBTOOL_WIN32_DLL
-define([AC_LIBTOOL_LANG_CXX_CONFIG], [:])dnl
-define([AC_LIBTOOL_LANG_F77_CONFIG], [:])dnl
-AC_PROG_LIBTOOL
-
-PKG_CHECK_MODULES([ELEMENTARY], elementary)
-
-AC_OUTPUT(Makefile)
-@endverbatim
- *
- * Makefile.am:
- *
-@verbatim
-AUTOMAKE_OPTIONS = 1.4 foreign
-MAINTAINERCLEANFILES = Makefile.in
-
-INCLUDES = -I$(top_srcdir) @ELEMENTARY_CFLAGS@
-
-bin_PROGRAMS = myapp
-myapp_LTLIBRARIES = myapp.la
-
-myappdir = $(libdir)
-
-myapp_la_SOURCES = main.c
-myapp_la_LIBADD = @ELEMENTARY_LIBS@
-myapp_la_CFLAGS =
-myapp_la_LDFLAGS = -module -avoid-version -no-undefined
-
-myapp_SOURCES = main.c
-myapp_LDADD = @ELEMENTARY_LIBS@
-myapp_CFLAGS = -DELM_LIB_QUICKLAUNCH=1
-@endverbatim
- *
- * autogen.sh:
- *
-@verbatim
-#!/bin/sh
-rm -rf autom4te.cache
-rm -f aclocal.m4 ltmain.sh
-rm -rf m4
-mkdir m4
-
-touch README
-echo "Running aclocal..." ; aclocal $ACLOCAL_FLAGS -I m4 || exit 1
-echo "Running autoheader..." ; autoheader || exit 1
-echo "Running autoconf..." ; autoconf || exit 1
-echo "Running libtoolize..." ; (libtoolize --copy --automake || glibtoolize --automake) || exit 1
-echo "Running automake..." ; automake --add-missing --copy --gnu || exit 1
-
-if [ -z "$NOCONFIGURE" ]; then
- ./configure "$@"
-fi
-@endverbatim
- *
- * To gnerate all the things needed to bootstrap just run:
- *
-@verbatim
-./autogen.sh
-@endverbatim
- *
- * This will generate Makefile.in's, the confgure script and everything else.
- * After this it works like all normal autotools projects:
-@verbatim
-./configure
-make
-sudo make install
-@endverbatim
- *
- * Note sudo was assumed to get root permissions, as this would install in
- * /usr/local which is system-owned. Ue any way you like to gain root, or
- * specify a different prefix with configure:
- *
-@verbatim
-./confiugre --prefix=$HOME/mysoftware
-@endverbatim
- *
- * Also remember that autotools buys you some useful commands like:
-@verbatim
-make uninstall
-@endverbatim
- *
- * This uninstalls the software after it was installed with "make install".
- * It is very useful to clear up what you built if you wish to clean the
- * system.
- *
-@verbatim
-make distcheck
-@endverbatim
- *
- * This firstly checks if your build tree is "clean" and ready for
- * distribution. It also builds a tarball (myapp-0.0.0.tar.gz) that is
- * ready to upload and distribute to the world, that contains the generated
- * Makefile.in's and configure script. The users do not need to run
- * autogen.sh - just configure and on. They don't need autotools installed.
- * This tarball also builds cleanly, has all the sources it needs to build
- * included (that is sources for your application, not libraries it depends
- * on like Elementary). It builds cleanly in a buildroot and does not
- * contain any files that are temporarily generated like binaries and other
- * build-gnerated files, so the tarball is clean, and no need to worry
- * about cleaning up your tree before packaging.
- *
-@verbatim
-make clean
-@endverbatim
- *
- * This cleans up all build files (binaries, objects etc.) from the tree.
- *
-@verbatim
-make distclean
-@endverbatim
- *
- * This cleans out all files from the build and from configure's output too.
- *
-@verbatim
-make maintainer-clean
-@endverbatim
- *
- * This deletes all the files autogen.sh will produce so the tree is clean
- * to be put into a revision-control system (like CVS, SVN or GIT for example).
- *
- * The above will build a library - libmyapp.so and install in the target
- * library directory (default is /usr/local/lib). You will also get a
- * myapp.a and myapp.la - these are useless and can be deleted. Libtool likes
- * to generate these all the time. You will also get a binary in the target
- * binary directory (default is /usr/local/bin). This is a "debug binary".
- * This will run and dlopen() the myapp.so and then jump to it's elm_main
- * function. This allows for easy debugging with GDB and Valgrind. When you
- * are ready to go to production do the following:
- *
- * 1. delete the myapp binary. i.e. rm /usr/local/bin/myapp
- *
- * 2. symlink the myapp binary to elementary_run (supplied by elementary).
- * i.e. ln -s elmentary_run /usr/local/bin/myapp
- *
- * 3. run elementary_quicklaunch as part of your graphical login session and
- * keep it running.
- *
- * This will man elementary_quicklaunch does pre-initialization before the
- * application needs to be run, saving the effort at the time the application
- * is needed, thus speeding up the time it takes to appear.
- *
- * If you don't want to use the quicklaunch infrastructure (which is
- * optional), you can execute the old fashioned way by just running the
- * myapp binary loader than will load the myapp.so for you, or you can
- * remove the split-file binary and put it into one binary as things always
- * have been with the following configure.in/configure.ac and Makfile.am
- * files:
- *
- * configure.in/configure.ac:
- *
-@verbatim
-AC_INIT(myapp, 0.0.0, myname@mydomain.com)
-AC_PREREQ(2.52)
-AC_CONFIG_SRCDIR(configure.in)
-
-AM_INIT_AUTOMAKE(1.6 dist-bzip2)
-AM_CONFIG_HEADER(config.h)
-
-AC_C_BIGENDIAN
-AC_ISC_POSIX
-AC_PROG_CC
-AM_PROG_CC_STDC
-AC_HEADER_STDC
-AC_C_CONST
-
-PKG_CHECK_MODULES([ELEMENTARY], elementary)
-
-AC_OUTPUT(Makefile)
-@endverbatim
- *
- * Makefile.am:
- *
-@verbatim
-AUTOMAKE_OPTIONS = 1.4 foreign
-MAINTAINERCLEANFILES = Makefile.in
-
-INCLUDES = -I$(top_srcdir) @ELEMENTARY_CFLAGS@
-
-bin_PROGRAMS = myapp
-
-myapp_SOURCES = main.c
-myapp_LDADD = @ELEMENTARY_LIBS@
-myapp_CFLAGS =
-@endverbatim
- *
- * Notice that they are the same as before, just with libtool and library
- * building sections removed. Both ways work for building elementary
- * applications. It is up to you to decide what is best for you. If you just
- * follow the template above, you can do it both ways and can decide at build
- * time. The more advanced of you may suggest making it a configure option.
- * That is perfectly valid, but has been left out here for simplicity, as our
- * aim to have an Elementary (and EFL) tutorial, not an autoconf & automake
- * document.
- *
- */
-
-static Eina_Bool _elm_signal_exit(void *data, int ev_type, void *ev);
+static Eina_Bool _elm_signal_exit(void *data,
+ int ev_type,
+ void *ev);
+static Eina_Prefix *pfx = NULL;
char *_elm_appname = NULL;
const char *_elm_data_dir = NULL;
const char *_elm_lib_dir = NULL;
EAPI int ELM_EVENT_POLICY_CHANGED = 0;
static int _elm_init_count = 0;
-static int _elm_sub_init_count = 0;
-static int _elm_ql_init_count = 0;
+static int _elm_sub_init_count = 0;
+static int _elm_ql_init_count = 0;
static int _elm_policies[ELM_POLICY_LAST];
static Ecore_Event_Handler *_elm_exit_handler = NULL;
static Eina_Bool quicklaunch_on = 0;
static Eina_Bool
-_elm_signal_exit(void *data __UNUSED__, int ev_type __UNUSED__, void *ev __UNUSED__)
+_elm_signal_exit(void *data __UNUSED__,
+ int ev_type __UNUSED__,
+ void *ev __UNUSED__)
{
elm_exit();
return ECORE_CALLBACK_PASS_ON;
_elm_rescale(void)
{
edje_scale_set(_elm_config->scale);
- _elm_win_rescale();
+ _elm_win_rescale(NULL, EINA_FALSE);
}
-static Eina_List *widtypes = NULL;
+static void *app_mainfunc = NULL;
+static const char *app_domain = NULL;
+static const char *app_checkfile = NULL;
-void
-_elm_widtype_register(const char **ptr)
-{
- widtypes = eina_list_append(widtypes, (void *)ptr);
-}
+static const char *app_compile_bin_dir = NULL;
+static const char *app_compile_lib_dir = NULL;
+static const char *app_compile_data_dir = NULL;
+static const char *app_compile_locale_dir = NULL;
+static const char *app_prefix_dir = NULL;
+static const char *app_bin_dir = NULL;
+static const char *app_lib_dir = NULL;
+static const char *app_data_dir = NULL;
+static const char *app_locale_dir = NULL;
+
+static Eina_Prefix *app_pfx = NULL;
static void
-_elm_widtype_clear(void)
+_prefix_check(void)
{
- const char **ptr;
-
- EINA_LIST_FREE(widtypes, ptr)
+ int argc = 0;
+ char **argv = NULL;
+ const char *dirs[4] = { NULL, NULL, NULL, NULL };
+ char *caps = NULL, *p1, *p2;
+
+ if (app_pfx) return;
+ if (!app_domain) return;
+
+ ecore_app_args_get(&argc, &argv);
+ if (argc < 1) return;
+
+ dirs[0] = app_compile_bin_dir;
+ dirs[1] = app_compile_lib_dir;
+ dirs[2] = app_compile_data_dir;
+ dirs[3] = app_compile_locale_dir;
+
+ if (!dirs[1]) dirs[1] = dirs[0];
+ if (!dirs[0]) dirs[0] = dirs[1];
+ if (!dirs[3]) dirs[3] = dirs[2];
+ if (!dirs[2]) dirs[2] = dirs[3];
+
+ if (app_domain)
{
- eina_stringshare_del(*ptr);
- *ptr = NULL;
+ caps = alloca(strlen(app_domain) + 1);
+ for (p1 = (char *)app_domain, p2 = caps; *p1; p1++, p2++)
+ *p2 = toupper(*p1);
+ *p2 = 0;
}
+ app_pfx = eina_prefix_new(argv[0], app_mainfunc, caps, app_domain,
+ app_checkfile, dirs[0], dirs[1], dirs[2], dirs[3]);
+}
+
+static void
+_prefix_shutdown(void)
+{
+ if (app_pfx) eina_prefix_free(app_pfx);
+ if (app_domain) eina_stringshare_del(app_domain);
+ if (app_checkfile) eina_stringshare_del(app_checkfile);
+ if (app_compile_bin_dir) eina_stringshare_del(app_compile_bin_dir);
+ if (app_compile_lib_dir) eina_stringshare_del(app_compile_lib_dir);
+ if (app_compile_data_dir) eina_stringshare_del(app_compile_data_dir);
+ if (app_compile_locale_dir) eina_stringshare_del(app_compile_locale_dir);
+ if (app_prefix_dir) eina_stringshare_del(app_prefix_dir);
+ if (app_bin_dir) eina_stringshare_del(app_bin_dir);
+ if (app_lib_dir) eina_stringshare_del(app_lib_dir);
+ if (app_data_dir) eina_stringshare_del(app_data_dir);
+ if (app_locale_dir) eina_stringshare_del(app_locale_dir);
+ app_mainfunc = NULL;
+ app_domain = NULL;
+ app_checkfile = NULL;
+ app_compile_bin_dir = NULL;
+ app_compile_lib_dir = NULL;
+ app_compile_data_dir = NULL;
+ app_compile_locale_dir = NULL;
+ app_prefix_dir = NULL;
+ app_bin_dir = NULL;
+ app_lib_dir = NULL;
+ app_data_dir = NULL;
+ app_locale_dir = NULL;
+ app_pfx = NULL;
}
-/**
- * @defgroup General General
- * @ingroup Main
- */
-
-/**
- * Inititalise Elementary
- *
- * @return The init counter value.
- *
- * This call is exported only for use by the ELM_MAIN() macro. There is no
- * need to use this if you use this macro (which is highly advisable).
- * @ingroup General
- */
EAPI int
-elm_init(int argc, char **argv)
+elm_init(int argc,
+ char **argv)
{
_elm_init_count++;
if (_elm_init_count > 1) return _elm_init_count;
elm_quicklaunch_init(argc, argv);
elm_quicklaunch_sub_init(argc, argv);
+ _prefix_shutdown();
return _elm_init_count;
}
-/**
- * Shut down Elementary
- *
- * This should be called at the end of your application just before it ceases
- * to do any more processing. This will clean up any permanent resources your
- * application may have allocated via Elementary that would otherwise persist
- * on an exit without this call.
- * @ingroup General
- */
EAPI int
elm_shutdown(void)
{
_elm_init_count--;
- if (_elm_init_count > 0) return _elm_init_count;
+ if (_elm_init_count > 0) return _elm_init_count;
+ _elm_win_shutdown();
+ while (_elm_win_deferred_free) ecore_main_loop_iterate();
+// wrningz :(
+// _prefix_shutdown();
elm_quicklaunch_sub_shutdown();
elm_quicklaunch_shutdown();
return _elm_init_count;
}
+EAPI void
+elm_app_info_set(void *mainfunc, const char *dom, const char *checkfile)
+{
+ app_mainfunc = mainfunc;
+ eina_stringshare_replace(&app_domain, dom);
+ eina_stringshare_replace(&app_checkfile, checkfile);
+}
+
+EAPI void
+elm_app_compile_bin_dir_set(const char *dir)
+{
+ eina_stringshare_replace(&app_compile_bin_dir, dir);
+}
+
+EAPI void
+elm_app_compile_lib_dir_set(const char *dir)
+{
+ eina_stringshare_replace(&app_compile_lib_dir, dir);
+}
+
+EAPI void
+elm_app_compile_data_dir_set(const char *dir)
+{
+ eina_stringshare_replace(&app_compile_data_dir, dir);
+}
+
+EAPI void
+elm_app_compile_locale_set(const char *dir)
+{
+ eina_stringshare_replace(&app_compile_locale_dir, dir);
+}
+
+EAPI const char *
+elm_app_prefix_dir_get(void)
+{
+ if (app_prefix_dir) return app_prefix_dir;
+ _prefix_check();
+ if (!app_pfx) return "";
+ app_prefix_dir = eina_prefix_get(app_pfx);
+ return app_prefix_dir;
+}
+
+EAPI const char *
+elm_app_bin_dir_get(void)
+{
+ if (app_bin_dir) return app_bin_dir;
+ _prefix_check();
+ if (!app_pfx) return "";
+ app_bin_dir = eina_prefix_bin_get(app_pfx);
+ return app_bin_dir;
+}
+
+EAPI const char *
+elm_app_lib_dir_get(void)
+{
+ if (app_lib_dir) return app_lib_dir;
+ _prefix_check();
+ if (!app_pfx) return "";
+ app_lib_dir = eina_prefix_lib_get(app_pfx);
+ return app_lib_dir;
+}
+
+EAPI const char *
+elm_app_data_dir_get(void)
+{
+ if (app_data_dir) return app_data_dir;
+ _prefix_check();
+ if (!app_pfx) return "";
+ app_data_dir = eina_prefix_data_get(app_pfx);
+ return app_data_dir;
+}
+
+EAPI const char *
+elm_app_locale_dir_get(void)
+{
+ if (app_locale_dir) return app_locale_dir;
+ _prefix_check();
+ if (!app_pfx) return "";
+ app_locale_dir = eina_prefix_locale_get(app_pfx);
+ return app_locale_dir;
+}
+
#ifdef ELM_EDBUS
-static Eina_Bool _elm_need_e_dbus = EINA_FALSE;
+static int _elm_need_e_dbus = 0;
#endif
-EAPI void
+EAPI Eina_Bool
elm_need_e_dbus(void)
{
#ifdef ELM_EDBUS
- if (_elm_need_e_dbus) return;
- _elm_need_e_dbus = 1;
+ if (_elm_need_e_dbus++) return EINA_TRUE;
e_dbus_init();
- e_hal_init();
-#endif
+ return EINA_TRUE;
+#else
+ return EINA_FALSE;
+#endif
}
static void
_elm_unneed_e_dbus(void)
{
#ifdef ELM_EDBUS
- if (_elm_need_e_dbus)
- {
- _elm_need_e_dbus = 0;
- e_hal_shutdown();
- e_dbus_shutdown();
- }
-#endif
+ if (--_elm_need_e_dbus) return;
+
+ _elm_need_e_dbus = 0;
+ e_dbus_shutdown();
+#endif
}
#ifdef ELM_EFREET
-static Eina_Bool _elm_need_efreet = EINA_FALSE;
+static int _elm_need_efreet = 0;
#endif
-EAPI void
+EAPI Eina_Bool
elm_need_efreet(void)
{
#ifdef ELM_EFREET
- if (_elm_need_efreet) return;
- _elm_need_efreet = 1;
+ if (_elm_need_efreet++) return EINA_TRUE;
efreet_init();
efreet_mime_init();
efreet_trash_init();
- /*
+ /*
{
Eina_List **list;
-
+
list = efreet_icon_extra_list_get();
if (list)
{
}
}
*/
+ return EINA_TRUE;
+#else
+ return EINA_FALSE;
#endif
}
_elm_unneed_efreet(void)
{
#ifdef ELM_EFREET
- if (_elm_need_efreet)
- {
- _elm_need_efreet = 0;
- efreet_trash_shutdown();
- efreet_mime_shutdown();
- efreet_shutdown();
- }
-#endif
+ if (--_elm_need_efreet) return;
+
+ _elm_need_efreet = 0;
+ efreet_trash_shutdown();
+ efreet_mime_shutdown();
+ efreet_shutdown();
+#endif
+}
+
+EAPI void
+elm_quicklaunch_mode_set(Eina_Bool ql_on)
+{
+ quicklaunch_on = ql_on;
}
-EAPI void
-elm_quicklaunch_mode_set(Eina_Bool ql_on)
-{
- quicklaunch_on = ql_on;
+EAPI Eina_Bool
+elm_quicklaunch_mode_get(void)
+{
+ return quicklaunch_on;
}
EAPI int
-elm_quicklaunch_init(int argc, char **argv)
+elm_quicklaunch_init(int argc,
+ char **argv)
{
- char buf[PATH_MAX], *s;
-
- _elm_ql_init_count++;
+ _elm_ql_init_count++;
if (_elm_ql_init_count > 1) return _elm_ql_init_count;
eina_init();
_elm_log_dom = eina_log_domain_register("elementary", EINA_COLOR_LIGHTBLUE);
if (!_elm_log_dom)
{
- EINA_LOG_ERR("could not register elementary log domain.");
- _elm_log_dom = EINA_LOG_DOMAIN_GLOBAL;
+ EINA_LOG_ERR("could not register elementary log domain.");
+ _elm_log_dom = EINA_LOG_DOMAIN_GLOBAL;
}
eet_init();
ecore_init();
+
+#ifdef HAVE_ELEMENTARY_EMAP
+ emap_init();
+#endif
ecore_app_args_set(argc, (const char **)argv);
memset(_elm_policies, 0, sizeof(_elm_policies));
- if (ELM_EVENT_POLICY_CHANGED == 0)
+ if (!ELM_EVENT_POLICY_CHANGED)
ELM_EVENT_POLICY_CHANGED = ecore_event_type_new();
ecore_file_init();
if (argv) _elm_appname = strdup(ecore_file_file_get(argv[0]));
- if (!_elm_data_dir)
- {
- s = getenv("ELM_DATA_DIR");
- _elm_data_dir = eina_stringshare_add(s);
- }
- if (!_elm_data_dir)
- {
- s = getenv("ELM_PREFIX");
- if (s)
- {
- snprintf(buf, sizeof(buf), "%s/share/elementary", s);
- _elm_data_dir = eina_stringshare_add(buf);
- }
- }
- if (!_elm_lib_dir)
- {
- s = getenv("ELM_LIB_DIR");
- _elm_lib_dir = eina_stringshare_add(s);
- }
- if (!_elm_lib_dir)
- {
- s = getenv("ELM_PREFIX");
- if (s)
- {
- snprintf(buf, sizeof(buf), "%s/lib", s);
- _elm_lib_dir = eina_stringshare_add(buf);
- }
- }
-#ifdef HAVE_DLADDR
- if ((!_elm_data_dir) || (!_elm_lib_dir))
+ pfx = eina_prefix_new(NULL, elm_quicklaunch_init,
+ "ELM", "elementary", "config/profile.cfg",
+ PACKAGE_LIB_DIR, /* don't have a bin dir currently */
+ PACKAGE_LIB_DIR,
+ PACKAGE_DATA_DIR,
+ LOCALE_DIR);
+ if (pfx)
{
- Dl_info elementary_dl;
- // libelementary.so/../../share/elementary/
- if (dladdr(elm_init, &elementary_dl))
- {
- char *dir, *dir2;
-
- dir = ecore_file_dir_get(elementary_dl.dli_fname);
- if (dir)
- {
- if (!_elm_lib_dir)
- {
- if (ecore_file_is_dir(dir))
- _elm_lib_dir = eina_stringshare_add(dir);
- }
- if (!_elm_data_dir)
- {
- dir2 = ecore_file_dir_get(dir);
- if (dir2)
- {
- snprintf(buf, sizeof(buf), "%s/share/elementary", dir2);
- if (ecore_file_is_dir(buf))
- _elm_data_dir = eina_stringshare_add(buf);
- free(dir2);
- }
- }
- free(dir);
- }
+ _elm_data_dir = eina_stringshare_add(eina_prefix_data_get(pfx));
+ _elm_lib_dir = eina_stringshare_add(eina_prefix_lib_get(pfx));
}
- }
-#endif
- if (!_elm_data_dir)
- _elm_data_dir = eina_stringshare_add(PACKAGE_DATA_DIR);
- if (!_elm_data_dir)
- _elm_data_dir = eina_stringshare_add("/");
- if (!_elm_lib_dir)
- _elm_lib_dir = eina_stringshare_add(PACKAGE_LIB_DIR);
- if (!_elm_lib_dir)
- _elm_lib_dir = eina_stringshare_add("/");
+ if (!_elm_data_dir) _elm_data_dir = eina_stringshare_add("/");
+ if (!_elm_lib_dir) _elm_lib_dir = eina_stringshare_add("/");
_elm_config_init();
return _elm_ql_init_count;
}
EAPI int
-elm_quicklaunch_sub_init(int argc, char **argv)
-{
- _elm_sub_init_count++;
- if (_elm_sub_init_count > 1) return _elm_sub_init_count;
- if (quicklaunch_on)
- {
-#ifdef SEMI_BROKEN_QUICKLAUNCH
- return _elm_sub_init_count;
-#endif
- }
- if (!quicklaunch_on)
- {
- ecore_app_args_set(argc, (const char **)argv);
- evas_init();
- edje_init();
- _elm_module_init();
- _elm_config_sub_init();
- if ((_elm_config->engine == ELM_SOFTWARE_X11) ||
- (_elm_config->engine == ELM_SOFTWARE_16_X11) ||
- (_elm_config->engine == ELM_XRENDER_X11) ||
- (_elm_config->engine == ELM_OPENGL_X11))
- {
-#ifdef HAVE_ELEMENTARY_X
- ecore_x_init(NULL);
-#endif
- }
- ecore_evas_init(); // FIXME: check errors
- ecore_imf_init();
-
- }
- return _elm_sub_init_count;
+elm_quicklaunch_sub_init(int argc,
+ char **argv)
+{
+ _elm_sub_init_count++;
+ if (_elm_sub_init_count > 1) return _elm_sub_init_count;
+ if (quicklaunch_on)
+ {
+#ifdef SEMI_BROKEN_QUICKLAUNCH
+ return _elm_sub_init_count;
+#endif
+ }
+ if (!quicklaunch_on)
+ {
+ ecore_app_args_set(argc, (const char **)argv);
+ evas_init();
+ edje_init();
+ _elm_module_init();
+ _elm_config_sub_init();
+#define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
+ if (ENGINE_COMPARE(ELM_SOFTWARE_X11) ||
+ ENGINE_COMPARE(ELM_SOFTWARE_16_X11) ||
+ ENGINE_COMPARE(ELM_XRENDER_X11) ||
+ ENGINE_COMPARE(ELM_OPENGL_X11))
+#undef ENGINE_COMPARE
+ {
+#ifdef HAVE_ELEMENTARY_X
+ ecore_x_init(NULL);
+#endif
+ }
+ ecore_evas_init(); // FIXME: check errors
+ ecore_imf_init();
+ ecore_con_init();
+ ecore_con_url_init();
+ }
+ return _elm_sub_init_count;
}
EAPI int
elm_quicklaunch_sub_shutdown(void)
{
- _elm_sub_init_count--;
- if (_elm_sub_init_count > 0) return _elm_sub_init_count;
- if (quicklaunch_on)
- {
-#ifdef SEMI_BROKEN_QUICKLAUNCH
- return _elm_sub_init_count;
-#endif
- }
- if (!quicklaunch_on)
- {
- _elm_win_shutdown();
- _elm_module_shutdown();
- ecore_imf_shutdown();
- ecore_evas_shutdown();
- if ((_elm_config->engine == ELM_SOFTWARE_X11) ||
- (_elm_config->engine == ELM_SOFTWARE_16_X11) ||
- (_elm_config->engine == ELM_XRENDER_X11) ||
- (_elm_config->engine == ELM_OPENGL_X11))
- {
+ _elm_sub_init_count--;
+ if (_elm_sub_init_count > 0) return _elm_sub_init_count;
+ if (quicklaunch_on)
+ {
+#ifdef SEMI_BROKEN_QUICKLAUNCH
+ return _elm_sub_init_count;
+#endif
+ }
+ if (!quicklaunch_on)
+ {
+ _elm_win_shutdown();
+ _elm_module_shutdown();
+ ecore_con_url_shutdown();
+ ecore_con_shutdown();
+ ecore_imf_shutdown();
+ ecore_evas_shutdown();
+#define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
+ if (ENGINE_COMPARE(ELM_SOFTWARE_X11) ||
+ ENGINE_COMPARE(ELM_SOFTWARE_16_X11) ||
+ ENGINE_COMPARE(ELM_XRENDER_X11) ||
+ ENGINE_COMPARE(ELM_OPENGL_X11))
+#undef ENGINE_COMPARE
+ {
#ifdef HAVE_ELEMENTARY_X
- ecore_x_disconnect();
-#endif
- }
- if ((_elm_config->engine == ELM_SOFTWARE_X11) ||
- (_elm_config->engine == ELM_SOFTWARE_16_X11) ||
- (_elm_config->engine == ELM_XRENDER_X11) ||
- (_elm_config->engine == ELM_OPENGL_X11) ||
- (_elm_config->engine == ELM_SOFTWARE_SDL) ||
- (_elm_config->engine == ELM_SOFTWARE_16_SDL) ||
- (_elm_config->engine == ELM_OPENGL_SDL) ||
- (_elm_config->engine == ELM_SOFTWARE_WIN32) ||
- (_elm_config->engine == ELM_SOFTWARE_16_WINCE))
- evas_cserve_disconnect();
- edje_shutdown();
- evas_shutdown();
- }
- return _elm_sub_init_count;
+ ecore_x_disconnect();
+#endif
+ }
+#define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
+ if (ENGINE_COMPARE(ELM_SOFTWARE_X11) ||
+ ENGINE_COMPARE(ELM_SOFTWARE_16_X11) ||
+ ENGINE_COMPARE(ELM_XRENDER_X11) ||
+ ENGINE_COMPARE(ELM_OPENGL_X11) ||
+ ENGINE_COMPARE(ELM_SOFTWARE_SDL) ||
+ ENGINE_COMPARE(ELM_SOFTWARE_16_SDL) ||
+ ENGINE_COMPARE(ELM_OPENGL_SDL) ||
+ ENGINE_COMPARE(ELM_OPENGL_COCOA) ||
+ ENGINE_COMPARE(ELM_SOFTWARE_WIN32) ||
+ ENGINE_COMPARE(ELM_SOFTWARE_16_WINCE))
+#undef ENGINE_COMPARE
+ evas_cserve_disconnect();
+ edje_shutdown();
+ evas_shutdown();
+ }
+ return _elm_sub_init_count;
}
EAPI int
elm_quicklaunch_shutdown(void)
{
- _elm_ql_init_count--;
- if (_elm_ql_init_count > 0) return _elm_ql_init_count;
+ _elm_ql_init_count--;
+ if (_elm_ql_init_count > 0) return _elm_ql_init_count;
+ if (pfx) eina_prefix_free(pfx);
+ pfx = NULL;
eina_stringshare_del(_elm_data_dir);
_elm_data_dir = NULL;
eina_stringshare_del(_elm_lib_dir);
free(_elm_appname);
_elm_appname = NULL;
-
+
_elm_config_shutdown();
-
+
ecore_event_handler_del(_elm_exit_handler);
_elm_exit_handler = NULL;
_elm_unneed_efreet();
_elm_unneed_e_dbus();
_elm_unneed_ethumb();
+ _elm_unneed_web();
ecore_file_shutdown();
+
+#ifdef HAVE_ELEMENTARY_EMAP
+ emap_shutdown();
+#endif
+
ecore_shutdown();
eet_shutdown();
if ((_elm_log_dom > -1) && (_elm_log_dom != EINA_LOG_DOMAIN_GLOBAL))
{
- eina_log_domain_unregister(_elm_log_dom);
- _elm_log_dom = -1;
+ eina_log_domain_unregister(_elm_log_dom);
+ _elm_log_dom = -1;
}
- _elm_widtype_clear();
-
+ _elm_widget_type_clear();
+
eina_shutdown();
return _elm_ql_init_count;
}
EAPI void
elm_quicklaunch_seed(void)
{
-#ifndef SEMI_BROKEN_QUICKLAUNCH
- if (quicklaunch_on)
- {
- Evas_Object *win, *bg, *bt;
-
- win = elm_win_add(NULL, "seed", ELM_WIN_BASIC);
- bg = elm_bg_add(win);
- elm_win_resize_object_add(win, bg);
- evas_object_show(bg);
- bt = elm_button_add(win);
- elm_button_label_set(bt, " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~-_=+\\|]}[{;:'\",<.>/?");
- elm_win_resize_object_add(win, bt);
- ecore_main_loop_iterate();
- evas_object_del(win);
- ecore_main_loop_iterate();
- if ((_elm_config->engine == ELM_SOFTWARE_X11) ||
- (_elm_config->engine == ELM_SOFTWARE_16_X11) ||
- (_elm_config->engine == ELM_XRENDER_X11) ||
- (_elm_config->engine == ELM_OPENGL_X11))
- {
-# ifdef HAVE_ELEMENTARY_X
- ecore_x_sync();
-# endif
- }
- ecore_main_loop_iterate();
- }
+#ifndef SEMI_BROKEN_QUICKLAUNCH
+ if (quicklaunch_on)
+ {
+ Evas_Object *win, *bg, *bt;
+
+ win = elm_win_add(NULL, "seed", ELM_WIN_BASIC);
+ bg = elm_bg_add(win);
+ elm_win_resize_object_add(win, bg);
+ evas_object_show(bg);
+ bt = elm_button_add(win);
+ elm_button_label_set(bt, " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~-_=+\\|]}[{;:'\",<.>/?");
+ elm_win_resize_object_add(win, bt);
+ ecore_main_loop_iterate();
+ evas_object_del(win);
+ ecore_main_loop_iterate();
+#define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
+ if (ENGINE_COMPARE(ELM_SOFTWARE_X11) ||
+ ENGINE_COMPARE(ELM_SOFTWARE_16_X11) ||
+ ENGINE_COMPARE(ELM_XRENDER_X11) ||
+ ENGINE_COMPARE(ELM_OPENGL_X11))
+#undef ENGINE_COMPARE
+ {
+# ifdef HAVE_ELEMENTARY_X
+ ecore_x_sync();
+# endif
+ }
+ ecore_main_loop_iterate();
+ }
#endif
}
static void *qr_handle = NULL;
-static int (*qr_main) (int argc, char **argv) = NULL;
+static int (*qr_main)(int argc,
+ char **argv) = NULL;
EAPI Eina_Bool
-elm_quicklaunch_prepare(int argc __UNUSED__, char **argv)
+elm_quicklaunch_prepare(int argc __UNUSED__,
+ char **argv)
{
#ifdef HAVE_FORK
char *exe = elm_quicklaunch_exe_path_get(argv[0]);
if (!exe)
{
- ERR("requested quicklaunch binary '%s' does not exist\n", argv[0]);
- return EINA_FALSE;
+ ERR("requested quicklaunch binary '%s' does not exist\n", argv[0]);
+ return EINA_FALSE;
}
else
{
- char *exe2, *p;
- char *exename;
-
- exe2 = malloc(strlen(exe) + 1 + 10);
- strcpy(exe2, exe);
- p = strrchr(exe2, '/');
- if (p) p++;
- else p = exe2;
- exename = alloca(strlen(p) + 1);
- strcpy(exename, p);
- *p = 0;
- strcat(p, "../lib/");
- strcat(p, exename);
- strcat(p, ".so");
- if (access(exe2, R_OK | X_OK) == 0)
- {
- free(exe);
- exe = exe2;
- }
- else
- free(exe2);
+ char *exe2, *p;
+ char *exename;
+
+ exe2 = malloc(strlen(exe) + 1 + 10);
+ strcpy(exe2, exe);
+ p = strrchr(exe2, '/');
+ if (p) p++;
+ else p = exe2;
+ exename = alloca(strlen(p) + 1);
+ strcpy(exename, p);
+ *p = 0;
+ strcat(p, "../lib/");
+ strcat(p, exename);
+ strcat(p, ".so");
+ if (!access(exe2, R_OK | X_OK))
+ {
+ free(exe);
+ exe = exe2;
+ }
+ else
+ free(exe2);
}
qr_handle = dlopen(exe, RTLD_NOW | RTLD_GLOBAL);
if (!qr_handle)
{
fprintf(stderr, "dlerr: %s\n", dlerror());
- WRN("dlopen('%s') failed: %s", exe, dlerror());
- free(exe);
- return EINA_FALSE;
+ WRN("dlopen('%s') failed: %s", exe, dlerror());
+ free(exe);
+ return EINA_FALSE;
}
INF("dlopen('%s') = %p", exe, qr_handle);
- free(exe);
qr_main = dlsym(qr_handle, "elm_main");
INF("dlsym(%p, 'elm_main') = %p", qr_handle, qr_main);
if (!qr_main)
{
- WRN("not quicklauncher capable: no elm_main in '%s'", exe);
- dlclose(qr_handle);
- qr_handle = NULL;
- return EINA_FALSE;
+ WRN("not quicklauncher capable: no elm_main in '%s'", exe);
+ dlclose(qr_handle);
+ qr_handle = NULL;
+ free(exe);
+ return EINA_FALSE;
}
+ free(exe);
return EINA_TRUE;
#else
return EINA_FALSE;
+ (void)argv;
#endif
}
environ[i] = strdup(oldenv[i]);
environ[i] = NULL;
}
+
#endif
EAPI Eina_Bool
-elm_quicklaunch_fork(int argc, char **argv, char *cwd, void (postfork_func) (void *data), void *postfork_data)
+elm_quicklaunch_fork(int argc,
+ char **argv,
+ char *cwd,
+ void (postfork_func) (void *data),
+ void *postfork_data)
{
#ifdef HAVE_FORK
pid_t child;
// need to accept current environment from elementary_run
if (!qr_main)
{
- int i;
- char **args;
+ int i;
+ char **args;
+ child = fork();
+ if (child > 0) return EINA_TRUE;
+ else if (child < 0)
+ {
+ perror("could not fork");
+ return EINA_FALSE;
+ }
+ setsid();
+ if (chdir(cwd) != 0)
+ perror("could not chdir");
+ args = alloca((argc + 1) * sizeof(char *));
+ for (i = 0; i < argc; i++) args[i] = argv[i];
+ args[argc] = NULL;
+ WRN("%s not quicklaunch capable, fallback...", argv[0]);
+ execvp(argv[0], args);
+ ERR("failed to execute '%s': %s", argv[0], strerror(errno));
+ exit(-1);
+ }
child = fork();
if (child > 0) return EINA_TRUE;
else if (child < 0)
perror("could not fork");
return EINA_FALSE;
}
- setsid();
- if (chdir(cwd) != 0)
- perror("could not chdir");
- args = alloca((argc + 1) * sizeof(char *));
- for (i = 0; i < argc; i++) args[i] = argv[i];
- args[argc] = NULL;
- WRN("%s not quicklaunch capable, fallback...", argv[0]);
- execvp(argv[0], args);
- ERR("failed to execute '%s': %s", argv[0], strerror(errno));
- exit(-1);
- }
- child = fork();
- if (child > 0) return EINA_TRUE;
- else if (child < 0)
+ if (postfork_func) postfork_func(postfork_data);
+
+ if (quicklaunch_on)
{
- perror("could not fork");
- return EINA_FALSE;
+#ifdef SEMI_BROKEN_QUICKLAUNCH
+ ecore_app_args_set(argc, (const char **)argv);
+ evas_init();
+ edje_init();
+ _elm_config_sub_init();
+#define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name))
+ if (ENGINE_COMPARE(ELM_SOFTWARE_X11) ||
+ ENGINE_COMPARE(ELM_SOFTWARE_16_X11) ||
+ ENGINE_COMPARE(ELM_XRENDER_X11) ||
+ ENGINE_COMPARE(ELM_OPENGL_X11))
+#undef ENGINE_COMPARE
+ {
+# ifdef HAVE_ELEMENTARY_X
+ ecore_x_init(NULL);
+# endif
+ }
+ ecore_evas_init(); // FIXME: check errors
+ ecore_imf_init();
+ _elm_module_init();
+#endif
}
- if (postfork_func) postfork_func(postfork_data);
- if (quicklaunch_on)
- {
-#ifdef SEMI_BROKEN_QUICKLAUNCH
- ecore_app_args_set(argc, (const char **)argv);
- evas_init();
- edje_init();
- _elm_config_sub_init();
- if ((_elm_config->engine == ELM_SOFTWARE_X11) ||
- (_elm_config->engine == ELM_SOFTWARE_16_X11) ||
- (_elm_config->engine == ELM_XRENDER_X11) ||
- (_elm_config->engine == ELM_OPENGL_X11))
- {
-# ifdef HAVE_ELEMENTARY_X
- ecore_x_init(NULL);
-# endif
- }
- ecore_evas_init(); // FIXME: check errors
- ecore_imf_init();
- _elm_module_init();
-#endif
- }
-
setsid();
if (chdir(cwd) != 0)
perror("could not chdir");
save_env();
if (argv)
{
- char *lastarg, *p;
+ char *lastarg, *p;
- ecore_app_args_get(&real_argc, &real_argv);
- lastarg = real_argv[real_argc - 1] + strlen(real_argv[real_argc - 1]);
- for (p = real_argv[0]; p < lastarg; p++) *p = 0;
- strcpy(real_argv[0], argv[0]);
+ ecore_app_args_get(&real_argc, &real_argv);
+ lastarg = real_argv[real_argc - 1] + strlen(real_argv[real_argc - 1]);
+ for (p = real_argv[0]; p < lastarg; p++) *p = 0;
+ strcpy(real_argv[0], argv[0]);
}
ecore_app_args_set(argc, (const char **)argv);
ret = qr_main(argc, argv);
return EINA_TRUE;
#else
return EINA_FALSE;
+ (void)argc;
+ (void)argv;
+ (void)cwd;
+ (void)postfork_func;
+ (void)postfork_data;
#endif
}
#ifdef HAVE_FORK
if (qr_handle)
{
- dlclose(qr_handle);
- qr_handle = NULL;
- qr_main = NULL;
+ dlclose(qr_handle);
+ qr_handle = NULL;
+ qr_main = NULL;
}
#endif
}
EAPI int
-elm_quicklaunch_fallback(int argc, char **argv)
+elm_quicklaunch_fallback(int argc,
+ char **argv)
{
int ret;
elm_quicklaunch_init(argc, argv);
if ((exe[0] == '.') && (exe[1] == '.') && (exe[2] == '/')) return strdup(exe);
if (!path)
{
- const char *p, *pp;
- char *buf2;
- path = getenv("PATH");
- buf2 = alloca(strlen(path) + 1);
- p = path;
- pp = p;
- for (;;)
- {
- if ((*p == ':') || (*p == 0))
- {
- int len;
-
- len = p - pp;
- strncpy(buf2, pp, len);
- buf2[len] = 0;
- pathlist = eina_list_append(pathlist, eina_stringshare_add(buf2));
- if (*p == 0) break;
- p++;
+ const char *p, *pp;
+ char *buf2;
+ path = getenv("PATH");
+ buf2 = alloca(strlen(path) + 1);
+ p = path;
pp = p;
- }
- else
+ for (;; )
{
- if (*p == 0) break;
- p++;
+ if ((*p == ':') || (!*p))
+ {
+ int len;
+
+ len = p - pp;
+ strncpy(buf2, pp, len);
+ buf2[len] = 0;
+ pathlist = eina_list_append(pathlist, eina_stringshare_add(buf2));
+ if (!*p) break;
+ p++;
+ pp = p;
+ }
+ else
+ {
+ if (!*p) break;
+ p++;
+ }
}
}
- }
EINA_LIST_FOREACH(pathlist, l, pathitr)
{
- snprintf(buf, sizeof(buf), "%s/%s", pathitr, exe);
- if (access(buf, R_OK | X_OK) == 0) return strdup(buf);
+ snprintf(buf, sizeof(buf), "%s/%s", pathitr, exe);
+ if (!access(buf, R_OK | X_OK)) return strdup(buf);
}
return NULL;
}
-/**
- * Run the main loop
- *
- * This call should be called just after all initialization is complete. This
- * function will not return until elm_exit() is called. It will keep looping
- * running the main event/processing loop for Elementary.
- * @ingroup General
- */
EAPI void
elm_run(void)
{
ecore_main_loop_begin();
}
-/**
- * Exit the main loop
- *
- * If this call is called, it will flag the main loop to cease processing and
- * return back to its parent function.
- * @ingroup General
- */
EAPI void
elm_exit(void)
{
ecore_main_loop_quit();
}
-
-/**
- * Set new policy value.
- *
- * This will emit the ecore event ELM_EVENT_POLICY_CHANGED in the main
- * loop giving the event information Elm_Event_Policy_Changed with
- * policy identifier, new and old values.
- *
- * @param policy policy identifier as in Elm_Policy.
- * @param value policy value, depends on identifiers, usually there is
- * an enumeration with the same prefix as the policy name, for
- * example: ELM_POLICY_QUIT and Elm_Policy_Quit
- * (ELM_POLICY_QUIT_NONE, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED).
- *
- * @return @c EINA_TRUE on success or @c EINA_FALSE on error (right
- * now just invalid policy identifier, but in future policy
- * value might be enforced).
- */
EAPI Eina_Bool
-elm_policy_set(unsigned int policy, int value)
+elm_policy_set(unsigned int policy,
+ int value)
{
Elm_Event_Policy_Changed *ev;
return EINA_TRUE;
}
-/**
- * Gets the policy value set for given identifier.
- *
- * @param policy policy identifier as in Elm_Policy.
- *
- * @return policy value. Will be 0 if policy identifier is invalid.
- */
EAPI int
elm_policy_get(unsigned int policy)
{
return _elm_policies[policy];
}
-/**
- * Flush all caches & dump all data that can be to lean down to use less memory
- */
EAPI void
-elm_all_flush(void)
+elm_language_set(const char *lang)
{
- const Eina_List *l;
- Evas_Object *obj;
-
- EINA_LIST_FOREACH(_elm_win_list, l, obj)
- {
- Evas *e = evas_object_evas_get(obj);
- edje_file_cache_flush();
- edje_collection_cache_flush();
- evas_image_cache_flush(e);
- evas_font_cache_flush(e);
- evas_render_dump(e);
- }
+ setlocale(LC_ALL, lang);
+ _elm_win_translate();
+}
+
+EAPI Eina_Bool
+elm_object_mirrored_get(const Evas_Object *obj)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
+ return elm_widget_mirrored_get(obj);
+}
+
+EAPI void
+elm_object_mirrored_set(Evas_Object *obj, Eina_Bool mirrored)
+{
+ EINA_SAFETY_ON_NULL_RETURN(obj);
+ elm_widget_mirrored_set(obj, mirrored);
+}
+
+EAPI Eina_Bool
+elm_object_mirrored_automatic_get(const Evas_Object *obj)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
+ return elm_widget_mirrored_automatic_get(obj);
+}
+
+EAPI void
+elm_object_mirrored_automatic_set(Evas_Object *obj, Eina_Bool automatic)
+{
+ EINA_SAFETY_ON_NULL_RETURN(obj);
+ elm_widget_mirrored_automatic_set(obj, automatic);
}
-/**
- * @defgroup Scaling Selective Widget Scaling
- * @ingroup Main
- *
- * Different widgets can be scaled independently. These functions allow you to
- * manipulate this scaling on a per-widget basis. The object and all its
- * children get their scaling factors multiplied by the scale factor set.
- * This is multiplicative, in that if a child also has a scale size set it is
- * in turn multiplied by its parent's scale size. 1.0 means “don't scale”,
- * 2.0 is double size, 0.5 is half etc.
- */
-
-/**
- * Set the scaling factor
- *
- * @param obj The object
- * @param scale Scale factor (from 0.0 up, with 1.0 == no scaling)
- * @ingroup Scaling
- */
-EAPI void
-elm_object_scale_set(Evas_Object *obj, double scale)
+EAPI void
+elm_object_scale_set(Evas_Object *obj,
+ double scale)
{
+ EINA_SAFETY_ON_NULL_RETURN(obj);
elm_widget_scale_set(obj, scale);
}
-/**
- * Get the scaling factor
- *
- * @param obj The object
- * @return The scaling factor set by elm_object_scale_set()
- * @ingroup Scaling
- */
EAPI double
elm_object_scale_get(const Evas_Object *obj)
{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(obj, 0.0);
return elm_widget_scale_get(obj);
}
-/**
- * @defgroup Styles Styles
- * @ingroup Main
- *
- * Widgets can have different styles of look. These generic API's set
- * styles of widgets, if they support them (and if the theme(s) do).
- */
+EAPI void
+elm_object_text_part_set(Evas_Object *obj, const char *part, const char *label)
+{
+ EINA_SAFETY_ON_NULL_RETURN(obj);
+ elm_widget_text_part_set(obj, part, label);
+}
+
+EAPI const char *
+elm_object_text_part_get(const Evas_Object *obj, const char *part)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
+ return elm_widget_text_part_get(obj, part);
+}
-/**
- * Set the style
- *
- * This sets the name of the style
- * @param obj The object
- * @param style The style name to use
- * @ingroup Styles
- */
EAPI void
-elm_object_style_set(Evas_Object *obj, const char *style)
+elm_object_domain_translatable_text_part_set(Evas_Object *obj, const char *part, const char *domain, const char *text)
{
- elm_widget_style_set(obj, style);
+ EINA_SAFETY_ON_NULL_RETURN(obj);
+ elm_widget_domain_translatable_text_part_set(obj, part, domain, text);
}
-/**
- * Get the style
- *
- * This gets the style being used for that widget. Note that the string
- * pointer is only valid as longas the object is valid and the style doesn't
- * change.
- *
- * @param obj The object
- * @return The style name
- * @ingroup Styles
- */
EAPI const char *
-elm_object_style_get(const Evas_Object *obj)
+elm_object_translatable_text_part_get(const Evas_Object *obj, const char *part)
{
- return elm_widget_style_get(obj);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
+ return elm_widget_translatable_text_part_get(obj, part);
}
-/**
- * Set the disable state
- *
- * This sets the disable state for the widget.
- *
- * @param obj The object
- * @param disabled The state
- * @ingroup Styles
- */
EAPI void
-elm_object_disabled_set(Evas_Object *obj, Eina_Bool disabled)
+elm_object_content_part_set(Evas_Object *obj, const char *part, Evas_Object *content)
{
- elm_widget_disabled_set(obj, disabled);
+ EINA_SAFETY_ON_NULL_RETURN(obj);
+ elm_widget_content_part_set(obj, part, content);
}
-/**
- * Get the disable state
- *
- * This gets the disable state for the widget.
- *
- * @param obj The object
- * @return True, if the widget is disabled
- * @ingroup Styles
- */
-EAPI Eina_Bool
-elm_object_disabled_get(const Evas_Object *obj)
+EAPI Evas_Object *
+elm_object_content_part_get(const Evas_Object *obj, const char *part)
{
- return elm_widget_disabled_get(obj);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
+ return elm_widget_content_part_get(obj, part);
+}
+
+EAPI Evas_Object *
+elm_object_content_part_unset(Evas_Object *obj, const char *part)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
+ return elm_widget_content_part_unset(obj, part);
}
-/**
- * Get the global scaling factor
- *
- * This gets the globally configured scaling factor that is applied to all
- * objects.
- *
- * @return The scaling factor
- * @ingroup Scaling
- */
EAPI double
elm_scale_get(void)
{
return _elm_config->scale;
}
-/**
- * Set the global scaling factor
- *
- * This sets the globally configured scaling factor that is applied to all
- * objects.
- *
- * @param scale The scaling factor to set
- * @ingroup Scaling
- */
EAPI void
elm_scale_set(double scale)
{
_elm_rescale();
}
-/**
- * Set the global scaling factor for all applications on the display
- *
- * This sets the globally configured scaling factor that is applied to all
- * objects for all applications.
- * @param scale The scaling factor to set
- * @ingroup Scaling
- */
EAPI void
elm_scale_all_set(double scale)
{
if (!atom) atom = ecore_x_atom_get("ENLIGHTENMENT_SCALE");
ecore_x_window_prop_card32_set(ecore_x_window_root_first_get(),
atom, &scale_i, 1);
-#endif
-}
-
-/**
- * @defgroup Fingers Fingers
- * @ingroup Main
- *
- * Elementary is designed to be finger-friendly for touchscreens, and so in
- * addition to scaling for display resolution, it can also scale based on
- * finger "resolution" (or size).
- */
-
-/**
- * Get the configured finger size
- *
- * This gets the globally configured finger size in pixels
- *
- * @return The finger size
- * @ingroup Fingers
- */
-EAPI Evas_Coord
-elm_finger_size_get(void)
+#endif
+}
+
+EAPI Eina_Bool
+elm_password_show_last_get(void)
{
- return _elm_config->finger_size;
+ return _elm_config->password_show_last;
}
-/**
- * Set the configured finger size
- *
- * This sets the globally configured finger size in pixels
- *
- * @param size The finger size
- * @ingroup Fingers
- */
EAPI void
-elm_finger_size_set(Evas_Coord size)
+elm_password_show_last_set(Eina_Bool password_show_last)
{
- if (_elm_config->finger_size == size) return;
- _elm_config->finger_size = size;
- _elm_rescale();
+ if (_elm_config->password_show_last == password_show_last) return;
+ _elm_config->password_show_last = password_show_last;
+ edje_password_show_last_set(_elm_config->password_show_last);
}
-/**
- * Set the configured finger size for all applications on the display
- *
- * This sets the globally configured finger size in pixels for all applications
- * on the display
- *
- * @param size The finger size
- * @ingroup Fingers
- */
-EAPI void
-elm_finger_size_all_set(Evas_Coord size)
+EAPI double
+elm_password_show_last_timeout_get(void)
{
-#ifdef HAVE_ELEMENTARY_X
- static Ecore_X_Atom atom = 0;
- unsigned int size_i = (unsigned int)size;
+ return _elm_config->password_show_last_timeout;
+}
- if (!atom) atom = ecore_x_atom_get("ENLIGHTENMENT_FINGER_SIZE");
- ecore_x_window_prop_card32_set(ecore_x_window_root_first_get(),
- atom, &size_i, 1);
-#endif
+EAPI void
+elm_password_show_last_timeout_set(double password_show_last_timeout)
+{
+ if (_elm_config->password_show_last_timeout == password_show_last_timeout) return;
+ _elm_config->password_show_last_timeout = password_show_last_timeout;
+ edje_password_show_last_timeout_set(_elm_config->password_show_last_timeout);
}
EAPI void
-elm_autocapitalization_allow_all_set(Eina_Bool on)
+elm_object_style_set(Evas_Object *obj,
+ const char *style)
{
-#ifdef HAVE_ELEMENTARY_X
- static Ecore_X_Atom atom = 0;
- unsigned int on_i = (unsigned int)on;
+ EINA_SAFETY_ON_NULL_RETURN(obj);
+ elm_widget_style_set(obj, style);
+}
- if (!atom) atom = ecore_x_atom_get("ENLIGHTENMENT_AUTOCAPITAL_ALLOW");
- ecore_x_window_prop_card32_set(ecore_x_window_root_first_get(),
- atom, &on_i, 1);
-#endif
+EAPI const char *
+elm_object_style_get(const Evas_Object *obj)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
+ return elm_widget_style_get(obj);
}
EAPI void
-elm_autoperiod_allow_all_set(Eina_Bool on)
+elm_object_disabled_set(Evas_Object *obj,
+ Eina_Bool disabled)
+{
+ EINA_SAFETY_ON_NULL_RETURN(obj);
+ elm_widget_disabled_set(obj, disabled);
+}
+
+EAPI Eina_Bool
+elm_object_disabled_get(const Evas_Object *obj)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
+ return elm_widget_disabled_get(obj);
+}
+
+EAPI Eina_Bool
+elm_config_save(void)
+{
+ return _elm_config_save();
+}
+
+EAPI void
+elm_config_reload(void)
+{
+ _elm_config_reload();
+}
+
+EAPI const char *
+elm_profile_current_get(void)
+{
+ return _elm_config_current_profile_get();
+}
+
+EAPI const char *
+elm_profile_dir_get(const char *profile,
+ Eina_Bool is_user)
+{
+ return _elm_config_profile_dir_get(profile, is_user);
+}
+
+EAPI void
+elm_profile_dir_free(const char *p_dir)
+{
+ free((void *)p_dir);
+}
+
+EAPI Eina_List *
+elm_profile_list_get(void)
+{
+ return _elm_config_profiles_list();
+}
+
+EAPI void
+elm_profile_list_free(Eina_List *l)
+{
+ const char *dir;
+
+ EINA_LIST_FREE(l, dir)
+ eina_stringshare_del(dir);
+}
+
+EAPI void
+elm_profile_set(const char *profile)
+{
+ EINA_SAFETY_ON_NULL_RETURN(profile);
+ _elm_config_profile_set(profile);
+}
+
+EAPI void
+elm_profile_all_set(const char *profile)
+{
+#ifdef HAVE_ELEMENTARY_X
+ static Ecore_X_Atom atom = 0;
+
+ if (!atom) atom = ecore_x_atom_get("ENLIGHTENMENT_PROFILE");
+ ecore_x_window_prop_string_set(ecore_x_window_root_first_get(),
+ atom, profile);
+#endif
+}
+
+EAPI const char *
+elm_engine_current_get(void)
+{
+ return _elm_config->engine;
+}
+
+EAPI void
+elm_engine_set(const char *engine)
+{
+ EINA_SAFETY_ON_NULL_RETURN(engine);
+
+ _elm_config_engine_set(engine);
+}
+
+EAPI const Eina_List *
+elm_text_classes_list_get(void)
+{
+ return _elm_config_text_classes_get();
+}
+
+EAPI void
+elm_text_classes_list_free(const Eina_List *list)
+{
+ _elm_config_text_classes_free((Eina_List *)list);
+}
+
+EAPI const Eina_List *
+elm_font_overlay_list_get(void)
+{
+ return _elm_config_font_overlays_list();
+}
+
+EAPI void
+elm_font_overlay_set(const char *text_class,
+ const char *font,
+ Evas_Font_Size size)
+{
+ _elm_config_font_overlay_set(text_class, font, size);
+}
+
+EAPI void
+elm_font_overlay_unset(const char *text_class)
+{
+ _elm_config_font_overlay_remove(text_class);
+}
+
+EAPI void
+elm_font_overlay_apply(void)
+{
+ _elm_config_font_overlay_apply();
+}
+
+EAPI void
+elm_font_overlay_all_apply(void)
+{
+#ifdef HAVE_ELEMENTARY_X
+ static Ecore_X_Atom atom = 0;
+ unsigned int dummy = (unsigned int)(1 * 1000.0);
+
+ if (!atom) atom = ecore_x_atom_get("ENLIGHTENMENT_FONT_OVERLAY");
+ ecore_x_window_prop_card32_set(ecore_x_window_root_first_get(), atom, &dummy,
+ 1);
+#endif
+}
+
+EAPI Elm_Font_Properties *
+elm_font_properties_get(const char *font)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(font, NULL);
+ return _elm_font_properties_get(NULL, font);
+}
+
+EAPI void
+elm_font_properties_free(Elm_Font_Properties *efp)
+{
+ const char *str;
+
+ EINA_SAFETY_ON_NULL_RETURN(efp);
+ EINA_LIST_FREE(efp->styles, str)
+ if (str) eina_stringshare_del(str);
+ if (efp->name) eina_stringshare_del(efp->name);
+ free(efp);
+}
+
+EAPI const char *
+elm_font_fontconfig_name_get(const char *name,
+ const char *style)
+{
+ char buf[256];
+
+ EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL);
+ if (!style || style[0] == 0) return eina_stringshare_add(name);
+ snprintf(buf, 256, "%s" ELM_FONT_TOKEN_STYLE "%s", name, style);
+ return eina_stringshare_add(buf);
+}
+
+EAPI void
+elm_font_fontconfig_name_free(const char *name)
+{
+ eina_stringshare_del(name);
+}
+
+EAPI Eina_Hash *
+elm_font_available_hash_add(Eina_List *list)
+{
+ Eina_Hash *font_hash;
+ Eina_List *l;
+ void *key;
+
+ font_hash = NULL;
+
+ /* populate with default font families */
+ font_hash = _elm_font_available_hash_add(font_hash, "Sans:style=Regular");
+ font_hash = _elm_font_available_hash_add(font_hash, "Sans:style=Bold");
+ font_hash = _elm_font_available_hash_add(font_hash, "Sans:style=Oblique");
+ font_hash = _elm_font_available_hash_add(font_hash,
+ "Sans:style=Bold Oblique");
+
+ font_hash = _elm_font_available_hash_add(font_hash, "Serif:style=Regular");
+ font_hash = _elm_font_available_hash_add(font_hash, "Serif:style=Bold");
+ font_hash = _elm_font_available_hash_add(font_hash, "Serif:style=Oblique");
+ font_hash = _elm_font_available_hash_add(font_hash,
+ "Serif:style=Bold Oblique");
+
+ font_hash = _elm_font_available_hash_add(font_hash,
+ "Monospace:style=Regular");
+ font_hash = _elm_font_available_hash_add(font_hash,
+ "Monospace:style=Bold");
+ font_hash = _elm_font_available_hash_add(font_hash,
+ "Monospace:style=Oblique");
+ font_hash = _elm_font_available_hash_add(font_hash,
+ "Monospace:style=Bold Oblique");
+
+ EINA_LIST_FOREACH(list, l, key)
+ font_hash = _elm_font_available_hash_add(font_hash, key);
+
+ return font_hash;
+}
+
+EAPI void
+elm_font_available_hash_del(Eina_Hash *hash)
+{
+ _elm_font_available_hash_del(hash);
+}
+
+EAPI Evas_Coord
+elm_finger_size_get(void)
+{
+ return _elm_config->finger_size;
+}
+
+EAPI void
+elm_finger_size_set(Evas_Coord size)
+{
+ if (_elm_config->finger_size == size) return;
+ _elm_config->finger_size = size;
+ _elm_rescale();
+}
+
+EAPI void
+elm_finger_size_all_set(Evas_Coord size)
+{
+#ifdef HAVE_ELEMENTARY_X
+ static Ecore_X_Atom atom = 0;
+ unsigned int size_i = (unsigned int)size;
+
+ if (!atom) atom = ecore_x_atom_get("ENLIGHTENMENT_FINGER_SIZE");
+ ecore_x_window_prop_card32_set(ecore_x_window_root_first_get(),
+ atom, &size_i, 1);
+#endif
+}
+
+EAPI void
+elm_autocapitalization_allow_all_set(Eina_Bool on)
+{
+#ifdef HAVE_ELEMENTARY_X
+ static Ecore_X_Atom atom = 0;
+ unsigned int on_i = (unsigned int)on;
+
+ if (!atom) atom = ecore_x_atom_get("ENLIGHTENMENT_AUTOCAPITAL_ALLOW");
+ ecore_x_window_prop_card32_set(ecore_x_window_root_first_get(),
+ atom, &on_i, 1);
+#endif
+}
+
+EAPI void
+elm_autoperiod_allow_all_set(Eina_Bool on)
+{
+#ifdef HAVE_ELEMENTARY_X
+ static Ecore_X_Atom atom = 0;
+ unsigned int on_i = (unsigned int)on;
+
+ if (!atom) atom = ecore_x_atom_get("ENLIGHTENMENT_AUTOPERIOD_ALLOW");
+ ecore_x_window_prop_card32_set(ecore_x_window_root_first_get(),
+ atom, &on_i, 1);
+#endif
+}
+
+EAPI void
+elm_coords_finger_size_adjust(int times_w,
+ Evas_Coord *w,
+ int times_h,
+ Evas_Coord *h)
+{
+ if ((w) && (*w < (_elm_config->finger_size * times_w)))
+ *w = _elm_config->finger_size * times_w;
+ if ((h) && (*h < (_elm_config->finger_size * times_h)))
+ *h = _elm_config->finger_size * times_h;
+}
+
+EAPI void
+elm_all_flush(void)
+{
+ const Eina_List *l;
+ Evas_Object *obj;
+
+ edje_file_cache_flush();
+ edje_collection_cache_flush();
+ eet_clearcache();
+ EINA_LIST_FOREACH(_elm_win_list, l, obj)
+ {
+ Evas *e = evas_object_evas_get(obj);
+ evas_image_cache_flush(e);
+ evas_font_cache_flush(e);
+ evas_render_dump(e);
+ }
+}
+
+EAPI int
+elm_cache_flush_interval_get(void)
+{
+ return _elm_config->cache_flush_poll_interval;
+}
+
+EAPI void
+elm_cache_flush_interval_set(int size)
+{
+ if (_elm_config->cache_flush_poll_interval == size) return;
+ _elm_config->cache_flush_poll_interval = size;
+
+ _elm_recache();
+}
+
+EAPI void
+elm_cache_flush_interval_all_set(int size)
+{
+#ifdef HAVE_ELEMENTARY_X
+ static Ecore_X_Atom atom = 0;
+ unsigned int size_i = (unsigned int)size;
+
+ if (!atom) atom = ecore_x_atom_get("ENLIGHTENMENT_CACHE_FLUSH_INTERVAL");
+ ecore_x_window_prop_card32_set(ecore_x_window_root_first_get(),
+ atom, &size_i, 1);
+#endif
+}
+
+EAPI Eina_Bool
+elm_cache_flush_enabled_get(void)
+{
+ return _elm_config->cache_flush_enable;
+}
+
+EAPI void
+elm_cache_flush_enabled_set(Eina_Bool enabled)
+{
+ enabled = !!enabled;
+ if (_elm_config->cache_flush_enable == enabled) return;
+ _elm_config->cache_flush_enable = enabled;
+
+ _elm_recache();
+}
+
+EAPI void
+elm_cache_flush_enabled_all_set(Eina_Bool enabled)
+{
+#ifdef HAVE_ELEMENTARY_X
+ static Ecore_X_Atom atom = 0;
+ unsigned int enabled_i = (unsigned int)enabled;
+
+ if (!atom) atom = ecore_x_atom_get("ENLIGHTENMENT_CACHE_FLUSH_ENABLE");
+ ecore_x_window_prop_card32_set(ecore_x_window_root_first_get(),
+ atom, &enabled_i, 1);
+#endif
+}
+
+EAPI int
+elm_font_cache_get(void)
+{
+ return _elm_config->font_cache;
+}
+
+EAPI void
+elm_font_cache_set(int size)
+{
+ if (_elm_config->font_cache == size) return;
+ _elm_config->font_cache = size;
+
+ _elm_recache();
+}
+
+EAPI void
+elm_font_cache_all_set(int size)
+{
+#ifdef HAVE_ELEMENTARY_X
+ static Ecore_X_Atom atom = 0;
+ unsigned int size_i = (unsigned int)size;
+
+ if (!atom) atom = ecore_x_atom_get("ENLIGHTENMENT_FONT_CACHE");
+ ecore_x_window_prop_card32_set(ecore_x_window_root_first_get(),
+ atom, &size_i, 1);
+#endif
+}
+
+EAPI int
+elm_image_cache_get(void)
+{
+ return _elm_config->image_cache;
+}
+
+EAPI void
+elm_image_cache_set(int size)
+{
+ if (_elm_config->image_cache == size) return;
+ _elm_config->image_cache = size;
+
+ _elm_recache();
+}
+
+EAPI void
+elm_image_cache_all_set(int size)
+{
+#ifdef HAVE_ELEMENTARY_X
+ static Ecore_X_Atom atom = 0;
+ unsigned int size_i = (unsigned int)size;
+
+ if (!atom) atom = ecore_x_atom_get("ENLIGHTENMENT_IMAGE_CACHE");
+ ecore_x_window_prop_card32_set(ecore_x_window_root_first_get(),
+ atom, &size_i, 1);
+#endif
+}
+
+EAPI int
+elm_edje_file_cache_get(void)
+{
+ return _elm_config->edje_cache;
+}
+
+EAPI void
+elm_edje_file_cache_set(int size)
+{
+ if (_elm_config->edje_cache == size) return;
+ _elm_config->edje_cache = size;
+
+ _elm_recache();
+}
+
+EAPI void
+elm_edje_file_cache_all_set(int size)
+{
+#ifdef HAVE_ELEMENTARY_X
+ static Ecore_X_Atom atom = 0;
+ unsigned int size_i = (unsigned int)size;
+
+ if (!atom) atom = ecore_x_atom_get("ENLIGHTENMENT_EDJE_FILE_CACHE");
+ ecore_x_window_prop_card32_set(ecore_x_window_root_first_get(),
+ atom, &size_i, 1);
+#endif
+}
+
+EAPI int
+elm_edje_collection_cache_get(void)
+{
+ return _elm_config->edje_collection_cache;
+}
+
+EAPI void
+elm_edje_collection_cache_set(int size)
+{
+ if (_elm_config->edje_collection_cache == size) return;
+ _elm_config->edje_collection_cache = size;
+
+ _elm_recache();
+}
+
+EAPI void
+elm_edje_collection_cache_all_set(int size)
+{
+#ifdef HAVE_ELEMENTARY_X
+ static Ecore_X_Atom atom = 0;
+ unsigned int size_i = (unsigned int)size;
+
+ if (!atom) atom = ecore_x_atom_get("ENLIGHTENMENT_EDJE_COLLECTION_CACHE");
+ ecore_x_window_prop_card32_set(ecore_x_window_root_first_get(),
+ atom, &size_i, 1);
+#endif
+}
+
+EAPI Eina_Bool
+elm_object_focus_get(const Evas_Object *obj)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
+ return elm_widget_focus_get(obj);
+}
+
+EAPI void
+elm_object_focus_set(Evas_Object *obj,
+ Eina_Bool focus)
+{
+ EINA_SAFETY_ON_NULL_RETURN(obj);
+ if (focus)
+ {
+ if (elm_widget_focus_get(obj)) return;
+ elm_widget_focus_cycle(obj, ELM_FOCUS_NEXT);
+ }
+ else
+ {
+ if (!elm_widget_can_focus_get(obj)) return;
+ elm_widget_focused_object_clear(obj);
+ }
+}
+
+EAPI void
+elm_object_focus(Evas_Object *obj)
+{
+ EINA_SAFETY_ON_NULL_RETURN(obj);
+ elm_object_focus_set(obj, EINA_TRUE);
+}
+
+EAPI void
+elm_object_unfocus(Evas_Object *obj)
+{
+ EINA_SAFETY_ON_NULL_RETURN(obj);
+ elm_object_focus_set(obj, EINA_FALSE);
+}
+
+EAPI void
+elm_object_focus_allow_set(Evas_Object *obj,
+ Eina_Bool enable)
+{
+ EINA_SAFETY_ON_NULL_RETURN(obj);
+ elm_widget_can_focus_set(obj, enable);
+}
+
+EAPI Eina_Bool
+elm_object_focus_allow_get(const Evas_Object *obj)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
+ return (elm_widget_can_focus_get(obj)) || (elm_widget_child_can_focus_get(obj));
+}
+
+EAPI void
+elm_object_focus_custom_chain_set(Evas_Object *obj,
+ Eina_List *objs)
+{
+ EINA_SAFETY_ON_NULL_RETURN(obj);
+ elm_widget_focus_custom_chain_set(obj, objs);
+}
+
+EAPI void
+elm_object_focus_custom_chain_unset(Evas_Object *obj)
+{
+ EINA_SAFETY_ON_NULL_RETURN(obj);
+ elm_widget_focus_custom_chain_unset(obj);
+}
+
+EAPI const Eina_List *
+elm_object_focus_custom_chain_get(const Evas_Object *obj)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
+ return elm_widget_focus_custom_chain_get(obj);
+}
+
+EAPI void
+elm_object_focus_custom_chain_append(Evas_Object *obj,
+ Evas_Object *child,
+ Evas_Object *relative_child)
+{
+ EINA_SAFETY_ON_NULL_RETURN(obj);
+ EINA_SAFETY_ON_NULL_RETURN(child);
+ elm_widget_focus_custom_chain_append(obj, child, relative_child);
+}
+
+EAPI void
+elm_object_focus_custom_chain_prepend(Evas_Object *obj,
+ Evas_Object *child,
+ Evas_Object *relative_child)
+{
+ EINA_SAFETY_ON_NULL_RETURN(obj);
+ EINA_SAFETY_ON_NULL_RETURN(child);
+ elm_widget_focus_custom_chain_prepend(obj, child, relative_child);
+}
+
+EAPI void
+elm_object_focus_cycle(Evas_Object *obj,
+ Elm_Focus_Direction dir)
+{
+ EINA_SAFETY_ON_NULL_RETURN(obj);
+ elm_widget_focus_cycle(obj, dir);
+}
+
+EAPI void
+elm_object_focus_direction_go(Evas_Object *obj,
+ int x,
+ int y)
+{
+ EINA_SAFETY_ON_NULL_RETURN(obj);
+ elm_widget_focus_direction_go(obj, x, y);
+}
+
+EAPI void
+elm_object_tree_unfocusable_set(Evas_Object *obj,
+ Eina_Bool tree_unfocusable)
+{
+ EINA_SAFETY_ON_NULL_RETURN(obj);
+ elm_widget_tree_unfocusable_set(obj, tree_unfocusable);
+}
+
+EAPI Eina_Bool
+elm_object_tree_unfocusable_get(const Evas_Object *obj)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
+ return elm_widget_tree_unfocusable_get(obj);
+}
+
+EAPI Eina_Bool
+elm_focus_highlight_enabled_get(void)
+{
+ return _elm_config->focus_highlight_enable;
+}
+
+EAPI void
+elm_focus_highlight_enabled_set(Eina_Bool enable)
+{
+ _elm_config->focus_highlight_enable = !!enable;
+}
+
+EAPI Eina_Bool
+elm_focus_highlight_animate_get(void)
+{
+ return _elm_config->focus_highlight_animate;
+}
+
+EAPI void
+elm_focus_highlight_animate_set(Eina_Bool animate)
+{
+ _elm_config->focus_highlight_animate = !!animate;
+}
+
+EAPI Eina_Bool
+elm_scroll_bounce_enabled_get(void)
+{
+ return _elm_config->thumbscroll_bounce_enable;
+}
+
+EAPI void
+elm_scroll_bounce_enabled_set(Eina_Bool enabled)
+{
+ _elm_config->thumbscroll_bounce_enable = enabled;
+}
+
+EAPI void
+elm_scroll_bounce_enabled_all_set(Eina_Bool enabled)
{
#ifdef HAVE_ELEMENTARY_X
static Ecore_X_Atom atom = 0;
- unsigned int on_i = (unsigned int)on;
+ unsigned int bounce_enable_i = (unsigned int)enabled;
- if (!atom) atom = ecore_x_atom_get("ENLIGHTENMENT_AUTOPERIOD_ALLOW");
+ if (!atom)
+ atom = ecore_x_atom_get("ENLIGHTENMENT_THUMBSCROLL_BOUNCE_ENABLE");
ecore_x_window_prop_card32_set(ecore_x_window_root_first_get(),
- atom, &on_i, 1);
+ atom, &bounce_enable_i, 1);
#endif
}
+EAPI double
+elm_scroll_bounce_friction_get(void)
+{
+ return _elm_config->thumbscroll_bounce_friction;
+}
-/**
- * Adjust size of an element for finger usage
- *
- * This takes width and height sizes (in pixels) as input and a size multiple
- * (which is how many fingers you want to place within the area), and adjusts
- * the size tobe large enough to accomodate finger. On return the w and h
- * sizes poiner do by these parameters will be modified.
- *
- * @param times_w How many fingers should fit horizontally
- * @param w Pointer to the width size to adjust
- * @param times_h How many fingers should fit vertically
- * @param h Pointer to the height size to adjust
- * @ingroup Fingers
- */
EAPI void
-elm_coords_finger_size_adjust(int times_w, Evas_Coord *w, int times_h, Evas_Coord *h)
+elm_scroll_bounce_friction_set(double friction)
{
- if ((w) && (*w < (_elm_config->finger_size * times_w)))
- *w = _elm_config->finger_size * times_w;
- if ((h) && (*h < (_elm_config->finger_size * times_h)))
- *h = _elm_config->finger_size * times_h;
+ _elm_config->thumbscroll_bounce_friction = friction;
}
-/**
- * @defgroup Focus Focus
- * @ingroup Main
- *
- * Objects have focus. This is what determines where the keyboard input goes to
- * within the application window.
- */
-
-/**
- * Get the focus of the object
- *
- * This gets the focused property of the object.
- *
- * @param obj The object
- * @return 1 if the object is focused, 0 if not.
- * @ingroup Focus
- */
-EAPI Eina_Bool
-elm_object_focus_get(Evas_Object *obj)
+EAPI void
+elm_scroll_bounce_friction_all_set(double friction)
{
- return elm_widget_focus_get(obj);
+#ifdef HAVE_ELEMENTARY_X
+ static Ecore_X_Atom atom = 0;
+ unsigned int bounce_friction_i = (unsigned int)(friction * 1000.0);
+
+ if (!atom)
+ atom = ecore_x_atom_get("ENLIGHTENMENT_THUMBSCROLL_BOUNCE_FRICTION");
+ ecore_x_window_prop_card32_set(ecore_x_window_root_first_get(),
+ atom, &bounce_friction_i, 1);
+#endif
+}
+
+EAPI double
+elm_scroll_page_scroll_friction_get(void)
+{
+ return _elm_config->page_scroll_friction;
}
-/**
- * Set the focus to the object
- *
- * This sets the focus target for keyboard input to be the object indicated.
- *
- * @param obj The object
- * @ingroup Focus
- */
EAPI void
-elm_object_focus(Evas_Object *obj)
+elm_scroll_page_scroll_friction_set(double friction)
{
- if (!elm_widget_can_focus_get(obj)) return;
- elm_widget_focus_steal(obj);
+ _elm_config->page_scroll_friction = friction;
}
-/**
- * Remove the focus from the object
- *
- * This removes the focus target for keyboard input from be the object
- * indicated.
- *
- * @param obj The object
- * @ingroup Focus
- */
EAPI void
-elm_object_unfocus(Evas_Object *obj)
+elm_scroll_page_scroll_friction_all_set(double friction)
+{
+#ifdef HAVE_ELEMENTARY_X
+ static Ecore_X_Atom atom = 0;
+ unsigned int page_scroll_friction_i = (unsigned int)(friction * 1000.0);
+
+ if (!atom)
+ atom = ecore_x_atom_get("ENLIGHTENMENT_THUMBSCROLL_PAGE_SCROLL_FRICTION");
+ ecore_x_window_prop_card32_set(ecore_x_window_root_first_get(),
+ atom, &page_scroll_friction_i, 1);
+#endif
+}
+
+EAPI double
+elm_scroll_bring_in_scroll_friction_get(void)
{
- if (!elm_widget_can_focus_get(obj)) return;
- elm_widget_focused_object_clear(obj);
+ return _elm_config->bring_in_scroll_friction;
}
-/**
- * Set the ability for the object to focus
- *
- * This sets the ability for the object to be able to get keyboard focus or
- * not. By default all objects are able to be focused.
- *
- * @param obj The object
- * @param enable 1 if the object can be focused, 0 if not
- * @ingroup Focus
- */
EAPI void
-elm_object_focus_allow_set(Evas_Object *obj, Eina_Bool enable)
+elm_scroll_bring_in_scroll_friction_set(double friction)
{
- elm_widget_can_focus_set(obj, enable);
+ _elm_config->bring_in_scroll_friction = friction;
+}
+
+EAPI void
+elm_scroll_bring_in_scroll_friction_all_set(double friction)
+{
+#ifdef HAVE_ELEMENTARY_X
+ static Ecore_X_Atom atom = 0;
+ unsigned int bring_in_scroll_friction_i = (unsigned int)(friction * 1000.0);
+
+ if (!atom)
+ atom =
+ ecore_x_atom_get("ENLIGHTENMENT_THUMBSCROLL_BRING_IN_SCROLL_FRICTION");
+ ecore_x_window_prop_card32_set(ecore_x_window_root_first_get(),
+ atom, &bring_in_scroll_friction_i, 1);
+#endif
+}
+
+EAPI double
+elm_scroll_zoom_friction_get(void)
+{
+ return _elm_config->zoom_friction;
+}
+
+EAPI void
+elm_scroll_zoom_friction_set(double friction)
+{
+ _elm_config->zoom_friction = friction;
+}
+
+EAPI void
+elm_scroll_zoom_friction_all_set(double friction)
+{
+#ifdef HAVE_ELEMENTARY_X
+ static Ecore_X_Atom atom = 0;
+ unsigned int zoom_friction_i = (unsigned int)(friction * 1000.0);
+
+ if (!atom)
+ atom = ecore_x_atom_get("ENLIGHTENMENT_THUMBSCROLL_ZOOM_FRICTION");
+ ecore_x_window_prop_card32_set(ecore_x_window_root_first_get(),
+ atom, &zoom_friction_i, 1);
+#endif
}
-/**
- * Get the ability for the object to focus
- *
- * This gets the ability for the object to be able to get keyboard focus or
- * not. By default all objects are able to be focused.
- *
- * @param obj The object
- * @return 1 if the object is allowed to be focused, 0 if not.
- * @ingroup Focus
- */
EAPI Eina_Bool
-elm_object_focus_allow_get(const Evas_Object *obj)
+elm_scroll_thumbscroll_enabled_get(void)
+{
+ return _elm_config->thumbscroll_enable;
+}
+
+EAPI void
+elm_scroll_thumbscroll_enabled_set(Eina_Bool enabled)
+{
+ _elm_config->thumbscroll_enable = enabled;
+}
+
+EAPI void
+elm_scroll_thumbscroll_enabled_all_set(Eina_Bool enabled)
+{
+#ifdef HAVE_ELEMENTARY_X
+ static Ecore_X_Atom atom = 0;
+ unsigned int ts_enable_i = (unsigned int)enabled;
+
+ if (!atom) atom = ecore_x_atom_get("ENLIGHTENMENT_THUMBSCROLL_ENABLE");
+ ecore_x_window_prop_card32_set(ecore_x_window_root_first_get(),
+ atom, &ts_enable_i, 1);
+#endif
+}
+
+EAPI unsigned int
+elm_scroll_thumbscroll_threshold_get(void)
+{
+ return _elm_config->thumbscroll_threshold;
+}
+
+EAPI void
+elm_scroll_thumbscroll_threshold_set(unsigned int threshold)
+{
+ _elm_config->thumbscroll_threshold = threshold;
+}
+
+EAPI void
+elm_scroll_thumbscroll_threshold_all_set(unsigned int threshold)
+{
+#ifdef HAVE_ELEMENTARY_X
+ static Ecore_X_Atom atom = 0;
+ unsigned int ts_threshold_i = (unsigned int)threshold;
+
+ if (!atom) atom = ecore_x_atom_get("ENLIGHTENMENT_THUMBSCROLL_THRESHOLD");
+ ecore_x_window_prop_card32_set(ecore_x_window_root_first_get(),
+ atom, &ts_threshold_i, 1);
+#endif
+}
+
+EAPI double
+elm_scroll_thumbscroll_momentum_threshold_get(void)
+{
+ return _elm_config->thumbscroll_momentum_threshold;
+}
+
+EAPI void
+elm_scroll_thumbscroll_momentum_threshold_set(double threshold)
+{
+ _elm_config->thumbscroll_momentum_threshold = threshold;
+}
+
+EAPI void
+elm_scroll_thumbscroll_momentum_threshold_all_set(double threshold)
+{
+#ifdef HAVE_ELEMENTARY_X
+ static Ecore_X_Atom atom = 0;
+ unsigned int ts_momentum_threshold_i = (unsigned int)(threshold * 1000.0);
+
+ if (!atom)
+ atom = ecore_x_atom_get("ENLIGHTENMENT_THUMBSCROLL_MOMENTUM_THRESHOLD");
+ ecore_x_window_prop_card32_set(ecore_x_window_root_first_get(),
+ atom, &ts_momentum_threshold_i, 1);
+#endif
+}
+
+EAPI double
+elm_scroll_thumbscroll_friction_get(void)
+{
+ return _elm_config->thumbscroll_friction;
+}
+
+EAPI void
+elm_scroll_thumbscroll_friction_set(double friction)
+{
+ _elm_config->thumbscroll_friction = friction;
+}
+
+EAPI void
+elm_scroll_thumbscroll_friction_all_set(double friction)
+{
+#ifdef HAVE_ELEMENTARY_X
+ static Ecore_X_Atom atom = 0;
+ unsigned int ts_friction_i = (unsigned int)(friction * 1000.0);
+
+ if (!atom) atom = ecore_x_atom_get("ENLIGHTENMENT_THUMBSCROLL_FRICTION");
+ ecore_x_window_prop_card32_set(ecore_x_window_root_first_get(),
+ atom, &ts_friction_i, 1);
+#endif
+}
+
+EAPI double
+elm_scroll_thumbscroll_border_friction_get(void)
+{
+ return _elm_config->thumbscroll_border_friction;
+}
+
+EAPI void
+elm_scroll_thumbscroll_border_friction_set(double friction)
+{
+ if (friction < 0.0)
+ friction = 0.0;
+
+ if (friction > 1.0)
+ friction = 1.0;
+
+ _elm_config->thumbscroll_friction = friction;
+}
+
+EAPI void
+elm_scroll_thumbscroll_border_friction_all_set(double friction)
+{
+ if (friction < 0.0)
+ friction = 0.0;
+
+ if (friction > 1.0)
+ friction = 1.0;
+
+#ifdef HAVE_ELEMENTARY_X
+ static Ecore_X_Atom atom = 0;
+ unsigned int border_friction_i = (unsigned int)(friction * 1000.0);
+
+ if (!atom)
+ atom = ecore_x_atom_get("ENLIGHTENMENT_THUMBSCROLL_BORDER_FRICTION");
+ ecore_x_window_prop_card32_set(ecore_x_window_root_first_get(),
+ atom, &border_friction_i, 1);
+#endif
+}
+
+EAPI double
+elm_scroll_thumbscroll_sensitivity_friction_get(void)
+{
+ return _elm_config->thumbscroll_sensitivity_friction;
+}
+
+EAPI void
+elm_scroll_thumbscroll_sensitivity_friction_set(double friction)
+{
+ if (friction < 0.1)
+ friction = 0.1;
+
+ if (friction > 1.0)
+ friction = 1.0;
+
+ _elm_config->thumbscroll_friction = friction;
+}
+
+EAPI void
+elm_scroll_thumbscroll_sensitivity_friction_all_set(double friction)
{
- return elm_widget_can_focus_get(obj);
-}
-
-/**
- * @defgroup Scrollhints Scrollhints
- * @ingroup Main
- *
- * Objects when inside a scroller can scroll, but this may not always be
- * desireable in certain situations. This allows an object to hint to itself
- * and parents to "not scroll" in one of 2 ways.
- *
- * 1. To hold on scrolling. This means just flicking and dragging may no
- * longer scroll, but pressing/dragging near an edge of the scroller will
- * still scroll. This is automastically used by the entry object when
- * selecting text.
- * 2. To totally freeze scrolling. This means it stops. until popped/released.
- */
-
-/**
- * Push the scroll hold by 1
- *
- * This increments the scroll hold count by one. If it is more than 0 it will
- * take effect on the parents of the indicated object.
- *
- * @param obj The object
- * @ingroup Scrollhints
- */
+ if (friction < 0.1)
+ friction = 0.1;
+
+ if (friction > 1.0)
+ friction = 1.0;
+
+#ifdef HAVE_ELEMENTARY_X
+ static Ecore_X_Atom atom = 0;
+ unsigned int sensitivity_friction_i = (unsigned int)(friction * 1000.0);
+
+ if (!atom)
+ atom = ecore_x_atom_get("ENLIGHTENMENT_THUMBSCROLL_SENSITIVITY_FRICTION");
+ ecore_x_window_prop_card32_set(ecore_x_window_root_first_get(),
+ atom, &sensitivity_friction_i, 1);
+#endif
+}
+
EAPI void
elm_object_scroll_hold_push(Evas_Object *obj)
{
+ EINA_SAFETY_ON_NULL_RETURN(obj);
elm_widget_scroll_hold_push(obj);
}
-/**
- * Pop the scroll hold by 1
- *
- * This decrements the scroll hold count by one. If it is more than 0 it will
- * take effect on the parents of the indicated object.
- *
- * @param obj The object
- * @ingroup Scrollhints
- */
EAPI void
elm_object_scroll_hold_pop(Evas_Object *obj)
{
+ EINA_SAFETY_ON_NULL_RETURN(obj);
elm_widget_scroll_hold_pop(obj);
}
-/**
- * Push the scroll freeze by 1
- *
- * This increments the scroll freeze count by one. If it is more than 0 it will
- * take effect on the parents of the indicated object.
- *
- * @param obj The object
- * @ingroup Scrollhints
- */
EAPI void
elm_object_scroll_freeze_push(Evas_Object *obj)
{
+ EINA_SAFETY_ON_NULL_RETURN(obj);
elm_widget_scroll_freeze_push(obj);
}
-/**
- * Lock the scrolling of the given widget (and thus all parents)
- *
- * This locks the given object from scrolling in the X axis (and implicitly
- * also locks all parent scrollers too from doing the same).
- *
- * @param obj The object
- * @param lock The lock state (1 == locked, 0 == unlocked)
- * @ingroup Scrollhints
- */
EAPI void
-elm_object_scroll_lock_x_set(Evas_Object *obj, Eina_Bool lock)
+elm_object_scroll_lock_x_set(Evas_Object *obj,
+ Eina_Bool lock)
{
+ EINA_SAFETY_ON_NULL_RETURN(obj);
elm_widget_drag_lock_x_set(obj, lock);
}
-/**
- * Lock the scrolling of the given widget (and thus all parents)
- *
- * This locks the given object from scrolling in the Y axis (and implicitly
- * also locks all parent scrollers too from doing the same).
- *
- * @param obj The object
- * @param lock The lock state (1 == locked, 0 == unlocked)
- * @ingroup Scrollhints
- */
EAPI void
-elm_object_scroll_lock_y_set(Evas_Object *obj, Eina_Bool lock)
+elm_object_scroll_lock_y_set(Evas_Object *obj,
+ Eina_Bool lock)
{
+ EINA_SAFETY_ON_NULL_RETURN(obj);
elm_widget_drag_lock_y_set(obj, lock);
}
-/**
- * Get the scrolling lock of the given widget
- *
- * This gets the lock for X axis scrolling.
- *
- * @param obj The object
- * @ingroup Scrollhints
- */
EAPI Eina_Bool
elm_object_scroll_lock_x_get(const Evas_Object *obj)
{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
return elm_widget_drag_lock_x_get(obj);
}
-/**
- * Get the scrolling lock of the given widget
- *
- * This gets the lock for X axis scrolling.
- *
- * @param obj The object
- * @ingroup Scrollhints
- */
EAPI Eina_Bool
elm_object_scroll_lock_y_get(const Evas_Object *obj)
{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
return elm_widget_drag_lock_y_get(obj);
}
-/**
- * Pop the scroll freeze by 1
- *
- * This decrements the scroll freeze count by one. If it is more than 0 it will
- * take effect on the parents of the indicated object.
- *
- * @param obj The object
- * @ingroup Scrollhints
- */
EAPI void
elm_object_scroll_freeze_pop(Evas_Object *obj)
{
+ EINA_SAFETY_ON_NULL_RETURN(obj);
elm_widget_scroll_freeze_pop(obj);
}
-
-/**
- * Check if the given Evas Object is an Elementary widget.
- *
- * @param obj the object to query.
- * @return @c EINA_TRUE if it is an elementary widget variant,
- * @c EINA_FALSE otherwise
- */
EAPI Eina_Bool
elm_object_widget_check(const Evas_Object *obj)
{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
return elm_widget_is(obj);
}
-/**
- * Get the first parent of the given object that is an Elementary widget.
- *
- * @param obj the object to query.
- * @return the parent object that is an Elementary widget, or @c NULL
- * if no parent is, or no parents at all.
- */
EAPI Evas_Object *
elm_object_parent_widget_get(const Evas_Object *obj)
{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
return elm_widget_parent_widget_get(obj);
}
-/**
- * Get the top level parent of an Elementary widget.
- *
- * @param obj The object to query.
- * @return The top level Elementary widget, or @c NULL if parent cannot be
- * found.
- */
EAPI Evas_Object *
elm_object_top_widget_get(const Evas_Object *obj)
{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
return elm_widget_top_get(obj);
}
-/**
- * Get the string that represents this Elementary widget.
- *
- * @note Elementary is weird and exposes itself as a single
- * Evas_Object_Smart_Class of type "elm_widget", so
- * evas_object_type_get() always return that, making debug and
- * language bindings hard. This function tries to mitigate this
- * problem, but the solution is to change Elementary to use
- * proper inheritance.
- *
- * @param obj the object to query.
- * @return Elementary widget name, or @c NULL if not a valid widget.
- */
EAPI const char *
elm_object_widget_type_get(const Evas_Object *obj)
{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
return elm_widget_type_get(obj);
}
-/**
- * Send a signal to the widget edje object.
- *
- * This function sends a signal to the edje object of the obj. An edje program
- * can respond to a signal by specifying matching 'signal' and
- * 'source' fields.
- *
- * @param obj The object
- * @param emission The signal's name.
- * @param source The signal's source.
- * @ingroup General
- */
-EAPI void elm_object_signal_emit(Evas_Object *obj, const char *emission, const char *source)
-{
- elm_widget_signal_emit(obj, emission, source);
-}
-
-/**
- * Add a callback for a signal emitted by widget edje object.
- *
- * This function connects a callback function to a signal emitted by the
- * edje object of the obj.
- * Globs can occur in either the emission or source name.
- *
- * @param obj The object
- * @param emission The signal's name.
- * @param source The signal's source.
- * @param func The callback function to be executed when the signal is
- * emitted.
- * @param data A pointer to data to pass in to the callback function.
- * @ingroup General
- */
-EAPI void elm_object_signal_callback_add(Evas_Object *obj, const char *emission, const char *source, void (*func) (void *data, Evas_Object *o, const char *emission, const char *source), void *data)
+EAPI void
+elm_object_signal_emit(Evas_Object *obj,
+ const char *emission,
+ const char *source)
+{
+ EINA_SAFETY_ON_NULL_RETURN(obj);
+ elm_widget_signal_emit(obj, emission, source);
+}
+
+EAPI void
+elm_object_signal_callback_add(Evas_Object *obj, const char *emission, const char *source, void (*func) (void *data, Evas_Object *o, const char *emission, const char *source), void *data)
{
+ EINA_SAFETY_ON_NULL_RETURN(obj);
+ EINA_SAFETY_ON_NULL_RETURN(func);
elm_widget_signal_callback_add(obj, emission, source, func, data);
}
-/**
- * Remove a signal-triggered callback from an widget edje object.
- *
- * This function removes a callback, previoulsy attached to a signal emitted
- * by the edje object of the obj.
- * The parameters emission, source and func must match exactly those passed to
- * a previous call to elm_object_signal_callback_add(). The data pointer that
- * was passed to this call will be returned.
- *
- * @param obj The object
- * @param emission The signal's name.
- * @param source The signal's source.
- * @param func The callback function to be executed when the signal is
- * emitted.
- * @return The data pointer
- * @ingroup General
- */
-EAPI void *elm_object_signal_callback_del(Evas_Object *obj, const char *emission, const char *source, void (*func) (void *data, Evas_Object *o, const char *emission, const char *source))
+EAPI void *
+elm_object_signal_callback_del(Evas_Object *obj, const char *emission, const char *source, void (*func) (void *data, Evas_Object *o, const char *emission, const char *source))
{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(func, NULL);
return elm_widget_signal_callback_del(obj, emission, source, func);
}
-/**
- * Set the duration for occuring long press event.
- *
- * @param lonpress_timeout Timeout for long press event
- * @ingroup Longpress
- */
+EAPI void
+elm_object_event_callback_add(Evas_Object *obj, Elm_Event_Cb func, const void *data)
+{
+ EINA_SAFETY_ON_NULL_RETURN(obj);
+ EINA_SAFETY_ON_NULL_RETURN(func);
+ elm_widget_event_callback_add(obj, func, data);
+}
+
+EAPI void *
+elm_object_event_callback_del(Evas_Object *obj, Elm_Event_Cb func, const void *data)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(func, NULL);
+ return elm_widget_event_callback_del(obj, func, data);
+}
+
+EAPI void
+elm_object_tree_dump(const Evas_Object *top)
+{
+#ifdef ELM_DEBUG
+ elm_widget_tree_dump(top);
+#else
+ return;
+ (void)top;
+#endif
+}
+
+EAPI void
+elm_object_tree_dot_dump(const Evas_Object *top,
+ const char *file)
+{
+#ifdef ELM_DEBUG
+ FILE *f = fopen(file, "wb");
+ elm_widget_tree_dot_dump(top, f);
+ fclose(f);
+#else
+ return;
+ (void)top;
+ (void)file;
+#endif
+}
+
EAPI void
elm_longpress_timeout_set(double longpress_timeout)
{
_elm_config->longpress_timeout = longpress_timeout;
}
-/**
- * Get the duration for occuring long press event.
- *
- * @return Timeout for long press event
- * @ingroup Longpress
- */
EAPI double
elm_longpress_timeout_get(void)
{
return _elm_config->longpress_timeout;
-}
\ No newline at end of file
+}
+
+EAPI Evas_Object *
+elm_object_item_object_get(const Elm_Object_Item *it)
+{
+ return ((Elm_Widget_Item *) it)->widget;
+}
+
+EAPI void
+elm_object_item_content_part_set(Elm_Object_Item *it,
+ const char *part,
+ Evas_Object *content)
+{
+ elm_widget_item_content_part_set(it, part, content);
+}
+
+EAPI Evas_Object *
+elm_object_item_content_part_get(const Elm_Object_Item *it,
+ const char *part)
+{
+ return elm_widget_item_content_part_get(it, part);
+}
+
+EAPI Evas_Object *
+elm_object_item_content_part_unset(Elm_Object_Item *it, const char *part)
+{
+ return elm_widget_item_content_part_unset(it, part);
+}
+
+EAPI void
+elm_object_item_text_part_set(Elm_Object_Item *it,
+ const char *part,
+ const char *label)
+{
+ elm_widget_item_text_part_set(it, part, label);
+}
+
+EAPI const char *
+elm_object_item_text_part_get(const Elm_Object_Item *it, const char *part)
+{
+ return elm_widget_item_text_part_get(it, part);
+}
+
+EAPI void *
+elm_object_item_data_get(const Elm_Object_Item *it)
+{
+ return elm_widget_item_data_get(it);
+}
+
+EAPI void
+elm_object_item_data_set(Elm_Object_Item *it, void *data)
+{
+ elm_widget_item_data_set(it, data);
+}
+
+EAPI void
+elm_object_item_signal_emit(Elm_Object_Item *it, const char *emission, const char *source)
+{
+ elm_widget_item_signal_emit(it, emission, source);
+}
+
+EAPI void
+elm_object_access_info_set(Evas_Object *obj, const char *txt)
+{
+ elm_widget_access_info_set(obj, txt);
+}
+
+EAPI void
+elm_object_item_access_info_set(Elm_Object_Item *it, const char *txt)
+{
+ _elm_widget_item_access_info_set((Elm_Widget_Item *)it, txt);
+}
+