AglShellGrpcClient: Add support for split windows 47/29647/2 master
authorMarius Vlad <marius.vlad@collabora.com>
Thu, 1 Feb 2024 13:01:29 +0000 (15:01 +0200)
committerMarius Vlad <marius.vlad@collabora.com>
Fri, 23 Feb 2024 15:18:17 +0000 (15:18 +0000)
And with it, add missing SetAppNormal.

Bug-AGL: SPEC-4890
Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
Change-Id: Ic362ea671674c4ffac3e8efe15977b2bec3ad316

src/AglShellGrpcClient.cpp
src/AglShellGrpcClient.h
src/agl_shell.proto
src/main.cpp

index 804ab79..5f1b447 100644 (file)
@@ -75,6 +75,20 @@ GrpcClient::SetAppFloat(const std::string& app_id, int32_t x_pos, int32_t y_pos)
        return status.ok();
 }
 
+bool
+GrpcClient::SetAppNormal(const std::string& app_id)
+{
+       agl_shell_ipc::NormalRequest request;
+
+       request.set_app_id(app_id);
+
+       grpc::ClientContext context;
+       ::agl_shell_ipc::NormalResponse reply;
+
+       grpc::Status status = m_stub->SetAppNormal(&context, request, &reply);
+       return status.ok();
+}
+
 bool
 GrpcClient::SetAppFullscreen(const std::string& app_id)
 {
@@ -90,12 +104,12 @@ GrpcClient::SetAppFullscreen(const std::string& app_id)
 }
 
 bool
