Ok commandos, you’ve been asking for it all week

Everyone seemed concerned about window previews in the alt-tab dialog…

20 minutes coding, 30 lines of code added, this composite lark is easy (yeah, right…). Not committed yet, a few bugs remain (note the glitches in the Gossip window corners and the terminal window doesn’t get previewed yet, and obviously the scaling), but I’m confident I’ll be committing it soon.

Changes since the last blog entry: Fix weird crashes at startup, correctly mark screens as having a composite manager, and do drawings on an idle function so that we can compact redraw operations.

To answer some questions that came up in the comments last time round:

* No, you don’t need 3D acceleration for this compositor, so cards with sucky GL will be able to use it. You will however need a good  and fast XRender implementation. I’m using the both the binary NVidia driver and the opensource Intel driver. The NVidia driver works well, the Intel one (as shipped by Gutsy) works ok, but CPU usage can get high. I’ve been told the Fiesty Intel driver is quite slow.

* Yes, we can have window previews :)

* When I talked about people wanting translucent windows, I meant more that people wanted some parts of windows to be able to be translucent, which is used for things like AWN and cairo-clock stuff. I don’t really see the point of windows which are all transparent (although I did see a friend using some photo editor on the Mac tonight that had translucent dialogs, seemed a bit weird though. . . )

2007-11-17: some releases and some discussions

Two point releases out: development 2.21.2 and stable 2.20.1. Federico’s patch went into both, since it fixed a regression; Benjamin’s patch went into the development release.

It is hard to think of a shorter way to say “Make this window follow me when I change workspaces”.

Alex Turner provided a patch to make urgent windows on other workspaces appear in the alt-Tab popup, since they already appear in the pager. The patch wasn’t quite in time for 2.21.2, but should be in 2.21.3 if all goes well. So should a first attempt at merging Iain’s compositor branch, if everyone is happy about it.

Marcus Lundblad points out that the double-click to close patch doesn’t apply to trunk any more; Thomas promised to fix it and therefore will, but perhaps not until things calm down a little. Maybe when we get into freeze.

Iain’s compositing post continued to be the scene of much discussion.

Photo: The King Harry, St Albans. Photo by Gary Houston, public domain.

2.21.2 is out

