diff options
-rw-r--r-- | src/libwindowmanager.cpp | 52 |
1 files changed, 38 insertions, 14 deletions
diff --git a/src/libwindowmanager.cpp b/src/libwindowmanager.cpp index 84a091f..267fecc 100644 --- a/src/libwindowmanager.cpp +++ b/src/libwindowmanager.cpp @@ -138,8 +138,13 @@ void onEvent(void *closure, const char *event, afb_wsj1_msg *msg) { return; } - reinterpret_cast<LibWindowmanager::Impl *>(closure)->event( - event, json_object_object_get(afb_wsj1_msg_object_j(msg), "data")); + json_object *val; + if (json_object_object_get_ex(afb_wsj1_msg_object_j(msg), "data", &val)) { + reinterpret_cast<LibWindowmanager::Impl *>(closure)->event(event, val); + } + else { + fprintf(stderr, "Not found key \"data\"\n"); + } } /* called when wsj1 hangsup */ @@ -158,12 +163,6 @@ constexpr struct afb_wsj1_itf itf = { // XXX: I am not sure this is the right thing to do though... std::recursive_mutex dispatch_mutex; -json_object *drawing_name_json_argument(char const *label) { - json_object *j = json_object_new_object(); - json_object_object_add(j, "drawing_name", json_object_new_string(label)); - return j; -} - } // namespace /** @@ -232,8 +231,15 @@ fail: int LibWindowmanager::Impl::requestSurface(json_object *object) { TRACE(); - const char *tmp_label = json_object_get_string( - json_object_object_get(object, this->kKeyDrawingName)); + json_object *val; + const char *tmp_label; + if (json_object_object_get_ex(object, this->kKeyDrawingName, &val)) { + tmp_label = json_object_get_string(val); + } + else { + fprintf(stderr, "Not found key \"%s\"\n", this->kKeyDrawingName); + return -EINVAL; + } // DrawingName in "object" is overwrited in api_call("RequestSurface") // So it is neccesary to copy it. @@ -253,8 +259,16 @@ int LibWindowmanager::Impl::requestSurface(json_object *object) { int rc2 = this->api_call("RequestSurface", object, [&rc](bool ok, json_object *j) { if (ok) { - int id = - json_object_get_int(json_object_object_get(j, "response")); + json_object *val; + int id; + if (json_object_object_get_ex(j, "response", &val)) { + id = json_object_get_int(val); + } + else { + fprintf(stderr, "Not found key \"response\"\n"); + rc = -EINVAL; + return; + } char *buf; asprintf(&buf, "%d", id); printf("setenv(\"QT_IVI_SURFACE_ID\", %s, 1)\n", buf); @@ -332,6 +346,9 @@ void LibWindowmanager::Impl::set_event_handler(enum EventType et, handler_fun fu json_object_object_add(j, "event", json_object_new_int(et)); int ret = afb_wsj1_call_j(this->wsj1, wmAPI, "wm_subscribe", j, _on_reply_static, this); + if (0 > ret) { + fprintf(stderr, "calling %s/wm_subscribe failed\n", wmAPI); + } // Set event handler if (et >= Event_Active && et <= Event_FlushDraw) { @@ -447,8 +464,15 @@ void LibWindowmanager::Impl::event(char const *et, json_object *object) { auto i = this->handlers.find(oet.second); if (i != this->handlers.end()) { - const char *label = json_object_get_string( - json_object_object_get(object, this->kKeyDrawingName)); + json_object *val; + const char *label; + if (json_object_object_get_ex(object, this->kKeyDrawingName, &val)) { + label = json_object_get_string(val); + } + else { + fprintf(stderr, "Not found key \"%s\"\n", this->kKeyDrawingName); + return; + } if (this->labels.find(label) != this->labels.end()) { i->second(object); |