compositor: Update output state after mode switch
authorAnder Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
Fri, 14 Dec 2012 15:37:25 +0000 (13:37 -0200)
committerKristian Høgsberg <krh@bitplanet.net>
Fri, 14 Dec 2012 16:27:40 +0000 (11:27 -0500)
After a mode switch, the output region and transformation matrix need
to be updated. The call to weston_output_move() would do the former but
not the latter, but calling that when the output remains in the same
coordinate doesn't make much sense. Instead, update this state and the
transformation matrix in weston_output_mode_switch().

src/compositor-drm.c
src/compositor.c

index ab1e4a9..3f2cd0c 100644 (file)
@@ -1041,8 +1041,6 @@ drm_output_switch_mode(struct weston_output *output_base, struct weston_mode *mo
 
        /*update output*/
        output->base.current = &drm_mode->base;
-       output->base.dirty = 1;
-       weston_output_move(&output->base, output->base.x, output->base.y);
        return 0;
 
 err_gl:
index f6c94b6..567105e 100644 (file)
@@ -84,13 +84,31 @@ sigchld_handler(int signal_number, void *data)
        return 1;
 }
 
+static void
+weston_output_transform_init(struct weston_output *output, uint32_t transform);
+
 WL_EXPORT int
 weston_output_switch_mode(struct weston_output *output, struct weston_mode *mode)
 {
+       int ret;
+
        if (!output->switch_mode)
                return -1;
 
-       return output->switch_mode(output, mode);
+       ret = output->switch_mode(output, mode);
+       if (ret < 0)
+               return ret;
+
+       /* Update output region and transformation matrix */
+       weston_output_transform_init(output, output->transform);
+
+       pixman_region32_init(&output->previous_damage);
+       pixman_region32_init_rect(&output->region, output->x, output->y,
+                                 output->width, output->height);
+
+       weston_output_update_matrix(output);
+
+       return ret;
 }
 
 WL_EXPORT void