summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--grpc-proxy/agl_shell.proto3
-rw-r--r--grpc-proxy/grpc-async-cb.cpp4
-rw-r--r--grpc-proxy/shell.cpp5
-rw-r--r--grpc-proxy/shell.h3
-rw-r--r--protocol/agl-shell.xml6
-rw-r--r--src/shell.c2
6 files changed, 17 insertions, 6 deletions
diff --git a/grpc-proxy/agl_shell.proto b/grpc-proxy/agl_shell.proto
index c8d57ac..d38d896 100644
--- a/grpc-proxy/agl_shell.proto
+++ b/grpc-proxy/agl_shell.proto
@@ -37,7 +37,8 @@ message SplitRequest {
string app_id = 1;
int32 tile_orientation = 2;
int32 width = 3;
- string output_name = 4;
+ int32 sticky = 4;
+ string output_name = 5;
}
message SplitResponse {
diff --git a/grpc-proxy/grpc-async-cb.cpp b/grpc-proxy/grpc-async-cb.cpp
index 23a293d..6807564 100644
--- a/grpc-proxy/grpc-async-cb.cpp
+++ b/grpc-proxy/grpc-async-cb.cpp
@@ -225,7 +225,9 @@ GrpcServiceImpl::SetAppSplit(grpc::CallbackServerContext *context,
LOG("m_aglShell not set-up\n");
return nullptr;
}
- m_aglShell->SetAppSplit(request->app_id(), request->tile_orientation(), request->width(), request->output_name());
+ m_aglShell->SetAppSplit(request->app_id(), request->tile_orientation(),
+ request->width(), request->sticky(),
+ request->output_name());
grpc::ServerUnaryReactor* reactor = context->DefaultReactor();
reactor->Finish(grpc::Status::OK);
diff --git a/grpc-proxy/shell.cpp b/grpc-proxy/shell.cpp
index 6dffe6b..7267d70 100644
--- a/grpc-proxy/shell.cpp
+++ b/grpc-proxy/shell.cpp
@@ -140,7 +140,8 @@ Shell::SetAppScale(const std::string &app_id,
}
void
-Shell::SetAppSplit(const std::string &app_id, uint32_t orientation, uint32_t width, const std::string &output_name)
+Shell::SetAppSplit(const std::string &app_id, uint32_t orientation,
+ uint32_t width, uint32_t sticky, const std::string &output_name)
{
struct window_output *woutput, *w_output;
struct agl_shell *shell = this->m_shell.get();
@@ -161,6 +162,6 @@ Shell::SetAppSplit(const std::string &app_id, uint32_t orientation, uint32_t wid
w_output, link);
- agl_shell_set_app_split(shell, app_id.c_str(), orientation, width, w_output->output);
+ agl_shell_set_app_split(shell, app_id.c_str(), orientation, width, sticky, w_output->output);
wl_display_flush(m_shell_data->wl_display);
}
diff --git a/grpc-proxy/shell.h b/grpc-proxy/shell.h
index f428088..fc02f25 100644
--- a/grpc-proxy/shell.h
+++ b/grpc-proxy/shell.h
@@ -40,7 +40,8 @@ public:
m_shell(shell), m_shell_data(sh_data) { }
void ActivateApp(const std::string &app_id, const std::string &output_name);
void DeactivateApp(const std::string &app_id);
- void SetAppSplit(const std::string &app_id, uint32_t orientation, uint32_t width, const std::string &output_name);
+ void SetAppSplit(const std::string &app_id, uint32_t orientation,
+ uint32_t width, uint32_t sticky, const std::string &output_name);
void SetAppFloat(const std::string &app_id,
int32_t x_pos, int32_t y_pos);
void SetAppNormal(const std::string &app_id);
diff --git a/protocol/agl-shell.xml b/protocol/agl-shell.xml
index 4f71a51..f392691 100644
--- a/protocol/agl-shell.xml
+++ b/protocol/agl-shell.xml
@@ -410,12 +410,18 @@
width can't exceed the output width value, or the compositor can choose
to ignore this value.
+ Making the split window sticky would inform the compositor that the
+ window should always be active when switching or when activating between
+ other windows. This would allow navigating, starting and activating other
+ windows while keeping the current window always in a split state.
+
See xdg_toplevel.set_app_id from the xdg-shell protocol for a
description of app_id.
</description>
<arg name="app_id" type="string"/>
<arg name="orientation" type="uint" enum="tile_orientation"/>
<arg name="width" type="int" summary="width of the window being split"/>
+ <arg name="sticky" type="int" summary="make the split window stiky"/>
<arg name="output" type="object" interface="wl_output"/>
</request>
</interface>
diff --git a/src/shell.c b/src/shell.c
index 13c03f0..cce4dec 100644
--- a/src/shell.c
+++ b/src/shell.c
@@ -1897,7 +1897,7 @@ shell_ivi_surf_count_split_surfaces(struct ivi_compositor *ivi)
static
void shell_set_app_split(struct wl_client *client, struct wl_resource *res,
const char *app_id, uint32_t orientation, int32_t width,
- struct wl_resource *output_res)
+ int32_t sticky, struct wl_resource *output_res)
{
struct ivi_surface *surf;
struct ivi_compositor *ivi = wl_resource_get_user_data(res);