-GrpcClient::SetAppOnOutput(const std::string& app_id, const std::string& output_name)
+GrpcClient::SetAppOnOutput(const std::string& app_id, const std::string &output)
 {
        agl_shell_ipc::AppOnOutputRequest request;
 
        request.set_app_id(app_id);
-       request.set_output(output_name);
+       request.set_output(output);
 
        grpc::ClientContext context;
        ::agl_shell_ipc::AppOnOutputResponse reply;
@@ -136,6 +150,26 @@ GrpcClient::SetAppScale(const std::string& app_id, int32_t width, int32_t height
        return status.ok();
 }
 
+
+bool
+GrpcClient::SetAppSplit(const std::string& app_id, uint32_t orientation,
+                       int32_t width, int32_t sticky, const std::string& output_name)
+{
+       agl_shell_ipc::SplitRequest request;
+
+       request.set_app_id(app_id);
+       request.set_output_name(output_name);
+       request.set_tile_orientation(orientation);
+       request.set_width(width);
+       request.set_sticky(sticky);
+
+       grpc::ClientContext context;
+       ::agl_shell_ipc::SplitResponse reply;
+
+       grpc::Status status = m_stub->SetAppSplit(&context, request, &reply);
+       return status.ok();
+}
+
 grpc::Status
 GrpcClient::Wait(void)
 {
index 844ece5..f66b44c 100644 (file)
@@ -94,8 +94,11 @@ public:
        bool SetAppFloat(const std::string& app_id, int32_t x_pos, int32_t y_pos);
        bool SetAppFullscreen(const std::string& app_id);
        bool SetAppOnOutput(const std::string& app_id, const std::string& output);
+       bool SetAppNormal(const std::string& app_id);
        bool SetAppPosition(const std::string& app_id, int32_t x, int32_t y);
        bool SetAppScale(const std::string& app_id, int32_t width, int32_t height);
+       bool SetAppSplit(const std::string& app_id, uint32_t orientation,
+                        int32_t width, int32_t sticky, const std::string& output_name);
        std::vector<std::string> GetOutputs();
        void GetAppState();
        void AppStatusState(Callback callback);
index 1aa3dd4..d38d896 100644 (file)
@@ -4,17 +4,17 @@ syntax = "proto3";
 package agl_shell_ipc;
 
 service AglShellManagerService {
-       rpc ActivateApp(ActivateRequest)                                returns (ActivateResponse) {}
-       rpc DeactivateApp(DeactivateRequest)                    returns (DeactivateResponse) {}
-       rpc SetAppSplit(SplitRequest)                           returns (SplitResponse) {}
-       rpc SetAppFloat(FloatRequest)                           returns (FloatResponse) {}
-       rpc SetAppFullscreen(FullscreenRequest)                 returns (FullscreenResponse) {}
-       rpc AppStatusState(AppStateRequest)                     returns (stream AppStateResponse) {}
-       rpc GetOutputs(OutputRequest)                           returns (ListOutputResponse) {}
-       rpc SetAppNormal(NormalRequest)                         returns (NormalResponse) {}
-       rpc SetAppOnOutput(AppOnOutputRequest)                  returns (AppOnOutputResponse) {}
-       rpc SetAppPosition(AppPositionRequest)                  returns (AppPositionResponse) {}
-       rpc SetAppScale(AppScaleRequest)                                returns (AppScaleResponse) {}
+       rpc ActivateApp(ActivateRequest)                        returns (ActivateResponse) {}
+       rpc DeactivateApp(DeactivateRequest)            returns (DeactivateResponse) {}
+       rpc SetAppSplit(SplitRequest)                   returns (SplitResponse) {}
+       rpc SetAppFloat(FloatRequest)                   returns (FloatResponse) {}
+       rpc SetAppFullscreen(FullscreenRequest)         returns (FullscreenResponse) {}
+       rpc AppStatusState(AppStateRequest)             returns (stream AppStateResponse) {}
+       rpc GetOutputs(OutputRequest)                   returns (ListOutputResponse) {}
+       rpc SetAppNormal(NormalRequest)                 returns (NormalResponse) {}
+       rpc SetAppOnOutput(AppOnOutputRequest)          returns (AppOnOutputResponse) {}
+       rpc SetAppPosition(AppPositionRequest)          returns (AppPositionResponse) {}
+       rpc SetAppScale(AppScaleRequest)                        returns (AppScaleResponse) {}
 }
 
 message ActivateRequest {
@@ -36,6 +36,9 @@ message DeactivateResponse {
 message SplitRequest {
        string app_id = 1;
        int32 tile_orientation = 2;
+       int32 width = 3;
+       int32 sticky = 4;
+       string output_name = 5;
 }
 
 message SplitResponse {
index 6ab9530..3db6372 100644 (file)
@@ -48,6 +48,7 @@ enum mode {
        ON_OTHER_OUTPUTS = 4,
        SET_FLOAT_POS   = 5,
        SCALE   = 6,
+       SPLIT   = 7,
 };
 
 static QWindow *
@@ -87,12 +88,14 @@ int main(int argc, char *argv[])
                        mmode = SET_FLOAT_POS;
                else if (strcmp(argv[1], "scale") == 0)
                        mmode = SCALE;
+               else if (strcmp(argv[1], "split") == 0)
+                       mmode = SPLIT;
                else
                        assert(!"Invalid mode");
 
                if (mmode != FLOAT && mmode != FULLSCREEN && 
                    mmode != ON_OTHER_OUTPUTS && mmode != SET_FLOAT_POS &&
-                   mmode != SCALE) {
+                   mmode != SCALE && mmode != SPLIT) {
                        fprintf(stderr, "Will not use rpc\n");
                        goto skip;
                }
@@ -100,6 +103,9 @@ int main(int argc, char *argv[])
                if (mmode == ON_OTHER_OUTPUTS)
                       output_name = argv[2];
 
+               if (mmode == SPLIT)
+                      output_name = argv[2];
+
                // start grpc connection
                GrpcClient *client = new GrpcClient();
 
@@ -140,6 +146,11 @@ int main(int argc, char *argv[])
                        client->SetAppScale(myname.toStdString(), 200, 200);
                        exit(EXIT_SUCCESS);
                        break;
+               case SPLIT:
+                       // put it on the bottom
+                       client->SetAppSplit(myname.toStdString(), 4, 0, 0,
+                                       std::string(output_name));
+                       break;
                default:
                        break;
                }