aboutsummaryrefslogtreecommitdiffstats
path: root/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0012-hmi-controller-register-for-desktop_surface_configured.patch
diff options
context:
space:
mode:
authorJan-Simon Möller <jsmoeller@linuxfoundation.org>2018-04-16 22:14:52 +0200
committerJan-Simon Möller <jsmoeller@linuxfoundation.org>2018-04-20 17:07:06 +0200
commitbb0882c5dad030f676e424265ebcd869bb3ff899 (patch)
treed95bb2d7ad6b5ac47427f73babe015b0ade02342 /meta-agl-profile-graphical/recipes-graphics/wayland/weston/0012-hmi-controller-register-for-desktop_surface_configured.patch
parent97e5e76efa44f55ee9aaf3998bb3df38b829706c (diff)
Introduce meta-agl-profile-core and meta-agl-profile-graphics
Rework towards agl profiles. This change is part of a series of changes to create the AGL profiles. This set will mainly introduce the 'core' profile. It is setup to be a drop-in change, thus some files were kept in (dummy) locations for now. However, they'll be taken care of in the next changes in this series. The main target of the meta-agl-profile-core layer is to host: - a minimal, bootable image with network and package management enabled -- agl-image-boot - a minimal image with network and packagemanagement and the AGL APIs -- agl-image-minimal The layer meta-agl-profile-graphical is used as superset of these and includes support for egl+wayland+weston. All recipes concerning graphics were moved there. This is not a full profile as we still have to migrate some parts of meta-agl-demo in a follow-up changeset. The roadmap as discussed during the F2F session in Karlsruhe is: - week 16 : core profile and profiles w/o graphics - week 17 : graphical profiles - week 18 : final conversion of the demo image v2: moved agl-login-manager from -graphics to -core (see Jose's comment) v3: moved back after discussion - follow-up in separate changeset Change-Id: Idacb0d1274baac1f63f8d1b850d4b1104ac33918 Signed-off-by: Jan-Simon Möller <jsmoeller@linuxfoundation.org>
Diffstat (limited to 'meta-agl-profile-graphical/recipes-graphics/wayland/weston/0012-hmi-controller-register-for-desktop_surface_configured.patch')
-rw-r--r--meta-agl-profile-graphical/recipes-graphics/wayland/weston/0012-hmi-controller-register-for-desktop_surface_configured.patch133
1 files changed, 133 insertions, 0 deletions
diff --git a/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0012-hmi-controller-register-for-desktop_surface_configured.patch b/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0012-hmi-controller-register-for-desktop_surface_configured.patch
new file mode 100644
index 000000000..c5d85bb17
--- /dev/null
+++ b/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0012-hmi-controller-register-for-desktop_surface_configured.patch
@@ -0,0 +1,133 @@
+index d5403e06..7b2f2707 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;
+@@ -581,28 +581,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 = ivi_layout_interface->layer_add_surface(application_layer, ivisurf);
+- assert(!ret);
+-}
+-
+ static void
+ set_notification_remove_surface(struct wl_listener *listener, void *data)
+ {
+@@ -670,6 +648,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 = ivi_layout_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 = ivi_layout_interface->surface_get_weston_surface(ivisurf);
++ if (surface) {
++ ivi_layout_interface->surface_set_source_rectangle(ivisurf, 0,
++ 0, surface->width, surface->height);
++ }
++
++ ivi_layout_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
+@@ -852,6 +866,9 @@ hmi_controller_create(struct weston_compositor *ec)
+ hmi_ctrl->surface_configured.notify = set_notification_configure_surface;
+ ivi_layout_interface->add_listener_configure_surface(&hmi_ctrl->surface_configured);
+
++ hmi_ctrl->desktop_surface_configured.notify = set_notification_configure_desktop_surface;
++ ivi_layout_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);
+@@ -1275,13 +1292,6 @@ ivi_hmi_controller_UI_ready(struct wl_client *client,
+ ivi_layout_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;
+- ivi_layout_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 6b854503..22d63708 100644
+--- a/ivi-shell/ivi-layout.c
++++ b/ivi-shell/ivi-layout.c
+@@ -787,9 +787,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;