[PATCH weston] Partially revert "xdg-shell: Add show_window_menu request"

Pekka Paalanen ppaalanen at gmail.com
Wed Sep 10 05:18:33 PDT 2014


From: Pekka Paalanen <pekka.paalanen at collabora.co.uk>

This reverts the parts of commit 81ff075bf48c55cd07e37784e20c310fa52ed926
that touch window.c.

This brings the toytoolkit window context menus back, until someone
implements the xdg-shell equivalent in the compositor.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=82972
Cc: Jasper St. Pierre <jstpierre at mecheye.net>
Signed-off-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
---
 clients/window.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 49 insertions(+), 7 deletions(-)

I will push this tomorrow, if no-one NAKs.


Thanks,
pq

diff --git a/clients/window.c b/clients/window.c
index e0981c6..9c48155 100644
--- a/clients/window.c
+++ b/clients/window.c
@@ -2236,19 +2236,61 @@ frame_get_pointer_image_for_location(struct window_frame *frame,
 	}
 }
 
+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;
 
-	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 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);
 }
 
 static int
-- 
1.8.5.5



More information about the wayland-devel mailing list