summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client/ug-client.c19
-rw-r--r--include/ug-module.h2
-rw-r--r--src/module.c15
-rw-r--r--src/ug.c11
4 files changed, 36 insertions, 11 deletions
diff --git a/client/ug-client.c b/client/ug-client.c
index 38fe98f..bce59d5 100644
--- a/client/ug-client.c
+++ b/client/ug-client.c
@@ -20,8 +20,11 @@
*/
#include <stdio.h>
+#include <dlfcn.h>
+#include <errno.h>
#include <appcore-efl.h>
#include <ui-gadget.h>
+#include <ug-module.h>
#include <dlog.h>
#include <aul.h>
@@ -492,9 +495,22 @@ func_out:
static int app_terminate(void *data)
{
struct appdata *ad = data;
+ char *ug_file_path = NULL;
+ void *handle;
+ int ret;
LOGD("app_terminate called");
+ ret = ug_module_get_file_path(ad->name, &ug_file_path);
+ if (ret == 0) {
+ handle = dlopen(ug_file_path, RTLD_LAZY);
+ if (!handle)
+ LOGE("Failed to dlopen the ug file (%d)", errno);
+ }
+
+ if (ug_file_path)
+ free(ug_file_path);
+
_ug_client_dbus_signal_handler_fini(data);
evas_object_smart_callback_del(ad->win, "wm,rotation,changed", rotate);
@@ -513,9 +529,6 @@ static int app_terminate(void *data)
app_control_destroy(ad->request);
- if (ad->name)
- free(ad->name);
-
LOGD("app_terminate end");
return 0;
diff --git a/include/ug-module.h b/include/ug-module.h
index 2db135f..36811d4 100644
--- a/include/ug-module.h
+++ b/include/ug-module.h
@@ -33,6 +33,6 @@ struct ug_module {
struct ug_module *ug_module_load(const char *name);
int ug_module_unload(struct ug_module *module);
-int ug_exist(const char* name);
+int ug_module_get_file_path(const char *name, char **ug_file_path);
#endif /* __UG_MODULE_H__ */
diff --git a/src/module.c b/src/module.c
index 2df10e2..b66e772 100644
--- a/src/module.c
+++ b/src/module.c
@@ -42,6 +42,11 @@
#define MEM_ADDR_LEN 8
#define MEM_ADDR_TOT_LEN 17
+#ifndef UG_API
+#define UG_API __attribute__ ((visibility("default")))
+#endif
+
+
static char *__ug_module_get_addr(const char *ug_name)
{
FILE *file;
@@ -278,14 +283,12 @@ int ug_module_unload(struct ug_module *module)
return 0;
}
-int ug_exist(const char* name)
+UG_API int ug_module_get_file_path(const char *name, char **ug_file_path)
{
- int ret = 1;
-
- if (__get_ug_info(name, NULL) < 0) {
+ if (__get_ug_info(name, ug_file_path) < 0) {
_ERR("error in getting ug file path");
- ret = 0;
+ return -1;
}
- return ret;
+ return 0;
}
diff --git a/src/ug.c b/src/ug.c
index ad4bcf4..6045237 100644
--- a/src/ug.c
+++ b/src/ug.c
@@ -377,12 +377,21 @@ UG_API int ug_disable_effect(ui_gadget_h ug)
UG_API int ug_is_installed(const char *name)
{
+ int ret = 1;
+ char *ug_file_path = NULL;
+
if (name == NULL) {
_ERR("name is null");
return -1;
}
- return ug_exist(name);
+ if (!ug_module_get_file_path(name, &ug_file_path))
+ ret = 0;
+
+ if (ug_file_path)
+ free(ug_file_path);
+
+ return ret;
}
#ifdef ENABLE_UG_CREATE_CB