From eabd10ffe2f9cb5c31262ad3152b037eb2286857 Mon Sep 17 00:00:00 2001 From: zheng_wenlong Date: Mon, 23 Oct 2017 14:46:17 +0900 Subject: Modify function argument from char to json Change libhomescreen event api from char to json. Also modify samples who use this. BUG-AGL: SPEC-992 Change-Id: Id3986d413f9494019f6b175488dd73de226ba020 Signed-off-by: zheng_wenlong --- include/libhomescreen.hpp | 2 +- sample/simple-egl/src/simple-egl.cpp | 65 ++++++++++++++++++++++++++---------- sample/template/main.cpp | 45 +++++++++++++++++++------ sample/template/wmhandler.cpp | 9 +++-- src/libhomescreen.cpp | 14 ++------ 5 files changed, 90 insertions(+), 45 deletions(-) diff --git a/include/libhomescreen.hpp b/include/libhomescreen.hpp index 5720368..9034dc8 100644 --- a/include/libhomescreen.hpp +++ b/include/libhomescreen.hpp @@ -38,7 +38,7 @@ public: LibHomeScreen(const LibHomeScreen &) = delete; LibHomeScreen &operator=(const LibHomeScreen &) = delete; - using handler_func = std::function; + using handler_func = std::function; enum EventType { Event_TapShortcut = 1, diff --git a/sample/simple-egl/src/simple-egl.cpp b/sample/simple-egl/src/simple-egl.cpp index 4494ac8..cfa349c 100644 --- a/sample/simple-egl/src/simple-egl.cpp +++ b/sample/simple-egl/src/simple-egl.cpp @@ -572,42 +572,61 @@ init_wm(LibWindowmanager *wm) return -1; } - if (wm->requestSurface(app_name.c_str()) != 0) { + json_object *obj = json_object_new_object(); + json_object_object_add(obj, wm->kKeyDrawingName, json_object_new_string(app_name.c_str())); + if (wm->requestSurface(obj) != 0) { debug_out("************** [SIMPLE EGL] [WM SIMPLE >>>>] wm request surface failed \n"); return -1; } - wm->set_event_handler(LibWindowmanager::Event_Active, [](char const *label) { + wm->set_event_handler(LibWindowmanager::Event_Active, [wm](json_object *object) { + const char *label = json_object_get_string( + json_object_object_get(object, wm->kKeyDrawingName)); debug_out("************** [SIMPLE EGL] [WM SIMPLE >>>>] Surface %s got activated! \n", label); }); - wm->set_event_handler(LibWindowmanager::Event_Inactive, [](char const *label) { + wm->set_event_handler(LibWindowmanager::Event_Inactive, [wm](json_object *object) { + const char *label = json_object_get_string( + json_object_object_get(object, wm->kKeyDrawingName)); debug_out("************** [SIMPLE EGL] [WM SIMPLE >>>>] Surface %s got inactivated!\n", label); }); - wm->set_event_handler(LibWindowmanager::Event_Visible, [wm](char const *label) { + wm->set_event_handler(LibWindowmanager::Event_Visible, [wm](json_object *object) { + const char *label = json_object_get_string( + json_object_object_get(object, wm->kKeyDrawingName)); debug_out("************** [SIMPLE EGL] [WM SIMPLE >>>>] Surface %s got visibled!\n", label); }); - wm->set_event_handler(LibWindowmanager::Event_Invisible, [](char const *label) { + wm->set_event_handler(LibWindowmanager::Event_Invisible, [wm](json_object *object) { + const char *label = json_object_get_string( + json_object_object_get(object, wm->kKeyDrawingName)); debug_out("************** [SIMPLE EGL] [WM SIMPLE >>>>] Surface %s got invisibled!\n", label); }); - wm->set_event_handler(LibWindowmanager::Event_SyncDraw, [wm](char const *label) { + wm->set_event_handler(LibWindowmanager::Event_SyncDraw, [wm](json_object *object) { + const char *label = json_object_get_string( + json_object_object_get(object, wm->kKeyDrawingName)); + const char *area = json_object_get_string( + json_object_object_get(object, wm->kKeyDrawingArea)); debug_out("************** [SIMPLE EGL] [WM SIMPLE >>>>] Surface %s got syncdraw!\n", label); debug_out("************** [SIMPLE EGL] [WM SIMPLE >>>>] try to endDraw %s \n", app_name.c_str()); - wm->endDraw(app_name.c_str()); - }); + json_object *obj = json_object_new_object(); + json_object_object_add(obj, wm->kKeyDrawingName, json_object_new_string(app_name.c_str())); + + wm->endDraw(obj); + }); - wm->set_event_handler(LibWindowmanager::Event_FlushDraw, [](char const *label) { + wm->set_event_handler(LibWindowmanager::Event_FlushDraw, [wm](json_object *object) { + const char *label = json_object_get_string( + json_object_object_get(object, wm->kKeyDrawingName)); debug_out("************** [SIMPLE EGL] [WM SIMPLE >>>>] Surface %s got flushdraw! \n", label); }); do { surfaceIdStr = getenv("QT_IVI_SURFACE_ID"); - } while (surfaceIdStr == NULL); - + } while (surfaceIdStr == NULL); + g_id_ivisurf = atoi(surfaceIdStr); debug_out("************** [SIMPLE EGL] [WM SIMPLE >>>>] IVI_SURFACE_ID: %d \n", g_id_ivisurf); @@ -622,16 +641,23 @@ init_hs(LibHomeScreen* hs){ return -1; } - hs->set_event_handler(LibHomeScreen::Event_TapShortcut, [](const char* application_name){ + hs->set_event_handler(LibHomeScreen::Event_TapShortcut, [](json_object *object){ + const char *application_name = json_object_get_string( + json_object_object_get(object, "application_name")); debug_out("************** [SIMPLE EGL] [HS SIMPLE >>>>] Event_TapShortcut application_name = %s \n", application_name); if(strcmp(application_name, app_name.c_str()) == 0) { debug_out("************** [SIMPLE EGL] [HS SIMPLE] try to activesurface %s \n", app_name.c_str()); - wm->activateSurface(app_name.c_str()); + json_object *obj = json_object_new_object(); + json_object_object_add(obj, wm->kKeyDrawingName, json_object_new_string(app_name.c_str())); + json_object_object_add(obj, wm->kKeyDrawingArea, json_object_new_string("normal.full")); + wm->activateSurface(obj); } }); - hs->set_event_handler(LibHomeScreen::Event_OnScreenMessage, [](const char* display_message){ + hs->set_event_handler(LibHomeScreen::Event_OnScreenMessage, [](json_object *object){ + const char *display_message = json_object_get_string( + json_object_object_get(object, "display_message")); debug_out("************** [SIMPLE EGL] [HS SIMPLE >>>>] Event_OnScreenMessage display_message = %s \n", display_message); }); @@ -642,7 +668,7 @@ int main(int argc, char **argv) { struct sigaction sigint; - struct window window = { 0 }; + struct window window = { 0 }; struct display display = { 0 }; if(getenv("ENABLE_DEMO_DEBUG")) @@ -706,7 +732,7 @@ main(int argc, char **argv) create_surface(&window); init_gl(&window); - + //Ctrl+C sigint.sa_handler = signal_int; sigemptyset(&sigint.sa_mask); @@ -714,8 +740,11 @@ main(int argc, char **argv) sigaction(SIGINT, &sigint, NULL); eglSwapBuffers(display.egl.dpy, window.egl_surface); - wm->activateSurface(app_name.c_str()); - + json_object *obj = json_object_new_object(); + json_object_object_add(obj, wm->kKeyDrawingName, json_object_new_string(app_name.c_str())); + json_object_object_add(obj, wm->kKeyDrawingArea, json_object_new_string("normal.full")); + wm->activateSurface(obj); + /* The mainloop here is a little subtle. Redrawing will cause * EGL to read events so we can just call * wl_display_dispatch_pending() to handle any events that got diff --git a/sample/template/main.cpp b/sample/template/main.cpp index 589d314..831df41 100644 --- a/sample/template/main.cpp +++ b/sample/template/main.cpp @@ -90,29 +90,47 @@ int main(int argc, char *argv[]) } // Application should call requestSurface at first - if (wm->requestSurface(myname.c_str()) != 0) { + json_object *obj = json_object_new_object(); + json_object_object_add(obj, wm->kKeyDrawingName, json_object_new_string(app_name.c_str())); + if (wm->requestSurface(obj) != 0) { exit(EXIT_FAILURE); } // Set event handlers for each event - wm->set_event_handler(LibWindowmanager::Event_Active, [](char const *label) { + wm->set_event_handler(LibWindowmanager::Event_Active, [wm](json_object *object) { + const char *label = json_object_get_string( + json_object_object_get(object, wm->kKeyDrawingName)); fprintf(stderr, "Surface %s got activated!\n", label); }); - wm->set_event_handler(LibWindowmanager::Event_Inactive, [](char const *label) { + wm->set_event_handler(LibWindowmanager::Event_Inactive, [wm](json_object *object) { + const char *label = json_object_get_string( + json_object_object_get(object, wm->kKeyDrawingName)); fprintf(stderr, "Surface %s got deactivated!\n", label); }); - wm->set_event_handler(LibWindowmanager::Event_Visible, [](char const *label) { + wm->set_event_handler(LibWindowmanager::Event_Visible, [wm](json_object *object) { + const char *label = json_object_get_string( + json_object_object_get(object, wm->kKeyDrawingName)); fprintf(stderr, "Surface %s got visible!\n", label); }); - wm->set_event_handler(LibWindowmanager::Event_Invisible, [](char const *label) { + wm->set_event_handler(LibWindowmanager::Event_Invisible, [wm](json_object *object) { + const char *label = json_object_get_string( + json_object_object_get(object, wm->kKeyDrawingName)); fprintf(stderr, "Surface %s got invisible!\n", label); }); - wm->set_event_handler(LibWindowmanager::Event_SyncDraw, [wm](char const *label) { - fprintf(stderr, "Surface %s got syncDraw!\n", label); + wm->set_event_handler(LibWindowmanager::Event_SyncDraw, [wm](json_object *object) { + const char *label = json_object_get_string( + json_object_object_get(object, wm->kKeyDrawingName)); + const char *area = json_object_get_string( + json_object_object_get(object, wm->kKeyDrawingArea)); + fprintf(stderr, "Surface %s got syncDraw!\n", label); // Application should call LibWindowmanager::endDraw() in SyncDraw handler - wm->endDraw(label); + json_object *obj = json_object_new_object(); + json_object_object_add(obj, wm->kKeyDrawingName, json_object_new_string(app_name.c_str())); + wm->endDraw(obj); }); - wm->set_event_handler(LibWindowmanager::Event_FlushDraw, [](char const *label) { + wm->set_event_handler(LibWindowmanager::Event_FlushDraw, [wm](json_object *object) { + const char *label = json_object_get_string( + json_object_object_get(object, wm->kKeyDrawingName)); fprintf(stderr, "Surface %s got flushDraw!\n", label); }); @@ -127,11 +145,16 @@ int main(int argc, char *argv[]) hs->init(port, token.c_str()); // Set event handler - hs->set_event_handler(LibHomeScreen::Event_TapShortcut, [wm](const char* appname) { + hs->set_event_handler(LibHomeScreen::Event_TapShortcut, [wm](json_object *object) { + const char *appname = json_object_get_string( + json_object_object_get(object, "application_name")); if(myname == appname) { qDebug("Surface %s got tapShortcut\n", appname); // Application should call LibWindowmanager::endDraw() in TapShortcut handler - wm->activateSurface(myname.c_str()); + json_object *obj = json_object_new_object(); + json_object_object_add(obj, wm->kKeyDrawingName, json_object_new_string(app_name.c_str())); + json_object_object_add(obj, wm->kKeyDrawingArea, json_object_new_string("normal.full")); + wm->activateSurface(obj); } }); diff --git a/sample/template/wmhandler.cpp b/sample/template/wmhandler.cpp index 761915f..9972104 100644 --- a/sample/template/wmhandler.cpp +++ b/sample/template/wmhandler.cpp @@ -18,17 +18,20 @@ #include -void WmHandler::init(LibWindowmanager *p_wm, std::string applabel) +void WmHandler::init(LibWindowmanager *p_wm, std::string applabel) { mp_wm = p_wm; m_applabel = applabel; } void WmHandler::slotActivateSurface() { - mp_wm->activateSurface(m_applabel.c_str()); + json_object *obj = json_object_new_object(); + json_object_object_add(obj, wm->kKeyDrawingName, json_object_new_string(m_applabel.c_str())); + json_object_object_add(obj, wm->kKeyDrawingArea, json_object_new_string("normal.full")); + mp_wm->activateSurface(obj); } -WmHandler::WmHandler(QObject *parent) +WmHandler::WmHandler(QObject *parent) :QObject(parent) { } diff --git a/src/libhomescreen.cpp b/src/libhomescreen.cpp index 42ab8b1..2f3ef44 100644 --- a/src/libhomescreen.cpp +++ b/src/libhomescreen.cpp @@ -441,25 +441,15 @@ void LibHomeScreen::on_event(void *closure, const char *event, struct afb_wsj1_m if (strcasecmp(event_only, LibHomeScreen::event_list[0].c_str()) == 0) { auto i = this->handlers.find(Event_TapShortcut); - - struct json_object *json_application_name = json_object_object_get(json_data, "application_name"); - const char* application_name = json_object_get_string(json_application_name); - if ( i != this->handlers.end() ) { - i->second(application_name); + i->second(json_data); } } else if (strcasecmp(event_only, LibHomeScreen::event_list[1].c_str()) == 0) { - auto i = this->handlers.find(Event_OnScreenMessage); - - struct json_object *json_display_message = json_object_object_get(json_data, "display_message"); - const char* display_message = json_object_get_string(json_display_message); - if ( i != this->handlers.end() ) { - i->second(display_message); + i->second(json_data); } - } json_object_put(ev_contents); -- cgit 1.2.3-korg