From c625714c4adce04c34ab406bdd444b13773760e2 Mon Sep 17 00:00:00 2001 From: Marius Vlad Date: Fri, 7 Apr 2023 19:36:32 +0300 Subject: [PATCH] AglShellGrpcClient: Add set_app_output This is part of the larger SPEC-4673 which incorporates the whole gRPC interface. In this patch we add support for mapping the application, from the start, to another output, other than the default (last one). Bug-AGL: SPEC-4673 Signed-off-by: Marius Vlad Change-Id: I2cac3ebaefcdb8de4b4ce32386f8a239dc9b8712 --- src/AglShellGrpcClient.cpp | 15 +++++++++++++++ src/AglShellGrpcClient.h | 1 + src/agl_shell.proto | 9 +++++++++ src/main.cpp | 23 +++++++++++++++++------ 4 files changed, 42 insertions(+), 6 deletions(-) diff --git a/src/AglShellGrpcClient.cpp b/src/AglShellGrpcClient.cpp index 73aad71..ee2fe48 100644 --- a/src/AglShellGrpcClient.cpp +++ b/src/AglShellGrpcClient.cpp @@ -89,6 +89,21 @@ GrpcClient::SetAppFullscreen(const std::string& app_id) return status.ok(); } +bool +GrpcClient::SetAppOnOutput(const std::string& app_id, const std::string& output_name) +{ + agl_shell_ipc::AppOnOutputRequest request; + + request.set_app_id(app_id); + request.set_output(output_name); + + grpc::ClientContext context; + ::agl_shell_ipc::AppOnOutputResponse reply; + + grpc::Status status = m_stub->SetAppOnOutput(&context, request, &reply); + return status.ok(); +} + grpc::Status GrpcClient::Wait(void) { diff --git a/src/AglShellGrpcClient.h b/src/AglShellGrpcClient.h index a50369a..7c30fe6 100644 --- a/src/AglShellGrpcClient.h +++ b/src/AglShellGrpcClient.h @@ -93,6 +93,7 @@ public: bool DeactivateApp(const std::string& app_id); 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); std::vector GetOutputs(); void GetAppState(); void AppStatusState(Callback callback); diff --git a/src/agl_shell.proto b/src/agl_shell.proto index 200d43e..aac35f4 100644 --- a/src/agl_shell.proto +++ b/src/agl_shell.proto @@ -12,6 +12,7 @@ service AglShellManagerService { rpc AppStatusState(AppStateRequest) returns (stream AppStateResponse) {} rpc GetOutputs(OutputRequest) returns (ListOutputResponse) {} rpc SetAppNormal(NormalRequest) returns (NormalResponse) {} + rpc SetAppOnOutput(AppOnOutputRequest) returns (AppOnOutputResponse) {} } message ActivateRequest { @@ -78,3 +79,11 @@ message FullscreenRequest { message FullscreenResponse { }; + +message AppOnOutputRequest { + string app_id = 1; + string output = 2; +}; + +message AppOnOutputResponse { +}; diff --git a/src/main.cpp b/src/main.cpp index b2a5b4d..727bd27 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -45,7 +45,7 @@ enum mode { FLOAT = 1, FULLSCREEN = 2, FULLSCREEN_QT = 3, // rather than use rpc, use Qt API - REMOTE = 4, + ON_OTHER_OUTPUTS = 4, }; static QWindow * @@ -72,22 +72,26 @@ int main(int argc, char *argv[]) QQmlComponent main_comp(&engine, QUrl("qrc:/Main.qml")); if (argc >= 2) { + const char *output_name = nullptr; if (strcmp(argv[1], "float") == 0) mmode = FLOAT; else if (strcmp(argv[1], "full") == 0) mmode = FULLSCREEN; - else if (strcmp(argv[1], "remote") == 0) - mmode = REMOTE; + else if (strcmp(argv[1], "on_output") == 0) + mmode = ON_OTHER_OUTPUTS; else if (strcmp(argv[1], "full_qt") == 0) mmode = FULLSCREEN_QT; else assert(!"Invalid mode"); - if (mmode != FLOAT && mmode != FULLSCREEN && mmode != REMOTE) { + if (mmode != FLOAT && mmode != FULLSCREEN && mmode != ON_OTHER_OUTPUTS) { fprintf(stderr, "Will not use rpc\n"); goto skip; } + if (mmode == ON_OTHER_OUTPUTS) + output_name = argv[2]; + // start grpc connection GrpcClient *client = new GrpcClient(); @@ -104,8 +108,15 @@ int main(int argc, char *argv[]) fprintf(stderr, "Setting the application as fullscreen\n"); client->SetAppFullscreen(myname.toStdString()); break; - case REMOTE: - fprintf(stderr, "Setting the application as remote\n"); + case ON_OTHER_OUTPUTS: + fprintf(stderr, "Setting application '%s' on output '%s'\n", + myname.toStdString().c_str(), output_name); + if (!output_name) { + fprintf(stderr, "Output name is not set!\n"); + exit(EXIT_FAILURE); + } + client->SetAppOnOutput(myname.toStdString(), + std::string(output_name)); break; default: break; -- 2.16.6