diff options
author | Tadao Tanikawa <tanikawa.tadao@jp.panasonic.com> | 2018-11-10 17:53:32 +0000 |
---|---|---|
committer | Tadao Tanikawa <tanikawa.tadao@jp.panasonic.com> | 2018-11-10 17:53:32 +0000 |
commit | 68adbfd5174f21830d7ddea2c102cb69d527a3c1 (patch) | |
tree | 4bdc5e5772aba2300031d78cb8d6dc6438ce44bd | |
parent | 3227f2bf56642ea0b5495a461353b2f195112a51 (diff) |
Add example:weston-terminalsandbox/ruke47/weston-terminal
Example of launching weston-terminal
Issue:
1. --fullscreen doesn't work
2. scaled, not dot-by-dot
Change-Id: I0c3034bc9584228de4f0eb68723ea3f000344843
Signed-off-by: Tadao Tanikawa <tanikawa.tadao@jp.panasonic.com>
-rw-r--r-- | CMakeLists.txt | 5 | ||||
-rwxr-xr-x | package/weston-terminal/bin/runxdg | 2 | ||||
-rw-r--r-- | package/weston-terminal/config.xml | 17 | ||||
-rw-r--r-- | package/weston-terminal/icon.svg | 114 | ||||
-rw-r--r-- | package/weston-terminal/runxdg.toml | 25 | ||||
-rw-r--r-- | src/runxdg.cpp | 28 | ||||
-rw-r--r-- | src/runxdg.hpp | 7 |
7 files changed, 187 insertions, 11 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index af5e6b7..67bd88f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,6 +10,7 @@ find_package(PkgConfig REQUIRED) pkg_check_modules(GLIB REQUIRED glib-2.0) pkg_check_modules(GIO REQUIRED gio-2.0) pkg_check_modules(ILMCONTROL REQUIRED ilmControl) +pkg_check_modules(ILMINPUT REQUIRED ilmInput) # No configuration # configure_file ( @@ -22,6 +23,7 @@ pkg_check_modules(ILMCONTROL REQUIRED ilmControl) include_directories( "include" "${ILMCONTROL_INCLUDE_DIRS}" + "${ILMINPUT_INCLUDE_DIRS}" "${GLIB_INCLUDE_DIRS}" "${GIO_INCLUDE_DIRS}" ) @@ -34,6 +36,7 @@ SET(LIBRARIES windowmanager homescreen ${ILMCONTROL_LIBRARIES} + ${ILMINPUT_LIBRARIES} afbwsc json-c pthread @@ -64,4 +67,6 @@ add_custom_target(widget # test for webbrowser COMMAND wgtpkg-pack -f -o ${PROJECT_BINARY_DIR}/package/webbrowser.wgt ${PROJECT_BINARY_DIR}/package/webbrowser + # test for weston-terminal + COMMAND wgtpkg-pack -f -o ${PROJECT_BINARY_DIR}/package/weston-terminal.wgt ${PROJECT_BINARY_DIR}/package/weston-terminal ) diff --git a/package/weston-terminal/bin/runxdg b/package/weston-terminal/bin/runxdg new file mode 100755 index 0000000..dac903c --- /dev/null +++ b/package/weston-terminal/bin/runxdg @@ -0,0 +1,2 @@ +#!/bin/sh +exec /usr/bin/runxdg $@ diff --git a/package/weston-terminal/config.xml b/package/weston-terminal/config.xml new file mode 100644 index 0000000..619f682 --- /dev/null +++ b/package/weston-terminal/config.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<widget xmlns="http://www.w3.org/ns/widgets" id="weston-terminal" version="0.1"> + <name>weston-terminal</name> + <icon src="icon.svg"/> + <content src="bin/runxdg" type="application/vnd.agl.native"/> + <description>Launcher for XDG application on AGL HomeScreen 2017</description> + <author>Panasonic Corporation</author> + <license>MIT</license> + <feature name="urn:AGL:widget:required-api"> + <param name="homescreen" value="ws" /> + <param name="windowmanager" value="ws" /> + </feature> + <feature name="urn:AGL:widget:required-permission"> + <param name="urn:AGL:permission::public:no-htdocs" value="required" /> + <param name="http://tizen.org/privilege/internal/dbus" value="required" /> + </feature> +</widget> diff --git a/package/weston-terminal/icon.svg b/package/weston-terminal/icon.svg new file mode 100644 index 0000000..882e3c4 --- /dev/null +++ b/package/weston-terminal/icon.svg @@ -0,0 +1,114 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + xmlns:i="&ns_ai;" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Settings_Inactive_1_" + x="0px" + y="0px" + viewBox="0 0 300 300" + style="enable-background:new 0 0 300 300;" + xml:space="preserve" + inkscape:version="0.91 r13725" + sodipodi:docname="settings_inactive.svg"><metadata + id="metadata5617"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs + id="defs5615" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1421" + inkscape:window-height="786" + id="namedview5613" + showgrid="false" + inkscape:zoom="0.78666667" + inkscape:cx="-90.254237" + inkscape:cy="150" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="Settings_Inactive_1_" /><style + type="text/css" + id="style5578"> + .st0{fill:#FFFFFF;} + .st1{font-family:'Roboto-Regular';} + .st2{font-size:25px;} + .st3{letter-spacing:6;} + .st4{fill:url(#SVGID_1_);} + .st5{fill:url(#SVGID_2_);} + .st6{fill:url(#SVGID_3_);} +</style><switch + id="switch5580" + transform="matrix(1.3307804,0,0,1.3314313,-62.924861,-27.945794)"><g + i:extraneous="self" + id="g5582"><g + id="g5584"><linearGradient + id="SVGID_1_" + gradientUnits="userSpaceOnUse" + x1="4.0481" + y1="287.94919" + x2="320.4859" + y2="-15.4029" + gradientTransform="matrix(1,0.00546456,-0.00546456,1,-2.0192,-3.0212)"><stop + offset="0" + style="stop-color:#00ADDC" + id="stop5587" /><stop + offset="1" + style="stop-color:#6BFBFF" + id="stop5589" /></linearGradient><path + class="st4" + d="m 160,238.8 c -0.2,0 -0.4,0 -0.6,0 C 101.4,238.5 54.5,191.1 54.8,133.1 55.2,75.3 102.3,28.5 160,28.5 c 0.2,0 0.4,0 0.6,0 58,0.3 104.9,47.7 104.6,105.7 l 0,0 C 264.8,192 217.7,238.8 160,238.8 Z m 0,-206.6 c -55.7,0 -101.2,45.2 -101.5,100.9 -0.3,55.9 45,101.7 100.9,102 0.2,0 0.4,0 0.6,0 55.7,0 101.2,-45.2 101.5,-100.9 0.3,-55.9 -45,-101.7 -100.9,-102 -0.2,0 -0.4,0 -0.6,0 z" + id="path5591" + style="fill:url(#SVGID_1_)" + inkscape:connector-curvature="0" /><g + id="g5593"><g + id="g5595"><linearGradient + id="SVGID_2_" + gradientUnits="userSpaceOnUse" + x1="79.180397" + y1="226.0817" + x2="282.75201" + y2="-4.8608999"><stop + offset="0" + style="stop-color:#00ADDC" + id="stop5598" /><stop + offset="1" + style="stop-color:#6BFBFF" + id="stop5600" /></linearGradient><path + class="st5" + d="m 159.9,163.9 c -16.3,0 -29.5,-13.2 -29.5,-29.4 0,-16.2 13.2,-29.4 29.5,-29.4 l 0,3.9 c -14.1,0 -25.5,11.4 -25.5,25.5 0,14 11.5,25.5 25.5,25.5 14.1,0 25.6,-11.4 25.6,-25.5 l 3.9,0 c 0,16.2 -13.2,29.4 -29.5,29.4 z" + id="path5602" + style="fill:url(#SVGID_2_)" + inkscape:connector-curvature="0" /></g><g + id="g5604"><linearGradient + id="SVGID_3_" + gradientUnits="userSpaceOnUse" + x1="79.245697" + y1="226.1393" + x2="282.81741" + y2="-4.8032999"><stop + offset="0" + style="stop-color:#00ADDC" + id="stop5607" /><stop + offset="1" + style="stop-color:#6BFBFF" + id="stop5609" /></linearGradient><path + class="st6" + d="m 171.7,197.3 -23.4,0 c -2.2,0 -4,-1.8 -4,-3.9 l 0,-12.4 c -2,-0.7 -4,-1.5 -6,-2.5 l -8.8,8.8 c -1.5,1.5 -4,1.5 -5.6,-0.1 l -16.6,-16.6 c -1.6,-1.6 -1.6,-4.1 -0.1,-5.6 l 8.7,-8.7 c -1,-2 -1.8,-4 -2.5,-6.1 l -12.3,0 c -2.2,0 -3.9,-1.8 -3.9,-4 l 0,-23.4 c 0,-2.2 1.8,-4 3.9,-4 l 12.3,0 c 0.9,-2.6 1.9,-5.1 3.2,-7.4 l 3.5,1.8 c -1.4,2.6 -2.5,5.3 -3.4,8.1 l -0.4,1.4 -15.2,0 0,23.5 15.2,0.1 0.4,1.4 c 0.9,2.8 2,5.5 3.4,8 l 0.7,1.3 -10.8,10.8 16.6,16.6 10.9,-10.8 1.3,0.7 c 2.6,1.4 5.2,2.5 8,3.3 l 1.4,0.4 0,15.4 23.5,0 0.1,-15.4 1.4,-0.4 c 2.7,-0.8 5.4,-1.9 7.9,-3.3 l 1.3,-0.7 10.9,10.9 16.6,-16.6 -10.8,-11 0.7,-1.3 c 1.4,-2.6 2.5,-5.2 3.3,-7.9 l 0.4,-1.4 15.4,0 0,-23.5 -15.3,-0.1 -0.4,-1.4 c -0.8,-2.8 -1.9,-5.5 -3.3,-8 L 199.2,112 210,101.2 193.4,84.6 182.6,95.3 181.3,94.6 c -2.6,-1.4 -5.3,-2.5 -8.1,-3.4 l -1.4,-0.4 0,-15.2 -23.5,0 -0.1,15.1 -1.4,0.4 c -2.8,0.9 -5.6,2 -8.1,3.4 l -1.3,0.7 -10.7,-10.7 -19.5,19.5 c -1.5,-1.5 -1.5,-4 0.1,-5.6 l 16.5,-16.5 c 0.8,-0.8 1.8,-1.3 2.9,-1.2 1,0 2,0.4 2.7,1.1 l 8.7,8.6 c 2,-1 4,-1.8 6.2,-2.5 l 0,-12.3 c 0,-2.2 1.8,-3.9 4,-3.9 l 23.4,0 c 2.2,0 4,1.8 4,3.9 l 0,12.3 c 2.1,0.7 4.1,1.6 6.1,2.5 l 8.7,-8.7 c 0.7,-0.7 1.7,-1.1 2.7,-1.1 l 0,0 c 1.1,0 2.1,0.4 2.9,1.2 l 16.6,16.6 c 0.8,0.8 1.2,1.8 1.2,2.9 0,1 -0.4,2 -1.1,2.7 l -8.8,8.8 c 1,2 1.8,4 2.5,6 l 12.4,0 c 2.2,0 3.9,1.8 3.9,4 l 0,23.4 c 0,2.2 -1.8,4 -3.9,4 l -12.5,0 c -0.7,2 -1.5,4 -2.5,6 l 8.9,8.9 c 1.5,1.5 1.5,4 -0.1,5.6 l -16.6,16.6 c -0.8,0.8 -1.8,1.2 -2.9,1.2 l 0,0 c -1,0 -2,-0.4 -2.7,-1.1 l -8.9,-8.9 c -1.9,1 -3.9,1.8 -5.9,2.5 l 0,12.5 c 0,2.1 -1.8,3.8 -4,3.8 z" + id="path5611" + style="fill:url(#SVGID_3_)" + inkscape:connector-curvature="0" /></g></g></g></g></switch></svg>
\ No newline at end of file diff --git a/package/weston-terminal/runxdg.toml b/package/weston-terminal/runxdg.toml new file mode 100644 index 0000000..abd7c14 --- /dev/null +++ b/package/weston-terminal/runxdg.toml @@ -0,0 +1,25 @@ +[application] +# role: identifier for WindowManager (used in layers.json) +# e.g. role = "WebBrowser" +role = "weston-terminal" + +# launch by "POSIX"(fork/exec), "AFM_DBUS"(afm via dbus), "AFM_WEBSOCKET"(afm via websockt) +method = "POSIX" + +# path: path to the executable +# e.g. +# path = "/usr/bin/chromium" +path = "/usr/bin/weston-terminal" + +# params: arguments of the excecutable +# e.g. +# params = [ +# "--mus", +# "--no-sandbox", +# "--window-size=1080,1488", +# "--ozone-platform=wayland", +# "<URL>" +# ] +params = [ + "--fullscreen" +] diff --git a/src/runxdg.cpp b/src/runxdg.cpp index 3ff942c..1ce3881 100644 --- a/src/runxdg.cpp +++ b/src/runxdg.cpp @@ -83,7 +83,8 @@ void RunXDG::notify_ivi_control_cb (ilmObjectType object, t_ilm_uint id, m_launcher->register_surfpid(surf_pid); if (m_launcher->m_rid && surf_pid == m_launcher->find_surfpid_by_rid(m_launcher->m_rid)) { - setup_surface(id); + m_ivi_id = id; + setup_surface(); } m_surfaces[surf_pid] = id; } else if (object == ILM_LAYER) { @@ -279,12 +280,16 @@ int RunXDG::init_wm (void) return -1; } - std::function< void(json_object*) > h_active = [](json_object* object) { + std::function< void(json_object*) > h_active = [this](json_object* object) { AGL_DEBUG("Got Event_Active"); + t_ilm_surface s_ids[1] = { this->m_ivi_id }; + ilm_setInputFocus(s_ids, 1, ILM_INPUT_DEVICE_KEYBOARD, ILM_TRUE); }; - std::function< void(json_object*) > h_inactive = [](json_object* object) { + std::function< void(json_object*) > h_inactive = [this](json_object* object) { AGL_DEBUG("Got Event_Inactive"); + t_ilm_surface s_ids[1] = { this->m_ivi_id }; + ilm_setInputFocus(s_ids, 1, ILM_INPUT_DEVICE_KEYBOARD, ILM_FALSE); }; std::function< void(json_object*) > h_visible = [](json_object* object) { @@ -332,9 +337,13 @@ int RunXDG::init_hs (void) if (json_object_object_get_ex(object, "application_name", &val)) { const char *name = json_object_get_string(val); - AGL_DEBUG("Event_TapShortcut <%s>", name); + const char *app_id = this->m_id.c_str(); + int len = strlen(name); - if (strcmp(name, this->m_role.c_str()) == 0) { + AGL_DEBUG("Event_TapShortcut <appid=%s,%s,%d>", name, app_id, len); + + if (strcmp(name, app_id) == 0 || + (strncmp(name, app_id, len) == 0 && ('@' == app_id[len]))) { // check app exist and re-launch if needed AGL_DEBUG("Activesurface %s ", this->m_role.c_str()); @@ -454,7 +463,7 @@ RunXDG::RunXDG (int port, const char* token, const char* id) AGL_FATAL("Error in config"); } - AGL_DEBUG("id=[%s], name=[%s], path=[%s], port=%lu, token=[%s]", + AGL_DEBUG("id=[%s], role=[%s], path=[%s], port=%lu, token=[%s]", m_id.c_str(), m_role.c_str(), m_path.c_str(), m_port, m_token.c_str()); @@ -471,9 +480,9 @@ RunXDG::RunXDG (int port, const char* token, const char* id) AGL_DEBUG("RunXDG created."); } -void RunXDG::setup_surface (int id) +void RunXDG::setup_surface (void) { - std::string sid = std::to_string(id); + std::string sid = std::to_string(m_ivi_id); // This surface is mine, register pair app_name and ivi id. json_object *obj = json_object_new_object(); @@ -599,7 +608,8 @@ void RunXDG::start (void) int id = itr->second; AGL_DEBUG("surface %d for <%s> already exists", id, m_role.c_str()); - setup_surface(id); + m_ivi_id = id; + setup_surface(); } } } diff --git a/src/runxdg.hpp b/src/runxdg.hpp index ce0c016..3a51c58 100644 --- a/src/runxdg.hpp +++ b/src/runxdg.hpp @@ -30,6 +30,7 @@ #include <gio/gio.h> #include <ilm/ilm_control.h> +#include <ilm/ilm_input.h> #include <libwindowmanager.h> #include <libhomescreen.hpp> @@ -149,7 +150,9 @@ class RunXDG LibHomeScreen *m_hs; ILMControl *m_ic; - std::map<int, int> m_surfaces; // pair of <afm:rid, ivi:id> + t_ilm_surface m_ivi_id; + + std::map<int, int> m_surfaces; // pair of <afm:rid, ivi:id> bool m_pending_create = false; @@ -158,7 +161,7 @@ class RunXDG int parse_config(const char *file); - void setup_surface(int id); + void setup_surface(void); }; #endif // RUNXDG_HPP |