Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
K
kwin-tiling
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Christian Bay
kwin-tiling
Commits
67e1c684
Commit
67e1c684
authored
11 years ago
by
Fabian Homborg
Browse files
Options
Downloads
Patches
Plain Diff
Update design document
parent
2545f8b5
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
doc/design.txt
+25
-8
25 additions, 8 deletions
doc/design.txt
with
25 additions
and
8 deletions
doc/design.txt
+
25
−
8
View file @
67e1c684
...
...
@@ -6,29 +6,36 @@ design decisions and a coarse description of the design.
Goals:
* A functional tiling window management extension for kwin
* Automatic layouts should be supported:
* Spiral layout
* Two columns/rows
* Spiral layout (SpiralLayout)
* Two columns/rows (HalfLayout)
* Rows only (BladeLayout)
* Regular grid?
* ...
* Different layouts for different desktops/screens
* A number of different layouts as well as a possibility to disable tiling for
a certain screen/desktop combination
* The possibility to make some windows floating (remove them from the layout)
Both with a keybinding and a menu entry
* Tab groups should be handled correctly (a complete tab group forms one tile)
* Individual windows should be resizable and the whole layout should be updated
accordingly
* Windows should be selected and moved/resized in the layout and between
screens and desktops using the keyboard or the mouse
* Tiled windows should always be drawn below floating ones
* Window borders should maybe be reduced (like with maximized windows) when
being tiled, or should be completely hidden with a shortcut to show the
title bar of the active window (possibly configurable?)
and fullscreen windows should always be on top
* Window borders can be disabled when being tiled,
and can be reactivated per-window with a shortcut
* Some windows cannot be tiled properly (dialogs, non resizable windows, etc.),
those should automatically be made floating.
This can be configured (by window-class currently), and there is one app-specific workaround for steam
as it doesn't set the window-class or type (dialog etc) properly
** Also keep a configurable list with sensible defaults (nobody wants yakuake to float)
* Multiscreen setups should work correctly
* Activities are a distant TODO
Design decisions:
* TODO
* tiled windows at the bottom, floating windows over that, fullscreen or maximized windows on top (may add options on request)
* floating or fullscreen windows aren't kept track of in the script
Design description:
* TileList: KWin doesn't give us any information about tab groups, so we have
...
...
@@ -36,6 +43,7 @@ Design description:
all clients in a tab. This information needs to be kept up-to-date on tab
group changes as well. The code related to this is in tilelist.js which
contains a class which keeps track of all tab groups in the system.
This is where newly opened windows are first added.
* Tile: Various window signals (resizing, moving, maximizing etc.) have to be
reacted to, this class binds handlers to these signals and filters them as
necessary (e.g. intermediate steps in a resize operation are not interesting
...
...
@@ -46,7 +54,16 @@ Design description:
a different tile. The different kinds of layouts are classes derived from
this class.
Floating windows are _not_ handled in layouts or tiles.
* Tiling: The main class which contains a list of the current layouts (one per
* Tiling
Manager
: The main class which contains a list of the current layouts (one per
screen/desktop combination) and which registers global keyboard shortcuts and
some global events (e.g. screen count changes).
* The layout switcher is implemented in QML.
* Tiling (also referenced as "Layout" in TilingManager): This is essentially one desktop per screen and makes changing layouts at runtime possible
* There is currently no layout switcher (but it could be implemented in QML).
The class relationship as cool ASCII-Art:
TilingManager
/ \
Tiling TileList
/ \ /
Layout Tile
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment