Add module interface for elm-clouseau integration.

This commit is contained in:
Tom 'TAsn' Hacohen 2013-08-30 16:33:29 +01:00
parent 6cdcdb1b2e
commit 10a69c85b3
2 changed files with 68 additions and 5 deletions

View File

@ -13,6 +13,65 @@
static Eina_Bool _elm_is_init = EINA_FALSE; static Eina_Bool _elm_is_init = EINA_FALSE;
static const char *_my_app_name = NULL; static const char *_my_app_name = NULL;
static int _connect_to_daemon(void);
/**************************************************************************/
/* This is an attempt to somehow replicate what's available in new versions
* of clouseau. I.e the module interface. */
static int _clouseau_init_count = 0;
static char *_module_my_app_name = NULL;
EAPI Eina_Bool
clouseau_app_connect(const char *appname)
{
_my_app_name = _module_my_app_name = strdup(appname);
if(!_connect_to_daemon())
{
printf("Failed to connect to server.\n");
return EINA_FALSE;
}
return EINA_TRUE;
}
EAPI int
clouseau_init(void)
{
if (++_clouseau_init_count == 1)
{
eina_init();
ecore_init();
ecore_con_init();
clouseau_data_init();
}
return _clouseau_init_count;
}
EAPI int
clouseau_shutdown(void)
{
if (--_clouseau_init_count == 0)
{
clouseau_data_shutdown();
ecore_con_shutdown();
ecore_shutdown();
eina_shutdown();
free(_module_my_app_name);
_my_app_name = _module_my_app_name = NULL;
}
else if (_clouseau_init_count < 0)
{
_clouseau_init_count = 0;
printf("Tried to shutdown although not initiated.\n");
}
return _clouseau_init_count;
}
/***************************** END OF EINA MODULE *************************/
static void static void
libclouseau_item_add(Evas_Object *o, Clouseau_Tree_Item *parent) libclouseau_item_add(Evas_Object *o, Clouseau_Tree_Item *parent)
{ {
@ -302,6 +361,8 @@ elm_init(int argc, char **argv)
{ {
int (*_elm_init)(int, char **) = dlsym(RTLD_NEXT, __func__); int (*_elm_init)(int, char **) = dlsym(RTLD_NEXT, __func__);
setenv("ELM_CLOUSEAU", "0", 1);
if (!_elm_is_init) if (!_elm_is_init)
{ {
_my_app_name = argv[0]; _my_app_name = argv[0];
@ -324,17 +385,17 @@ ecore_main_loop_begin(void)
_my_app_name = "clouseau"; _my_app_name = "clouseau";
} }
if(!_connect_to_daemon()) clouseau_init();
if (!clouseau_app_connect(_my_app_name))
{ {
printf("Failed to connect to server.\n"); printf("Failed to connect to server.\n");
return; return;
} }
clouseau_data_init();
_ecore_main_loop_begin(); _ecore_main_loop_begin();
clouseau_data_shutdown(); clouseau_shutdown();
return; return;
} }
@ -383,3 +444,4 @@ evas_object_free(Evas_Object *obj, int clean_layer)
_evas_object_free(obj, clean_layer); _evas_object_free(obj, clean_layer);
} }

View File

@ -7,7 +7,8 @@ then
else else
# Start clouseau daemon (will start single instance), then run app # Start clouseau daemon (will start single instance), then run app
clouseaud clouseaud
LD_PRELOAD="$1/libclouseau.so" "\$@" #Set the ELM_CLOUSEAU in case preload is disabled.
ELM_CLOUSEAU=1 LD_PRELOAD="$1/libclouseau.so" "\$@"
fi fi
ENDOFMESSAGE ENDOFMESSAGE