Since ivi-shell now supports xdg-protocol, the surface_created listener
can be removed and the desktop_surface_configured listener is needed.
ivi-layout: libweston-desktop api is used to send configure event to
application.

Signed-off-by: Michael Teyfel <mtey...@de.adit-jv.com>
---
 ivi-shell/hmi-controller.c | 70 ++++++++++++++++++++++++++--------------------
 ivi-shell/ivi-layout.c     | 12 ++++++--
 2 files changed, 49 insertions(+), 33 deletions(-)

diff --git a/ivi-shell/hmi-controller.c b/ivi-shell/hmi-controller.c
index 0e44df8..36bffe2 100644
--- a/ivi-shell/hmi-controller.c
+++ b/ivi-shell/hmi-controller.c
@@ -129,9 +129,9 @@ struct hmi_controller {
        struct weston_compositor           *compositor;
        struct wl_listener                  destroy_listener;
 
-       struct wl_listener                  surface_created;
        struct wl_listener                  surface_removed;
        struct wl_listener                  surface_configured;
+       struct wl_listener                  desktop_surface_configured;
 
        struct wl_client                   *user_interface;
        struct ui_setting                   ui_setting;
@@ -577,28 +577,6 @@ create_layer(struct weston_output *output,
  * Internal set notification
  */
 static void
-set_notification_create_surface(struct wl_listener *listener, void *data)
-{
-       struct hmi_controller *hmi_ctrl =
-                       wl_container_of(listener, hmi_ctrl,
-                                       surface_created);
-       struct ivi_layout_surface *ivisurf = data;
-       struct hmi_controller_layer *layer_link =
-                                       
wl_container_of(hmi_ctrl->application_layer_list.prev,
-                                                       layer_link,
-                                                       link);
-       struct ivi_layout_layer *application_layer = layer_link->ivilayer;
-       int32_t ret = 0;
-
-       /* skip ui widgets */
-       if (is_surf_in_ui_widget(hmi_ctrl, ivisurf))
-               return;
-
-       ret = hmi_ctrl->interface->layer_add_surface(application_layer, 
ivisurf);
-       assert(!ret);
-}
-
-static void
 set_notification_remove_surface(struct wl_listener *listener, void *data)
 {
        struct hmi_controller *hmi_ctrl =
@@ -665,6 +643,42 @@ set_notification_configure_surface(struct wl_listener 
*listener, void *data)
        switch_mode(hmi_ctrl, hmi_ctrl->layout_mode);
 }
 
+static void
+set_notification_configure_desktop_surface(struct wl_listener *listener, void 
*data)
+{
+       struct hmi_controller *hmi_ctrl =
+                       wl_container_of(listener, hmi_ctrl,
+                                       desktop_surface_configured);
+       struct ivi_layout_surface *ivisurf = data;
+       struct hmi_controller_layer *layer_link =
+                                       
wl_container_of(hmi_ctrl->application_layer_list.prev,
+                                                       layer_link,
+                                                       link);
+       struct ivi_layout_layer *application_layer = layer_link->ivilayer;
+       struct weston_surface *surface;
+       int32_t ret = 0;
+
+       /* skip ui widgets */
+       if (is_surf_in_ui_widget(hmi_ctrl, ivisurf))
+               return;
+
+       ret = hmi_ctrl->interface->layer_add_surface(application_layer, 
ivisurf);
+       assert(!ret);
+
+       /*
+        * if application changes size of wl_buffer. The source rectangle shall 
be
+        * fit to the size.
+        */
+       surface = hmi_ctrl->interface->surface_get_weston_surface(ivisurf);
+       if (surface) {
+               hmi_ctrl->interface->surface_set_source_rectangle(ivisurf, 0,
+                               0, surface->width, surface->height);
+       }
+
+       hmi_ctrl->interface->commit_changes();
+       switch_mode(hmi_ctrl, hmi_ctrl->layout_mode);
+}
+
 /**
  * A hmi_controller used 4 ivi_layers to manage ivi_surfaces. The IDs of
  * corresponding ivi_layer are defined in weston.ini. Default scene graph
@@ -858,6 +872,9 @@ hmi_controller_create(struct weston_compositor *ec)
        hmi_ctrl->surface_configured.notify = 
set_notification_configure_surface;
        
hmi_ctrl->interface->add_listener_configure_surface(&hmi_ctrl->surface_configured);
 
+       hmi_ctrl->desktop_surface_configured.notify = 
set_notification_configure_desktop_surface;
+       
hmi_ctrl->interface->add_listener_configure_desktop_surface(&hmi_ctrl->desktop_surface_configured);
+
        hmi_ctrl->destroy_listener.notify = hmi_controller_destroy;
        wl_signal_add(&hmi_ctrl->compositor->destroy_signal,
                      &hmi_ctrl->destroy_listener);
@@ -1278,13 +1295,6 @@ ivi_hmi_controller_UI_ready(struct wl_client *client,
        hmi_ctrl->interface->commit_changes();
 
        ivi_hmi_controller_add_launchers(hmi_ctrl, 256);
-
-       /* Add surface_created listener after the initialization of launchers.
-        * Otherwise, surfaces of the launchers will be added to application
-        * layer too.*/
-       hmi_ctrl->surface_created.notify = set_notification_create_surface;
-       
hmi_ctrl->interface->add_listener_create_surface(&hmi_ctrl->surface_created);
-
        hmi_ctrl->is_initialized = 1;
 }
 
diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c
index b06bf30..ef354d4 100644
--- a/ivi-shell/ivi-layout.c
+++ b/ivi-shell/ivi-layout.c
@@ -715,9 +715,15 @@ commit_surface_list(struct ivi_layout *layout)
                        ivisurf->pending.prop.transition_type = 
IVI_LAYOUT_TRANSITION_NONE;
 
                        if (configured && !is_surface_transition(ivisurf)) {
-                               shell_surface_send_configure(ivisurf->surface,
-                                                            
ivisurf->prop.dest_width,
-                                                            
ivisurf->prop.dest_height);
+                               if (ivisurf->weston_desktop_surface) {
+                                       
weston_desktop_surface_set_size(ivisurf->weston_desktop_surface,
+                                                                       
ivisurf->prop.dest_width,
+                                                                       
ivisurf->prop.dest_height);
+                               } else {
+                                       
shell_surface_send_configure(ivisurf->surface,
+                                                                    
ivisurf->prop.dest_width,
+                                                                    
ivisurf->prop.dest_height);
+                               }
                        }
                } else {
                        configured = 0;
-- 
2.7.4

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to