diff options
-rw-r--r-- | src/AglShellGrpcClient.cpp | 33 | ||||
-rw-r--r-- | src/AglShellGrpcClient.h | 2 | ||||
-rw-r--r-- | src/agl_shell.proto | 39 | ||||
-rw-r--r-- | src/main.cpp | 22 |
4 files changed, 86 insertions, 10 deletions
diff --git a/src/AglShellGrpcClient.cpp b/src/AglShellGrpcClient.cpp index e1dad57..6f4ff24 100644 --- a/src/AglShellGrpcClient.cpp +++ b/src/AglShellGrpcClient.cpp @@ -119,6 +119,39 @@ GrpcClient::SetAppOnOutput(const std::string& app_id, const std::string &output) return status.ok(); } +bool +GrpcClient::SetAppPosition(const std::string& app_id, int32_t x, int32_t y) +{ + agl_shell_ipc::AppPositionRequest request; + + request.set_app_id(app_id); + request.set_x(x); + request.set_y(y); + + grpc::ClientContext context; + ::agl_shell_ipc::AppPositionResponse reply; + + grpc::Status status = m_stub->SetAppPosition(&context, request, &reply); + return status.ok(); +} + +bool +GrpcClient::SetAppScale(const std::string& app_id, int32_t width, int32_t height) +{ + agl_shell_ipc::AppScaleRequest request; + + request.set_app_id(app_id); + request.set_width(width); + request.set_height(height); + + grpc::ClientContext context; + ::agl_shell_ipc::AppScaleResponse reply; + + grpc::Status status = m_stub->SetAppScale(&context, request, &reply); + return status.ok(); +} + + grpc::Status GrpcClient::Wait(void) { diff --git a/src/AglShellGrpcClient.h b/src/AglShellGrpcClient.h index 4b33469..ff190f7 100644 --- a/src/AglShellGrpcClient.h +++ b/src/AglShellGrpcClient.h @@ -96,6 +96,8 @@ public: 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); std::vector<std::string> GetOutputs(); void GetAppState(); void AppStatusState(Callback callback); diff --git a/src/agl_shell.proto b/src/agl_shell.proto index aac35f4..c4f3dfe 100644 --- a/src/agl_shell.proto +++ b/src/agl_shell.proto @@ -4,15 +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 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 { @@ -23,6 +25,7 @@ message ActivateRequest { message ActivateResponse { }; + message DeactivateRequest { string app_id = 1; } @@ -87,3 +90,21 @@ message AppOnOutputRequest { message AppOnOutputResponse { }; + +message AppPositionRequest { + string app_id = 1; + int32 x = 2; + int32 y = 3; +}; + +message AppPositionResponse { +}; + +message AppScaleRequest { + string app_id = 1; + int32 width = 2; + int32 height = 3; +}; + +message AppScaleResponse { +}; diff --git a/src/main.cpp b/src/main.cpp index 8f50b5e..43e0ced 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -50,6 +50,8 @@ enum action_state { GETOUTPUTS, SET_FULLSCREEN, SET_APP_ON_OUTPUT, + SET_APP_POS, + SET_APP_SCALE, }; static struct action { @@ -63,6 +65,8 @@ static struct action { { SET_NORMAL, "NORMAL" }, { SET_FULLSCREEN, "FULLSCREEN" }, { SET_APP_ON_OUTPUT, "ON_OUTPUT" }, + { SET_APP_POS, "POSITION" }, + { SET_APP_SCALE, "SCALE" }, }; static int @@ -89,7 +93,7 @@ help(char **argv) { fprintf(stderr, "Usage: %s [-a action] [-p app_id] [-o output_name] [-l]\n", argv[0]); - fprintf(stderr, "\t-a -- action activate|deactivate|float|normal|getoutputs|fullscreen|on_output\n"); + fprintf(stderr, "\t-a -- action activate|deactivate|float|normal|getoutputs|fullscreen|on_output|position|scale\n"); fprintf(stderr, "\t-p -- app_id application_id\n"); fprintf(stderr, "\t-o -- output_name one of the outputs from getoutputs action\n"); fprintf(stderr, "\t-l -- continuously listen for window state events\n"); @@ -219,6 +223,22 @@ int main(int argc, char *argv[]) case GETOUTPUTS: read_outputs(client); break; + case SET_APP_POS: + if (!app_id) { + fprintf(stderr, "Positioning require an app_id\n"); + help(argv); + } + fprintf(stderr, "Set app position for application '%s'\n", app_id); + client->SetAppPosition(std::string(app_id), 550, 550); + break; + case SET_APP_SCALE: + if (!app_id) { + fprintf(stderr, "Scale require an app_id\n"); + help(argv); + } + fprintf(stderr, "Set scale for application '%s'\n", app_id); + client->SetAppScale(std::string(app_id), 200, 200); + break; default: // allow listen flag to be passed if (listen_flag) |