diff options
author | Pekka Paalanen <pekka.paalanen@collabora.co.uk> | 2014-09-10 15:10:30 +0300 |
---|---|---|
committer | Pekka Paalanen <pekka.paalanen@collabora.co.uk> | 2014-09-11 11:34:31 +0300 |
commit | 26237862770baf5d162cdcf23b33a1577ae98de7 (patch) | |
tree | 2da41a294724f2eec408021cd4970c43be5e3ec6 /clients | |
parent | 8b771af9869442d4f4f5437e7ae3f6d3e9367b78 (diff) | |
download | weston-26237862770baf5d162cdcf23b33a1577ae98de7.tar.gz weston-26237862770baf5d162cdcf23b33a1577ae98de7.tar.bz2 weston-26237862770baf5d162cdcf23b33a1577ae98de7.zip |
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>
Diffstat (limited to 'clients')
-rw-r--r-- | clients/window.c | 56 |
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 |