A while ago I tweaked Sam’s simple animations plug-in for Compiz, mainly so windows I minimized would slide away to match some of my other settings. This was to strike a balance between usability and performance, since none of these effects use alpha blending. During this time I made some jokes about a Spinner Rims plug-in to illustrate how people rev the Compiz engine when they first hop behind the wheel. Oddly enough, I’ve actually had others ask me for this plug-in and had Google Alerts on random forums about it – as if it was real, which perplexes me.
Sometimes applications don’t always (or can’t) describe a window correctly, which can make Compiz use a different animation. For example, when I drag a tab out of Google Chrome it uses my open animation for the window, which really disrupts the feel of drag and drop tabs that otherwise is very elegant. Another example is with generic frameworks like Adobe AIR or Java Swing, where all the widgets are treated the same. How do we work around this?
Luckily, Compiz is well equipped to handle this. You’ll need the Compiz Configuration Settings Manager (CCSM), which I think almost everyone has installed, and it should exist out-of-the-box so users can see how powerful the software really is. In the case of Google Chrome:
- Open CCSM (ALT+F2
ccsmor Preferences/Compiz Configuration Settings Manager) - Click the Animations plugin
- Press the New button underneath the list
- Select None for the animation with the lowest possible duration
- Click the Add icon near the Window Match field
- Click the Grab button and target Chrome (it should give you
class=Chromium-browser)
Make sure this is moved up the list so it overrides any other settings, since it’s specific to Chrome. You can later go back and click the Grab button again and add more windows to the blacklist. Now when you drag tabs in Chrome they won’t be so awkward. After getting used to no opening animation with one application, I ended up disabling them for all. I still use the other animations, but I’ve enjoyed not having any opening animations for non-decoration windows.
"Sometimes applications don’t always (or can’t) describe a window correctly, which can make Compiz use a different animation. For example, …"
Is this not a really big problem? Time and time again I come across programs which don't play nice with Compiz. Sometimes the transparency looks strange because the window doesn't refresh properly. This happens more I think with older software, or commercial applications. I don't think you can expect all users to go into CCSM and add exceptions for all their windows – they'll rather just turn compiz off. Is there an elegant solution to this problem?
Another issue is with programs which minimise to the system tray when they are closed (Amarok does this, Rhythmbox probably does it too). The zooming effects to zoom-to-taskbar for minimising are very good, since they show the user where the window has gone. But it doesn't work with the system tray – compiz assumes the window has been closed and applies the corresponding effect.
I agree, especially with the minimizing problem. I've actually patched it out of Rhythmbox once, but I wasn't interested in jumping through GNOMEs hoops. Compiz is just another window manager (WM) and it can only use the (limited) information given to it. With other WMs, like metacity, they just stack windows without, so most of it goes without notice.
For example, when I patched the Rhythmbox, they where specifically hiding the window with their own timing and manually hiding the window. This should have just been done by telling the WM it's being minimized or closed, but instead they created a problem.
Nobody expects the average user to use CCSM for this kind of thing, and I do classify this as a workaround and in some cases a bugaround. I think the shortcoming right now is that WMs are looking at windows without respect to their state. With my Chrome example, I have to make the sacrifice that Chrome won't have any open animations, since it doesn't care about the state of the application.
Thanks for your comment!