exposay: arrange views per-output

https://bugs.freedesktop.org/show_bug.cgi?id=73173
diff --git a/desktop-shell/shell.h b/desktop-shell/shell.h
index 4d4f00a..48ac250 100644
--- a/desktop-shell/shell.h
+++ b/desktop-shell/shell.h
@@ -52,6 +52,41 @@
 	EXPOSAY_LAYOUT_ANIMATE_TO_OVERVIEW, /* in transition to all windows */
 };
 
+struct exposay_output {
+	int num_surfaces;
+	int grid_size;
+	int surface_size;
+
+	int hpadding_outer;
+	int vpadding_outer;
+	int padding_inner;
+};
+
+struct exposay {
+	/* XXX: Make these exposay_surfaces. */
+	struct weston_view *focus_prev;
+	struct weston_view *focus_current;
+	struct weston_view *clicked;
+	struct workspace *workspace;
+	struct weston_seat *seat;
+
+	struct wl_list surface_list;
+
+	struct weston_keyboard_grab grab_kbd;
+	struct weston_pointer_grab grab_ptr;
+
+	enum exposay_target_state state_target;
+	enum exposay_layout_state state_cur;
+	int in_flight; /* number of animations still running */
+
+	int row_current;
+	int column_current;
+	struct exposay_output *cur_output;
+
+	bool mod_pressed;
+	bool mod_invalid;
+};
+
 struct focus_surface {
 	struct weston_surface *surface;
 	struct weston_view *view;
@@ -69,6 +104,14 @@
 	struct weston_view_animation *focus_animation;
 };
 
+struct shell_output {
+	struct desktop_shell  *shell;
+	struct weston_output  *output;
+	struct exposay_output eoutput;
+	struct wl_listener    destroy_listener;
+	struct wl_list        link;
+};
+
 struct desktop_shell {
 	struct weston_compositor *compositor;
 
@@ -146,36 +189,7 @@
 		struct wl_event_source *startup_timer;
 	} fade;
 
-	struct exposay {
-		/* XXX: Make these exposay_surfaces. */
-		struct weston_view *focus_prev;
-		struct weston_view *focus_current;
-		struct weston_view *clicked;
-		struct workspace *workspace;
-		struct weston_seat *seat;
-		struct wl_list surface_list;
-
-		struct weston_keyboard_grab grab_kbd;
-		struct weston_pointer_grab grab_ptr;
-
-                enum exposay_target_state state_target;
-                enum exposay_layout_state state_cur;
-		int in_flight; /* number of animations still running */
-
-		int num_surfaces;
-		int grid_size;
-		int surface_size;
-
-		int hpadding_outer;
-		int vpadding_outer;
-		int padding_inner;
-
-		int row_current;
-		int column_current;
-
-		bool mod_pressed;
-		bool mod_invalid;
-	} exposay;
+	struct exposay exposay;
 
 	uint32_t binding_modifier;
 	uint32_t exposay_modifier;