diff options
Diffstat (limited to 'lib/src/shortcut_internal.c')
-rwxr-xr-x | lib/src/shortcut_internal.c | 54 |
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); |