|
|
|
@ -2228,61 +2228,19 @@ 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; |
|
|
|
|
|
|
|
|
|
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 |
|
|
|
|