summaryrefslogtreecommitdiffstats
path: root/src/window_manager.cpp
AgeCommit message (Collapse)AuthorFilesLines
2019-10-20Add remote display supporthalibut_8.0.6halibut_8.0.5halibut_8.0.4halibut_8.0.3halibut/8.0.6halibut/8.0.5halibut/8.0.4halibut/8.0.38.0.68.0.58.0.48.0.3halibutScott Murray1-2/+7
Apply a heavily refactored version of the remote display changes from the CES 2019 demo #3 source demo3/common/agl-service-windowmanager in: https://git.automotivelinux.org/staging/new-apps The refactoring of the extracted changes has been done with an eye to reduce code duplication and minimize the changes to existing code. As well, the required default policy manager changes missing in the demo #3 tree have been added to produce a working default policy. At present the configuration has been hard-coded to assume use of the tbtnavi application on a Weston remoting display, but testing has also been done with a second display on one board. The changes should not impact operation of any other application, as only applications with roles listed in the "Remote" layer definition can be displayed on a configured second Weston screen. Bug-AGL: SPEC-2914 Signed-off-by: Scott Murray <scott.murray@konsulko.com> Change-Id: I29380bbbec46969b75ed4fe7e8095db772524082
2019-04-01Fix redefine layer idKazumasa Mitsunari1-1/+1
Fix redefine layer id. Change-Id: I40cdde84ed03d9de4e29e14b6441586dedee996c Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
2019-03-14Fix xdg-runcher doesn't show upKazumasa Mitsunari1-21/+51
xdg-runcher calls "subscribe" before requestSurface, then windowmanager reject it because WMClient object is not created yet. This patch changes to register WMClient if it is not created when App calls "subscribe". Application doesn't need to care about the order of "requestSurface" and "subscribe". Bug-AGL: SPEC-2218 Change-Id: Ia82ff939dfdb2bbfd377bd50fd3d4b844451cd3b Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
2019-02-04Change active/inactive state specKazumasa Mitsunari1-3/+0
"active" state means "visible" on source code currently. Specification in HMI-FW spec 0.9.2 says it's not visible. https://wiki.automotivelinux.org/hmiframework It's the right to have resources such as buffers(surface). But from the view point of implementation of windowmanager-service, it is difficult to control resources of application. So this patch fixes just adding the methods to change the state of client. Change-Id: If445af3cdf724827ccf28f40af28cca4a2ffcbc1 Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
2019-01-25Output debug message corerctlyKazumasa Mitsunari1-3/+3
Fix the mistake of passing std::string into %s. Change-Id: I267feba5ed8239d146506721363f5bebcdaafa42 Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
2019-01-25Introduce changeAreaSize and getAreaListKazumasa Mitsunari1-0/+97
In CES2019 demo, these features are introduced in demo3. 1. changeAreaSize : change area definition on runtime 2. getAreaList : get area definition list v2. fix merge conflict util.hpp util.cpp Bug-AGL : SPEC-2077 Change-Id: I1fa3c9e3648c69e14a3916cbeeb9775ed94c833a Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
2019-01-16Fix misinterpreted return valueJosé Bollo1-1/+1
Also fix typo in error messages Change-Id: Ib023a43cdbb6b6442872abecb347940c703c5fde Signed-off-by: José Bollo <jose.bollo@iot.bzh>
2018-12-03Emit events to application not subscriberKazumasa Mitsunari1-102/+39
This patch change Window Manager emits event to application such as syncDraw not to subscribers. Bug-AGL: SPEC-1999 Change-Id: Ie2699c1180b4f37f6333933db9f11eaa7ed8f683 Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
2018-12-03Fix app surface is set to position (0, 0)Kazumasa Mitsunari1-1/+0
Sometimes, ivi_wm_surface_size signal doesn't reach WM. In that time, surface is not placed in the set place. This patch fix the issue. Change-Id: Id7137557d5aaae373fedbb70379179ab50205c60 Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
2018-12-03Fix timing issue of surface creationKazumasa Mitsunari1-0/+3
Rarely Window Manager get the event of surface creation after activateWindow. In that case, Window Manager reject application request because client doesn't have surface. This patch makes WM does provisional registration. Change-Id: Ib0a54a7f399f333175e0a4613364f7bcb0de9cc7 Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
2018-11-30Migrates bindings v3Tadao Tanikawa1-4/+11
This patch migrates biding API of WM to v3. Change-Id: I2f2b23a8af437a414e2a00d629d3e72d0614eb72 Signed-off-by: Tadao Tanikawa <tanikawa.tadao@jp.panasonic.com>
2018-11-20Clean: Remove conversion table from old roleguppy_6.99.1guppy/6.99.16.99.1Kazumasa Mitsunari1-243/+27
Stop compatibility support. Remove conversion table from old role. Bug-AGL: SPEC-1947 Change-Id: Idbb0717920c2f4a0c29bfb4356e1b167ac8bce0b Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
2018-11-15Fix the file namesKazumasa Mitsunari1-1/+1
Fix the file names. Change-Id: I6adaf5fb024347222b235830bf5ff04208adc0ed Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
2018-11-13Attach application to ivi-layer not to surfaceKazumasa Mitsunari1-64/+65
Window Manager expresses the application in ivi-layer. So for, Window Manager tied the surface and role applied by the application. This patch associates the application with the ivi-layer, and the role and surface are the attributes that makes up the application. Bug-AGL: SPEC-1818, SPEC-1635 Change-Id: Ice1e398e1db037577b0721c16da6603ec5437561 Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
2018-10-26Fix internal function name for consistencyKazumasa Mitsunari1-2/+2
Fix internal function name for consistency Change-Id: Iff85e7ab246f863ff47d7312da627a2317479b56 Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
2018-10-24Refactor : Hide wayland operations from Window ManagerKazumasa Mitsunari1-562/+140
Window Manager now uses abstract client, area for layer/surface management, then hide wayland operation into LayerControl class. LayerControl class uses ilmControl library instead of wayland protocol. This patch reduces the binary size of binding by 30% than before. Currently, the following debug methods are not available. * debug_status * debug_layers * debug_surfaces * list_drawing_names Bug-AGL: SPEC-1817 Change-Id: I7313787f3c4a286ceee3c23783e5c0e713388dac Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
2018-10-15Include WMClient into WMRequestKazumasa Mitsunari1-8/+11
Policy Manager has to know *who* requests *which role* with *which role*. So for improvement of usability of WMRequest instead of appid. Change-Id: I452b2995922e8e303732e8e79f4f06930553b3e7 Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
2018-10-15Omit std::Kazumasa Mitsunari1-37/+40
To shorten source code, omit std:: Change-Id: I251df7f503337c71800612718504bbd31dc27071 Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
2018-10-15Migrate hmi-debug into utilKazumasa Mitsunari1-59/+53
Migrate hmi-debug into util for * simplicity * remove warnings error `-Wunused-function` Change-Id: I7d061849429e5d50cc7d19d2051c7f5d0f0ef169 Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
2018-08-31Fix Window Manager crush when application terminatedKazumasa Mitsunari1-0/+4
Fix Window Manager crush when applicaiton terminated caused by wrong handling of sd_event_source. v2. Add error check just in case Bug-AGL: SPEC-1696 Change-Id: I639a60015cde46fca6bc5a3f6e8037afd8d79330 Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
2018-08-15Readd Policy Manager as pluginYuta Doi1-382/+146
This patch reverts commit c6f9a9b8468b3746a3dec7ee2a0b7d84ec9fb44a and update it. Policy Manager decides next layout by inputed event and current state based on the policy table. And Policy Manager is plugin for Window Manager. Therefore the OEMs can replace it. This patch provides Policy Manager I/F as reference implementation and does not have policy table. Therefore Policy Manager updates each layers to draw the applications in requested area in accordance with just like activate/deactivate request. [APIs of Policy Manager class] - int initialize(void) Initialize Policy Manger. in: none out: 0(success), -1(error) - void registerCallback(CallbackTable callback_table) Register callback functions. in: the pointers of callback handlers out: none "CallbackTable" type is as follows: typedef struct { Handler onStateTransitioned; Handler onError; } CallbackTable; "Handler" type is as follows: using Handler = std::function<void(json_object *)>; - int setInputEventData(json_object *json_in) Set input event data for the policy table. in: input event data as json_object out: 0(success), -1(error) - int executeStateTransition(void) Execute state transition by using set input event data. in: none out: 0(success), -1(error) - void undoState(void) Undo state only once per once state transition. in: none out: none [Callbacks of Policy Manager class] - void onStateTransitioned(json_object *json_out) When state transition succeeds, this callback is called. The argument json_out has the state after transition. - void onError(json_object *json_out) When state transition fails, this callback is called. The argument json_out has the error information like message, inputed event datas and etc.. Bug-AGL: SPEC-1537 Change-Id: Ib8c71f2e544cb90b6763d07fad56dc1c453e9a97 Signed-off-by: Yuta Doi <yuta-d@witz-inc.co.jp>
2018-08-02Merge changes from topic '15921'Jan-Simon Moeller1-7/+8
* changes: Fix WM attach layers to different screen. Fix source rectangle changes every state change
2018-08-02Fix WM attach layers to different screen.Kazumasa Mitsunari1-3/+3
If setting 2 display from 1 Soc, Window Manager attaches layers to different screen since corresponding to upgrade of wayland-ivi-extension. Fix the issue. Bug-AGL: SPEC-1577 Change-Id: Ib6eb4a19dc892348271762f236cc0650a83a8f70 Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
2018-08-02Improve output of multiple screen resolutionTadao Tanikawa1-7/+23
To improve output on various monitor with various resolution, the following items are introduced. * Abandon scaling by Weston/IVI-SHELL This is cause of huge memory consumption on AGL CES2018 Demo because all contents are designed and rendered with FullHD resolution. * Add parameter of 'scale' to WM API (getDisplayInfo) WM calculate scale factor from screen resolution from wayland compositor and parameter of layout from WM's configuration, area.db. Bug-AGL: SPEC-1568, SPEC-1569, SPEC-1611 Change-Id: I5eac2da0106228c296550135c5200b2653864fdf Signed-off-by: Tadao Tanikawa <tanikawa.tadao@jp.panasonic.com>
2018-08-02Revert "Enable scaling to fit various screen resolutions"Tadao Tanikawa1-18/+6
Abandon scaling support by AGL window manager 2017 Bug-AGL: SPEC-1611 This reverts commit 8ab10aaafc6fb3dc7bbad755dce9b4bdaa41f287. Change-Id: Id6afb263a6dc30929b922e469d906e2e5190f7b0
2018-08-02Fix source rectangle changes every state changeKazumasa Mitsunari1-4/+5
Window Manager changes source rectangle size every state change. This patch changes it to set source rectangle first when the surface is created. Related commit: https://gerrit.automotivelinux.org/gerrit/#/c/15595/ Bug-AGL: SPEC-1584 Change-Id: Ia7429956053cfa18e6e82060f84f3b6fe755c0b1 Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
2018-07-27Fix crashed application can re-launchKazumasa Mitsunari1-2/+2
WM can't reset the state when application crashes, after the below commit. This patch fix the crashed application can re-launch. Related commit: https://gerrit.automotivelinux.org/gerrit/#/c/14871/ Bug-AGL: SPEC-1471 Change-Id: I46019b30cc8e9a341b4b681a0288f053b3ac1b30 Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
2018-07-26Fix memory release problemKazumasa Mitsunari1-1/+0
Do not release json_object after event push. The json_array which was freed is retained to the json-object that is released in afb_event_push. Related page: https://json-c.github.io/json-c/json-c-0.10/doc/html/json__object_8h.html#a04448b1c63173e1bfe49965835732075 Bug-AGL: SPEC-1616 Change-Id: Ic6de6425d7a18b289eb3e9d37d297dcfb3383f21 Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
2018-07-24Fix the race condition of HomeScreenKazumasa Mitsunari1-1/+9
HomeScreen and launcher have race condition. This patch fixes if the homescreen requests to be shown, WM doesn't change launcher(and others) invisible. This is quick hack. System UI's role is homescreen now. We can't change system UI from setting and so on currently. Bug-AGL: SPEC-1407 Change-Id: Ie70e0fd635fae03de7b731f3d73fb1863e3c6ad4 Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
2018-07-24Fix XDG application shrinksKazumasa Mitsunari1-0/+2
WM set surface source size output_size(1080X1920) in case of using runXDG. Then, XDG surface shrinks because dest size(1080X1488) is set and the surface is scaled. On the other hand, XDG application's source size is w = 0, h = 0 on startup from ivi-wm, so WM has to set source size in somewhere. So this patch fixes WM set XDG surface source size. This is short term solution because WM set source rectangle size every state changes. Bug-AGL: SPEC-1584 Change-Id: I128db0b7feaba6b51e13c467e91d5aff6adaf0a7 Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
2018-07-20Fix timerTadao Tanikawa1-3/+9
In 32bit environment, timer would be overflow. This causes that HomeScreen doesn't show on 32bit environment. Bug-AGL: SPEC-1471 Change-Id: I427da3a6e6ea76af05cee45a13b51754728a0cc5 Signed-off-by: Tadao Tanikawa <tanikawa.tadao@jp.panasonic.com>
2018-07-19Revert "Add PolicyManager as plugin"Jan-Simon Moeller1-131/+373
This reverts commit 99b6f4d2fcd421d3a760a88a67e511fb6fc98068. Change-Id: I8725ca05a3e3fa0ea9e1db935e9e7d5b85a9affd
2018-07-12Add PolicyManager as pluginYuta Doi1-373/+131
PolicyManager decides next layout by using occured event and current state based on the policy table. And PolicyManager is plugin for WindowManager. Therefore the OEMs can replace it. This patch provides PolicyManager I/F as reference implementation and does not have policy table. Therefore PolicyManager updates each layers to draw the applications in normal.full area in accordance with just like activate/deactivate request. [APIs of PolicyManager class] - int initialize(void) Initialize PolicyManger. input: none output: 0(success), -1(error) - void registerCallback(CallbackTable callback_table) Register callback functions. input: the pointers of callback handlers output: none "CallbackTable" type is as follows: typedef struct { Handler onStateTransitioned; Handler onError; } CallbackTable; "Handler" type is as follows: using Handler = std::function<void(json_object *)>; - int setInputEventData(json_object *json_in) Set input event data for the policy table. input: input event data as json_object output: 0(success), -1(error) - int executeStateTransition(void) Execute state transition by using set input event data. input: none output: 0(success), -1(error) - void undoState(void) Undo state only once per once state transition. input: none output: none [Callbacks of PolicyManager class] - void onStateTransitioned(json_object *json_out) When state transition succeeds, this callback is called. The argument json_out has the state after transition. - void onError(json_object *json_out) When state transition fails, this callback is called. The argument json_out has the error information like message, inputed event datas and etc.. Bug-AGL: SPEC-1537 Change-Id: I44b771d4145078bf3ea05e26165bb9c1a03b10c3 Signed-off-by: Yuta Doi <yuta-d@witz-inc.co.jp>
2018-07-11Enable scaling to fit various screen resolutionsKazumasa Mitsunari1-6/+18
Since the AGL HomeScreen of CES2018 assumes that the screen resolution is 1080x1920px, the graphics of it partially corrupted with others. To fix this issue, now the AGL window manager automatically scales size according to "scaling" value in setting.json By default(even if "scaling" is not set), this scaling keeps 'fullscreen' aspect rate in area.db("aspect_fit") User can select 3 options. - "aspect_fit" : Scale aspect rate of 'fullscreen' in area.db.(default) - "display_fit": Force to scale to display size. - "none" or others : Set size just as area.db Bug-AGL: SPEC-1568 Bug-AGL: SPEC-1569 Change-Id: Ia08c0ebb2d71ae8f89a90088e181381c3ba3562d Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
2018-07-09Add configuration file for each area sizesYuta Doi1-11/+1
Add areas.db which has each area sizes. less-than-0 values refer to (MAX + 1 - $VALUE) and MAX is either screen width or height. layers.json had each area sizes until now, so removed the sizes from it. Change-Id: I5cf283581daaca41e2b9e3ee6e947478bff1189c Signed-off-by: Yuta Doi <yuta-d@witz-inc.co.jp>
2018-07-09Convert the roles from old one to newYuta Doi1-36/+257
Update the role name (drawing_name) and WindowManager converts the role from old one to new. We plan to delete the old roles by GG. Therefore the applications can use old olds until GG, After GG, old roles can not be used. If the applications use it, WindowManager regards the applications as the role "fallback". Therefore the applications may not be displayed in the intended layout. For the role "fallback", please refer to JIRA SPEC-1331. Bug-AGL: SPEC-1566 Change-Id: I6ca703183e3cab72ac460094ef14dc3675a98cb6 Signed-off-by: Yuta Doi <yuta-d@witz-inc.co.jp>
2018-06-28Add signal when the displayed application changedKazumasa Mitsunari1-0/+32
Add new signal "screen_updated" to Window Manager. This is emitted when application size or visibility is changed, the application ids are notified to subscribers. There are some applications such like HomeScreen, which needs the visibility of other applications turns on, so add new event. The key is "ids" and data is application id which is written in config.xml for each application. This signal format is here: ON-EVENT windowmanager/screen_updated: { "event":"windowmanager\/screen_updated", "data":{ "ids":[ "navigation", "hvac" ] }, "jtype":"afb-event" } Bug-AGL: SPEC-1532 Change-Id: I6c1f263be00d4b496e0e0f77dd88b6118489772f Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
2018-06-27Clean: sort source code according to the order of header fileKazumasa Mitsunari1-332/+336
Sort API order written in source code according to the order in header file to improve readability. Change-Id: I6606590ce2ad9c285b3cfd83dc6c0741890b105f Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
2018-06-27Fix class name "App" to "WindowManager"Kazumasa Mitsunari1-0/+1513
struct App is core class of Window Manager. The name of "struct App" is strange so rename it to WindowManager. Change-Id: Ia5f2e5acbadb8d58fe772aec0cd15a4a2e91369e Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>