xwm: Split creation of frame window out into its own function
diff --git a/src/xwayland/window-manager.c b/src/xwayland/window-manager.c
index c6c7bd5..cc6b261 100644
--- a/src/xwayland/window-manager.c
+++ b/src/xwayland/window-manager.c
@@ -753,27 +753,12 @@
 }
 
 static void
-weston_wm_handle_map_request(struct weston_wm *wm, xcb_generic_event_t *event)
+weston_wm_window_create_frame(struct weston_wm_window *window)
 {
-	xcb_map_request_event_t *map_request =
-		(xcb_map_request_event_t *) event;
-	struct weston_wm_window *window;
+	struct weston_wm *wm = window->wm;
 	uint32_t values[3];
 	int x, y, width, height;
 
-	if (our_resource(wm, map_request->window)) {
-		wm_log("XCB_MAP_REQUEST (window %d, ours)\n",
-		       map_request->window);
-		return;
-	}
-
-	window = hash_table_lookup(wm->window_hash, map_request->window);
-
-	if (window->frame_id)
-		return;
-
-	weston_wm_window_read_properties(window);
-
 	weston_wm_window_get_frame_size(window, &width, &height);
 	weston_wm_window_get_child_position(window, &x, &y);
 
@@ -810,15 +795,6 @@
 	xcb_configure_window(wm->conn, window->id,
 			     XCB_CONFIG_WINDOW_BORDER_WIDTH, values);
 
-	wm_log("XCB_MAP_REQUEST (window %d, %p, frame %d)\n",
-	       window->id, window, window->frame_id);
-
-	weston_wm_window_set_wm_state(window, ICCCM_NORMAL_STATE);
-	weston_wm_window_set_net_wm_state(window);
-
-	xcb_map_window(wm->conn, map_request->window);
-	xcb_map_window(wm->conn, window->frame_id);
-
 	window->cairo_surface =
 		cairo_xcb_surface_create_with_xrender_format(wm->conn,
 							     wm->screen,
@@ -830,6 +806,36 @@
 }
 
 static void
+weston_wm_handle_map_request(struct weston_wm *wm, xcb_generic_event_t *event)
+{
+	xcb_map_request_event_t *map_request =
+		(xcb_map_request_event_t *) event;
+	struct weston_wm_window *window;
+
+	if (our_resource(wm, map_request->window)) {
+		wm_log("XCB_MAP_REQUEST (window %d, ours)\n",
+		       map_request->window);
+		return;
+	}
+
+	window = hash_table_lookup(wm->window_hash, map_request->window);
+
+	weston_wm_window_read_properties(window);
+
+	if (window->frame_id == XCB_WINDOW_NONE)
+		weston_wm_window_create_frame(window);
+
+	wm_log("XCB_MAP_REQUEST (window %d, %p, frame %d)\n",
+	       window->id, window, window->frame_id);
+
+	weston_wm_window_set_wm_state(window, ICCCM_NORMAL_STATE);
+	weston_wm_window_set_net_wm_state(window);
+
+	xcb_map_window(wm->conn, map_request->window);
+	xcb_map_window(wm->conn, window->frame_id);
+}
+
+static void
 weston_wm_handle_map_notify(struct weston_wm *wm, xcb_generic_event_t *event)
 {
 	xcb_map_notify_event_t *map_notify = (xcb_map_notify_event_t *) event;