summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPekka Paalanen <pekka.paalanen@collabora.co.uk>2016-03-15 16:57:51 +0200
committerPekka Paalanen <pekka.paalanen@collabora.co.uk>2016-03-16 13:10:46 +0200
commit1f82193379027842762fcd098170d4c58d508fd9 (patch)
tree2eafd1710ad5851baae90c2a5efb772658d53394
parent1ddb8dd8f1d31d659ef59c14d5cd9f29ab8c56de (diff)
ivi-shell: call shell_surface_send_configure() directly
For some reason, it seems that ivi-layout.c has tried hard to avoid calling directly into ivi-shell.c. This means there is a jump through hoops just to get the configure event sent to the clients. Ivi-shell registers a listener for a ivi-layout signal for sending the event. Instead, let ivi-layout.c call directly into ivi-shell.c, and expose a function to send out the configure events. This reduces some confusion on who calls what. The main idea though is that this makes ivi-shell.c not depend on struct ivi_layout_surface fields directly anymore. In following patches, ivi_layout_surface can be made opaque for ivi-shell.c. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Emre Ucan <eucan@de.adit-jv.com>
-rw-r--r--ivi-shell/ivi-layout-transition.c4
-rw-r--r--ivi-shell/ivi-layout.c13
-rw-r--r--ivi-shell/ivi-shell.c40
-rw-r--r--ivi-shell/ivi-shell.h4
4 files changed, 35 insertions, 26 deletions
diff --git a/ivi-shell/ivi-layout-transition.c b/ivi-shell/ivi-layout-transition.c
index 45b8dc5a..966473bf 100644
--- a/ivi-shell/ivi-layout-transition.c
+++ b/ivi-shell/ivi-layout-transition.c
@@ -31,6 +31,7 @@
#include <stdio.h>
#include <stdbool.h>
+#include "ivi-shell.h"
#include "ivi-layout-export.h"
#include "ivi-layout-private.h"
@@ -303,6 +304,9 @@ transition_move_resize_view_destroy(struct ivi_layout_transition *transition)
struct ivi_layout_surface *layout_surface = data->surface;
wl_signal_emit(&layout_surface->configured, layout_surface);
+ shell_surface_send_configure(layout_surface->surface,
+ layout_surface->prop.dest_width,
+ layout_surface->prop.dest_height);
if (transition->private_data) {
free(transition->private_data);
diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c
index 77578d45..f1ea9bd7 100644
--- a/ivi-shell/ivi-layout.c
+++ b/ivi-shell/ivi-layout.c
@@ -61,6 +61,7 @@
#include <assert.h>
#include "compositor.h"
+#include "ivi-shell.h"
#include "ivi-layout-export.h"
#include "ivi-layout-private.h"
@@ -776,8 +777,12 @@ commit_surface_list(struct ivi_layout *layout)
ivisurf->prop.transition_type = IVI_LAYOUT_TRANSITION_NONE;
ivisurf->pending.prop.transition_type = IVI_LAYOUT_TRANSITION_NONE;
- if (configured && !is_surface_transition(ivisurf))
+ if (configured && !is_surface_transition(ivisurf)) {
wl_signal_emit(&ivisurf->configured, ivisurf);
+ shell_surface_send_configure(ivisurf->surface,
+ ivisurf->prop.dest_width,
+ ivisurf->prop.dest_height);
+ }
} else {
configured = 0;
if (ivisurf->prop.dest_width != ivisurf->pending.prop.dest_width ||
@@ -789,8 +794,12 @@ commit_surface_list(struct ivi_layout *layout)
ivisurf->prop.transition_type = IVI_LAYOUT_TRANSITION_NONE;
ivisurf->pending.prop.transition_type = IVI_LAYOUT_TRANSITION_NONE;
- if (configured && !is_surface_transition(ivisurf))
+ if (configured && !is_surface_transition(ivisurf)) {
wl_signal_emit(&ivisurf->configured, ivisurf);
+ shell_surface_send_configure(ivisurf->surface,
+ ivisurf->prop.dest_width,
+ ivisurf->prop.dest_height);
+ }
}
}
}
diff --git a/ivi-shell/ivi-shell.c b/ivi-shell/ivi-shell.c
index 19140cea..7a537698 100644
--- a/ivi-shell/ivi-shell.c
+++ b/ivi-shell/ivi-shell.c
@@ -63,8 +63,6 @@ struct ivi_shell_surface
int32_t height;
struct wl_list link;
-
- struct wl_listener configured_listener;
};
struct ivi_shell_setting
@@ -78,25 +76,6 @@ struct ivi_shell_setting
*/
static void
-surface_configure_notify(struct wl_listener *listener, void *data)
-{
- struct ivi_layout_surface *layout_surf =
- (struct ivi_layout_surface *)data;
-
- struct ivi_shell_surface *shell_surf =
- container_of(listener,
- struct ivi_shell_surface,
- configured_listener);
-
- int32_t dest_width = layout_surf->prop.dest_width;
- int32_t dest_height = layout_surf->prop.dest_height;
-
- if (shell_surf->resource)
- ivi_surface_send_configure(shell_surf->resource,
- dest_width, dest_height);
-}
-
-static void
ivi_shell_surface_configure(struct weston_surface *, int32_t, int32_t);
static struct ivi_shell_surface *
@@ -108,6 +87,21 @@ get_ivi_shell_surface(struct weston_surface *surface)
return NULL;
}
+void
+shell_surface_send_configure(struct weston_surface *surface,
+ int32_t width, int32_t height)
+{
+ struct ivi_shell_surface *shsurf;
+
+ shsurf = get_ivi_shell_surface(surface);
+ assert(shsurf);
+ if (!shsurf)
+ return;
+
+ if (shsurf->resource)
+ ivi_surface_send_configure(shsurf->resource, width, height);
+}
+
static void
ivi_shell_surface_configure(struct weston_surface *surface,
int32_t sx, int32_t sy)
@@ -255,9 +249,7 @@ application_surface_create(struct wl_client *client,
ivisurf->width = 0;
ivisurf->height = 0;
ivisurf->layout_surface = layout_surface;
- ivisurf->configured_listener.notify = surface_configure_notify;
- ivi_layout_surface_add_configured_listener(layout_surface,
- &ivisurf->configured_listener);
+
/*
* The following code relies on wl_surface destruction triggering
* immediateweston_surface destruction
diff --git a/ivi-shell/ivi-shell.h b/ivi-shell/ivi-shell.h
index 744d9691..45faceb4 100644
--- a/ivi-shell/ivi-shell.h
+++ b/ivi-shell/ivi-shell.h
@@ -69,4 +69,8 @@ input_panel_setup(struct ivi_shell *shell);
void
input_panel_destroy(struct ivi_shell *shell);
+void
+shell_surface_send_configure(struct weston_surface *surface,
+ int32_t width, int32_t height);
+
#endif /* WESTON_IVI_SHELL_H */