summaryrefslogtreecommitdiff
path: root/lib/src/shortcut_internal.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/src/shortcut_internal.c')
-rwxr-xr-xlib/src/shortcut_internal.c54
1 files changed, 44 insertions, 10 deletions
diff --git a/lib/src/shortcut_internal.c b/lib/src/shortcut_internal.c
index 2194ab9..430b7db 100755
--- a/lib/src/shortcut_internal.c
+++ b/lib/src/shortcut_internal.c
@@ -57,9 +57,28 @@ typedef struct _shortcut_remove_cb_info {
static shortcut_request_cb_info _request_callback_info;
static shortcut_remove_cb_info _remove_callback_info;
+static void _shortcut_send_return(int ret_val, const char *request_id)
+{
+ int ret;
+ GDBusMessage *reply = NULL;
+
+ ret = _dbus_init();
+ if (ret != SHORTCUT_ERROR_NONE) {
+ SHORTCUT_ERR("Can't init dbus %d", ret);
+ return;
+ }
+
+ _send_sync_shortcut(g_variant_new("(is)", ret_val, request_id),
+ &reply,
+ "send_return_value");
+ if (reply)
+ g_object_unref(reply);
+}
+
/* LCOV_EXCL_START */
static void _add_shortcut_notify(GVariant *parameters)
{
+ int ret = SHORTCUT_ERROR_NOT_SUPPORTED;
const char *appid;
const char *name;
int type;
@@ -67,20 +86,24 @@ static void _add_shortcut_notify(GVariant *parameters)
const char *icon;
int allow_duplicate;
int sender_pid;
+ const char *request_id;
- g_variant_get(parameters, "(i&s&si&s&si)", &sender_pid, &appid, &name, &type, &content, &icon, &allow_duplicate);
+ g_variant_get(parameters, "(&si&s&si&s&si)", &request_id, &sender_pid, &appid, &name, &type, &content, &icon, &allow_duplicate);
SHORTCUT_DBG("_add_shortcut_notify sender pid : [%d] appid : [%s]", sender_pid, appid);
if (_request_callback_info.request_cb != NULL)
- _request_callback_info.request_cb(appid, name, type, content, icon, sender_pid, -1.0f, allow_duplicate, _request_callback_info.data);
+ ret = _request_callback_info.request_cb(appid, name, type, content, icon, sender_pid, -1.0f, allow_duplicate, _request_callback_info.data);
else
SHORTCUT_DBG("request_cb is null.");
+ _shortcut_send_return(ret, request_id);
+
}
/* LCOV_EXCL_STOP */
/* LCOV_EXCL_START */
static void _add_shortcut_widget_notify(GVariant *parameters)
{
+ int ret = SHORTCUT_ERROR_NOT_SUPPORTED;
const char *appid;
const char *name;
int type;
@@ -89,30 +112,35 @@ static void _add_shortcut_widget_notify(GVariant *parameters)
int allow_duplicate;
int sender_pid;
double period;
+ const char *request_id;
- g_variant_get(parameters, "(i&s&si&s&sdi)", &sender_pid, &appid, &name, &type, &content, &icon, &period, &allow_duplicate);
+ g_variant_get(parameters, "(&si&s&si&s&sdi)", &request_id, &sender_pid, &appid, &name, &type, &content, &icon, &period, &allow_duplicate);
SHORTCUT_DBG("_add_shortcut_widget_notify sender pid : [%d] appid : [%s]", sender_pid, appid);
if (_request_callback_info.request_cb != NULL)
- _request_callback_info.request_cb(appid, name, type, content, icon, sender_pid, period, allow_duplicate, _request_callback_info.data);
+ ret = _request_callback_info.request_cb(appid, name, type, content, icon, sender_pid, period, allow_duplicate, _request_callback_info.data);
else
SHORTCUT_DBG("request_cb is null.");
+ _shortcut_send_return(ret, request_id);
}
/* LCOV_EXCL_STOP */
static void _remove_shortcut_notify(GVariant *parameters)
{
+ int ret = SHORTCUT_ERROR_NOT_SUPPORTED;
const char *appid;
const char *name;
int sender_pid;
+ const char *request_id;
- g_variant_get(parameters, "(i&s&s)", &sender_pid, &appid, &name);
+ g_variant_get(parameters, "(&si&s&s)", &request_id, &sender_pid, &appid, &name);
SHORTCUT_DBG("_remove_shortcut_notify sender pid : [%d] appid : [%s]", sender_pid, appid);
if (_remove_callback_info.remove_cb != NULL)
- _remove_callback_info.remove_cb(appid, name, sender_pid, _remove_callback_info.data);
+ ret = _remove_callback_info.remove_cb(appid, name, sender_pid, _remove_callback_info.data);
else
SHORTCUT_DBG("remove_cb is null.");
+ _shortcut_send_return(ret, request_id);
}
/* LCOV_EXCL_START */
@@ -296,6 +324,7 @@ int _send_sync_shortcut(GVariant *body, GDBusMessage **reply, char *cmd)
return ret;
/* LCOV_EXCL_STOP */
}
+
SHORTCUT_DBG("_send_sync_shortcut done !!");
return SHORTCUT_ERROR_NONE;
}
@@ -314,9 +343,10 @@ static void _send_message_with_reply_sync_cb(GDBusConnection *connection,
GAsyncResult *res,
gpointer user_data)
{
- int result = SHORTCUT_ERROR_NONE;
+ int result;
GError *err = NULL;
GDBusMessage *reply = NULL;
+ GVariant *body;
struct result_cb_item *cb_item = (struct result_cb_item *)user_data;
if (cb_item == NULL) {
@@ -339,8 +369,9 @@ static void _send_message_with_reply_sync_cb(GDBusConnection *connection,
}
result = SHORTCUT_ERROR_COMM;
/* LCOV_EXCL_STOP */
+ }
- } else if (g_dbus_message_to_gerror(reply, &err)) {
+ if (g_dbus_message_to_gerror(reply, &err)) {
/* LCOV_EXCL_START */
if (err->code == G_DBUS_ERROR_ACCESS_DENIED)
result = SHORTCUT_ERROR_PERMISSION_DENIED;
@@ -350,12 +381,15 @@ static void _send_message_with_reply_sync_cb(GDBusConnection *connection,
SHORTCUT_ERR("_send_message_with_reply_sync_cb error %s err code: %d", err->message, result);
g_error_free(err);
/* LCOV_EXCL_STOP */
+ } else {
+ body = g_dbus_message_get_body(reply);
+ g_variant_get(body, "(i)", &result);
}
if (cb_item->result_internal_cb)
- result = cb_item->result_internal_cb(result, getpid(), cb_item->data); /* LCOV_EXCL_LINE */
+ cb_item->result_internal_cb(result, getpid(), cb_item->data); /* LCOV_EXCL_LINE */
else if (cb_item->result_cb)
- result = cb_item->result_cb(result, cb_item->data);
+ cb_item->result_cb(result, cb_item->data);
if (reply)
g_object_unref(reply);