I'm glad to announce that yesterday the kwin-tiling branch was merged into kwin trunk by commit 1118677!. It will be available in KDE SC 4.5. Please keep in mind that it is an experimental feature with rough edges. Bug fixes are already on the way, but some things, like session saving and so on are absent. Please do add feature requests and bugs to the KDE bug tracker. This screencast should show off a few things.
Twitter usually syncs with the (developed) world pretty fast in hashtags. But I'm surprised Copenhagen is not on it. To add some semblance of code: I've been mucking with node.js and some of the effect is simple TagLib bindings with that being used for something more important soon. Much improved ( or rather simplified ) kwin-tiling too with a few regressions like moving and resizing.
With a lot of requests to see tiling in action, I've uploaded my first ever video. Unfortunately I couldn't get my microphone to work. There are also a few glitches, forgive me for that.
kwin-tiling now features dynamic layout switching per desktop. Use Meta+PgUp for Columns and Meta+PgDn for Spiral. Watch the windows change their place on the fly! A few bugs in both the layouts are also fixed. Overall kwin-tiling is pretty stable for now, so give it a whirl and notify me of any bugs you can find. What it still lacks is Xinerama awareness, but otherwise its virtually feature complete for the first release.
Between yesterday and today I made quite a lot of changes in kwin-tiling. Layouts now have a superclass which manages certain things. Each desktop now has its own layout. The root tile is no longer stored directly by the workspace, instead the workspace stores layouts for each desktop. For now each desktop has the Spiral layout, but it should be possible to dynamically change layouts for each desktop a few weeks down the line.
I had this really weird bug in kwin for half a week. When you started resizing windows, all of them would start dancing about the screen. There would be little gaps between them and so on. And I couldn't figure out why. So today I finally tried comparing ( x + width ) and ( right ) of a window. Turns out they are always off by one. So to the QRect::right() documentation:
... now with minimize support. KWin tiling has been proceeding forward at a steady rate. If you check out the latest revision, you will not only have a pretty stable experience, but will also get a design document for free. So orientation is horizontal and vertical, and ratio is how much space the left child gets. Using these two properties I expect to be able to do most layouts.
In the quest to implement tiling in KWin, I've decided to use binary trees as an internal representation. This morning, I hacked on it to produce a decent prototype, just to check if the idea would work well enough, without introducing too much complexity in the code. At the moment, it does tend to crash or have repaint issues once in a while. But it works, and it does what tiling is supposed to do.
Yesterday I committed code which adds a semblance of tiling to kwin. Every time you launch a window, it will be maximized vertically, but each window shares the width of the screen equally. You can check out code from KDE svn. The location is /home/kde/branches/work/kwin-tiling/ You'll need to edit $KDEDIR/share/config/kwinrc and set Placement=Tiling. Then you are ready to go. Right now there are no configuration options, no key bindings, nothing!
I'm home! Till almost the end of July I'll be @ home. Which means a better internet connection at the very least :p So I've been swimming and learning to drive! Driving is fun, I've finished five days out of the 22 and I've managed not to hit anyone or anything. In programming, I'm working on a game using Canvas for the CodeChef game contest. You can track its progress on github.
*Note to my normal blog readers, this post may not be of interest to you Abstract: This project will add a tiling layout mode to KWin. Tiling window managers displays all windows on the desktop at once, side by side. This allows easy navigation and allows tasks shared across applications to be carried out effortlessly. Unfortunately it is usually presented as a power user option. This will be an attempt to make it more accessible to new users.