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 app_id = 1;
        int32 tile_orientation = 2;
        int32 width = 3;
-       string output_name = 4;
+       int32 sticky = 4;
+       string output_name = 5;
 }
 
 message SplitResponse {
 }
 
 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;
        }
                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);
 
        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
 }
 
 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();
 {
        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);
 
 
                                           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);
 }
        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);
                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);
        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.
 
         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"/>
         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>
       <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,
 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);
 {
        struct ivi_surface *surf;
        struct ivi_compositor *ivi = wl_resource_get_user_data(res);