summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPekka Paalanen <pekka.paalanen@collabora.co.uk>2014-09-10 15:10:30 +0300
committerPekka Paalanen <pekka.paalanen@collabora.co.uk>2014-09-11 11:34:31 +0300
commit26237862770baf5d162cdcf23b33a1577ae98de7 (patch)
tree2da41a294724f2eec408021cd4970c43be5e3ec6
parent8b771af9869442d4f4f5437e7ae3f6d3e9367b78 (diff)
downloadweston-26237862770baf5d162cdcf23b33a1577ae98de7.tar.gz
Partially revert "xdg-shell: Add show_window_menu request"
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 Acked-by: Jasper St. Pierre <jstpierre@mecheye.net> Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
-rw-r--r--clients/window.c56
1 files changed, 49 insertions, 7 deletions
diff --git a/clients/window.c b/clients/window.c
index e0981c6a..9c48155d 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