<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>be careful, he might break your display</title>
	<atom:link href="http://smspillaz.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://smspillaz.wordpress.com</link>
	<description>known bugs: making your face asplode</description>
	<lastBuildDate>Fri, 27 Jan 2012 06:11:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='smspillaz.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>be careful, he might break your display</title>
		<link>http://smspillaz.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://smspillaz.wordpress.com/osd.xml" title="be careful, he might break your display" />
	<atom:link rel='hub' href='http://smspillaz.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Apology</title>
		<link>http://smspillaz.wordpress.com/2011/12/25/apology-2/</link>
		<comments>http://smspillaz.wordpress.com/2011/12/25/apology-2/#comments</comments>
		<pubDate>Sun, 25 Dec 2011 04:58:14 +0000</pubDate>
		<dc:creator>smspillaz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://smspillaz.wordpress.com/2011/12/25/apology-2/</guid>
		<description><![CDATA[Hi, Over the past few years, I have promised a new direction for the compiz project. I promised that with the new backing we&#8217;d see a revival in development, and increased stability. I have failed. I have failed the compiz &#8230; <a href="http://smspillaz.wordpress.com/2011/12/25/apology-2/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smspillaz.wordpress.com&amp;blog=1094742&amp;post=868&amp;subd=smspillaz&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Hi,</p>
<p>Over the past few years, I have promised a new direction for the compiz project. I promised that with the new backing we&#8217;d see a revival in development, and increased stability.</p>
<p>I have failed.</p>
<p>I have failed the compiz community.</p>
<p>I have failed the Ubuntu community.</p>
<p>I have failed the previous maintainers.</p>
<p>Despite my best efforts, stability has gotten worse, and I feel as though I can&#8217;t even get the simplest things right for the project anymore.</p>
<p>Perhaps things will get better, perhaps things will get worse. I would only hope that the project can attract some of the people it needs in order to keep it alive as it once was, or can solidify on a new direction.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/smspillaz.wordpress.com/868/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/smspillaz.wordpress.com/868/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/smspillaz.wordpress.com/868/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/smspillaz.wordpress.com/868/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/smspillaz.wordpress.com/868/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/smspillaz.wordpress.com/868/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/smspillaz.wordpress.com/868/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/smspillaz.wordpress.com/868/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/smspillaz.wordpress.com/868/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/smspillaz.wordpress.com/868/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/smspillaz.wordpress.com/868/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/smspillaz.wordpress.com/868/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/smspillaz.wordpress.com/868/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/smspillaz.wordpress.com/868/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smspillaz.wordpress.com&amp;blog=1094742&amp;post=868&amp;subd=smspillaz&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://smspillaz.wordpress.com/2011/12/25/apology-2/feed/</wfw:commentRss>
		<slash:comments>304</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/27ecfada6258e22f92da0c5c9ffafd47?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">smspillaz</media:title>
		</media:content>
	</item>
		<item>
		<title>This is an important announcement</title>
		<link>http://smspillaz.wordpress.com/2011/10/30/this-is-an-important-announcement/</link>
		<comments>http://smspillaz.wordpress.com/2011/10/30/this-is-an-important-announcement/#comments</comments>
		<pubDate>Sun, 30 Oct 2011 08:04:37 +0000</pubDate>
		<dc:creator>smspillaz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://smspillaz.wordpress.com/2011/10/30/this-is-an-important-announcement/</guid>
		<description><![CDATA[<a href="http://smspillaz.wordpress.com/2011/10/30/this-is-an-important-announcement/"><img src="http://smspillaz.wordpress.com/files/2011/10/2011-10-30-17-46-48.jpg" alt="This is an important announcement" class="size-full wp-image-843" /></a><p>"So uh, apparently we're not allowed to work. Sorry about that?"

"P.S: We're kicking you off the plane"</p> <a href="http://smspillaz.wordpress.com/2011/10/30/this-is-an-important-announcement/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smspillaz.wordpress.com&amp;blog=1094742&amp;post=844&amp;subd=smspillaz&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://smspillaz.wordpress.com/2011/10/30/this-is-an-important-announcement/"><img src="http://smspillaz.files.wordpress.com/2011/10/2011-10-30-17-46-48.jpg?w=640" alt="This is an important announcement" class="size-full wp-image-843" /></a>
<p>&#8220;So uh, apparently we&#8217;re not allowed to work. Sorry about that?&#8221;</p>
<p>&#8220;P.S: We&#8217;re kicking you off the plane&#8221;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/smspillaz.wordpress.com/844/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/smspillaz.wordpress.com/844/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/smspillaz.wordpress.com/844/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/smspillaz.wordpress.com/844/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/smspillaz.wordpress.com/844/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/smspillaz.wordpress.com/844/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/smspillaz.wordpress.com/844/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/smspillaz.wordpress.com/844/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/smspillaz.wordpress.com/844/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/smspillaz.wordpress.com/844/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/smspillaz.wordpress.com/844/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/smspillaz.wordpress.com/844/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/smspillaz.wordpress.com/844/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/smspillaz.wordpress.com/844/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smspillaz.wordpress.com&amp;blog=1094742&amp;post=844&amp;subd=smspillaz&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://smspillaz.wordpress.com/2011/10/30/this-is-an-important-announcement/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/27ecfada6258e22f92da0c5c9ffafd47?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">smspillaz</media:title>
		</media:content>

		<media:content url="http://smspillaz.files.wordpress.com/2011/10/2011-10-30-17-46-48.jpg" medium="image">
			<media:title type="html">This is an important announcement</media:title>
		</media:content>
	</item>
		<item>
		<title>Flicker-free compositor replaces</title>
		<link>http://smspillaz.wordpress.com/2011/10/08/flicker-free-compositor-replaces/</link>
		<comments>http://smspillaz.wordpress.com/2011/10/08/flicker-free-compositor-replaces/#comments</comments>
		<pubDate>Sat, 08 Oct 2011 12:02:23 +0000</pubDate>
		<dc:creator>smspillaz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://smspillaz.wordpress.com/?p=838</guid>
		<description><![CDATA[If you develop compiz or write compiz plugins or just like to mess around with compiz settings, you&#8217;ll have probably gotten used to doing compiz &#8211;replace ccp over and over again. It&#8217;s not really all that harmful, but there that &#8230; <a href="http://smspillaz.wordpress.com/2011/10/08/flicker-free-compositor-replaces/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smspillaz.wordpress.com&amp;blog=1094742&amp;post=838&amp;subd=smspillaz&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>If you develop compiz or write compiz plugins or just like to mess around with compiz settings, you&#8217;ll have probably gotten used to doing <em>compiz &#8211;replace ccp</em> over and over again. It&#8217;s not really all that harmful, but there that ugly flashing of everything that goes on as all the windows are unreparented, reparented, unredirected and redirected. This doesn&#8217;t just happen in cases where you are restarting your window manager, it also happens on login and logout too.</p>
<p>It&#8217;s 2011, there&#8217;s no reason why we should have to put up with this anymore, especially if today&#8217;s hardware and hardware from 6 years ago is more than capable of always compositing. The question is how to handle the movements between compositors. It doesn&#8217;t make any sense to use compiz for lightdm/gdm/kdm or when you are logging out. However it does make sense to use a lightweight compositor which can hold the image of your screen in place. With compositing happening all the way, it should be possible to have a way for each compositor to hand-off to each other such that the user never sees a flicker as windows are redirected and unredirected.</p>
<p>This is where the proposed <strong>_NET_CM_HANDOFF</strong> specification comes into place. It provides a very rudimentary protocol for compositors to handle management and unmanagement while ensuring that the user doesn&#8217;t see what&#8217;s going on, so all the user sees is a brief freeze of their screen as the new compositor takes over from the old one. For example:</p>
<span style="text-align:center; display: block;"><a href="http://smspillaz.wordpress.com/2011/10/08/flicker-free-compositor-replaces/"><img src="http://img.youtube.com/vi/P8Dsy3UOfZQ/2.jpg" alt="" /></a></span>
<p>In that example, the compositor is actually being completely restarted, but the old compositor stays around just long enough to ensure that the new compositor can take over from where it left off. This will be useful in the case of, eg, login, where lightdm can implement a simple compositor and compiz can take over from lightdm when it is ready to draw and smoothly fade-through or even have a cube-effect or something like that to signify that the login is done.</p>
<p>Just a nice touch for a day&#8217;s worth of hacking <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>edit:</strong> totally forgot about the code: https://code.launchpad.net/~smspillaz/+junk/handoff</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/smspillaz.wordpress.com/838/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/smspillaz.wordpress.com/838/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/smspillaz.wordpress.com/838/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/smspillaz.wordpress.com/838/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/smspillaz.wordpress.com/838/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/smspillaz.wordpress.com/838/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/smspillaz.wordpress.com/838/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/smspillaz.wordpress.com/838/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/smspillaz.wordpress.com/838/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/smspillaz.wordpress.com/838/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/smspillaz.wordpress.com/838/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/smspillaz.wordpress.com/838/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/smspillaz.wordpress.com/838/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/smspillaz.wordpress.com/838/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smspillaz.wordpress.com&amp;blog=1094742&amp;post=838&amp;subd=smspillaz&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://smspillaz.wordpress.com/2011/10/08/flicker-free-compositor-replaces/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/27ecfada6258e22f92da0c5c9ffafd47?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">smspillaz</media:title>
		</media:content>
	</item>
		<item>
		<title>The ones who are crazy enough to think that they can change the world</title>
		<link>http://smspillaz.wordpress.com/2011/10/06/the-ones-who-are-crazy-enough-to-think-that-they-can-change-the-world/</link>
		<comments>http://smspillaz.wordpress.com/2011/10/06/the-ones-who-are-crazy-enough-to-think-that-they-can-change-the-world/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 06:34:19 +0000</pubDate>
		<dc:creator>smspillaz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://smspillaz.wordpress.com/?p=836</guid>
		<description><![CDATA[Are the ones who do.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smspillaz.wordpress.com&amp;blog=1094742&amp;post=836&amp;subd=smspillaz&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Are the ones who do.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/smspillaz.wordpress.com/836/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/smspillaz.wordpress.com/836/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/smspillaz.wordpress.com/836/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/smspillaz.wordpress.com/836/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/smspillaz.wordpress.com/836/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/smspillaz.wordpress.com/836/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/smspillaz.wordpress.com/836/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/smspillaz.wordpress.com/836/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/smspillaz.wordpress.com/836/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/smspillaz.wordpress.com/836/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/smspillaz.wordpress.com/836/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/smspillaz.wordpress.com/836/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/smspillaz.wordpress.com/836/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/smspillaz.wordpress.com/836/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smspillaz.wordpress.com&amp;blog=1094742&amp;post=836&amp;subd=smspillaz&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://smspillaz.wordpress.com/2011/10/06/the-ones-who-are-crazy-enough-to-think-that-they-can-change-the-world/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/27ecfada6258e22f92da0c5c9ffafd47?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">smspillaz</media:title>
		</media:content>
	</item>
		<item>
		<title>Critical Bug</title>
		<link>http://smspillaz.wordpress.com/2011/09/29/critical-bug/</link>
		<comments>http://smspillaz.wordpress.com/2011/09/29/critical-bug/#comments</comments>
		<pubDate>Thu, 29 Sep 2011 08:59:21 +0000</pubDate>
		<dc:creator>smspillaz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://smspillaz.wordpress.com/?p=824</guid>
		<description><![CDATA[I was having a discussion with marnanel yesterday about bugs. He then asked me some questions: 21:43 &#60;marnanel&#62; c) do you actually ever sleep? To which I replied c) no Because I&#8217;m a mad hacker like that. And I was also &#8230; <a href="http://smspillaz.wordpress.com/2011/09/29/critical-bug/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smspillaz.wordpress.com&amp;blog=1094742&amp;post=824&amp;subd=smspillaz&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I was having a discussion with<a href="http://blogs.gnome.org/metacity/"> marnanel</a> yesterday about bugs. He then asked me some questions:</p>
<pre>21:43 &lt;marnanel&gt; c) do you
                 actually ever sleep? <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </pre>
<p>To which I replied</p>
<pre style="padding-left:30px;">c) no</pre>
<p>Because I&#8217;m a mad hacker like that. And I was also on a bug fixing rampage that night and got about 12 bugs that day. Awesome. But then weird stuff started to happen. Like:</p>
<p><a href="http://smspillaz.files.wordpress.com/2011/09/screenshot-at-2011-09-29-165032.png"><img class="aligncenter size-full wp-image-825" title="Screenshot at 2011-09-29 16:50:32" src="http://smspillaz.files.wordpress.com/2011/09/screenshot-at-2011-09-29-165032.png?w=640&#038;h=42" alt="" width="640" height="42" /></a>Uhh. Right. Probably fake.</p>
<p>So I&#8217;m going through my list of bugs today and I see something new, a [regression]. Uh, oh</p>
<p><a href="http://smspillaz.files.wordpress.com/2011/09/screenshot-at-2011-09-29-165412.png"><img class="aligncenter size-full wp-image-826" title="Screenshot at 2011-09-29 16:54:12" src="http://smspillaz.files.wordpress.com/2011/09/screenshot-at-2011-09-29-165412.png?w=640&#038;h=797" alt="" width="640" height="797" /></a></p>
<p>Then I&#8217;m thinking, uhhh, that&#8217;s actually a thing?</p>
<p><strong>UPDATE: There&#8217;s a <a href="https://launchpad.net/~smspillazs-mom">launchpad page</a> for my mom!</strong></p>
<p><a href="http://smspillaz.files.wordpress.com/2011/09/screenshot-at-2011-09-29-165547.png"><img class="aligncenter size-full wp-image-827" title="Screenshot at 2011-09-29 16:55:47" src="http://smspillaz.files.wordpress.com/2011/09/screenshot-at-2011-09-29-165547.png?w=640&#038;h=730" alt="" width="640" height="730" /></a>Uh, oh</p>
<p><a href="http://smspillaz.files.wordpress.com/2011/09/screenshot-at-2011-09-29-165650.png"><img class="aligncenter size-full wp-image-828" title="Screenshot at 2011-09-29 16:56:50" src="http://smspillaz.files.wordpress.com/2011/09/screenshot-at-2011-09-29-165650.png?w=640" alt=""   /></a><a href="http://smspillaz.files.wordpress.com/2011/09/screenshot-at-2011-09-29-165714.png"><img class="aligncenter size-full wp-image-829" title="Screenshot at 2011-09-29 16:57:14" src="http://smspillaz.files.wordpress.com/2011/09/screenshot-at-2011-09-29-165714.png?w=640" alt=""   /></a><a href="https://bugs.launchpad.net/compiz/+bug/861710">Eep.</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/smspillaz.wordpress.com/824/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/smspillaz.wordpress.com/824/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/smspillaz.wordpress.com/824/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/smspillaz.wordpress.com/824/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/smspillaz.wordpress.com/824/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/smspillaz.wordpress.com/824/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/smspillaz.wordpress.com/824/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/smspillaz.wordpress.com/824/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/smspillaz.wordpress.com/824/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/smspillaz.wordpress.com/824/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/smspillaz.wordpress.com/824/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/smspillaz.wordpress.com/824/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/smspillaz.wordpress.com/824/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/smspillaz.wordpress.com/824/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smspillaz.wordpress.com&amp;blog=1094742&amp;post=824&amp;subd=smspillaz&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://smspillaz.wordpress.com/2011/09/29/critical-bug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/27ecfada6258e22f92da0c5c9ffafd47?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">smspillaz</media:title>
		</media:content>

		<media:content url="http://smspillaz.files.wordpress.com/2011/09/screenshot-at-2011-09-29-165032.png" medium="image">
			<media:title type="html">Screenshot at 2011-09-29 16:50:32</media:title>
		</media:content>

		<media:content url="http://smspillaz.files.wordpress.com/2011/09/screenshot-at-2011-09-29-165412.png" medium="image">
			<media:title type="html">Screenshot at 2011-09-29 16:54:12</media:title>
		</media:content>

		<media:content url="http://smspillaz.files.wordpress.com/2011/09/screenshot-at-2011-09-29-165547.png" medium="image">
			<media:title type="html">Screenshot at 2011-09-29 16:55:47</media:title>
		</media:content>

		<media:content url="http://smspillaz.files.wordpress.com/2011/09/screenshot-at-2011-09-29-165650.png" medium="image">
			<media:title type="html">Screenshot at 2011-09-29 16:56:50</media:title>
		</media:content>

		<media:content url="http://smspillaz.files.wordpress.com/2011/09/screenshot-at-2011-09-29-165714.png" medium="image">
			<media:title type="html">Screenshot at 2011-09-29 16:57:14</media:title>
		</media:content>
	</item>
		<item>
		<title>Braindump: How to get window stacking right</title>
		<link>http://smspillaz.wordpress.com/2011/09/18/braindump-how-to-get-window-stacking-right/</link>
		<comments>http://smspillaz.wordpress.com/2011/09/18/braindump-how-to-get-window-stacking-right/#comments</comments>
		<pubDate>Sun, 18 Sep 2011 17:25:49 +0000</pubDate>
		<dc:creator>smspillaz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://smspillaz.wordpress.com/?p=819</guid>
		<description><![CDATA[WARNING: This post is a braindump. It&#8217;s highly technical in nature and not anything particularly newsworthy for regular users. If you don&#8217;t want your brain to hurt after reading this then I suggest not reading it. Otherwise, if you&#8217;re a &#8230; <a href="http://smspillaz.wordpress.com/2011/09/18/braindump-how-to-get-window-stacking-right/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smspillaz.wordpress.com&amp;blog=1094742&amp;post=819&amp;subd=smspillaz&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>WARNING: This post is a braindump. It&#8217;s highly technical in nature and not anything particularly newsworthy for regular users. If you don&#8217;t want your brain to hurt after reading this then I suggest not reading it. Otherwise, if you&#8217;re a brain-pain junkie, then by all means, please, read this blog post</strong></p>
<p>Ok, with that out of the way, it&#8217;s time to explain to dearest reader about the nightmare that is getting window stack order right in a window manager.</p>
<p>So basically over the past two weeks I&#8217;ve been asked to focus on one thing and one thing only, which is <a href="https://bugs.launchpad.net/compiz-core/+bug/845719">bug 845719</a> which out of two weeks of solid toil, overtime and other stressful things has resulted in the 3000 line diff in <a href="https://code.launchpad.net/~compiz-team/compiz-core/compiz-core.stack_sync_fix">this branch</a> which will probably be merged upstream next week after we&#8217;ve finished doing internal testing on it (but the test results so far are promising, there&#8217;s only one problem case so far that&#8217;s come up which I need to look into, but its quite rare and I can probably look at it after this branch is merged).</p>
<p>So for those of you who don&#8217;t know what the &#8220;stacking bug&#8221; is, it&#8217;s basically the most annoying bug in the entire universe, in three ways:</p>
<ol>
<li>It&#8217;s really annoying for users because either one of the two things will happen:</li>
<ol>
<li>Some window gets an invalid stack position and usually either ends up either below everything (inviewable and not usable) or above everything, which is usually not a problem except that in Unity the panel, launcher, dash and alt-tab are all painted on the same level for a very dull technical reason I won&#8217;t get into and all of these views will appear painted underneath the window that got the invalid stack position. In addition, any window that is restacked relative to this window with an invalid stack position will *also* receive an invalid stack position as compiz processes the window stack top-down so if you try and raise another window the problem gets worse until everything is in the wrong order! OR</li>
<li>Something happens where compiz doesn&#8217;t process an event from the X Server correctly or processes it in the wrong order and then compiz and the server disagree on what the stacking order actually is, which means that windows are painted in a different order than what the stacking order is on the server side, which means fun stuff like click through windows raising windows beneath them</li>
</ol>
<li>It&#8217;s really annoying to debug because often what happens is that problems which manifest themselves to the user are usually just as a result of valid stacking operations done relative to an invalid stacking operation done long before the problems actually started manifesting themselves, which means that it is almost impossible to trace down the origin of the problem. In addition, there are also times when the server side stack and the compiz side stack are meant to be out of sync, which means that it is difficult to tell false positives apart from actual bugs. Slightly unrelated but still annoying is that X11 provides no way to debug the source of events or match events to requests which means that you&#8217;re pretty much on your own when you have to find out where an event that is causing problems is coming from.</li>
<li>It&#8217;s really annoying in development because it is a very common regression &#8211; basically if you touch anything that is related to the event handling code for a change in structures on the server side, even in the generation of your own structures (like windows used for reparenting) you&#8217;ll probably cause this bug to start happening again because of different flow paths happening in the event handling code.</li>
</ol>
<p>Compiz has had problems getting window stacking right for years. Mainly because its really really really really really hard to do. Other window managers have had to deal with this problem for years but luckily they&#8217;ve had the advantage of time under their belt to get this right. WM&#8217;s like metacity have elaborate stack management code, the compiz stacking code is pretty simple and works on a case-by-case basis. In reality, when people say &#8220;stacking bug&#8221; they&#8217;re really referring to one of two issues (as I alluded to earlier). The first is that the stacks go out of sync. This basically just causes havoc and once that happens you are pretty much toast  because every subsequent ConfigureNotify event is going to be processed incorrectly and your stacking is about as good as /dev/urandom. That bug sucks and it was my #1 priority when I was looking into this. The other bug is where windows receive and invalid stack position or can&#8217;t get a valid stack position and end up on top of everything. And then everything that gets restacked relative to that one window that received an invalid position also receives an invalid position. These bugs are slightly easier to track down because they only exist in the code where we actually do the restacking of windows and not where we process incoming restacking events.</p>
<h2>X11 Crash Course: How not to treat the X11 model of window management</h2>
<p>The moral of all of this is that you shouldn&#8217;t ever try to take shortcuts with X. Never ever. That will result in X coming back a bit later and giving you something you didn&#8217;t expect and totally thumping you as a result.</p>
<p>Window management on X11 is really weird. Mainly because as a concept, it was really only bolted on in later versions of the X protocol and provides a very limited subset of control to the window manager. As something that&#8217;s totally offtopic, but an example of how difficult X11 makes window management, a window manager can never really prevent someone from stealing the focus. If a client does XSetInputFocus on its own window, the input focus changes. The window manager can choose to change it back to something else, but then the client can just fight the window manager until it has the focus. Back on the topic of window management, there are basically two things that a window manager is given the power to do:</p>
<p>The first is through an event mask known as SubstructureRedirectMask. SubstructureRedirectMask is a special event selection that allows you to receive ConfigureRequest and MapRequest events whenever a child of the window you selected that event mask on does a ConfigureWindow request (eg XConfigureWindow, XMoveWindow, XMoveResizeWindow, XSetWindowBorderWidth, XResizeWindow, XRaiseWindow, XLowerWindow, XRestackWindows) or attempts to map a window with a MapWindow request (eg XMapRaised, XMapWindow). You only get these events for requests that were not made on your connection and you only get them for windows that are not marked with the &#8220;override redirect&#8221; bit in their attributes. However, this is the main way that window management is actually achieved, since for a client, instead of the server actually doing what you told it to, it just generates that event on the client which selected for SubstructureRedirectMask on the parent window of your client. Window managers all select for SubstructureRedirectMask on the root window, so when any toplevel window attempts to do something they&#8217;ll know about it first. The idea is that the window manager gets a MapRequest or ConfigureRequest and then does XMapWindow or XConfigureWindow again to put the window in the place where it should be for it. So you&#8217;re essentially communicating with the window manager by asking the server to do something and having that request be routed to the window manager which then asks the server to do the same thing.</p>
<p>This (arguably broken model) is incidentally why the entire ICCCM exists to let X client authors know about the strange things that go on in actual usage of the server. It&#8217;s why, for example, when mapping a window, you cannot draw on it right away, since by the time your output buffer is flushed and the server processes commands, when it gets to XMapWindow, it does not actually map the window, but rather generates a MapRequest on the client that selected SubstructureRedirectMask and then attempts to process your drawing op and fails because the window isn&#8217;t mapped because the client that got the MapRequest probably hasn&#8217;t gotten around to actually asking the server to map it yet, and the server probably hasn&#8217;t gotten around to processing that actual map request yet.</p>
<p>In order to control the window stacking and to prevent clients from doing insane things the window manager gets ConfigureRequest events for any window attempting to restack itself so that it can&#8217;t go in same insane stacking position. However, there is a magic bit that clients can set called the &#8220;override redirect&#8221; bit which basically makes the server ignore SubstructureRedirectMask and ResizeRedirectMask for that window so that any request made by any client relative to it will be immediately processed by the server. Of course, we treat override redirect windows differently in all window managers, the convention is to pretend that they don&#8217;t exist, but unfortunately there are stupid clients that request to restack relative to them so we need to care about them. We have very little control over the override redirect windows in the tree, and to further compound this problem, there are a metric ton of them. If you do xwininfo -root -tree one day you&#8217;ll probably be suprised to tell you that you have 100+ windows open when you probably only have 3 or 4. This is because there are windows for <em>everything</em>, menus, toolbars, toplevels, frames, windows to store properties on, windows to store data on, windows for sharing data, windows for holding selections, windows soley existing for the purpose of holding a grab, etc etc the list goes on and on.</p>
<p>For these windows you will only ever receive a ConfigureNotify event when they are restacked, which means that you&#8217;ll only ever know that a restacking request was made until after the restack happened. Which leads me to the overarching point: window managers are essentially not in control of anything and need to listen to the server as the ultimate authority. Which means that you shouldn&#8217;t ever try to determine the stacking order based on what you are doing as the window manager internally, but what the server is telling you. This is probably the most misunderstood part of the entire X11 application model. <em>The server is always right</em>.</p>
<h2>Common pitfalls which cause the stacking order to go out of sync with the server</h2>
<p><strong>1) Attempting to short circuit the internal stack representation right after you made a restacking request rather than waiting on the server to tell you what the internal stack representation actually is.</strong></p>
<p>There used to be several serial offenders in the compiz code that used to do this. In compiz 0.9 there was a piece of code in place which would immediately update the internal stack representation every time a stacking <em>request</em> was made<strong></strong> by compiz rather than being updated later on ConfigureNotify events that came from those requests. To be fair, short-circuiting was necessary since there is no clear separation in the compiz API between what was last sent to the server and what was last processed from it. This is a problem with the compiz API in general something I posted about needing to change <a href="http://lists.compiz.org/pipermail/dev/2011-August/001489.html">about a month back</a>.The problem that the original developers were trying to fix by doing this was the handling of multiple requests in to restack in compiz without waiting on the server to tell us what the new internal stack representation was. For example, here is a timeline of what would happen if we did not update the internal stack representation immediately after requesting a restack operation from the server while doing three restack operations right next to each other relative to the very windows we are trying to restack:</p>
<ol>
<li>Start with a window list of A &gt; B  &gt; C (top-to-bottom)</li>
<li>Request that C be raised (issue an XConfigureWindow request to restack C above A)</li>
<li>The internal window stack is still A &gt; B  &gt; C</li>
<li>Request that window B be raised to the top (issue an XConfigureWindow request to restack B above A (note, not above C because we look at the internal stack to find out what the top most window is, and that still says the the top most window is A)</li>
<li>The internal window stack is *still* A &gt; B &gt; C</li>
<li>Request that window A be raised to the top (issue an XConfigureWindow request to stack A above itself which is a no-op and won&#8217;t be processed by the server)</li>
</ol>
<p>What you would expect to end up happening in this case from an API standpoint is that window C goes to the top, then B goes to the top then A goes to the top, eg</p>
<ol>
<li>A &gt; B &gt; C</li>
<li>C &gt; A &gt; B</li>
<li>B &gt; C &gt; A</li>
<li>A &gt; B &gt; C</li>
</ol>
<p>What actually happens is this</p>
<ol>
<li>A &gt; B &gt; C</li>
<li>C &gt; A &gt; B</li>
<li>C &gt; B &gt; A</li>
<li>C &gt; B &gt; A</li>
</ol>
<p>Which is totally wrong! So the &#8220;fix&#8221; was implemented about a year ago to make sure that the former happens and not the latter by updating the internal list immediately.</p>
<p>Problems start occuring when you consider that we also update the internal list based on what the server is telling us. Since remember, we can&#8217;t base that internal list entirely off of what we&#8217;re telling the server because there are some things that we don&#8217;t get a say in, like override redirect windows. We <em>must</em> listen to the server.</p>
<p>With the approach that has been used up until now, here is how we might process events coming from the server relative to the window list from the events that we generated by doing XConfigureWindow to raise windows</p>
<ol>
<li>Window list is A &gt; B &gt; C</li>
<li>ConfigureNotify event: Window C is now above window A</li>
<li>Window list is now C &gt; B &gt; A</li>
<li>ConfigureNotify event: Window B is now above window C</li>
<li>Window list is now B &gt; C &gt; A</li>
<li>ConfigureNotify event: Window A is now above window B</li>
<li>Window list is now A &gt; B &gt; C</li>
</ol>
<p>So far, so good. So what happens if instead of raising all three windows, we just raised window C and then window B?</p>
<ol>
<li>Window list is B &gt; C &gt; A</li>
<li>ConfigureNotify event: Window C is now above window A</li>
<li>Window list is B &gt; C &gt; A</li>
<li>ConfigureNotify event: Window B is now above window C</li>
<li>Window list is now B &gt; C &gt; A</li>
</ol>
<p>Also, no problems occuring there. However, the difference this time is that all requests instead of actually doing something were no-ops because the stack was already in the order that the server is asking us to shuffle it into. But hang on a minute, the server <em>expects that the stacking order be A &gt; B &gt; C in order for us to process the ConfigureNotify events correctly! That means that we were actually processing them incorrectly but they just ended up in the same order! Uh oh</em></p>
<p>So what happens when we start through some complexity into the mix. Say D and E are override redirect windows. Override redirect windows like I said earlier are allowed to change their position in the stack whenever they want. So lets torture compiz with a race condition here:</p>
<ol>
<li>Window list is A &gt; B&gt; C &gt; D &gt; E</li>
<li>We raise C above A</li>
<li>The compiz side list is C &gt; A &gt; B &gt; D &gt; E and the server side list is A &gt; B &gt; C &gt; D &gt; E (since the compiz buffer hasn&#8217;t been flushed yet)</li>
<li>We then raise B above C</li>
<li>The compiz side list is B &gt; C &gt; A &gt; D &gt; E</li>
<li>We then request to restack A above E</li>
<li>The compiz side list is B &gt; C &gt; D &gt; A &gt; E</li>
<li>Before the compiz output buffer gets flushed again (eg before it has finished handling events, the client which owns D decides to restack it above B and flushes its output buffer first.</li>
<li>The compiz side list is still B &gt; C &gt; D &gt; A &gt; E (because compiz doesn&#8217;t know that D got restacked yet) but the server side list is now A &gt; D &gt; B &gt; C &gt; E</li>
<li>Now the compiz side buffer has been flushed, so the server processes all of our restacking requests, C &gt; A, B &gt; C, A &gt; E</li>
<li>On the compiz side we still have B &gt; C &gt; D &gt; A &gt; E and on the server side we&#8217;ve got B &gt; C &gt; D &gt; A &gt; E now. So far so good</li>
<li>Now the configure requests come in. The first one is from the override redirect client to put D on top of A</li>
<li>B &gt; C &gt; D &gt; A &gt; E</li>
<li>Now we get a notification that C went on top of A</li>
<li>B &gt; D &gt; C &gt; A &gt; E</li>
<li>Now we get a notification that B went on top of C</li>
<li>D &gt; B &gt; C &gt; A &gt; E</li>
<li>Now we get a notification that A went on top of E</li>
<li>D &gt; B &gt; C &gt; A &gt; E</li>
<li>Server Side: B &gt; C &gt; D &gt; A &gt; E, Compiz Side: D &gt; B &gt; C &gt; A &gt; E.</li>
<li>Um, ok. Lets say that now we want to put A on top of D</li>
<li>Server Side: B &gt; C &gt; A &gt; D &gt; E, Compiz Side A &gt; D &gt; B &gt; C &gt; E</li>
<li>Uh oh. We&#8217;re totally toast!</li>
</ol>
<p>By this point your stack is totally trashed and there&#8217;s no way to recover it. The problem at this point onwards is self-compounding, trying to do any more stacking operations will make it worse. The solution in this case is to follow the golden rule: <strong>Never ever touch CompScreen::windows unless you are doing it in response to something the server told you</strong>. I added a <strong>CompScreen::serverWindows</strong> to alleviate the problem found in raising and lowering windows in serial.</p>
<p><strong>2) Sending synethetic events based on the current event processing stack rather than what&#8217;s actually server side</strong></p>
<p>XSendEvent is really a hack and probably an acknowledgement that there&#8217;s been huge design failures on the server side and we need to allow clients to &#8220;fix up&#8221; these failures by sending synethetic events to other clients. The ICCCM recommends a bunch of places where we use this, for example, in order to transition from withdrawn to minimized or vice versa, a synethettic UnmapNotify event is sent to that window on StructureNotifyMask<strong></strong>. Or the more prominent case is a window needing to know when its client was moved on screen when in fact the client was actually reparented and moving its parent window on screen will not cause a ConfigureNotify event to happen, so we need to synthesise one on the client window so that it knows it got moved around and what its new absolute position is.</p>
<p>Unfortunately, ConfigureNotify is used both for size and position as well as stacking order (which window this window is &#8220;above&#8221; inside of its parent window). Synthetic ConfigureNotify events must include information on all members including the &#8220;above&#8221; member. Ideally, this would be set to the window the client is <strong>actually</strong> above so upon receipt of the synethetic ConfigureNotify event, core would just treat the ConfigureNotify as a no-op and not update its internal stack representation. Unfortunately, that&#8217;s not always true -  previously we would set the above member based on what was had last received from the server and if was done during event processing, it is perfectly possible that there might be other pending restacks waiting on the client or its frame  and by setting this member, we would then be telling ourselves later on that the window received its <strong>old</strong> stack position when it never actually did! So again, what&#8217;s server side won&#8217;t match what compiz thinks the stack is.</p>
<p>The only solution to this is to jump into a mode where you are in perfect synchronization with the X Server, which is very ugly &#8211; you need to grab the server to ensure that no other client can modify its state, and then query the window tree and then craft your event relative to that information. Thankfully, we only do this rarely and it is not too expensive, but expensive nonetheless.</p>
<p><strong>3) Doing stacking operations or operations that might affect the number of windows on the stack while not registered for events after initially querying the tree<br />
</strong></p>
<p>This is mostly only an issue on startup<strong></strong>. I haven&#8217;t really pointed this out before, but the reason why we can&#8217;t just ask the server every single time a restack happens for the complete stacking order is because this would block on a reply from the server and kill performance because the server needs to process all of our requests first and then give us the result of the stacking order once that&#8217;s done. However, there is one place that we do this, and that&#8217;s on startup, because on startup, we don&#8217;t know what the stacking order is. We ask the server for it once and then work out what the stacking order is based on all subsequent events, working under the assumption that if you were to query the tree, grab the server, gather all events and ungrab the server, that after processing all events the tree you got from the server would be the same as your internal stacking order after processing events relative to the last time you updated the tree (eg the last time you processed events or the last time you did XQueryTree before processing events).</p>
<p>The timing of the point where you select for events is very important. If you do it too soon before you do XQueryTree you&#8217;ll get events for things happening up to that initial tree query which will all be invalid but processed anyways and give you a wrong result, or if you do it too late you won&#8217;t end up getting events that are necessary to give you the correct stack representation when handling events. Previously this was a case of &#8220;too soon&#8221; and windows were being added to the tree twice.</p>
<p><strong>4) Invalidating or keeping internal references to windows before the server actually recognises that they&#8217;re gone or created in the chain of events</strong></p>
<p><strong></strong>This was mainly a problem with our reparenting implementation and covered the following situation:</p>
<ol>
<li>Client does XConfigureWindow to restack the client window (well, in this case issuing a synthetic ConfigureRequest to restack relative to another client since using XConfigureWindow directly would break</li>
<li>Client destroys the window it just restacked the initial client relative to</li>
</ol>
<p>On the compiz side, this is what happens</p>
<ol>
<li>We receive the ConfigureRequest and then do XConfigureWindow to restack relative to the frame of the other client that we were to restack relative to</li>
<li>We then receive a DestroyNotify for that every client.</li>
<li>On Destroy, we unreparent the window, because it is destroyed we can&#8217;t put it back into the toplevel tree, but we do issue a DestroyWindow request for its frame window as well</li>
<li>We immediately set the reference to None</li>
<li>We then get a ConfigureNotify for the window that we just restacked relative to the frame of the window we just destroyed. Because we immediately set the frame reference to None, its impossible to process that ConfigureNotify event so we just leave the window where it is or put it on top. (incorrect!)</li>
<li>We then receive the DestroyNotify for the frame window of the client we were restacking relative to.</li>
</ol>
<p>In this case, there is no option except to keep the frame windows around because other clients may have issued restack requests relative to them and keep a reference to the frame window, but don&#8217;t actually acknowledge that the frame window is a frame for any particular client.</p>
<p>The way I&#8217;ve implemented this now is to keep the frame window around until the client actually goes away and then only removing it from the tree <strong>once</strong> it receives a DestroyNotify event like any other client.</p>
<p><strong>5) Keeping destroyed windows and their references around after the windows have received a DestroyNotify in the same window list for things like close animations</strong></p>
<p>Before you freak out &#8211; no I have not removed close animations, merely changed the way that they function.</p>
<p>When a window receives a DestroyNotify, that&#8217;s to tell you that in the chain of events the server is giving you, past that point, the window in question is no longer a valid window and you should get rid of it in your stack. However, the only way the close animations would work is if we kept that window around a *little* longer so that we can still have the close animation going. (XComposite is funny like that and you can often use pixmaps of windows that have long since been destroyed since it won&#8217;t automatically overwrite that pixmap memory with something else). So we just set the window id to zero. The frame however, is still a valid window and holds an invalid position in the stack.<strong></strong></p>
<p>The way to fix this is to immediately remove windows that have received a DestroyNotify from the internal stack and place them in a separate list available to plugins, rather than having them sit in the main stack and causing trouble. The frame windows are separated off into their own toplevel override redirect windows which are inserted directly into the stack so any incoming events relative to them will be processed correctly.</p>
<p>Ok,  so <em>wc</em> tells me that this blog post is 4273 words, which is twice the number of words that are required for a rather important uni assignment due in a few days. I clearly have my priorities right. :/</p>
<p>Anyways, that&#8217;s that half of the braindump. Maybe when I get time I&#8217;ll explain the EWMH stacking order, how we actually debug these problems and also a braindump on how compiz&#8217; decoration interface works since I&#8217;ve promised to write on that and haven&#8217;t yet. Oh and libcompizconfig too.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/smspillaz.wordpress.com/819/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/smspillaz.wordpress.com/819/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/smspillaz.wordpress.com/819/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/smspillaz.wordpress.com/819/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/smspillaz.wordpress.com/819/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/smspillaz.wordpress.com/819/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/smspillaz.wordpress.com/819/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/smspillaz.wordpress.com/819/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/smspillaz.wordpress.com/819/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/smspillaz.wordpress.com/819/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/smspillaz.wordpress.com/819/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/smspillaz.wordpress.com/819/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/smspillaz.wordpress.com/819/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/smspillaz.wordpress.com/819/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smspillaz.wordpress.com&amp;blog=1094742&amp;post=819&amp;subd=smspillaz&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://smspillaz.wordpress.com/2011/09/18/braindump-how-to-get-window-stacking-right/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/27ecfada6258e22f92da0c5c9ffafd47?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">smspillaz</media:title>
		</media:content>
	</item>
		<item>
		<title>Scale and Expo!</title>
		<link>http://smspillaz.wordpress.com/2011/09/17/scale-and-expo/</link>
		<comments>http://smspillaz.wordpress.com/2011/09/17/scale-and-expo/#comments</comments>
		<pubDate>Sat, 17 Sep 2011 06:13:25 +0000</pubDate>
		<dc:creator>smspillaz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://smspillaz.wordpress.com/?p=816</guid>
		<description><![CDATA[This wasn&#8217;t actually as hard as I thought All I had to do was tweak the scale plugin slightly to allow scaling over each viewport and then trigger the initiate callback inside of the expo plugin. Window picking was easy &#8230; <a href="http://smspillaz.wordpress.com/2011/09/17/scale-and-expo/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smspillaz.wordpress.com&amp;blog=1094742&amp;post=816&amp;subd=smspillaz&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This wasn&#8217;t actually as hard as I thought</p>
<p><a href="http://smspillaz.files.wordpress.com/2011/09/scale_expo.png"><img class="aligncenter size-full wp-image-817" title="Scale Expo" src="http://smspillaz.files.wordpress.com/2011/09/scale_expo.png?w=640&#038;h=400" alt="" width="640" height="400" /></a>All I had to do was tweak the scale plugin slightly to allow scaling over each viewport and then trigger the initiate callback inside of the expo plugin. Window picking was easy &#8211; we just use the expo plugin&#8217;s vertex inversion code and pass through the co-ordinates to the scale plugin to &#8220;terminate and select&#8221;.</p>
<ul>
<li><a href="https://code.launchpad.net/~compiz-team/compiz-expo-plugin/compiz-expo-plugin.initiate_scale/+merge/75847">Expo Branch</a></li>
<li><a href="https://code.launchpad.net/~compiz-team/compiz-core/compiz-core.scale_viewports/+merge/75848">Scale Branch</a></li>
</ul>
<div><span style="font-size:small;"><span class="Apple-style-span" style="line-height:24px;">This won&#8217;t make it into oneiric since we&#8217;re past Beta 2 freeze, but it will be become available as an option upstream soon.</span></span></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/smspillaz.wordpress.com/816/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/smspillaz.wordpress.com/816/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/smspillaz.wordpress.com/816/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/smspillaz.wordpress.com/816/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/smspillaz.wordpress.com/816/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/smspillaz.wordpress.com/816/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/smspillaz.wordpress.com/816/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/smspillaz.wordpress.com/816/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/smspillaz.wordpress.com/816/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/smspillaz.wordpress.com/816/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/smspillaz.wordpress.com/816/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/smspillaz.wordpress.com/816/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/smspillaz.wordpress.com/816/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/smspillaz.wordpress.com/816/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smspillaz.wordpress.com&amp;blog=1094742&amp;post=816&amp;subd=smspillaz&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://smspillaz.wordpress.com/2011/09/17/scale-and-expo/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/27ecfada6258e22f92da0c5c9ffafd47?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">smspillaz</media:title>
		</media:content>

		<media:content url="http://smspillaz.files.wordpress.com/2011/09/scale_expo.png" medium="image">
			<media:title type="html">Scale Expo</media:title>
		</media:content>
	</item>
		<item>
		<title>Minimized Window Thumbnails in the Switcher</title>
		<link>http://smspillaz.wordpress.com/2011/08/26/minimized-window-thumbnails-in-the-switcher/</link>
		<comments>http://smspillaz.wordpress.com/2011/08/26/minimized-window-thumbnails-in-the-switcher/#comments</comments>
		<pubDate>Fri, 26 Aug 2011 03:22:50 +0000</pubDate>
		<dc:creator>smspillaz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://smspillaz.wordpress.com/?p=813</guid>
		<description><![CDATA[Yesterday I merged in my branch to support minimized window thumbnails in the upcoming alt-tab experience for Unity. I originally intended for this code to go inside of compiz in a neater fashion so it would be available to all &#8230; <a href="http://smspillaz.wordpress.com/2011/08/26/minimized-window-thumbnails-in-the-switcher/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smspillaz.wordpress.com&amp;blog=1094742&amp;post=813&amp;subd=smspillaz&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Yesterday I <a href="https://code.launchpad.net/~unity-team/unity/unity.minimized_windows_switcher/+merge/72591">merged</a> in my branch to support minimized window thumbnails in the upcoming alt-tab experience for Unity. I originally intended for this code to go inside of compiz in a neater fashion so it would be available to all plugins, however we are past feature freeze in our release schedule and ABI breaks are no longer allowed unless there&#8217;s a good reason for them.</p>
<p><a href="http://smspillaz.files.wordpress.com/2011/08/minimized-windows.png"><img class="aligncenter size-full wp-image-814" title="minimized-windows" src="http://smspillaz.files.wordpress.com/2011/08/minimized-windows.png?w=640&#038;h=343" alt="" width="640" height="343" /></a></p>
<p>In order to do this, we have to use some interesting hacks to ensure that windows are not completely unmapped when they are minimized, mainly using XShape to remove their input and inhibiting paint with the compositor. This means that some applications aren&#8217;t going to play nice with it, and we need to know what they are, so that we can either blacklist them or decide whether or not we want to ship with this functionality. So please report bugs if you get oddities like input not working in your applications, or your cursor being grabbed while an application is &#8220;minimized&#8221;!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/smspillaz.wordpress.com/813/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/smspillaz.wordpress.com/813/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/smspillaz.wordpress.com/813/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/smspillaz.wordpress.com/813/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/smspillaz.wordpress.com/813/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/smspillaz.wordpress.com/813/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/smspillaz.wordpress.com/813/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/smspillaz.wordpress.com/813/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/smspillaz.wordpress.com/813/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/smspillaz.wordpress.com/813/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/smspillaz.wordpress.com/813/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/smspillaz.wordpress.com/813/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/smspillaz.wordpress.com/813/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/smspillaz.wordpress.com/813/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smspillaz.wordpress.com&amp;blog=1094742&amp;post=813&amp;subd=smspillaz&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://smspillaz.wordpress.com/2011/08/26/minimized-window-thumbnails-in-the-switcher/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/27ecfada6258e22f92da0c5c9ffafd47?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">smspillaz</media:title>
		</media:content>

		<media:content url="http://smspillaz.files.wordpress.com/2011/08/minimized-windows.png" medium="image">
			<media:title type="html">minimized-windows</media:title>
		</media:content>
	</item>
		<item>
		<title>Moving the screenlocker into compiz</title>
		<link>http://smspillaz.wordpress.com/2011/07/17/moving-the-screenlocker-into-compiz/</link>
		<comments>http://smspillaz.wordpress.com/2011/07/17/moving-the-screenlocker-into-compiz/#comments</comments>
		<pubDate>Sun, 17 Jul 2011 22:00:02 +0000</pubDate>
		<dc:creator>smspillaz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://smspillaz.wordpress.com/?p=804</guid>
		<description><![CDATA[screensavers and screenlockers are tricky. They&#8217;re tricky because they&#8217;re a double edged sword from a security perspective. When one is around, you had better not let anything else get on top of it, but also, you had better not let &#8230; <a href="http://smspillaz.wordpress.com/2011/07/17/moving-the-screenlocker-into-compiz/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smspillaz.wordpress.com&amp;blog=1094742&amp;post=804&amp;subd=smspillaz&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>screensavers</strong> and <strong>screenlockers </strong>are tricky.</p>
<p>They&#8217;re tricky because they&#8217;re a double edged sword from a security perspective. When one is around, <a href="https://bugs.launchpad.net/ubuntu/+source/compiz/+bug/771391">you had better not let anything else get on top of it</a>, but also, you had better not let anything else <a href="http://git.gnome.org/browse/gnome-screensaver/tree/src/gs-window-x11.c#n567">pretend to be a screensaver either</a>, (that is, unless your application is a &#8220;screensaver&#8221; and now suddenly gets to be on top of absolutely everything).</p>
<p>So it&#8217;s no surprise that there&#8217;s a <a href="http://community.kde.org/KWin/Screenlocker">general</a> <a href="http://mail.gnome.org/archives/gnome-shell-list/2011-March/msg00340.html">movement</a> to kill these external screensavers and put them somewhere else where they actually have a little more control. That is, inside the compositor. This is mainly for security reasons, see, in Window Manager land, we have no such concept as a &#8220;screensaver&#8221; window or a &#8220;screen locker window&#8221; &#8211; the closest thing we have is the concept of fullscreen windows and windows which hog all the input (grabs). So, screensavers are kind of an amalgamation of the two. Except that things can still go <a href="http://standards.freedesktop.org/wm-spec/wm-spec-latest.html#STACKINGORDER">above</a> them (note the use of the word &#8220;focused&#8221; in relation to fullscreen windows, yeah, interpreting the EWMH is like interpreting a complicated contract sometimes [well, it is kind of a complicated contract, but that's a discussion for another day]).</p>
<p>So along came the <a href="http://www.xfree86.org/current/Xss.3.html">XScreensaver extension</a> which was all well and great because it allows you to &#8220;bless&#8221; one window as the screensaver and that was it, it went on top of <strong>everything</strong>. Of course, the problem there is that it&#8217;s tied to X11, and given that most DE&#8217;s want to go multiplatform this isn&#8217;t something that&#8217;s really feasible.</p>
<p>And that means that the next best thing is a hack. A really really big hack. The hack is something like this</p>
<blockquote><p>Nothing shall ever get on top of me. If anything tries to get  on top of me, I will just ask to be on top of them. Nothing. Shall. Pass. Ever.</p>
<p>Oh, and just in case something did get on top of me, every so often I&#8217;m going to make sure that <strong>I&#8217;m</strong> on top. Yeah, I&#8217;m awesome</p></blockquote>
<p><a href="http://git.gnome.org/browse/gnome-screensaver/tree/src/gs-window-x11.c#n567">(reflected in the code here)</a></p>
<p>This is probably not the best application design practise that we should really be encouraging, because the message is that in order to write anything secure you basically have to abuse the window manager and hope it does what you want in order to do anything useful.</p>
<p>If we move the screen locker into the compositing manager, it means that the compositor can now absolutely ensure that the screen locker is always on top by ensuring through the magic of SubstructureRedirectMask that nothing ever gets on top of the screen locker in the first place. Which is pretty awesome, and a lot more simple.</p>
<p>So great. Now I wondered to myself, how the heck can we implement this? Doing an entire screen locker inside of a window manager seems like a bit of an insane task to me, since it means dealing with a number of security frameworks, secure keyboard input etc. And we already have the other screen lockers at our disposal, do we really need to rewrite them for every window manager?</p>
<p>Well, as it turns out, there&#8217;s a fairly simple hack that we can do for this. Have compiz handle the blanking of the screen via communication with an external &#8220;locking&#8221; service, have a separate application (eg gnome-screensaver) handle the input and dialog side of things and get the service to bless the dialog as the locker window and have compiz handle the disabling of window painting and disabling of input. And the result:</p>
<span style="text-align:center; display: block;"><a href="http://smspillaz.wordpress.com/2011/07/17/moving-the-screenlocker-into-compiz/"><img src="http://img.youtube.com/vi/NcyzBRr-lp8/2.jpg" alt="" /></a></span>
<p>Oh yeah, you can have pretty animations too. And this finally means that when GNOME and KDE drop the old screenlockers you&#8217;ll still be able to use compiz <strong>and</strong> be secure!</p>
<p>Now how awesome is that?</p>
<p><strong>edit:</strong> the code:</p>
<p>git://git.compiz.org/users/smspillaz/locker</p>
<p>git://git.compiz.org/users/smspillaz/x11locker</p>
<p>lp:~smspillaz/+junk/lockertest</p>
<p>lp:~smspillaz/+junk/gnome-screensaver-hax</p>
<p><strong>protip</strong>: don&#8217;t install gnome-screensaver-hax unless you want a totally broken system, as you can probably tell, this was a hack to make the locker dialog parent into the compiz locker window and breaks it under normal usage. (It works under compiz though <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/smspillaz.wordpress.com/804/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/smspillaz.wordpress.com/804/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/smspillaz.wordpress.com/804/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/smspillaz.wordpress.com/804/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/smspillaz.wordpress.com/804/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/smspillaz.wordpress.com/804/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/smspillaz.wordpress.com/804/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/smspillaz.wordpress.com/804/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/smspillaz.wordpress.com/804/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/smspillaz.wordpress.com/804/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/smspillaz.wordpress.com/804/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/smspillaz.wordpress.com/804/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/smspillaz.wordpress.com/804/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/smspillaz.wordpress.com/804/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smspillaz.wordpress.com&amp;blog=1094742&amp;post=804&amp;subd=smspillaz&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://smspillaz.wordpress.com/2011/07/17/moving-the-screenlocker-into-compiz/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/27ecfada6258e22f92da0c5c9ffafd47?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">smspillaz</media:title>
		</media:content>
	</item>
		<item>
		<title>Maximized windows which must be larger than the screen size</title>
		<link>http://smspillaz.wordpress.com/2011/07/15/maximized-windows-which-must-be-larger-than-the-screen-size/</link>
		<comments>http://smspillaz.wordpress.com/2011/07/15/maximized-windows-which-must-be-larger-than-the-screen-size/#comments</comments>
		<pubDate>Fri, 15 Jul 2011 21:25:03 +0000</pubDate>
		<dc:creator>smspillaz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://smspillaz.wordpress.com/?p=801</guid>
		<description><![CDATA[There&#8217;s been an odd case that I&#8217;ve not seen one window manager be able to handle correctly. It&#8217;s the case where you are required to resize a window to be smaller than than it&#8217;s defined minimum size, because you are &#8230; <a href="http://smspillaz.wordpress.com/2011/07/15/maximized-windows-which-must-be-larger-than-the-screen-size/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smspillaz.wordpress.com&amp;blog=1094742&amp;post=801&amp;subd=smspillaz&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s been an odd case that I&#8217;ve not seen one window manager be able to handle correctly. It&#8217;s the case where you are required to resize a window to be smaller than than it&#8217;s defined minimum size, because you are tiling it, semi-maximizing it or maximizing it. Basically attempting to fit a big object into a small space because the user requested it.</p>
<p>Compiz hasn&#8217;t really handled this case all that well in the past &#8211; the default behavior (after staring at the code some time) seems to be to try to get as much of the window on-screen as possible, so if the top is offscreen move it down, if the bottom is offscreen move it up. Unfortunately this solution isn&#8217;t perfect, and it lead to an interesting bug where doing anything to restack the window would cause it to jump around, because if it wasn&#8217;t partially offscreen one way, it was partially offscreen the other and compiz would try to re-adjust that part to bring it back on screen.</p>
<p><a href="http://smspillaz.files.wordpress.com/2011/07/screenshot-at-2011-07-16-045353.png"><img class="aligncenter size-full wp-image-802" title="Screenshot at 2011-07-16 04:53:53" src="http://smspillaz.files.wordpress.com/2011/07/screenshot-at-2011-07-16-045353.png?w=640&#038;h=492" alt="" width="640" height="492" /></a>For now what I&#8217;ve done is followed the good advice given to me by <a href="http://codearmada.com">Jason Smith</a> and disabled vertical or horizontal maximization in cases where it is not possible to sanely maximize that window. And in multimonitor cases, we now try to maximize on the monitor the window is most on first, and failing that, the closest possible monitor that can accomadate the minimum size of that window.</p>
<p>Of course, this solution isn&#8217;t perfect either &#8230; now instead of explaining to users why parts of their window aren&#8217;t visible when they are maximized or tiled I now need to explain why some windows show the maximize button on small resolutions and others don&#8217;t.</p>
<p>This got me thinking though, what <em>is</em> the best way to handle this case? I&#8217;d like to be able to fit my huge window into a small space, but I need a way to get at all of its contents. I guess there are a couple of ways of doing it.</p>
<ol>
<li>Clip the drawing of the window using OpenGL and allow the user to alt-drag the window around withing the constrained box such that the visible parts of the window never leave the box. This would be the easiest thing to implement but it&#8217;s not obvious how it would work</li>
<li>Clip the window within its frame and allow it to pan around inside the frame. This is a much prettier solution, we could even have things like scrollbars for the window or some mouse actions to pan the window around. Of course, it requires a LOT more work in core and heavily breaks the assumption that the window is always going to be within the same place in its parent window</li>
<li>Scale the window down so that the user can see everything, scale it back up again on hover and use the mouse to pan it around (sort of like a mini-zoom). I guess this is possible, but not without some hard work because of the lack of input transformation in X.</li>
</ol>
<div><span style="font-size:small;"><span class="Apple-style-span" style="line-height:24px;">What is your take on this?</span></span></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/smspillaz.wordpress.com/801/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/smspillaz.wordpress.com/801/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/smspillaz.wordpress.com/801/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/smspillaz.wordpress.com/801/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/smspillaz.wordpress.com/801/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/smspillaz.wordpress.com/801/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/smspillaz.wordpress.com/801/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/smspillaz.wordpress.com/801/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/smspillaz.wordpress.com/801/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/smspillaz.wordpress.com/801/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/smspillaz.wordpress.com/801/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/smspillaz.wordpress.com/801/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/smspillaz.wordpress.com/801/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/smspillaz.wordpress.com/801/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=smspillaz.wordpress.com&amp;blog=1094742&amp;post=801&amp;subd=smspillaz&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://smspillaz.wordpress.com/2011/07/15/maximized-windows-which-must-be-larger-than-the-screen-size/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/27ecfada6258e22f92da0c5c9ffafd47?s=96&#38;d=retro&#38;r=G" medium="image">
			<media:title type="html">smspillaz</media:title>
		</media:content>

		<media:content url="http://smspillaz.files.wordpress.com/2011/07/screenshot-at-2011-07-16-045353.png" medium="image">
			<media:title type="html">Screenshot at 2011-07-16 04:53:53</media:title>
		</media:content>
	</item>
	</channel>
</rss>
