}
static void
-weston_subsurface_parent_commit(struct weston_subsurface *sub,
- int parent_is_synchronized)
+weston_subsurface_synchronized_commit(struct weston_subsurface *sub)
{
struct weston_surface *surface = sub->surface;
struct weston_subsurface *tmp;
- if (sub->position.set) {
- weston_surface_set_position(sub->surface,
- sub->position.x, sub->position.y);
- sub->position.set = 0;
- }
-
- if (!parent_is_synchronized && !sub->synchronized)
- return;
-
/* From now on, commit_from_cache the whole sub-tree, regardless of
* the synchronized mode of each child. This sub-surface or some
* of its ancestors were synchronized, so we are synchronized
}
static void
+weston_subsurface_parent_commit(struct weston_subsurface *sub,
+ int parent_is_synchronized)
+{
+ if (sub->position.set) {
+ weston_surface_set_position(sub->surface,
+ sub->position.x, sub->position.y);
+ sub->position.set = 0;
+ }
+
+ if (parent_is_synchronized || sub->synchronized)
+ weston_subsurface_synchronized_commit(sub);
+}
+
+static void
subsurface_configure(struct weston_surface *surface, int32_t dx, int32_t dy,
int32_t width, int32_t height)
{
{
struct weston_subsurface *sub = resource->data;
- if (sub)
+ if (sub && sub->synchronized) {
sub->synchronized = 0;
+
+ /* If sub became effectively desynchronized, flush. */
+ if (!weston_subsurface_is_synchronized(sub))
+ weston_subsurface_synchronized_commit(sub);
+ }
}
static void