xdg-shell: Turn the resizing heuristics into an explicit state

Currently, there's a race condition. When resizing from the left, and
a client attaches a buffer after the resize ends, you suddenly see the
buffer jump to the right, because the resize ended while multiple
attaches were in-flight. Making resize a state can fix this, as the
server can now know exactly when the resize ended, and whether a commit
was before or after that place.

We don't implement the correct tracking in this commit; that's left as
an exercise to the reader.

Additionally, clients like terminals might want to display resize popups
to display the number of cells when in a resize. They can use the hint
here to figure out whether they are resizing.
diff --git a/clients/window.c b/clients/window.c
index 9ec12c7..6149618 100644
--- a/clients/window.c
+++ b/clients/window.c
@@ -2387,7 +2387,6 @@
 	if ((status & FRAME_STATUS_RESIZE) && window->xdg_surface) {
 		input_ungrab(input);
 
-		window->resizing = 1;
 		xdg_surface_resize(window->xdg_surface,
 				   input_get_seat(input),
 				   window->display->serial,
@@ -2623,12 +2622,6 @@
 	input->pointer_enter_serial = serial;
 	input->pointer_focus = window;
 
-	if (window->resizing) {
-		window->resizing = 0;
-		/* Schedule a redraw to free the pool */
-		window_schedule_redraw(window);
-	}
-
 	input->sx = sx;
 	input->sy = sy;
 
@@ -3873,6 +3866,7 @@
 
 	window->maximized = 0;
 	window->fullscreen = 0;
+	window->resizing = 0;
 
 	wl_array_for_each(p, states) {
 		uint32_t state = *p;
@@ -3883,6 +3877,9 @@
 		case XDG_SURFACE_STATE_FULLSCREEN:
 			window->fullscreen = 1;
 			break;
+		case XDG_SURFACE_STATE_RESIZING:
+			window->resizing = 1;
+			break;
 		default:
 			/* Unknown state */
 			break;