desktops-shell: Add tiled orientation support using key-bindings

Patch adds KEY_UP/KEY_DOWN for tiled top and bottom positioning,
KEY_LEFT/KEY_RIGHT correspondingly, for left and right positioning.

It also modifies the man page to include these new bindings, But also with
commit 'compositor: Remove desktop zoom' we no longer have zoom effects
so removed them.

Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
This commit is contained in:
Marius Vlad 2022-07-16 00:22:00 +03:00
parent 37a3025d89
commit 5bcbe92d51
2 changed files with 103 additions and 2 deletions

View File

@ -2896,6 +2896,83 @@ fullscreen_binding(struct weston_keyboard *keyboard,
set_fullscreen(shsurf, !fullscreen, NULL);
}
static void
set_tiled_orientation(struct weston_surface *focus,
enum weston_top_level_tiled_orientation orientation)
{
struct weston_surface *surface;
struct shell_surface *shsurf;
int width, height;
pixman_rectangle32_t area;
struct weston_geometry geom;
int x, y;
surface = weston_surface_get_main_surface(focus);
if (surface == NULL)
return;
shsurf = get_shell_surface(surface);
if (shsurf == NULL)
return;
get_maximized_size(shsurf, &width, &height);
get_output_work_area(shsurf->shell, shsurf->output, &area);
geom = weston_desktop_surface_get_geometry(shsurf->desktop_surface);
if (orientation & WESTON_TOP_LEVEL_TILED_ORIENTATION_LEFT ||
orientation & WESTON_TOP_LEVEL_TILED_ORIENTATION_RIGHT)
width /= 2;
else if (orientation & WESTON_TOP_LEVEL_TILED_ORIENTATION_TOP ||
orientation & WESTON_TOP_LEVEL_TILED_ORIENTATION_BOTTOM)
height /= 2;
x = area.x - geom.x;
y = area.y - geom.y;
if (orientation & WESTON_TOP_LEVEL_TILED_ORIENTATION_RIGHT)
x += width;
else if (orientation & WESTON_TOP_LEVEL_TILED_ORIENTATION_BOTTOM)
y += height;
weston_view_set_position(shsurf->view, x, y);
weston_desktop_surface_set_size(shsurf->desktop_surface, width, height);
weston_desktop_surface_set_orientation(shsurf->desktop_surface, orientation);
weston_compositor_schedule_repaint(surface->compositor);
}
static void
set_tiled_orientation_left(struct weston_keyboard *keyboard,
const struct timespec *time,
uint32_t button, void *data)
{
set_tiled_orientation(keyboard->focus, WESTON_TOP_LEVEL_TILED_ORIENTATION_LEFT);
}
static void
set_tiled_orientation_right(struct weston_keyboard *keyboard,
const struct timespec *time,
uint32_t button, void *data)
{
set_tiled_orientation(keyboard->focus, WESTON_TOP_LEVEL_TILED_ORIENTATION_RIGHT);
}
static void
set_tiled_orientation_up(struct weston_keyboard *keyboard,
const struct timespec *time,
uint32_t button, void *data)
{
set_tiled_orientation(keyboard->focus, WESTON_TOP_LEVEL_TILED_ORIENTATION_TOP);
}
static void
set_tiled_orientation_down(struct weston_keyboard *keyboard,
const struct timespec *time,
uint32_t button, void *data)
{
set_tiled_orientation(keyboard->focus, WESTON_TOP_LEVEL_TILED_ORIENTATION_BOTTOM);
}
static void
touch_move_binding(struct weston_touch *touch, const struct timespec *time, void *data)
{
@ -4492,6 +4569,15 @@ shell_add_bindings(struct weston_compositor *ec, struct desktop_shell *shell)
mod | MODIFIER_SHIFT,
resize_binding, shell);
weston_compositor_add_key_binding(ec, KEY_LEFT, mod | MODIFIER_SHIFT,
set_tiled_orientation_left, NULL);
weston_compositor_add_key_binding(ec, KEY_RIGHT, mod | MODIFIER_SHIFT,
set_tiled_orientation_right, NULL);
weston_compositor_add_key_binding(ec, KEY_UP, mod | MODIFIER_SHIFT,
set_tiled_orientation_up, NULL);
weston_compositor_add_key_binding(ec, KEY_DOWN, mod | MODIFIER_SHIFT,
set_tiled_orientation_down, NULL);
if (ec->capabilities & WESTON_CAP_ROTATION_ANY)
weston_compositor_add_button_binding(ec, BTN_MIDDLE, mod,
rotate_binding, NULL);

View File

@ -33,9 +33,24 @@ Kill active window
Maximize active window
.P
.RE
.B mod + PageUp, mod + PageDown
.B mod + Shift + KEY_LEFT
.RS 4
Zoom desktop in (or out)
Make the active window tiled left.
.P
.RE
.B mod + Shift + KEY_RIGHT
.RS 4
Make the active window tiled right.
.P
.RE
.B mod + Shift + KEY_UP
.RS 4
Make the active window tiled top.
.P
.RE
.B mod + Shift + KEY_DOWN
.RS 4
Make the active window tiled bottom.
.P
.RE
.B mod + Tab