shell: Use buffer_scale as output scale on fullscreen DRIVER

It may happen that you e.g. fullscreen a 800x600 surface with
buffer_scale 1 (e.g. a 800x600 buffer) on an output that is
otherwise scale 2. In this case we want to temporarily set
the output scale to 1, as we're really scanning out of a
scale 1 buffer. This causes us to e.g. report the input
positions in the right place, etc.

When we restore the original mode we also restore the original
scale.

Note that the scale change is a purely compositor internal change,
to clients it still looks like the output is scale 2.
diff --git a/src/shell.c b/src/shell.c
index 1443328..7db0f49 100644
--- a/src/shell.c
+++ b/src/shell.c
@@ -1503,7 +1503,8 @@
 	if (shsurf->fullscreen.type == WL_SHELL_SURFACE_FULLSCREEN_METHOD_DRIVER &&
 	    shell_surface_is_top_fullscreen(shsurf)) {
 		weston_output_switch_mode(shsurf->fullscreen_output,
-		                          shsurf->fullscreen_output->origin);
+		                          shsurf->fullscreen_output->origin,
+					  shsurf->fullscreen_output->origin_scale);
 	}
 	shsurf->fullscreen.type = WL_SHELL_SURFACE_FULLSCREEN_METHOD_DEFAULT;
 	shsurf->fullscreen.framerate = 0;
@@ -1797,11 +1798,11 @@
 	case WL_SHELL_SURFACE_FULLSCREEN_METHOD_DRIVER:
 		if (shell_surface_is_top_fullscreen(shsurf)) {
 			struct weston_mode mode = {0,
-				surf_width,
-				surf_height,
+				surf_width * surface->buffer_scale,
+				surf_height * surface->buffer_scale,
 				shsurf->fullscreen.framerate};
 
-			if (weston_output_switch_mode(output, &mode) == 0) {
+			if (weston_output_switch_mode(output, &mode, surface->buffer_scale) == 0) {
 				weston_surface_configure(shsurf->fullscreen.black_surface,
 					                 output->x - surf_x,
 					                 output->y - surf_y,
@@ -2148,7 +2149,8 @@
 	if (shsurf->fullscreen.type == WL_SHELL_SURFACE_FULLSCREEN_METHOD_DRIVER &&
 	    shell_surface_is_top_fullscreen(shsurf)) {
 		weston_output_switch_mode(shsurf->fullscreen_output,
-					  shsurf->fullscreen_output->origin);
+					  shsurf->fullscreen_output->origin,
+					  shsurf->fullscreen_output->origin_scale);
 	}
 
 	if (shsurf->fullscreen.black_surface)