summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNobuhiko Tanibata <NOBUHIKO_TANIBATA@xddp.denso.co.jp>2014-09-19 10:13:16 +0900
committerNobuhiko Tanibata <NOBUHIKO_TANIBATA@xddp.denso.co.jp>2014-10-28 12:08:52 +0900
commit84851cbada5b562204c216509b62032809a42195 (patch)
tree21a2f6da15cb4c58aa405c8dcef0c10b8bfc4b7f
parent9211925127bb583ddfb5f4f733b41ba0a86b09ac (diff)
downloadweston-84851cbada5b562204c216509b62032809a42195.tar.gz
ivi-layout: Add configured signal in ivi_layout_surface
Signed-off-by: Nobuhiko Tanibata <NOBUHIKO_TANIBATA@xddp.denso.co.jp>
-rw-r--r--ivi-shell/ivi-layout-private.h2
-rw-r--r--ivi-shell/ivi-layout-transition.c21
-rw-r--r--ivi-shell/ivi-layout-transition.h3
-rw-r--r--ivi-shell/ivi-layout.c45
-rw-r--r--ivi-shell/ivi-layout.h6
5 files changed, 76 insertions, 1 deletions
diff --git a/ivi-shell/ivi-layout-private.h b/ivi-shell/ivi-layout-private.h
index f05f8e95..812a3d49 100644
--- a/ivi-shell/ivi-layout-private.h
+++ b/ivi-shell/ivi-layout-private.h
@@ -61,6 +61,8 @@ struct ivi_layout_surface {
ivi_controller_surface_content_callback callback;
void* userdata;
} content_observer;
+
+ struct wl_signal configured;
};
struct ivi_layout_layer {
diff --git a/ivi-shell/ivi-layout-transition.c b/ivi-shell/ivi-layout-transition.c
index 1f1e8464..ce369f91 100644
--- a/ivi-shell/ivi-layout-transition.c
+++ b/ivi-shell/ivi-layout-transition.c
@@ -80,6 +80,21 @@ get_transition_from_type_and_id(enum ivi_layout_inner_transition_type type, void
return NULL;
}
+WL_EXPORT int32_t
+is_surface_transition(struct ivi_layout_surface* surface)
+{
+ struct ivi_layout* layout = get_instance();
+ struct transition_node *node=NULL;
+ wl_list_for_each(node, &layout->transitions->transition_list, link){
+ if ( node->transition->type == IVI_LAYOUT_INNER_TRANSITION_VIEW_MOVE_RESIZE ||
+ node->transition->type == IVI_LAYOUT_INNER_TRANSITION_VIEW_RESIZE)
+ if ( node->transition->id_func(node->transition->private_data, surface))
+ return 1; /* true */
+ }
+
+ return 0; /* false */
+}
+
static void
tick_transition(struct ivi_layout_transition *transition, uint32_t timestamp)
{
@@ -246,6 +261,12 @@ struct move_resize_view_data {
static void
transition_move_resize_view_destroy(struct ivi_layout_transition* transition)
{
+ struct move_resize_view_data* data =
+ (struct move_resize_view_data*)transition->private_data;
+ struct ivi_layout_surface* layout_surface = data->surface;
+
+ wl_signal_emit(&layout_surface->configured, layout_surface);
+
if(transition->private_data){
free(transition->private_data);
transition->private_data = NULL;
diff --git a/ivi-shell/ivi-layout-transition.h b/ivi-shell/ivi-layout-transition.h
index e8e55090..2c556ede 100644
--- a/ivi-shell/ivi-layout-transition.h
+++ b/ivi-shell/ivi-layout-transition.h
@@ -74,4 +74,7 @@ ivi_layout_transition_layer_render_order(struct ivi_layout_layer* layer,
uint32_t surface_num,
uint32_t duration);
+WL_EXPORT int32_t
+is_surface_transition(struct ivi_layout_surface* surface);
+
#endif
diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c
index 5ed55131..f7789635 100644
--- a/ivi-shell/ivi-layout.c
+++ b/ivi-shell/ivi-layout.c
@@ -838,14 +838,32 @@ commit_list_surface(struct ivi_layout *layout)
ivi_layout_transition_visibility_off(ivisurf, ivisurf->pending.prop.transitionDuration);
}
+ int32_t configured = 0;
+ if (ivisurf->prop.destWidth != ivisurf->pending.prop.destWidth ||
+ ivisurf->prop.destHeight != ivisurf->pending.prop.destHeight) {
+ configured = 1;
+ }
+
ivisurf->prop = ivisurf->pending.prop;
ivisurf->prop.transitionType = IVI_LAYOUT_TRANSITION_NONE;
ivisurf->pending.prop.transitionType = IVI_LAYOUT_TRANSITION_NONE;
+
+ if (configured && !is_surface_transition(ivisurf))
+ wl_signal_emit(&ivisurf->configured, ivisurf);
}
else{
+ int32_t configured = 0;
+ if (ivisurf->prop.destWidth != ivisurf->pending.prop.destWidth ||
+ ivisurf->prop.destHeight != ivisurf->pending.prop.destHeight) {
+ configured = 1;
+ }
+
ivisurf->prop = ivisurf->pending.prop;
ivisurf->prop.transitionType = IVI_LAYOUT_TRANSITION_NONE;
ivisurf->pending.prop.transitionType = IVI_LAYOUT_TRANSITION_NONE;
+
+ if (configured && !is_surface_transition(ivisurf))
+ wl_signal_emit(&ivisurf->configured, ivisurf);
}
}
}
@@ -3079,6 +3097,7 @@ ivi_layout_surfaceCreate(struct weston_surface *wl_surface,
wl_list_init(&ivisurf->link);
wl_signal_init(&ivisurf->property_changed);
+ wl_signal_init(&ivisurf->configured);
wl_list_init(&ivisurf->list_layer);
ivisurf->id_surface = id_surface;
ivisurf->layout = layout;
@@ -3170,11 +3189,35 @@ ivi_layout_initWithCompositor(struct weston_compositor *ec)
}
+static void
+ivi_layout_surfaceAddConfiguredListener(struct ivi_layout_surface* ivisurf,
+ struct wl_listener* listener)
+{
+ wl_signal_add(&ivisurf->configured, listener);
+}
+
+static void
+ivi_layout_surfaceRemoveConfiguredListener(struct ivi_layout_surface* ivisurf,
+ struct wl_listener* target)
+{
+ struct wl_listener *listener = NULL;
+ struct wl_listener *next = NULL;
+
+ wl_list_for_each_safe(listener, next, &ivisurf->configured.listener_list, link) {
+ if (target == listener) {
+ wl_list_remove(&listener->link);
+ }
+ }
+}
+
WL_EXPORT struct ivi_layout_interface ivi_layout_interface = {
.get_weston_view = ivi_layout_get_weston_view,
.surfaceConfigure = ivi_layout_surfaceConfigure,
.surfaceSetNativeContent = ivi_layout_surfaceSetNativeContent,
.surfaceCreate = ivi_layout_surfaceCreate,
.initWithCompositor = ivi_layout_initWithCompositor,
- .emitWarningSignal = ivi_layout_emitWarningSignal
+ .emitWarningSignal = ivi_layout_emitWarningSignal,
+ .get_surface_dimension = ivi_layout_surfaceGetDimension,
+ .add_surface_configured_listener = ivi_layout_surfaceAddConfiguredListener,
+ .remove_surface_configured_listener = ivi_layout_surfaceRemoveConfiguredListener
};
diff --git a/ivi-shell/ivi-layout.h b/ivi-shell/ivi-layout.h
index 8cca33ca..4622a46f 100644
--- a/ivi-shell/ivi-layout.h
+++ b/ivi-shell/ivi-layout.h
@@ -135,6 +135,12 @@ struct ivi_layout_interface {
void (*initWithCompositor)(struct weston_compositor *ec);
void (*emitWarningSignal)(uint32_t id_surface,
enum ivi_layout_warning_flag flag);
+ int32_t (*get_surface_dimension)(struct ivi_layout_surface *ivisurf,
+ int32_t *pDimension);
+ void (*add_surface_configured_listener)(struct ivi_layout_surface *ivisurf,
+ struct wl_listener* listener);
+ void (*remove_surface_configured_listener)(struct ivi_layout_surface *ivisurf,
+ struct wl_listener* listener);
};
WL_EXPORT struct ivi_layout_interface ivi_layout_interface;