[PATCH weston v3 12/15] hmi-controller: register for desktop_surface_configured
Michael Teyfel
mteyfel at de.adit-jv.com
Tue Apr 10 09:06:30 UTC 2018
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 <mteyfel at 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
More information about the wayland-devel
mailing list