summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKazumasa Mitsunari <knimitz@witz-inc.co.jp>2018-08-09 19:28:12 +0900
committerKazumasa Mitsunari <knimitz@witz-inc.co.jp>2018-08-09 19:28:12 +0900
commit8b330eff9712da611f99f0dc171e544c5d894a80 (patch)
tree7df444373851e9e765b6e010d832708ec50f56a2
parentc216327bd2d5e34909bc3ff6e10cb73c83ada4c1 (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.cpp103
-rw-r--r--src/libwindowmanager.h3
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;