summaryrefslogtreecommitdiffstats
path: root/grpc-proxy/grpc-async-cb.cpp
AgeCommit message (Collapse)AuthorFilesLines
2023-11-03grpc-proxy: Start the gRPC server and waiting thread much soonerMarius Vlad1-1/+48
This change moves a bit the start-up sequence of the gRPC server and when it connects to the compositor. Changing the start-up sequence avoids waiting for the channel to change its state from disconnected to connected, and only wait for the wayland connection to take place. Otherwise, we would wait first for the wayland connection to take place, then wait for the gRPC server to start up and finally wait for the channel to be in connected state, all which would incur a massive waiting time. Moving it a bit early requires to at least verify that we have the proxy side (the wayland connection) is already set-up at that time. Bug-AGL: SPEC-4912 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: Ied88a917df8ff98fefa601103ce04e13c8bb21ac
2023-08-29grpc-proxy: Add dynamic scale of floating windowsMarius Vlad1-0/+13
This adds basic scaling for floating windows, sending new dimensions to the clients to resize itself. Bug-AGL: SPEC-4862 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: Ic693153cd704b278dcddd2514afc8dafecf8829b
2023-08-29grpc-proxy: Add dynamic floating window movementMarius Vlad1-1/+13
This adds basic movement for floating type of windows. The window needs to be a floating type for this request to work out. For the agl-shell protocol, this adds a set_app_float() request while for gRPC it adds a SetAppPosition() request. Bug-AGL: SPEC-4863 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: I5ecc4257c3e84d15a8cabb183757753be37867f5
2023-04-27grpc-proxy: Added set_app_output requestMarius Vlad1-0/+12
This is identical to the remote role, but I feel this conveys more information than remote role, as remote denotes that the output is displayed on another device, which it isn't always the case (the system has multiple outputs all connected directly). This introduces two new additions to the agl-shell protocol, a request to use a different output to display/show the application and an event to inform the shell client to use as a map between the application id and its output. The event is necessary to let the shell client know which output to activate the application on. This requests implements a wrapper for gRPC that maps 1-to-1 to the agl-shell request. There's no gRPC subscription similar to the event though. Bug-AGL: SPEC-4673 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: I070e9fdbafd5616f3a98415193bf846aeaee9a4a
2023-03-03grpc-proxy: Add set_app_fullscreen functionalityMarius Vlad1-0/+12
This implements set_app_fullscreen which clients can set-up before being mapped. The worthwhile change here was the fact that transitioning between fullscreen, normal, and float would cause invalid tracking of the active window when switching between these states. This would make floating operation display the incorrect active window, so in order to reconcile that, we only update the previous surface if it is different that the current active one. Otherwise this fairly similar to set_app_float. Bug-AGL: SPEC-4673 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: Ie912c86ff7ac38d034cf4d97b2adbc5ef47ce9d3
2023-03-01protocol: Add set_app_normal requestMarius Vlad1-0/+12
This request allows transitioning back from other roles like float/split/fullscreen to regular maximized, normal state. Bug-AGL: SPEC-4673 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: Id7f04ffee193677621bd32860998457498acc388
2023-03-01protocol, grpc-proxy: Add support for set_app_floatMarius Vlad1-1/+2
Add support for setting a window as float/popup. This allows either the application itself be set-up as float, or from other gRPC clients. Bug-AGL: SPEC-4673 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: Ic7ee8203cd9c4dfcc51b7fc9709f35be504ae9d0
2022-12-13grpc-proxy: Init gRPCsandbox/mvlad/grpc-async-cbMarius Vlad1-0/+166
This brings in support for accessing agl-shell protocol indirectly by using a gRPC interface which bridges the communication between a particular client (the client issuing gRPC requests) and the AGL compositor which does that by re-using the same agl-shell protocol. In order to achieve that, and further more, to avoid having ifdefs code in the compositor and deal with threading, we instead resorted to using a helper client. On one side this helper implements the gRPC server API, and on the other, a wayland native client that implements the agl_shell interface. It uses the agl_shell_ext interface added previously to communicate with the compositor that it requires access to agl_shell interface as well. The helper expects that agl_shell interface was already bounded to another client before starting it so it waits until that happens and then it implements the protocol specification, for each interface. Launching the helper client automatically can be done by adding the following entry to the ini file: [shell-client-ext] command=/path/to/agl-shell-grpc-server The gRPC server implementation only handles the agl_shell interface until to this point, specifically, the activate_app request, and the events that were adedd with version 3 of the agl-shell protocol. Also the implementation uses the Reactor pattern, with Callback service that greatly simplifies the async version and avoids putting locks to to handle multiple clients. This should allow multiple clients being connected to the gRPC server and receive events / send requests. Bug-AGL: SPEC-4503 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: Ie870da3caa138394d8dd30f9d22a5552d585d63a