grpc-proxy/shell: Add sticky parameter when setting up split window 49/29649/4
authorMarius Vlad <marius.vlad@collabora.com>
Wed, 31 Jan 2024 17:10:34 +0000 (19:10 +0200)
committerMarius Vlad <marius.vlad@collabora.com>
Thu, 22 Feb 2024 13:51:33 +0000 (13:51 +0000)
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

grpc-proxy/agl_shell.proto
grpc-proxy/grpc-async-cb.cpp
grpc-proxy/shell.cpp
grpc-proxy/shell.h
protocol/agl-shell.xml
src/shell.c

index c8d57ac..d38d896 100644 (file)
@@ -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 {
index 23a293d..6807564 100644 (file)
@@ -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);
index 6dffe6b..7267d70 100644 (file)
@@ -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);
 }
index f428088..fc02f25 100644 (file)
@@ -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);
index 4f71a51..f392691 100644 (file)
         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>
index 13c03f0..cce4dec 100644 (file)
@@ -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);