diff --git a/configure.in b/configure.in index deeef6d8b..60d30ab09 100644 --- a/configure.in +++ b/configure.in @@ -106,6 +106,8 @@ AC_ARG_WITH(ecore-config, ]) ecore_cflags=`$ECORE_CONFIG --cflags` ecore_libs=`$ECORE_CONFIG --libs` +AC_SUBST(ecore_cflags) +AC_SUBST(ecore_libs) AC_ARG_WITH(edje-config, [ --with-edje-config=EDJE_CONFIG use edje-config specified ], diff --git a/src/lib/.cvsignore b/src/lib/.cvsignore index 282522db0..633ff1844 100644 --- a/src/lib/.cvsignore +++ b/src/lib/.cvsignore @@ -1,2 +1,6 @@ Makefile Makefile.in +.deps +.libs +e_main.lo +libe.la diff --git a/src/lib/E.h b/src/lib/E.h new file mode 100644 index 000000000..ba99a10b0 --- /dev/null +++ b/src/lib/E.h @@ -0,0 +1,48 @@ +#ifndef _E_H +#define _E_H + + +#ifdef EAPI +#undef EAPI +#endif +#ifdef WIN32 +# ifdef BUILDING_DLL +# define EAPI __declspec(dllexport) +# else +# define EAPI __declspec(dllimport) +# endif +#else +# ifdef GCC_HASCLASSVISIBILITY +# define EAPI __attribute__ ((visibility("default"))) +# else +# define EAPI +# endif +#endif + + + + + + + + +#ifdef __cplusplus +extern "C" { +#endif + + /* edje_main.c */ + EAPI int e_init (const char *display); + EAPI int e_shutdown (void); + + EAPI void e_module_enabled_set (const char *module, + int enable); + EAPI void e_module_loaded_set (const char *module, + int load); + EAPI void e_background_set (const char *bgfile); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am index a5b74c1f0..9e4ca61d1 100644 --- a/src/lib/Makefile.am +++ b/src/lib/Makefile.am @@ -1,3 +1,16 @@ -MAINTAINERCLEANFILES = Makefile.in -INCLUDES = -I/usr/local/include \ - -I$(includedir) +MAINTAINERCLEANFILES = Makefile.in +INCLUDES = -I/usr/local/include \ + -I$(includedir) \ + -I../bin/ + @ecore_cflags@ + +lib_LTLIBRARIES = libe.la + +include_HEADERS = E.h + +libe_la_SOURCES= \ +e_main.c \ +e_private.h + +libe_la_LIBADD = @ecore_libs@ +libe_la_DEPENDENCIES = $(top_builddir)/config.h diff --git a/src/lib/e_main.c b/src/lib/e_main.c new file mode 100644 index 000000000..af7ce3bb6 --- /dev/null +++ b/src/lib/e_main.c @@ -0,0 +1,152 @@ +/* + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + */ + + +/* + * TODO: + * add ecore events for callbacks to all/some ipc calls, e.g. module_list + * + * add module_list, module_enabled_get and module_enabled_set + * + * augment IPC calls and add wrappers for them - i.e.: + * e restart/shutdown + * desktops add/remove/list etc + * windows shade[get/set]/maximise[get/set]/iconify[get/set]/list + * + * add ability to e to set theme, so we can have a theme_set call :) + */ + +#include "E.h" +#include "e_private.h" + +#include +#include + +static int _e_ipc_init(const char *display); +static void _e_ipc_shutdown(void); + +static Ecore_Ipc_Server *_e_ipc_server = NULL; + +int +e_init(const char* display) +{ + if (_e_ipc_server) + return 0; + + /* basic ecore init */ + if (!ecore_init()) + { + printf("ERROR: Enlightenment cannot Initialize Ecore!\n" + "Perhaps you are out of memory?\n"); + return 0; + } + + /* init ipc */ + if (!ecore_ipc_init()) + { + printf("ERROR: Enlightenment cannot initialize the ipc system.\n" + "Perhaps you are out of memory?\n"); + return 0; + } + + /* setup e ipc service */ + if (!_e_ipc_init(display)) + { + printf("ERROR: Enlightenment cannot set up the IPC socket.\n" + "Did you specify the right display?\n"); + return 0; + } + + return 1; +} + +int +e_shutdown(void) +{ + _e_ipc_shutdown(); + ecore_ipc_shutdown(); + ecore_shutdown(); + + return 1; +} + +void +e_module_enabled_set(const char *module, int enable) +{ + E_Ipc_Op type; + + if (!module) + return; + + if (enable) + type = E_IPC_OP_MODULE_ENABLE; + else + type = E_IPC_OP_MODULE_DISABLE; + + ecore_ipc_server_send(_e_ipc_server, E_IPC_DOMAIN_REQUEST, type, 0/*ref*/, + 0/*ref_to*/, 0/*response*/, (void *)module, + strlen(module)); +} + +void +e_module_load_set(const char *module, int load) +{ + E_Ipc_Op type; + + if (!module) + return; + + if (load) + type = E_IPC_OP_MODULE_LOAD; + else + type = E_IPC_OP_MODULE_UNLOAD; + + ecore_ipc_server_send(_e_ipc_server, E_IPC_DOMAIN_REQUEST, type, 0/*ref*/, + 0/*ref_to*/, 0/*response*/, (void *)module, + strlen(module)); +} + +void +e_background_set(const char *bgfile) +{ + if (!bgfile) + return; + + ecore_ipc_server_send(_e_ipc_server, E_IPC_DOMAIN_REQUEST, E_IPC_OP_BG_SET, + 0/*ref*/, 0/*ref_to*/, 0/*response*/, (void *)bgfile, + strlen(bgfile)); +} + +static int +_e_ipc_init(const char *display) +{ + char buf[1024]; + char *disp; + + disp = (char *)display; + if (!disp) disp = ":0"; + snprintf(buf, sizeof(buf), "enlightenment-(%s)", disp); + _e_ipc_server = ecore_ipc_server_connect(ECORE_IPC_LOCAL_USER, buf, 0, NULL); + /* FIXME: we shoudl also try the generic ":0" if the display is ":0.0" */ + /* similar... */ + if (!_e_ipc_server) return 0; + +// ecore_event_handler_add(ECORE_IPC_EVENT_SERVER_ADD, _e_ipc_cb_server_add, NULL); +// ecore_event_handler_add(ECORE_IPC_EVENT_SERVER_DEL, _e_ipc_cb_server_del, NULL); +// ecore_event_handler_add(ECORE_IPC_EVENT_SERVER_DATA, _e_ipc_cb_server_data, NULL); + + return 1; +} + +static void +_e_ipc_shutdown(void) +{ + if (_e_ipc_server) + { + ecore_ipc_server_del(_e_ipc_server); + _e_ipc_server = NULL; + } +} + + diff --git a/src/lib/e_private.h b/src/lib/e_private.h new file mode 100644 index 000000000..a48d44422 --- /dev/null +++ b/src/lib/e_private.h @@ -0,0 +1,11 @@ +#ifndef _EDJE_PRIVATE_H +#define _EDJE_PRIVATE_H + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "e_ipc.h" + + +#endif