summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyuho Jo <kyuho.jo@samsung.com>2015-11-05 10:07:48 +0900
committerKyuho Jo <kyuho.jo@samsung.com>2015-11-05 10:46:47 +0900
commit9f58f609204fcc8192d97ce4d8d91b69948777af (patch)
treefd4acc597020adf85a8d1f6da2b8e66cea1ab3e5
parent053c4f8234de9bf598be7bc8dc5909173492b80b (diff)
downloadminicontrol-9f58f609204fcc8192d97ce4d8d91b69948777af.tar.gz
minicontrol-9f58f609204fcc8192d97ce4d8d91b69948777af.tar.bz2
minicontrol-9f58f609204fcc8192d97ce4d8d91b69948777af.zip
Change-Id: I678a82358881ad9ca62f0b1f059bcd484c71e0f7 Signed-off-by: Kyuho Jo <kyuho.jo@samsung.com>
-rwxr-xr-xinclude/minicontrol-internal.h6
-rwxr-xr-xinclude/minicontrol-type.h20
-rwxr-xr-xinclude/minicontrol-viewer.h4
-rwxr-xr-xsrc/minicontrol-internal.c10
-rwxr-xr-xsrc/minicontrol-provider.c35
-rwxr-xr-xsrc/minicontrol-viewer.c37
6 files changed, 74 insertions, 38 deletions
diff --git a/include/minicontrol-internal.h b/include/minicontrol-internal.h
index a41c217..da75883 100755
--- a/include/minicontrol-internal.h
+++ b/include/minicontrol-internal.h
@@ -77,6 +77,10 @@ typedef enum _minicontrol_action {
MINICONTROL_ACTION_REQUEST, /**< the viewer of the minicontrol object is asked to do something */
} minicontrol_action_e;
+typedef enum {
+ MINICONTROL_EVENT_REQUEST_LOCK = 1001, /**< A minicontrol object should not be removed by user */
+} minicontrol_internal_provider_event_e;
+
typedef struct _minictrl_sig_handle minictrl_sig_handle;
int _minictrl_provider_message_send(int event, const char *minicontrol_name, unsigned int witdh, unsigned int height, minicontrol_priority_e priority);
@@ -92,7 +96,7 @@ void _minictrl_dbus_sig_handle_dettach(minictrl_sig_handle *handle);
int _minictrl_provider_proc_send(int type);
/* new */
-int _minictrl_send_event(const char *signal_name, const char *provider_app_id, int event, bundle *signal_arg);
+int _minictrl_send_event(const char *signal_name, const char *minicontrol_name, int event, bundle *signal_arg);
#endif /* _MINICTRL_INTERNAL_H_ */
diff --git a/include/minicontrol-type.h b/include/minicontrol-type.h
index 18d04d4..8a9de09 100755
--- a/include/minicontrol-type.h
+++ b/include/minicontrol-type.h
@@ -77,6 +77,18 @@
<TD></TD><TD></TD>
<TD></TD><TD></TD>
</TR>
+<TR>
+<TD>MINICONTROL_VIEWER_EVENT_SHOW</TD><TD>viewer</TD>
+<TD></TD><TD></TD>
+<TD></TD><TD></TD>
+<TD></TD><TD></TD>
+</TR>
+<TR>
+<TD>MINICONTROL_VIEWER_EVENT_HIDE</TD><TD>viewer</TD>
+<TD></TD><TD></TD>
+<TD></TD><TD></TD>
+<TD></TD><TD></TD>
+</TR>
</TABLE>
*/
@@ -108,6 +120,8 @@ typedef enum {
*/
typedef enum {
MINICONTROL_VIEWER_EVENT_REPORT_ANGLE = MINICONTROL_EVENT_REPORT_ANGLE, /**< Reports the current angle of the minicontrol viewer. Required argument : Angle of minicontrol viewer, Bundle Key : "angle", Bundle Value Type : string.*/
+ MINICONTROL_VIEWER_EVENT_SHOW = 201, /**< The minicontrol viewer is shown. Required argument : NULL.*/
+ MINICONTROL_VIEWER_EVENT_HIDE = 202, /**< The minicontrol viewer is hidden. Required argument : NULL.*/
} minicontrol_viewer_event_e;
/**
@@ -115,9 +129,9 @@ typedef enum {
* @since_tizen 2.4
*/
typedef enum {
- MINICONTROL_TARGET_VIEWER_QUICK_PANEL = 0x0001, /* Request to place the minicontrol on the quickpanel */
- MINICONTROL_TARGET_VIEWER_STOCK_LOCK_SCREEN = 0x0002, /* Request to place the minicontrol on the stock lock screen */
- MINICONTROL_TARGET_VIEWER_CUSTOM_LOCK_SCREEN = 0x0004, /* Request to place the minicontrol on a lock screen replacement application */
+ MINICONTROL_TARGET_VIEWER_QUICK_PANEL = 0x0001, /**< Request to place the minicontrol on the quickpanel */
+ MINICONTROL_TARGET_VIEWER_STOCK_LOCK_SCREEN = 0x0002, /**< Request to place the minicontrol on the stock lock screen */
+ MINICONTROL_TARGET_VIEWER_CUSTOM_LOCK_SCREEN = 0x0004, /**< Request to place the minicontrol on a lock screen replacement application */
} minicontrol_target_viewer_e;
/**
diff --git a/include/minicontrol-viewer.h b/include/minicontrol-viewer.h
index 6629c0f..67e87a3 100755
--- a/include/minicontrol-viewer.h
+++ b/include/minicontrol-viewer.h
@@ -50,7 +50,7 @@ Evas_Object *minicontrol_viewer_add(Evas_Object *parent, const char *minicontrol
/**
* @brief Sends a event to the provider.
* @since_tizen 2.4
- * @param[in] provider_app_id Application id of the minicontrol provider
+ * @param[in] minicontrol_name The name of the minicontrol window
* @param[in] event Type of the event
* @param[in] event_arg A bundle of arguments
* @return #MINICONTROL_ERROR_NONE on success,
@@ -58,7 +58,7 @@ Evas_Object *minicontrol_viewer_add(Evas_Object *parent, const char *minicontrol
* @retval #MINICONTROL_ERROR_INVALID_PARAMETER Invalid argument
* @see #minicontrol_viewer_event_e
*/
-int minicontrol_viewer_send_event(const char *provider_app_id, minicontrol_viewer_event_e event, bundle *event_arg);
+int minicontrol_viewer_send_event(const char *minicontrol_name, minicontrol_viewer_event_e event, bundle *event_arg);
/**
* @brief Called when a event comes from the provider
diff --git a/src/minicontrol-internal.c b/src/minicontrol-internal.c
index b414169..25ceb4a 100755
--- a/src/minicontrol-internal.c
+++ b/src/minicontrol-internal.c
@@ -138,7 +138,7 @@ release_n_return:
}
-int _minictrl_send_event(const char *signal_name, const char *provider_app_id, int event, bundle *signal_arg)
+int _minictrl_send_event(const char *signal_name, const char *minicontrol_name, int event, bundle *signal_arg)
{
DBusConnection *connection = NULL;
DBusMessage *message = NULL;
@@ -148,7 +148,7 @@ int _minictrl_send_event(const char *signal_name, const char *provider_app_id, i
unsigned int serialized_arg_length = 0;
int ret = MINICONTROL_ERROR_NONE;
- if (provider_app_id == NULL) {
+ if (minicontrol_name == NULL) {
ERR("Invaild parameter");
return MINICONTROL_ERROR_INVALID_PARAMETER;
}
@@ -182,14 +182,14 @@ int _minictrl_send_event(const char *signal_name, const char *provider_app_id, i
}
dbus_ret = dbus_message_append_args(message,
- DBUS_TYPE_STRING, &provider_app_id,
+ DBUS_TYPE_STRING, &minicontrol_name,
DBUS_TYPE_INT32, &event,
DBUS_TYPE_STRING, &serialized_arg,
DBUS_TYPE_UINT32, &serialized_arg_length,
DBUS_TYPE_INVALID);
if (!dbus_ret) {
- ERR("fail to append arguments to dbus message : [%s][%d]", provider_app_id, event);
+ ERR("fail to append arguments to dbus message : [%s][%d]", minicontrol_name, event);
ret = MINICONTROL_ERROR_OUT_OF_MEMORY;
goto release_n_return;
}
@@ -197,7 +197,7 @@ int _minictrl_send_event(const char *signal_name, const char *provider_app_id, i
dbus_ret = dbus_connection_send(connection, message, NULL);
if (!dbus_ret) {
- ERR("fail to send dbus message : %s", provider_app_id);
+ ERR("fail to send dbus message : %s", minicontrol_name);
ret = MINICONTROL_ERROR_IPC_FAILURE;
goto release_n_return;
}
diff --git a/src/minicontrol-provider.c b/src/minicontrol-provider.c
index 706c721..c444e3d 100755
--- a/src/minicontrol-provider.c
+++ b/src/minicontrol-provider.c
@@ -85,7 +85,7 @@ static void _sig_to_provider_handler_cb(void *data, DBusMessage *msg)
{
struct _minicontrol_provider *pd;
DBusError err;
- char *provider_app_id = NULL;
+ char *minicontrol_name = NULL;
minicontrol_viewer_event_e event;
dbus_bool_t dbus_ret;
bundle *event_arg_bundle = NULL;
@@ -102,7 +102,7 @@ static void _sig_to_provider_handler_cb(void *data, DBusMessage *msg)
dbus_error_init(&err); /* Does not allocate any memory. the error only needs to be freed if it is set at some point. */
dbus_ret = dbus_message_get_args(msg, &err,
- DBUS_TYPE_STRING, &provider_app_id,
+ DBUS_TYPE_STRING, &minicontrol_name,
DBUS_TYPE_INT32, &event,
DBUS_TYPE_STRING, &serialized_arg,
DBUS_TYPE_UINT32, &serialized_arg_length,
@@ -114,15 +114,26 @@ static void _sig_to_provider_handler_cb(void *data, DBusMessage *msg)
return;
}
- event_arg_bundle = bundle_decode(serialized_arg, serialized_arg_length);
+ INFO("minicontrol_name[%s] event[%d] pd->name[%s]", minicontrol_name, event, pd->name);
- if (event_arg_bundle == NULL) {
- ERR("fail to deserialize arguments");
- return;
- }
+ if (minicontrol_name && pd->name && strcmp(minicontrol_name, pd->name) == 0) {
+ event_arg_bundle = bundle_decode(serialized_arg, serialized_arg_length);
+ /* event argument can be null */
+
+ if (event == MINICONTROL_VIEWER_EVENT_SHOW) {
+ Evas_Coord width;
+ Evas_Coord height;
+ evas_object_geometry_get (pd->obj, NULL, NULL, &width, &height);
+ INFO("width[%d] height[%d]", width, height);
+ _minictrl_provider_message_send(MINICONTROL_EVENT_RESIZE, pd->name, width, height, 0);
+ }
- if (pd->event_callback)
- pd->event_callback(event, event_arg_bundle);
+ if (pd->event_callback)
+ pd->event_callback(event, event_arg_bundle);
+
+ if (event_arg_bundle)
+ bundle_free(event_arg_bundle);
+ }
}
@@ -171,6 +182,7 @@ static void _access_changed_cb(void *data, Evas_Object *obj, void *event_info)
EXPORT_API Evas_Object* minicontrol_create_window(const char *name, minicontrol_target_viewer_e target_viewer, minicontrol_event_cb event_callback)
{
+ int err_from_elm;
Evas_Object *win = NULL;
char *name_inter = NULL;
struct _minicontrol_provider *pd;
@@ -207,8 +219,9 @@ EXPORT_API Evas_Object* minicontrol_create_window(const char *name, minicontrol_
return NULL;
}
- if (!elm_win_socket_listen(win, name_inter, 0, EINA_TRUE)) {
- ERR("Fail to elm win socket listen");
+ err_from_elm = elm_win_socket_listen(win, name_inter, 0, EINA_TRUE);
+ if (!err_from_elm) {
+ ERR("Fail to elm win socket listen [%d]", err_from_elm);
set_last_result(MINICONTROL_ERROR_ELM_FAILURE);
evas_object_del(win);
free(name_inter);
diff --git a/src/minicontrol-viewer.c b/src/minicontrol-viewer.c
index 8205108..4d024f4 100755
--- a/src/minicontrol-viewer.c
+++ b/src/minicontrol-viewer.c
@@ -33,16 +33,16 @@ struct _minicontrol_viewer {
static struct _minicontrol_viewer *g_minicontrol_viewer_h = NULL;
-EXPORT_API int minicontrol_viewer_send_event(const char *provider_app_id, minicontrol_viewer_event_e event, bundle *event_arg)
+EXPORT_API int minicontrol_viewer_send_event(const char *minicontrol_name, minicontrol_viewer_event_e event, bundle *event_arg)
{
int ret = MINICONTROL_ERROR_NONE;
- if (provider_app_id == NULL) {
+ if (minicontrol_name == NULL) {
ERR("appid is NULL, invaild parameter");
return MINICONTROL_ERROR_INVALID_PARAMETER;
}
- ret = _minictrl_send_event(MINICTRL_DBUS_SIG_TO_PROVIDER, provider_app_id, event, event_arg);
+ ret = _minictrl_send_event(MINICTRL_DBUS_SIG_TO_PROVIDER, minicontrol_name, event, event_arg);
return ret;
}
@@ -51,7 +51,7 @@ EXPORT_API int minicontrol_viewer_send_event(const char *provider_app_id, minico
static void _sig_to_viewer_handler_cb(void *data, DBusMessage *msg)
{
DBusError err;
- char *provider_app_id = NULL;
+ char *minicontrol_name = NULL;
minicontrol_event_e event;
dbus_bool_t dbus_ret;
bundle *event_arg_bundle = NULL;
@@ -61,7 +61,7 @@ static void _sig_to_viewer_handler_cb(void *data, DBusMessage *msg)
dbus_error_init(&err); /* Does not allocate any memory. the error only needs to be freed if it is set at some point. */
dbus_ret = dbus_message_get_args(msg, &err,
- DBUS_TYPE_STRING, &provider_app_id,
+ DBUS_TYPE_STRING, &minicontrol_name,
DBUS_TYPE_INT32, &event,
DBUS_TYPE_STRING, &serialized_arg,
DBUS_TYPE_UINT32, &serialized_arg_length,
@@ -83,7 +83,7 @@ static void _sig_to_viewer_handler_cb(void *data, DBusMessage *msg)
}
if (g_minicontrol_viewer_h->callback)
- g_minicontrol_viewer_h->callback(event, provider_app_id, event_arg_bundle, g_minicontrol_viewer_h->user_data);
+ g_minicontrol_viewer_h->callback(event, minicontrol_name, event_arg_bundle, g_minicontrol_viewer_h->user_data);
bundle_free(event_arg_bundle);
dbus_error_free(&err);
@@ -153,25 +153,30 @@ static void _minictrl_plug_server_del(Ecore_Evas *ee)
INFO("server - %s is deleted", minicontrol_name);
- /* send message to remve plug */
+ /* To avoid retrying to free minicontrol_name again, set MINICTRL_PLUG_DATA_KEY as NULL */
+ ecore_evas_data_set(ee, MINICTRL_PLUG_DATA_KEY, NULL);
+
+ /* send message to remove plug */
_minictrl_provider_message_send(MINICONTROL_EVENT_STOP, minicontrol_name, 0, 0, MINICONTROL_PRIORITY_LOW);
_minictrl_provider_proc_send(MINICONTROL_DBUS_PROC_INCLUDE);
+ free(minicontrol_name);
}
static void _minictrl_plug_del(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
- Ecore_Evas *ee = NULL;
+ Ecore_Evas *ee = data;
char *minicontrol_name = NULL;
- ee = ecore_evas_ecore_evas_get(evas_object_evas_get(obj));
if (!ee)
return;
minicontrol_name = ecore_evas_data_get(ee, MINICTRL_PLUG_DATA_KEY);
- if (minicontrol_name)
- free(minicontrol_name);
- ecore_evas_data_set(ee, MINICTRL_PLUG_DATA_KEY, NULL);
+ if (minicontrol_name) {
+ /* Sending an event 'MINICONTROL_EVENT_REQUEST_HIDE' should be done by minicontrol viewer manually */
+ free(minicontrol_name);
+ ecore_evas_data_set(ee, MINICTRL_PLUG_DATA_KEY, NULL);
+ }
}
EXPORT_API Evas_Object *minicontrol_viewer_add(Evas_Object *parent, const char *minicontrol_name)
@@ -207,7 +212,7 @@ EXPORT_API Evas_Object *minicontrol_viewer_add(Evas_Object *parent, const char *
ecore_evas_data_set(ee, MINICTRL_PLUG_DATA_KEY, strdup(minicontrol_name));
ecore_evas_callback_delete_request_set(ee, _minictrl_plug_server_del);
- evas_object_event_callback_add(plug, EVAS_CALLBACK_DEL, _minictrl_plug_del, plug);
+ evas_object_event_callback_add(plug, EVAS_CALLBACK_DEL, _minictrl_plug_del, ee);
return plug;
}
@@ -217,14 +222,14 @@ EXPORT_API Evas_Object *minicontrol_viewer_image_object_get(const Evas_Object *o
return elm_plug_image_object_get(obj);
}
-EXPORT_API int minicontrol_viewer_request(const char *appid, minicontrol_request_e request, int value)
+EXPORT_API int minicontrol_viewer_request(const char *minicontrol_name, minicontrol_request_e request, int value)
{
int ret = MINICONTROL_ERROR_NONE;
minicontrol_viewer_event_e event = 0;
bundle *event_arg_bundle = NULL;
char bundle_value_buffer[BUNDLE_BUFFER_LENGTH] = { 0, };
- if (appid == NULL) {
+ if (minicontrol_name == NULL) {
ERR("appid is NULL, invaild parameter");
return MINICONTROL_ERROR_INVALID_PARAMETER;
}
@@ -255,7 +260,7 @@ EXPORT_API int minicontrol_viewer_request(const char *appid, minicontrol_request
goto out;
}
- _minictrl_send_event(MINICTRL_DBUS_SIG_TO_PROVIDER, appid, event, event_arg_bundle);
+ _minictrl_send_event(MINICTRL_DBUS_SIG_TO_PROVIDER, minicontrol_name, event, event_arg_bundle);
out:
if (event_arg_bundle)