Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New Tiling With Keyboard Designs #36

Closed
cozy-isaac opened this issue Jul 27, 2022 · 5 comments
Closed

New Tiling With Keyboard Designs #36

cozy-isaac opened this issue Jul 27, 2022 · 5 comments
Assignees

Comments

@cozy-isaac
Copy link

cozy-isaac commented Jul 27, 2022

This issue is a design proposal to improve the usability of COSMIC's tiling features for keyboard users. We're starting an overall initiative to make common tiling tasks easier outside of the adjustment mode that is present in Pop!_OS, and our designs below re-imagine our tiling layout system to make layouts more flexible. Here are this issue's main goals:

  • Improve layout flexibility. With tiling on Pop!_OS, it can be hard to make layouts such as equal thirds without utilizing resizing adjustments. In our new tiling, it should be easy to make a group with any number of windows.
  • Moving windows outside of an "adjustment mode." While an adjustment mode can help make space for system shortcuts, it can also increase the effort it takes to complete some basic window management tasks.
  • Clearer signifiers for the current tiling "state" (that is, how windows are grouped and how windows will move). We want to make tiling overall more accessible for users who haven't previously used tiling managers. Here that will include more hints for how applications are grouped together. These benefits should scale up for experienced users as well.

Designs

We'll create a new shortcut to move windows in a tiling layout without using an adjustment mode. That shortcut will be Shift-Super with the arrow keys (or h/j/k/l, the vim equivalents for arrows), pending further testing.

Initially, we will have grouping hints show up after initiating the first move, done by hitting Shift-Super and an arrow key. We are also considering having the hints show up after just hitting Shift-Super, with the additional possibility of only showing up after a delay as to not interrupt the user if they have a custom shortcut using the Shift and Super modifiers.

When moving windows, the background is covered by a 90% opacity overlay and the tiling area of the desktop gets 16px padding. Applications in the tiling space will "zoom out" to accommodate the padding of the tiling area. Groups in the tiling tree may also get a 3px warm-gray border, on the inside of another 16px padding. Generally, whether or not the grouping indicator appears depends on the proximity of the group to the active window. We'd prefer to only show grouping indicators for groups that are immediately relevant.

prototype-tiling Above: A prototype in which the user starts moving a window with the window movement shortcut, placing it in a new group with the upper right application. Note that our prototype is limited in ability to show scaling; this prototype shows a resize but we want to see a scale effect instead.

New windows still spawn with the binary-tree model in mind; new windows create a "branch" with the previously-active window, taking half of the size on the long edge. In our new tiling, it will be easier to have groups with three or more equal children in a group.

prototype-thirds Above: The user has initiated movement with the Super-Shift shortcut, and is moving the window into various layouts, including a couple that have equal thirds, before moving the window back to the original position. In this example the user hasn't released the movement shortcut modifiers at any point, so the grouping hints are always showing.

As the user moves their active window, we will show the group that the active window is in, as well as what new groups can be created. The user can quickly create groups with other windows at the same level by moving the active window towards them with the movement shortcut and arrow keys.

At the moment, the heuristic is that groups your active window currently inhabits are indicated with our warm-gray border color, and groups that your active window could inhabit (as a direct descendant) are indicated with the same border at 60% opacity.

There is one notable exception: currently, when your active window is the only sibling to a group with the opposite orientation, we aren't displaying the border around that sibling group to make it clearer that your active window will insert between those items if moved in that direction:

prototype-perpendicular-orientation The active window is next to a group with two windows tiled vertically. If the user moves the window right, the active window will appear between the two vertically-tiled windows.

We will want to add a configuration option to not show zoom and hints, which may connect to the low motion settings.

Prototype

We have a prototype in which you can simulate moving one window in this new tiling system:
https://www.figma.com/proto/Vl3y5ug2i6IQYQFI1zxv6o/Cosmic-Tiling-Prototyping?node-id=216%3A10661&starting-point-node-id=216%3A13321

Prototype Notes:

  • You'll need to select "Disable default keyboard navigation" in the options settings to keep Figma from overriding some arrow key actions.
  • Shift + arrows will simulate movement in this prototype. We're intending the final shortcut to be Shift-Super + arrows but this prototype can't use the Super key. There's no way to change the window being moved in this prototype, but in the actual DE you will be able to use Super + arrows, like in current Pop!_OS, to change the active window.
  • We can't simulate what happens when you release the shortcut, so you'll have to imagine that you are continuing to hold the window movement shortcut in this prototype.
@cozy-isaac
Copy link
Author

We've made some updates to the presentation of tiled windows, especially during moving windows. We've found during testing that we can simplify the borders indicating groups. We've also found that there's a lot of aspect ratios that don't scale well during the zoom out of the movement animation. To address both, we've added slight backgrounds to the tiles to help maintain the sense of a grid, and taken away most outer group borders.

Active windows get a stronger tile background, and the window itself may get an active hint within that tile if the active hint is enabled. In this screenshot, the only borders shown are to indicate new groups that would be created if the active window moves in their direction.

Tiling setup with an active window being moved between two windows in a right column

In many cases where a new group wouldn't be created, we use a stronger border to show which windows are adjacent.
D up

We've also taken another look at selected groups to make sure it fits with our new border rules and spacing. Selected groups will get a selection border, and a background that appears within gaps.
Group selection - not moving

When moving, the border is drawn around all the tiles of the group, and the tiles all receive the brighter active window background with no gaps in between.

)

@etrigan63
Copy link

Would it be possible to add a center master layout? For example:
image
This is basically a master-stack layout, with the master tile taking up 50% of the workspace in the middle and the stack on either side taking up 25% on each side. The general behavior is single tile = fullscreen - gaps
two tiles = master on left 50%, stack 0n right 50%
three or more tiles = master in center 50%, stack on each side taking 25% and alternating between sides.
This configuration is epic for super-ultrawide monitors (32:9 aspect ratio).

@cozy-isaac
Copy link
Author

It should be possible to get those proportions for the columns, but at the moment there aren't plans to have master and stack functionality in terms of launching windows in specific tiles. There is some appetite to investigate ways of spawning windows but it's not set in the current roadmap. Although, I'm interested in that topic, personally :)

@etrigan63
Copy link

It should be possible to get those proportions for the columns, but at the moment there aren't plans to have master and stack functionality in terms of launching windows in specific tiles. There is some appetite to investigate ways of spawning windows but it's not set in the current roadmap. Although, I'm interested in that topic, personally :)

It's not launching windows in specific tiles, it's an automatic layout. There are a couple of ways this can be configured:

LIFO stack - the last app launched is always in the master tile and all previously launched apps are pushed down the stack

or

FIFO stack - the first launched app is always in the master tile and subsequent apps are in the stack.

In hyprland I use the LIFO stack for my desktops.

@GrubBox
Copy link

GrubBox commented Jun 18, 2023

Hi, Is it possible to have some fixed tiling templates 👍 like vertical window layout or a master stack layout. This is the only feature I miss from my i3 when I moved to POPos. I know in POPos I can use the SUPER + O key to do, it but if it was predefined that would be even better 🥇

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants