summaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)AuthorFilesLines
2020-11-19build/: Allow to build the compositor w/o walthamMarius Vlad2-2/+15
Provides empty implementations to avoid sprinking ifdefs everywhere. The transmitter plug-in does not expose a pkgconfig file we instead resort to test again waltham protocol (which is used by the transmitter) and the the remoting plug-in. Fixes a minor deps check in the meson file. Bug-AGL: SPEC-3691 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: Id25d21d2ef0c6e55575c2e7685cda73e401db015
2020-11-18shell: Perform wl_list_init() after wl_list_remove()Walter Lozano1-0/+1
In order to follow the best practices perform wl_list_init() after wl_list_remove() on shell_ready. Signed-off-by: Walter Lozano <walter.lozano@collabora.com> Change-Id: Ia5ea915a5ad55e8251e3bc86c87ddfc140bbe592
2020-11-17desktop: Allow to remove surface from pending listWalter Lozano1-3/+2
In some special corner cases a surface can be removed while it is still in the pending list. An example of this case is when a surface is added and removed before the system is ready. Under this circumstances the surface still has role == ROLE_NONE and is in the pending list. The fact of not removing the surface from the pending_list ends in a segfault when the system is ready. In order to fix the issue, remove the restriction to only remove surfaces with role != ROLE_NONE. Signed-off-by: Walter Lozano <walter.lozano@collabora.com> Change-Id: Ia71b6c3ca214849448c935cc09039581d0e209a8
2020-11-17desktop: Do not attempt to advertise the clients if there are noneMarius Vlad1-1/+2
Clients not binding to agl_shell_desktop will cause spurious signal emits when they commit the changes. Make sure we only attempt to advertise if the are clients. Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: I5c790b105b7c7f7d759e8a8fc2c64713df22d561
2020-11-17desktop: Delay surface creation until committedWalter Lozano3-14/+27
Some frameworks like GTK-3 delay the set_app_id until title and parent are set, which makes ivi_check_pending_desktop_surface unable to set the proper role on surface_added. A consequence of this behaviour is that is not possible to use set_app_property to configure an application as popup. Instead, delay the creation of the surface until committed to give the chance to have a valid app_id configured. Signed-off-by: Walter Lozano <walter.lozano@collabora.com> Change-Id: I3f672fb365f48659711c866c45a21df6058a5a02
2020-11-05shell: Destroy weston_transmitter_surface as wellMarius Vlad3-0/+20
Instruct waltham-transmitter-plugin that it can destroy its own surface representation when the weston_surface is also destroyed. Bug-AGL: SPEC-3601, SPEC-3611 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: Ie0e5409b21c043b8c98bebb4d77808227ee38aca
2020-11-05shell: Keep a reference to weston_transmitter_surfaceMarius Vlad2-1/+11
When 'pushing' the surface store a reference of the weston_transmitter_surface so we can later inform the plug-in when the weston_surface is destroyed, so that it can also destroy the transmittter_surface from its side. Bug-AGL: SPEC-3601, SPEC-3611 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: I7fd1df2130e53e8c226c7a751c598765608ae6b3
2020-11-05desktop: Insert a black surface only when the output is a remote typeMarius Vlad1-2/+2
And the output is not a waltham version. Bug-AGL: SPEC-3601, SPEC-3611 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: I9ce3354fe59ad5f4de691823627e3603fc4cb226
2020-11-05desktop: Group tests for checking against last remote surfaceMarius Vlad1-5/+3
Synthetic change, to group them together. Makes reading the code a bit more clearer. Bug-AGL: SPEC-3601 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: Id1f5ad9a408591a010678a53eff0f3cad2d269d9
2020-11-05shell: Push the surface to the remote sideMarius Vlad1-0/+62
The receiver expects that the sender/transmitter will inform it when it can create a surface and it can start the gstreamer pipeline. The transmitter plug-in exposes a way to call that using 'push_surface' callback. So, whenever we detect that the remote surface is to be assigned to a waltham-type of output, we would need to call into this 'push_surface' callback. This acts as notification mechanism for the remote side. Bug-AGL: 3611 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: Ia5db0d8f2356708eaee3fbaabed2b3ba3ac97eb6
2020-11-05main: Create a remoting output if the waltham plug-in has been loadedMarius Vlad1-0/+55
The waltham-transmitter will no longer create an output on its own so we'll re-use the remoting plug-in for streaming out the buffers to the remoting side. Bug-AGL: 3601 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: I6f85c3dfc54e81e8fa05f518b77fae24334fafc1
2020-11-05ivi-compositor: Add the ability to distinguish between differentMarius Vlad2-0/+10
types of remoting outputs This is required to further differentiate between remoting outputs as for waltham we would need to use the transmitter_api to forward a surface to the remoting output. Bug-AGL: 3611 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: I7c59fd448226afab0492fe674e8770d3b9a995aa
2020-11-05main: Add support loading waltham transmitter plug-inMarius Vlad3-1/+62
This is the same as the remoting plug-in, given that we'll be using the remoting plug-in to create the remoting output. The difference would be that instead of the 'remoting-output' section we'll use 'transmitter-output', with all other section specific being the same. For instance, using agl-shell-app-id we can instruct the application to be assigned to that 'transmitter-output'. Bug-AGL: SPEC-3611 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: Ic16b6b9672802f4f83be121385c0798b9dbe08e9
2020-11-05layout: Check app_id for remote type of surfacesMarius Vlad1-0/+3
We don't have any checks against for not having an app_id being set. Bug-AGL: SPEC-3601 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: Iff7f633bced60b1177f53246880952a06cb716f0
2020-11-05shell: Avoid creating and inserting black surfaceMarius Vlad1-2/+5
Creating and inserting the black surface will require to have an valid weston output. That might not be always the case so guard against no output being set. Bug-AGL: SPEC-3601 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: If7034bf0259fee164ba0f4b6a6ac3ef7d6bf30d6
2020-10-29main: Use the output handler to destroy to black viewMarius Vlad2-6/+6
Use the specific output destroyer handler, instead of destroying it in the handler itself. This way we can still clean-up and avoid any leaks, and still not trip ourselves causing a use-after-free, when the output is destroyed by libweston. Bug-AGL: SPEC-3630, SPEC-3672 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Reported-by: Walter Lozano <walter.lozano@collabora.com> Change-Id: I11916245b85d2541286ee438284601b466dc20c2
2020-10-15shell: Advertise app when app_id is availableWalter Lozano4-2/+35
When using GTK-3 to create apps, the framework issues set_parent_id which forces a surface to be added even before the app_id is set. This causes the compositor to fail to advertise the app. This patch tries to overcome this issue by checking on surface commit if the surface was previously advertised, and do it if it was not. Signed-off-by: Walter Lozano <walter.lozano@collabora.com> Change-Id: I4e5fec82c1008c30d8ae7d213d85a82e39c404c3
2020-10-15shell: Avoid advertising applications without app_id setWalter Lozano1-0/+11
When using GTK-3 to create apps, the framework issues set_parent_id which forces a surface to be added even before the app_id is set. This causes the compositor to try to advertise an invalid app_id. This patch avoids advertising an app which has no app_id set. Signed-off-by: Walter Lozano <walter.lozano@collabora.com> Change-Id: Iadcea106e6464b41171a2aa92aa0eed3a8e2ff2d
2020-10-08main: Create black surface after listening socketWalter Lozano1-2/+2
If agl-compositor is started without XDG_RUNTIME_DIR defined, an error arises and the system tries to exit cleanly. However, in this process a segfault is produced and the terminal is left misconfigured. The cause of this segfault is related to the destruction of the black surface, which is not handled properly in this corner case. In order to avoid this issue and as an initial fix, create the surface after the listening socket, which causes that the check for the var XDG_RUNTIME_DIR to be done before the surface creation. Bug-AGL: SPEC-3623 Signed-off-by: Walter Lozano <walter.lozano@collabora.com> Change-Id: I04760828f9ce5b5a6d4a31aeccdefe779a1c15a3
2020-09-30main: Use a configuration option for hidding out the cursorMarius Vlad1-3/+2
Bug-AGL: SPEC-3580 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: I3504fc2c6dda3c10a67a23e68126201acd4ba455
2020-09-30main: Enable screenshoter interface when debug option is passedMarius Vlad1-1/+2
Bug-AGL: SPEC-3580 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: I9adf8c707991301f5cf214b492ce3c6ee45997e2
2020-09-30input: Add basic seat handlingMarius Vlad5-1/+267
This allows for basic input handling, to better customize how we handle out seat capabilities to the client. One useful outcome of this is the fact that we re-advertise to the client that in some situations there might not be a pointer available. That should let the client know as to avoid creating a pointer surface. Bug-AGL: SPEC-3591 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: I4624a956264e9fa12a86da005944e9b426dde10a
2020-09-30client/screenshooter: Client for taking screenshotsMarius Vlad7-0/+971
The client allows to take screenshots of all outputs, a specific output (making use of xdg_output_manager interface) or just listing outputs. Bug-AGL: SPEC-3580 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: Idd60d4892adf4c2ea493477421b6e5623e0ca1f0
2020-09-30screenshooter: Add agl-screenshooter protocolMarius Vlad5-0/+229
Just like weston, we add a private protocol. Underneath we make use of the weston renderer to get a hold of the pixels and transfer them to a user-supplied buffer. This only brings up the server side implementation of the protocol. Bug-AGL: SPEC-3580 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: I02a07ad5eb492ef2ecad74efb34d1453ebcbedc0
2020-09-28layout: Set active output NULL when displaying backgroundWalter Lozano1-0/+1
Currently agl-compositor keeps track of the active app and uses this information to to also keep track of the previous one. This is useful to allow to show the previous activated app when deactivating the current one. However, when deactivating all the apps, for instance the background, this information is not saved, which causes that when activating and deactivating and new app, instead of the background a different app shows. This patch sets output->previous_active = NULL when displaying the background to overcome this issue. Signed-off-by: Walter Lozano <walter.lozano@collabora.com> Change-Id: I29c3f8972d6055d2387e0fdcbb28574d3d2e38a7
2020-09-10layout: Activate by default xdg surface that do not have an app_id setjellyfish_9.99.4jellyfish/9.99.49.99.4Marius Vlad2-5/+34
The following is necessary in case the app_id is set-up at a later point in time, and it is intended as a work-around for WAM/chromium68 clients that specify the app_id after the initial surface commit. Note that activation will not work, in case the application will never set-up an app_id because we can't identify which app_id to switch to. The activation phase is needed to inform the client of the window dimensions, and it is mandated by the XDG-shell protocol. Bug-AGL: SPEC-3544 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: I49a7270dcb68e525fc9d85db2cd189a50c02502f
2020-09-10layout: If no valid output found, abort early with a protocol violationMarius Vlad1-0/+9
Spotted by code inspection, but haven't seen in the wild. Bug-AGL: SPEC-3544 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: Ie1f0191e7c987c1688c820e1cabbc581b3679232
2020-07-29layout: Add missing hooks for other surface rolesjellyfish_9.99.3jellyfish/9.99.39.99.3Marius Vlad1-0/+28
We are missing the activate_by_default hooks for split, pop-up and and fullscreen roles. Part of that is due to the fact that these roles are handled a bit differently that the remote and desktop roles. Note, these hooks are different than the commit ones -- which are 'installed' a bit earlier. This means that there was still a possiblity one might've used that hook to retrieve the surface role for instance, and act accordingly. Also, note that we allow for pop-up/dialogs be activated by using the deliberate 'activate' request, which allows one to customize the policy to deny certain pop-up/dialogs to be activated by default, but allow do so explictly when using the 'activate' request. Bug-AGL: SPEC-3494 Reported-by: Scott Murray <scott.murray@konsulko.com> Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: I634bbb5915e65880c1d47363cf6dae529feac9d2
2020-07-29layout: Advertise state change for other types of surface rolesMarius Vlad3-2/+26
Given that now other surfaces roles will be active by default, we need to let other application aware of that fact by advertising state change. Print some debug message while at it, to make it more consistent with the desktop role. Bug-AGL: SPEC-3494 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: Ia9d959a0912e330303fa3d959ce600237edf35b4
2020-07-29shell: Assume consistency with the desktop rolesMarius Vlad1-0/+4
While looking into activation by default of other surfaces, noticed that we're missing consistency on how we handle other types of surface roles. This patch, activate all other surfaces by default when starting up, even if they are started before or after the client shell. Expecting and assuming the same behaviour is important into trying to establish some common work-flow for applications. Bug-AGL: SPEC-3494 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: I90e764c6c3a7ed543934ee6f68fa716d90ff151e
2020-07-14policy-*: Remove any private binding restrictions for allow-all policyjellyfish_9.99.2jellyfish/9.99.29.99.2Marius Vlad2-51/+49
As we don't have any proper mechanisms in place to perform some level of authentication on the clients binding to the private extensions, we will resort to allow that to happen, under the default, allow-all policy. In the same time we add some helpers for checking which applications can bind to the private extensions but this is for the deny-all policy. This also includes cluster-receiver and cluster-dashboard application to that array, as without it the cluster-demo will not all work when using the deny-all policy. Bug-AGL: SPEC-3382 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: I9ea0d8fd63a323bfcee6aa146a1617aa572d131f
2020-07-03desktop: Fix destruction of applications that fallback to the desktop roleMarius Vlad1-2/+7
With commit 9827cfd25578, application not having a valid app_id will fallback to being assigned the desktop role. In this case, destroying those kind of surfaces will not have an output assigned, so add a code path for those as well. Found while testing cluster-receiver with waylandsink and sub-surfaces. Bug-AGL: SPEC-3382 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: If20bdcf02810c16167fdbfbf30f3fd367c43069b
2020-06-29shell: Avoid checking against surfaces that do not have an app_idMarius Vlad1-4/+4
Not all application will set-up an app_id and we might end up checking against those. So avoid doing that because str* kind of like functions do not like that. Discovered when playing with cluster receiver and sub-surfaces. Bug-AGL: SPEC-3382 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: I31b454fd3ccb1770775a00b1c953d9cbef827909
2020-06-26README: Add a few words about the deny-all policy enginejellyfish_9.99.1jellyfish/9.99.19.99.1Marius Vlad2-6/+14
Replaces the agl-shell-desktop mention that all clients can bind to the interface with a mention that that happens only if the policy engine allows. Bug-AGL: SPEC-3413 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: Ieb6b9df1181cb7a0ad6da09519655ebd8f73a1a5
2020-06-26desktop: Allow desktop_api to handle surface removalMarius Vlad1-3/+7
This patch fixes the situation where the application wasnt't allowed to create an (ivi) surface, leading to an illegal access of the surface by the destroyer desktop_api callback. In case we deny the applications to create the (ivi) surface we let the desktop_api handle the removal of the surface. A surface without a role won't have an output set so we use that to determine if we can remove the link for it. We also avoid dealing with the surface destruction in the desktop api itself rather than handling it on the error path of the hook itself. Bug-AGL: SPEC-3413 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: I0fd4d83924b0188f606544b41e70b631c90fc8ee
2020-06-26policy: Add a deny-all policy as an exampleMarius Vlad3-1/+220
Note this will deny any binding to the private extensions by default, if the compositor is not built with SMACK support. Defines a potential lists of applications permitted to create/display/activate surfaces/applications. Bug-AGL: SPEC-3413 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: I2dbd3b3ef0d519fde7952f97e0303ff2b151aaa0
2020-06-26policy-default: Use libsmack to check client labelMarius Vlad2-0/+54
Use the client file descriptor to find out the SMACK label of that client. Enforces homescreen to bind to agl_shell and launcher and alexa-viewer to bind to the agl-shell-desktop interface. Allows access to agl_shell_desktop to tbtnavi and hvac as those contain example code on use it for moving it to other outputs. Bug-AGL: SPEC-3396 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: I1a1abf2d2786624ffa484b6577de17f5010d5ac6
2020-06-26policy: Add a new policy hook to restrict access to private extensionsMarius Vlad3-1/+33
In this manner we can control which clients can bind to which interface (either the agl_shell one or the agl_shell_desktop one). Bug-AGL: SPEC-3394 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: I9da4b3596dc5980b325aada8f8fcc7a11431c755
2020-06-24desktop: Avoid referencing the output's surface for pending surfacesMarius Vlad1-0/+7
Pending surfaces will only get a valid role when the client shell sends out ready() request to start presenting. Corner-case would be that pending surface is destroyed, moment in which we realise we never set-up an output. This is corner-case and treat as is. Bug-AGL: SPEC-3448 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: I2eb9c937878fb6af56f3fbcf0d5da10a8003f634
2020-06-16doc: Added arch diagramMarius Vlad3-0/+1762
Bug-AGL: SPEC-3386 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: If98632458b11f3fce0843fbf44e34d04bc1320cf
2020-06-16README: move README.md to doc/Marius Vlad1-0/+0
Bug-AGL: SPEC-3386 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: If1acb6f0c4cfb9cdfa16e9fb8b57b29a1a596459
2020-06-15layout: Clip the view to the size specified by width and heightMarius Vlad1-9/+9
This uses the bx and by as origin for the bounding box if those were passed on. The compositor will set up a mask clip for the window if the both width and height are positive. This also removes the geometry of the surface and passes the x and y values directly. Bug-AGL: SPEC-3419 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: I174f1ccbffad3c99e74fbb5ee90888b4ad879230
2020-06-15shell: Pass the bounding box values to the pop-up surfaceMarius Vlad2-5/+26
Necessary in order to make use options passed in with the protocol. Bug-AGL: SPEC-3419 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: I0a2b973526572db18349642782082906544830a9
2020-06-15agl-shell-desktop: Add the ability to pass width and height asMarius Vlad1-3/+29
area of the bounding box The width and height will represent a rectangle which can be used to define the maxium area to have the surface in. Any part of the surface area that exceeds the area delimited by this bounding box will be clipped away. The initial position of the bounding box is specified using the bx and by values. Bug-AGL: SPEC-3419 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: Ie24f469662dd686c49f658c415ccd2664d9a9b5b
2020-06-15shell: Advertise application_id event for other surface rolesMarius Vlad1-7/+21
application_id event is sent just when a client binds to the agl_desktop_shell interface and when new desktop role surface were created, skipping split, fullscreen and pop-up kind of surface. This patch sends the application_id event for those as well. Makes SPEC-3412 much easier to determine when the application itself was started. Bug-AGL: SPEC-3412 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: Ic5c0ebf130fda45c5fda89e0e27e81dea96195cd
2020-06-15layout: Do not attempt to activate the surface on the remote outputMarius Vlad1-0/+10
Once the view has been placed on remote output do not attempt to activate it on other output, as it would make quite confusing to have same view on multiple outputs. Bug-AGL: SPEC-3280 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: I36a8df18a174e3d5fd5f49ff5bdf70f1a16c86cb
2020-06-15src: Mark surfaces with the 'remote' role if configuration file says soMarius Vlad5-4/+18
As we don't have an explicit way to do it, like we have with the protocol, we try to determine if the surface was being assigned a remote output and use that, when the surface is created. Bug-AGL: SPEC-3280 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: Idd95acd9ae69c5ac37b50d447956b0ee46a94677
2020-06-15main: Do the installment of black surfaces for remote outputs as wellMarius Vlad1-2/+2
The change to enable the remote outputs later than local ones, means we need to make sure we still have a black surface installed for the remoting output. Bug-AGL: SPEC-3280 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: I3af4ee802eab377adf9c368a800b04ba13ead8af
2020-06-15shell: Add some extra checks to make sure we don't trip ourselvesMarius Vlad1-2/+18
Dynamically removing and inserting surfaces on outputs requires making sure the surface is still mapped on that output. Bug-AGL: SPEC-3280 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: I125f9788718655ee88fa389fb14bd2c36342f8fe
2020-06-15main: Enable remote outputs later than local (DRM) outputsMarius Vlad1-20/+29
Will allow the client shell to receive, and to use as primary output, the local outputs first, without the need to (pre-)configure the client shell or the launcher. Makes integration much easier and will retain the same functionality we had with weston. Bug-AGL: SPEC-3280 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: Ib8ac80074ea515487ffe79b0801f5bfd069e9ff7