This allow to further customize how to handle the split window.
There's no implementation in the compositor for allow this functionality
to take place, but doing so can be at a later point in time.
Tagging the split window as sticky should allow activation of other
windows while keeping the split window always displayed.
Bug-AGL: SPEC-4839
Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
Change-Id: Iae4d18d2a857497c11d0e77bf43f654e2b8ed501
string app_id = 1;
int32 tile_orientation = 2;
int32 width = 3;
- string output_name = 4;
+ int32 sticky = 4;
+ string output_name = 5;
}
message SplitResponse {
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);
}
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();
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);
}
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);
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>
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);