compositor: Update xkb state with key releases on focus out

This happens when vt-switching away from the compositor (drm) or
giving keyboard focus to a different X window.  Release the modifiers
so we don't get stuck modifiers.  We'll update with the new keys down
when we come back.
diff --git a/src/compositor.c b/src/compositor.c
index b4e430b..8cf66bb 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -1936,15 +1936,14 @@
 	struct weston_seat *ws = (struct weston_seat *) seat;
 	struct weston_compositor *compositor = ws->compositor;
 	struct wl_surface *surface;
-	uint32_t *k;
+	uint32_t *k, serial;
 
+	serial = wl_display_next_serial(compositor->wl_display);
 	wl_array_copy(&seat->keyboard->keys, keys);
 	wl_array_for_each(k, &seat->keyboard->keys) {
 		weston_compositor_idle_inhibit(compositor);
 		if (update_state == STATE_UPDATE_AUTOMATIC)
-			update_modifier_state(ws,
-					      wl_display_next_serial(compositor->wl_display),
-					      *k,
+			update_modifier_state(ws, serial, *k,
 					      WL_KEYBOARD_KEY_STATE_PRESSED);
 	}
 
@@ -1969,10 +1968,14 @@
 	struct weston_seat *ws = (struct weston_seat *) seat;
 	struct weston_compositor *compositor = ws->compositor;
 	struct wl_surface *surface;
-	uint32_t *k;
+	uint32_t *k, serial;
 
-	wl_array_for_each(k, &seat->keyboard->keys)
+	serial = wl_display_next_serial(compositor->wl_display);
+	wl_array_for_each(k, &seat->keyboard->keys) {
 		weston_compositor_idle_release(compositor);
+		update_modifier_state(ws, serial, *k,
+				      WL_KEYBOARD_KEY_STATE_RELEASED);
+	}
 
 	ws->modifier_state = 0;