Thanks to Benjamin Gramlich, Thomas Thurman, and Peter Bloomfield for improvements in this release.

  • Theme parser is compliant to XDG Base Directory Specification in searching for theme files. (Benjamin)
    (GNOME bug #480026)
  • Some source files which didn’t get used were removed (Thomas)
    (GNOME bug #496947)
  • Fullscreen and maximise windows don’t try to save their position (Peter)
    (GNOME bug #461927)

Translations: Matej Urbančič (sl).

Source downloads from the usual place; md5sums are:
0579a8b5df6faeb647607086d0d8dc09 metacity-2.21.2.tar.bz2
591225ba7b04d85176385ff50f940653 metacity-2.21.2.tar.gz

Photo: Ver valley. Photo by Gary Houston; public domain.

Metacity 2.20.1 is out

Metacity 2.20.1 is out, with some regression fixes and various other improvements.

Thanks to Alex Turner, Jens Granseuer, Owen Taylor, Federico Mena Quintero, and Elijah Newren for improvements in this release.

  • Fix markup parsing problems with long titles for the alt-tab popup (Alex) [#360274]
  • Fix memory leak in widget previewer (Jens) [#469682]
  • Don’t immediately unminimize an initially iconic window (Owen) [#491090]
  • Fix argument reversal breaking timestamp retreival and focus stealing prevention (Federico) [#488468]
  • Improve heuristic for focus stealing prevention with transients when no timestamp is available (Elijah) [#488468]

Translations
Djihed Afifi (ar), Metin Amiroff (az), Alexander Shopov (bg), Jordi Mallach (ca), David Lodge (en_GB), Jorge González (es), Iñaki Larrañaga Murgoitio (eu), Alastair McKinstry (ga), Ankit Patel (gu), Rajesh Ranjan (hi), “Last-Translator: auto\n” (hr), Changwoo Ryu (ko), Raivis Dejus (lv), Wouter Bolsterlee (nl), Gora Mohanty (or), ASB (pa), wadim dziedzic (pl), Og Maciel (pt_BR), Duarte Loreto (pt), Peter Tuhársky (sk), Maxim Dziumanenko (uk), Funda Wang (zh_CN)

2007-11-16: “Higher standards of elegance”

There was some discussion over the option on the window menu which controls the attribute known to the developers as “stick”. This makes the window follow you around when you move workspaces; it’s useful, for example, to keep a clock applet always in the corner. Some people think that the window menu should have two options for this, and some people think that that is a waste of space, and not elegant, and rather it should just have one option which toggles. In that case, however, it’s not very clear how to word it: someone has suggested “Always on current workspace”, but what does it mean when that’s turned off? “Never on current workspace”? “Sometimes on current workspace”? The Human Interface people were helpful here.

Speaking of human interfaces, apparently now if you select the High Contrast Inverse theme, Metacity colours certain icons on the window menu a tasteful shade of black on navy. I think we need to get to that soon before Trinny and Susannah track us down.

Some people on Launchpad would like to be able to resize by dragging using mouse buttons other than the standard ones, because they don’t have a middle button.

And Benjamin submitted a patch for the theme directories problem which (informally) looks good. Unless anything particularly odd shows up in it, it should go into the next release, expected some time early tomorrow morning Greenwich time.

Photo: The Crown, St Albans. Photo by Gary Houston, public domain.

2007-11-15: xterm, glib, api

xterm has a habit of padding the bottom of the screen in unsightly ways, apparently (your chronicler always uses gnome-terminal). It was suggested that this might be solvable in metacity, but it’s not at all clear how the details would work. (Finding the bugs where this was discussed before would be useful.) Havoc pointed out that xterm is as patchable as metacity is.

Benjamin Gramlich submitted another version of his well-written theme-finding patch, only to have Havoc suggest that g_get_system_data_dirs() would do a lot of the work for him; Benjamin is now away rewriting the patch in terms of that function.

Thomas deleted api.[ch] because it was never used.

Your comments and suggestions about any of these, or anything else related to window management, are welcomed. As the header now says:

There will be links to discussions, and you should feel free to dive in. We might link to Bugzilla discussions, discussions on the various downstream trackers such as launchpad, news coverage, or random blogs. (If you mention Metacity in your blog, we will get to hear about it, and we might link it and discuss what you say.)

Today in the blogosphere, Harsh shares how to turn off the window minimise animation using gconf-editor, Opera Omnia told us that Metacity was not at all outdated, and elsewhere there’s some more talk from people who are switching back to Metacity from the default window manager in Ubuntu Gutsy: László at length on why he’s doing so and Magpie on how to do it (I believe there are actually easier ways, but I’m not currently running Gutsy, so I don’t like to comment).

A development point release is planned for Sunday (but might happen on Saturday, depending on workload).

Photo: The Rat’s Castle, St Albans. Photo by Gary Houston, public domain.

Adventures in Compositation Land

As Thomas said, I’ve been working on hacking about with a compositor in Metacity recently. All I’ve really done is to take xcompmgr.c by Keith Packard and worked it into Metacity, so I’m not claiming that I really wrote the compositor, more massaged an already existing one into shape. The code is at http://svn.gnome.org/viewvc/metacity/branches/iains-blingtastic-bucket-o-bling/ and it seems to work reasonably well on my desktop (Nvidia), but not so well on the laptop (Intel), so you might be lucky. Its not perfectly stable, but I’ll track down the problems soon I’m sure. Everyone loves a screenshot:

With that out of the way, I thought I’d explain a little about compositing and what my plans are.

What is compositing anyway?

When people talk about compositing they seem to think about vibbly vindows, desktops laid out hendecagonally which spin around, fish swimming behind windows and eating windows and other stupid effects who’s only purpose is for you to play with in conferences so the people sitting behind you have something to watch instead of listen to the boring talk. These are all things made possible due to compositing, but they are byproducts if you will. You can only have the effects if you have compositing, but you don’t have to have the effects to have compositing. And it is this barebones compositor I’ve put into Metacity.

Compositing at its simplest is a program telling the Xserver not to draw the windows anymore because the program wants to do it instead. So now X doesn’t draw the window to the screen, but to a backing store pixmap which the compositor program then draws on the screen. It makes sense for this compositing program to be the window manager, because it already knows all about screens and displays and what window goes where when. . . etc, but it does not need to be (e.g. xcompmgr).

The trick is that when the compositor comes to draw the window’s backing pixmap to the screen it can really do whatever it wants with it. It can paint it backwards, or with a red tint, or just simply paint it normally to the screen. Compositors like Compiz draw the window onto GL textures and then are able to do 3D transforms on them. The compositor in Metacity just draws it to the screen using the XRender extension.

What can we do with a plain compositor?

Well, just because the windows aren’t rendered into a 3D scene doesn’t mean it isn’t useful. Metacity was a designed as a simple window manager that concentrated on managing windows well. Its design ethos doesn’t stretch to being configured in every minute detail. And in my opinion, a simple compositor based on XRender fits in well. Most people I have spoken to want two things from a compositor. They want translucent windows[1] and drop shadows.

What does the future hold?

All metacity’s compositor needs to do is draw windows to the screen and draw a drop shadow around them, and I think its doing that pretty well at the moment. There are some rendering glitches (mostly in dealing withTrans windows) and some crashes, but it is getting there. There are a few other things that the compositor could do but most of the usefulness of a compositor comes from when the programs running on the desktop start to become aware of the compositor’s presence. In the above screenshot the volume control OSD changes design when there is a compositor and draws itself in a translucent design and can fade in and out. The gnome-terminal switches to real transluceny when running on a composited desktop. I have a patch for Metacity that turns the alt-tab dialog translucent with a compositor

Metacity could use the presence of a compositor to do other tricks as well…the icons in the alt-tab dialog could be replaced with window previews (because we can get the backing store pixmap to use anywhere we want), Nautilus’ desktop could be completely transparent meaning we could stop having to draw a huge image on both the desktop window and on the root window and the task switcher could show a popup of the real window. The list is endless. Maybe when I’m feeling up to it I’ll write a “So you want your application to look cool when a compositor is running” tutorial type affair. Maybe. I might be busy.

[1] There are two types of translucent windows: windows which have some area painted with an alpha value (an example of this would be a translucent gnome-terminal, only the text area has an alpha value), and windows that are normally completely opaque but have had their opacity lowered somehow. The former is controlled by the program for artistic measure, the latter is controlled outside of the program and more for an effect (e.g. lower the opacity of all dialog windows to 75%) as it affects all the elements of the window (as well as the frame).

Internally the first type are called ARGB windows, and the second type are Trans windows. Currently the Metacity compositor supports both, but there is no way to set the opacity of the Trans windows. There maybe at some point, who knows?

2007-11-14: a quieter day than usual

The VintrySome helpful Ubunteros came and fixed Thomas’s laptop, which meant that Benjamin’s patch got reviewed (good work there), and also that the question was raised about what api.[ch] are good for.

Most of the checkin activity today was from Iain Holmes with his new compositor rewrite (or, as he has called the branch, the Bling-Tastic Bucket o’Bling). I am hugely excited about this; I hope Iain will write about his experiences here later.

On Launchpad, a discussion has been going on about whether it should be possible to set the width of window borders in general rather than its being down to the theme. Having too-narrow window borders makes resizing windows difficult, but some people don’t like the way it looks. This briefly spilled over into GNOME Bugzilla. It would seem to be a good plan to ask people to make default themes have large borders.

Alex Turner identified a place where the code could be made clearer and more easily optimised by the compiler, which seems promising.

A few months back, Matt Harley wrote a post about why he’s running Metacity rather than Compiz, which should be interesting reading for the future if we want to know why people choose Metacity rather than any other way of managing their desktop. Gentle reader, if you do, why do you use Metacity?

Photo: The Vintry, St Albans. Photo by Gary Houston, public domain.

Version numbers (and automatic hyperlinking)

A short note about Metacity’s version numbers: they are of the form major.minor.point, as with most software these days. “major.minor” tracks the GNOME release they belong to; thus major will probably be 2 indefinitely and minor will increase by 2 every six months, using the convention laid down by the Linux kernel of using the odd number as the unstable branch and the even number one lower as the stable version into which only bugfixes will go. The first version of Metacity was version 2.3.

The point numbers mark individual releases; they iterate over the Fibonacci series, beginning at F2. (The point numbers of GNOME as a whole iterate over the natural numbers.) There should be at least one Metacity release just before each GNOME release, and at least one every fortnight or so. The main version currently under development (“trunk”, in Subversion language) identifies itself with the version number of the next unstable point release.

Automatic hyperlinking: I will be writing a script which takes text about the day and posts it here. As part of that, I would like to hyperlink names of contributors (including translators!) If you’re likely to be mentioned here and you have a website, let me know what it is.

2007-11-13: largely about raise-on-click

Duke of Marlborough, St AlbansMore Metacity goings-on for 13th November. Apparently, for some people, no window has focus immediately after login, which causes screen readers to get confused. This has the potential to be an interesting bug, because it concerns the interaction of Metacity, X, and screen reader software, any of which might have been customised in interesting ways for a particular distribution. The original reporter says he won’t be able to follow up for a few weeks, though.

Unfullscreening windows which believe themselves to be as big as the screen anyway causes a workaround to be triggered and the window is returned to the fullscreen state; this is a regression from 2.18. Thomas is looking into it (though not very immediately because of a broken laptop).

Peter Bloomfield committed his fix that windows should not remember their positions while maximised.

Some small amount of raise-on-click controversy. There is an idea that which windows get put on top should be between a user and their window manager, and in particular that applications should not get to force this on people. This gets patched downstream— a lot– and there is a general policy that things which get patched all the time downstream should be patched upstream too. Some people are asking for changes in the way this alteration is made; the present writer is not on top of all the issues and should probably not attempt to explain just at the moment. Also, the historical lack of a unique-app ability in gtk is causing authors to use workarounds which then break WM standards (and again).

Someone complained that metacity does not set focus when it is forcibly killed; the reason anyone would care about this turned out to be that another program called ROX-Session has a method of setting the window manager involving killing the old window manager, whereupon a dialogue comes up asking which new one you’d like. Of course, by that time, you can’t switch to the new one anyway because you have no window manager.

The previous discussion about unidirectional maximisation slowed down a bit, with a discussion of code rot in alternative patches which aren’t (or aren’t yet) accepted into trunk. (The grandfather example of this is probably the double-click to close patch.)

Thomas’s patch review plan continues with a promise to review this patch about the location of user themes, but, again, the broken laptop has put that on hold for a few days.

Photo: Duke of Marlborough, St Albans. Photo: Gary Houston, public domain.

Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported.