xdg-shell: Add show_window_menu request
diff --git a/clients/window.c b/clients/window.c
index d5fbd54..b82a93e 100644
--- a/clients/window.c
+++ b/clients/window.c
@@ -2228,61 +2228,19 @@
 	}
 }
 
-static void
-frame_menu_func(void *data, struct input *input, int index)
-{
-	struct window *window = data;
-	struct display *display;
-
-	switch (index) {
-	case 0: /* close */
-		window_close(window);
-		break;
-	case 1: /* move to workspace above */
-		display = window->display;
-		if (display->workspace > 0)
-			workspace_manager_move_surface(
-				display->workspace_manager,
-				window->main_surface->surface,
-				display->workspace - 1);
-		break;
-	case 2: /* move to workspace below */
-		display = window->display;
-		if (display->workspace < display->workspace_count - 1)
-			workspace_manager_move_surface(
-				display->workspace_manager,
-				window->main_surface->surface,
-				display->workspace + 1);
-		break;
-	case 3: /* fullscreen */
-		/* we don't have a way to get out of fullscreen for now */
-		if (window->fullscreen_handler)
-			window->fullscreen_handler(window, window->user_data);
-		break;
-	}
-}
-
 void
 window_show_frame_menu(struct window *window,
 		       struct input *input, uint32_t time)
 {
 	int32_t x, y;
-	int count;
 
-	static const char *entries[] = {
-		"Close",
-		"Move to workspace above", "Move to workspace below",
-		"Fullscreen"
-	};
-
-	if (window->fullscreen_handler)
-		count = ARRAY_LENGTH(entries);
-	else
-		count = ARRAY_LENGTH(entries) - 1;
-
-	input_get_position(input, &x, &y);
-	window_show_menu(window->display, input, time, window,
-			 x - 10, y - 10, frame_menu_func, entries, count);
+	if (window->xdg_surface) {
+		input_get_position(input, &x, &y);
+		xdg_surface_show_window_menu(window->xdg_surface,
+					     input_get_seat(input),
+					     window->display->serial,
+					     x - 10, y - 10);
+	}
 }
 
 static int