diff options
author | Kazumasa Mitsunari <knimitz@witz-inc.co.jp> | 2018-08-09 19:28:12 +0900 |
---|---|---|
committer | Kazumasa Mitsunari <knimitz@witz-inc.co.jp> | 2018-08-09 19:28:12 +0900 |
commit | 8b330eff9712da611f99f0dc171e544c5d894a80 (patch) | |
tree | 7df444373851e9e765b6e010d832708ec50f56a2 | |
parent | c216327bd2d5e34909bc3ff6e10cb73c83ada4c1 (diff) |
Clean source code and bug fix
Change-Id: Ie933b68b11830d37d9a58e673e9d50bfdc49a4be
Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
-rw-r--r-- | src/libwindowmanager.cpp | 103 | ||||
-rw-r--r-- | src/libwindowmanager.h | 3 |
2 files changed, 61 insertions, 45 deletions
diff --git a/src/libwindowmanager.cpp b/src/libwindowmanager.cpp index 995e10d..6581189 100644 --- a/src/libwindowmanager.cpp +++ b/src/libwindowmanager.cpp @@ -22,14 +22,12 @@ #include <mutex> #include <set> #include <queue> - -#include <systemd/sd-event.h> - #include <pthread.h> extern "C" { #include <afb/afb-ws-client.h> #include <afb/afb-wsj1.h> +#include <systemd/sd-event.h> } #define UNUSED(x) (void)(x) @@ -38,23 +36,10 @@ extern "C" { * @class LibWindowmanager::Impl */ class LibWindowmanager::Impl { - friend class LibWindowmanager; - - const std::vector<std::string> kListEventName{ - std::string("active"), - std::string("inactive"), - std::string("visible"), - std::string("invisible"), - std::string("syncDraw"), - std::string("flushDraw"), - std::string("screenUpdated"), - std::string("error") - }; + public: - /* Key for json obejct */ - const char *kKeyDrawingName = "drawing_name"; - const char *kKeyDrawingArea = "drawing_area"; - const char *kKeyDrawingRect = "drawing_rect"; + Impl(); + ~Impl(); // This is the LibWindowmanager interface impl int init(int port, char const *token); @@ -79,8 +64,11 @@ class LibWindowmanager::Impl { void setScreenUpdatedHandler(screen_updated_handler f); void setErrorHandler(error_handler f); - Impl(); - ~Impl(); + int api_call(const char *verb, json_object *object, + const std::function<void(bool, json_object *)> &onReply); + void event(char const *et, json_object *object); +private: + int runEventLoop(); struct afb_wsj1 *wsj1; struct sd_event *loop; @@ -89,20 +77,28 @@ class LibWindowmanager::Impl { std::map<EventType, handler_fun> handlers; std::queue<std::pair<handler_fun, std::string>> handler_queue; - int api_call(const char *verb, json_object *object, - const std::function<void(bool, json_object *)> &onReply); + const std::vector<std::string> kListEventName{ + std::string("active"), + std::string("inactive"), + std::string("visible"), + std::string("invisible"), + std::string("syncDraw"), + std::string("flushDraw"), + std::string("screenUpdated"), + std::string("error") + }; + /* Key for json obejct */ + const char *kKeyDrawingName = "drawing_name"; + const char *kKeyDrawingArea = "drawing_area"; + const char *kKeyDrawingRect = "drawing_rect"; -public: - void event(char const *et, json_object *object); -private: - int runEventLoop(); - visible_handler _on_visible = nullptr; - active_handler _on_active = nullptr; - sync_draw_handler _on_sync_draw = nullptr; - flush_draw_handler _on_flush_draw = nullptr; - screen_updated_handler _on_screen_updated = nullptr; - error_handler _on_error = nullptr; - struct Screen _screen = {0, 0, 0, 0, 0.0}; + struct Screen _screen; + visible_handler _on_visible; + active_handler _on_active; + sync_draw_handler _on_sync_draw; + flush_draw_handler _on_flush_draw; + screen_updated_handler _on_screen_updated; + error_handler _on_error; }; namespace { @@ -178,7 +174,12 @@ constexpr struct afb_wsj1_itf itf = { /** * @class LibWindowmanager::Impl::Impl */ -LibWindowmanager::Impl::Impl() : wsj1{}, loop{}, labels(), handlers() { TRACE(); } +LibWindowmanager::Impl::Impl() + : wsj1{}, loop{}, labels(), handlers(), + _screen{0,0,0,0,0.0}, _on_visible(nullptr), _on_active(nullptr), + _on_sync_draw(nullptr), _on_flush_draw(nullptr), + _on_screen_updated(nullptr), _on_error(nullptr) +{} LibWindowmanager::Impl::~Impl() { TRACE(); @@ -599,24 +600,38 @@ void LibWindowmanager::Impl::set_event_handler(enum EventType et, handler_fun fu void LibWindowmanager::Impl::setActiveHandler(active_handler f) { struct json_object* j = json_object_new_object(); json_object_object_add(j, "event", json_object_new_int(Event_Active)); + struct json_object* j_i = json_object_new_object(); + json_object_object_add(j, "event", json_object_new_int(Event_Inactive)); int ret = afb_wsj1_call_j(this->wsj1, wmAPI, "wm_subscribe", j, _on_reply_static, this); if (0 > ret) { HMI_ERROR("libwm", "Failed to subscribe event"); return; } + ret = afb_wsj1_call_j(this->wsj1, wmAPI, "wm_subscribe", j_i, _on_reply_static, this); + if (0 > ret) { + HMI_ERROR("libwm", "Failed to subscribe event"); + return; + } this->_on_active = f; } void LibWindowmanager::Impl::setVisibleHandler(visible_handler f) { struct json_object* j = json_object_new_object(); json_object_object_add(j, "event", json_object_new_int(Event_Visible)); + struct json_object* j_i = json_object_new_object(); + json_object_object_add(j, "event", json_object_new_int(Event_Invisible)); int ret = afb_wsj1_call_j(this->wsj1, wmAPI, "wm_subscribe", j, _on_reply_static, this); if (0 > ret) { HMI_ERROR("libwm", "Failed to subscribe event"); return; } + ret = afb_wsj1_call_j(this->wsj1, wmAPI, "wm_subscribe", j_i, _on_reply_static, this); + if (0 > ret) { + HMI_ERROR("libwm", "Failed to subscribe event"); + return; + } this->_on_visible = f; } @@ -775,7 +790,7 @@ void LibWindowmanager::Impl::event(char const *et, json_object *object) { } json_object *j_val; - const char* role; + std::string role = ""; bool emit = false; if(json_object_object_get_ex(object, this->kKeyDrawingName, &j_val)) { role = json_object_get_string(j_val); @@ -790,7 +805,7 @@ void LibWindowmanager::Impl::event(char const *et, json_object *object) { bool active = ((oet.second == Event_Active) ? true : false); if(!emit) break; if(_on_active) { - return _on_active(role, active); + return _on_active(role.c_str(), active); } break; } @@ -799,16 +814,16 @@ void LibWindowmanager::Impl::event(char const *et, json_object *object) { bool visible = ((oet.second == Event_Visible) ? true : false); if(!emit) break; if(_on_visible) { - return _on_visible(role, visible); + return _on_visible(role.c_str(), visible); } break; } case Event_SyncDraw : if(_on_sync_draw && emit) { - json_object_object_get_ex(object, kKeyDrawingArea, &j_val); + json_object_object_get_ex(object, this->kKeyDrawingArea, &j_val); const char* area = json_object_get_string(j_val); json_object *j_rect; - json_object_object_get_ex(object, kKeyDrawingRect, &j_rect); + json_object_object_get_ex(object, this->kKeyDrawingRect, &j_rect); json_object_object_get_ex(j_rect, "x", &j_val); int x = json_object_get_int(j_val); json_object_object_get_ex(j_rect, "y", &j_val); @@ -818,12 +833,12 @@ void LibWindowmanager::Impl::event(char const *et, json_object *object) { json_object_object_get_ex(j_rect, "height", &j_val); int h = json_object_get_int(j_val); Rect rect(x, y, w, h); - return _on_sync_draw(role, area, rect); + return _on_sync_draw(role.c_str(), area, rect); } break; case Event_FlushDraw : if(_on_flush_draw && emit) { - return _on_flush_draw(role); + return _on_flush_draw(role.c_str()); } break; case Event_ScreenUpdated : @@ -834,8 +849,8 @@ void LibWindowmanager::Impl::event(char const *et, json_object *object) { std::vector<std::string> id_list; for(int i = 0; i < len; i++) { - id_list.emplace_back( - json_object_get_string(json_object_array_get_idx(j_val, i))); + std::string elem = json_object_get_string(json_object_array_get_idx(j_val, i)); + id_list.push_back(elem); } return _on_screen_updated(id_list); } diff --git a/src/libwindowmanager.h b/src/libwindowmanager.h index 027e6fb..5070cf5 100644 --- a/src/libwindowmanager.h +++ b/src/libwindowmanager.h @@ -19,6 +19,7 @@ #include <functional> #include <vector> +#include <string> #include <json-c/json.h> class Rect { @@ -130,11 +131,11 @@ public: void set_event_handler(enum EventType et, handler_fun f); - struct Impl; // These APIs are deprecated, please use new API THIS_FUNCTION_IS_DEPRECATED(int activateSurface(json_object *object)); THIS_FUNCTION_IS_DEPRECATED(int deactivateSurface(json_object *object)); + class Impl; private: Impl *const d; |