<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.3.3" -->
<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:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">

<channel>
	<title>…for the adult in you</title>
	<link>http://blogs.gnome.org/metacity</link>
	<description>"Many window managers are like Marshmallow Froot Loops; Metacity is like Cheerios."</description>
	<pubDate>Mon, 16 Jun 2008 23:58:52 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.3</generator>
	<language>en</language>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>		<item>
		<title>2.23.34 out (mainly for the release day)</title>
		<link>http://blogs.gnome.org/metacity/2008/06/16/2-23-34/</link>
		<comments>http://blogs.gnome.org/metacity/2008/06/16/2-23-34/#comments</comments>
		<pubDate>Mon, 16 Jun 2008 23:58:52 +0000</pubDate>
		<dc:creator>Thomas Thurman</dc:creator>
		
		<category><![CDATA[2.23]]></category>

		<guid isPermaLink="false">http://blogs.gnome.org/metacity/2008/06/16/2-23-34/</guid>
		<description><![CDATA[2.23.34
=======
Thanks to Thomas Thurman for improvements in this version.
- Commenting and tidying (Thomas)
- Fix possible compositor crash (Thomas) (#530702)
Translations
Khaled Hosny (ar), Yavor Doganov (bg), Jorge González (es), Kjartan Maraas (nb),
Yannig Marchegay (Kokoyaya) (oc), Theppitak Karoonboonyanan (th), Clytie
Siddall (vi)
]]></description>
			<content:encoded><![CDATA[<p>2.23.34<br />
=======</p>
<p>Thanks to Thomas Thurman for improvements in this version.</p>
<p>- Commenting and tidying (Thomas)<br />
- Fix possible compositor crash (Thomas) (#530702)</p>
<p>Translations<br />
Khaled Hosny (ar), Yavor Doganov (bg), Jorge González (es), Kjartan Maraas (nb),<br />
Yannig Marchegay (Kokoyaya) (oc), Theppitak Karoonboonyanan (th), Clytie<br />
Siddall (vi)</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.gnome.org/metacity/2008/06/16/2-23-34/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The overview series: Drag and drop.  You complain, we explain.</title>
		<link>http://blogs.gnome.org/metacity/2008/06/11/drag-and-drop/</link>
		<comments>http://blogs.gnome.org/metacity/2008/06/11/drag-and-drop/#comments</comments>
		<pubDate>Wed, 11 Jun 2008 16:55:35 +0000</pubDate>
		<dc:creator>Thomas Thurman</dc:creator>
		
		<category><![CDATA[Bugs and issues]]></category>

		<category><![CDATA[EWMH]]></category>

		<category><![CDATA[nargery]]></category>

		<category><![CDATA[overview]]></category>

		<guid isPermaLink="false">http://blogs.gnome.org/metacity/2008/06/11/drag-and-drop/</guid>
		<description><![CDATA[If there are two overlapping windows on the screen, people would like to be able to pick up an object from the lower window and drag it to the upper without bringing the lower window to the front, because if that happens the lower window will obscure the upper, and you won&#8217;t have anywhere to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/pbo31/399537401/" title="drag on by pbo31, on Flickr"><img src="http://farm1.static.flickr.com/174/399537401_4b5d1e3316.jpg" alt="drag on" align="right" width="500" height="375" /></a>If there are two overlapping windows on the screen, <a href="http://brainstorm.ubuntu.com/idea/2567/">people</a> would <a href="http://brainstorm.ubuntu.com/idea/3490/">like</a> to be able to pick up an object from the lower window and drag it to the upper without bringing the lower window to the front, because if that happens the lower window will obscure the upper, and you won&#8217;t have anywhere to drag to.  In this instance, we would like the same behaviour as Microsoft Windows: if the click starts a drag, raise the lower window on button <em>release</em>; if it doesn&#8217;t, raise the window on button press as normal.</p>
<p>However, Metacity (along with most other window managers) doesn&#8217;t currently do this, for want of a way to know whether the click starts a drag.  This is really something that only the application owning that window can tell us.  (It is possible for the <em>user</em> to tell us what they think, by holding down AltGr at the start of the drag.  That may not be an official feature. It&#8217;s not really ideal either way.)</p>
<p>This whole question is something we&#8217;ve been batting around <a href="http://mail.gnome.org/archives/wm-spec-list/2002-August/msg00032.html">for six years now</a> and it probably ought to be fixed one way or another.  Over that time, there are also a few other reasons people have asked to be able to pick stuff up from lower windows, such as the ability to copy text from the lower window and paste it into the upper, or scrolling the lower window&#8217;s scrollbars : <a href='http://bugzilla.gnome.org/show_bug.cgi?id=76672' class='bug-link bug-link-gnome'>GNOME bug 76672</a> deals with this more general case, which we shan&#8217;t discuss further here now.  Let&#8217;s concentrate on the most common problem, represented by  <a href='http://bugzilla.gnome.org/show_bug.cgi?id=80984' class='bug-link bug-link-gnome'>GNOME bug 80984</a>: not raising the source window when a drag and drop begins.  What <em>isn&#8217;t</em> a solution to our problem?</p>
<p><strong>What <em>isn&#8217;t</em> a solution</strong></p>
<ul>
<li><strong>Always raising the lower window only on release, not on click</strong> (suggested by many people).  This would solve the problem at the cost of weirding everyone out, not just breaking the expectations of existing Metacity users and users from other window managers in the world of free software, but also the expectations of Mac and Windows people.</li>
<li><strong>Only raising a window when you click on the frame and not the insides</strong>, which was raised in  <a href='http://bugzilla.gnome.org/show_bug.cgi?id=86108' class='bug-link bug-link-gnome'>GNOME bug 86108</a>.  This is a bad idea for similar reasons to the last.</li>
<li>Having a <strong>magic kind of window that Metacity promises never to raise</strong>; then the client will decide whether to raise itself or not based on whether the click was the start of a drag operation. This is how Sawfish does or did it.  It&#8217;s a bad idea because it rather defeats the purpose of having a window manager if clients are going to manage their own windows, and besides <a href="http://blogs.gnome.org/metacity/2007/12/24/stacking/">applications can&#8217;t raise their own windows in Metacity</a> anyway.</li>
</ul>
<p><strong>What <em>is</em> a solution</strong><br />
What needs to happen is this:</p>
<ol>
<li>We figure out a way for other clients to tell the window manager that a click in their window was the start of some kind of drag-and-drop operation.</li>
<li>At this point, the fact that Metacity doesn&#8217;t understand this message suddenly becomes a bug in Metacity.  So we fix the window manager to understand this.</li>
<li>At this point, the fact that none of the applications out there understand how to tell Metacity about this becomes a bug in those applications, but we can&#8217;t do anything much about it without fixing the toolkits like GTK.  So we do that.</li>
<li>Now we can actually fix all the applications separately.  The bug for fixing Nautilus at this point is  <a href='http://bugzilla.gnome.org/show_bug.cgi?id=132339' class='bug-link bug-link-gnome'>GNOME bug 132339</a>.</li>
</ol>
<p>Clearly we can&#8217;t get 2, 3, and 4 sorted until we have 1 down, so let&#8217;s just talk about that for the moment.  Back in 2004, Lubos Lunak (the maintainer of KDE&#8217;s window manager) proposed the first plan to do this, called <strong><a href="http://mail.gnome.org/archives/wm-spec-list/2004-April/msg00013.html">_NET_WM_TAKE_ACTIVITY</a></strong> (a misleading name, since it&#8217;s about taking focus and not activity). When a window other than the topmost one was clicked, the window manager would send it _NET_WM_TAKE_ACTIVITY, which it would remember; after that, nothing would happen until the button was released.  If the click had actually begun a drag-and-drop operation, that was all well and good, but if it hadn&#8217;t, the client should send it on to the root window and the window manager would raise the window after all.  In  <a href='http://bugzilla.gnome.org/show_bug.cgi?id=152952' class='bug-link bug-link-gnome'>GNOME bug 152952</a>, Elijah Newren wrote a patch for Metacity implementing this plan.</p>
<p>Lubos&#8217;s original plan had a few infelicities, some of which were discussed <a href="http://www.gtk.org/plan/meetings/20041005.txt">in this meeting</a>.  It means that the window is raised when you release the mouse button, which is bad for reasons we discussed above.  It also means that a lot of policy is decided ahead of time: for example, <a href="http://mail.gnome.org/archives/wm-spec-list/2004-October/msg00008.html">some people would like</a> their window manager to raise the lower window while they were copying text from it, and then drop it back down when they were done, but not do the same thing for drag-and-drop.  There was working code for KDE and GNOME, but many people objected about all the problems mentioned above including the GTK hackers.  In the end it didn&#8217;t make it into the EWMH standard, although some parts of the KDE libraries appear still to accept it to some extent.</p>
<p>Elijah then proposed to fix the problem with a new message type called <strong><a href="http://mail.gnome.org/archives/wm-spec-list/2004-October/msg00014.html">_NET_WM_MOUSE_ACTION</a></strong>. With this plan, a client would send _NET_WM_MOUSE_ACTION through to the root window as soon as <em>any</em> button was pressed or released on it, telling the window manager what kind of action the click meant: it could be &#8220;nothing special&#8221; or &#8220;drag-and-drop&#8221;, but also &#8220;text selection&#8221; or &#8220;scrollbar drag&#8221; or &#8220;generic thing that I don&#8217;t want to explain right now but involves not raising me&#8221;.  Lubos <a href="http://mail.gnome.org/archives/wm-spec-list/2004-October/msg00018.html">agreed that this was a better plan</a>, but it died even earlier in committee, and as far as I know was never implemented anywhere.</p>
<p>It seems to me that the best thing to do, if we can, is to go with a partial fix using _NET_WM_MOUSE_ACTION which allows us to heal this obvious problem.  Then we can carry on later and fix specific problems.  <a href="http://mail.gnome.org/archives/usability/2005-October/msg00084.html">Elijah has said</a> that _NET_WM_MOUSE_ACTION needed a great deal of work to implement on the GTK side; the closest thing we have so far to working code is <a href="http://bugzilla.gnome.org/show_bug.cgi?id=154260#c28">a patch he then posted</a>.  This does still need working on, preferably by someone who understands the internals of GDK (could this be you, gentle reader?).</p>
<p>A similar but not identical problem is the issue of <em>raising</em> windows when they are a drag <em>target</em>; this is covered in  <a href='http://bugzilla.gnome.org/show_bug.cgi?id=112308' class='bug-link bug-link-gnome'>GNOME bug 112308</a>.</p>
<p>Next in the overview series: why getting stacking exactly right is hard and what we&#8217;re going to do about it.</p>
<p><small>Photo by pbo31, cc-by-nc-nd.</small></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.gnome.org/metacity/2008/06/11/drag-and-drop/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Justifying window titles</title>
		<link>http://blogs.gnome.org/metacity/2008/05/31/justifying-window-titles/</link>
		<comments>http://blogs.gnome.org/metacity/2008/05/31/justifying-window-titles/#comments</comments>
		<pubDate>Sat, 31 May 2008 14:12:34 +0000</pubDate>
		<dc:creator>Thomas Thurman</dc:creator>
		
		<category><![CDATA[How-to]]></category>

		<category><![CDATA[Themes]]></category>

		<guid isPermaLink="false">http://blogs.gnome.org/metacity/2008/05/31/justifying-window-titles/</guid>
		<description><![CDATA[It was said that Metacity doesn&#8217;t let you decide whether titles of windows are left-justified (as in modern versions of MS Windows) or centre-justified (as on the Mac).  But actually, it&#8217;s a theme issue to decide how a title is drawn.  Here&#8217;s how to change your theme from centre-justified to left-justified.
First, find out [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mamchenkov.net/wordpress/2008/05/20/annoying-software/">It was said</a> that Metacity doesn&#8217;t let you decide whether titles of windows are left-justified (as in modern versions of MS Windows) or centre-justified (as on the Mac).  But actually, it&#8217;s a theme issue to decide how a title is drawn.  Here&#8217;s how to change your theme from centre-justified to left-justified.</p>
<p>First, find out what theme you&#8217;re using.  We&#8217;ll use gconftool to do this, because it&#8217;s the easiest to demonstrate.</p>
<p><tt>$ gconftool -g /apps/metacity/general/theme<br />
Human</tt></p>
<p>Okay, so we&#8217;re using Ubuntu&#8217;s Human theme here (you may well be using something else, of course; substitute its name for Human in what follows). Presumably you don&#8217;t want to work on the main system version of the theme, so take a personal copy and tell Metacity to use it:</p>
<p><tt>$ cp -R /usr/share/themes/Human ~/.themes/LeftHuman<br />
$ gconftool &#8211;type=string -s /apps/metacity/general/theme LeftHuman</tt></p>
<p>It will switch to the new theme, but obviously it will look identical at present.</p>
<p>Unfortunately, as I <a href="http://blogs.gnome.org/metacity/2008/05/30/themes/">mentioned the other day</a>, there&#8217;s no fancy editor for Metacity theme files: you&#8217;ll have to edit the file by hand.  But it only needs to be done once.  So, open ~/.themes/LeftHuman/metacity-1/metacity-theme-1.xml in your favourite editor and search for <tt>&lt;title</tt> (&#8221;title&#8221; preceded by a less-than sign, i.e. the opening of a &#8220;title&#8221; tag in XML).  You will see that any of these you find have a formula for their <tt>x</tt> attribute that involves taking widths and halving them, which screams about centring.  All you have to do is change this formula to zero for all the title tags in the file.</p>
<p>However, in the Ubuntu Human theme they obtain a shadow effect on the letters by printing the title multiple times at different tiny offsets.  For cases like these, you need to keep the offsets in order to keep the shadow effect.  So you&#8217;d change<br />
<tt>  &lt;title color=&#8221;shade/gtk:bg[SELECTED]/0.75&#8243;<br />
         x=&#8221;(3 `max` (width-title_width)) / 2 + 1&#8243;<br />
         y=&#8221;(((height - title_height) / 2) `max` 0) + 2&#8243;/&gt;<br />
  &lt;title color=&#8221;shade/gtk:bg[SELECTED]/0.7&#8243;<br />
         x=&#8221;(3 `max` (width-title_width)) / 2 + 2&#8243;<br />
         y=&#8221;(((height - title_height) / 2) `max` 0) + 2&#8243;/&gt;<br />
  &lt;title color=&#8221;shade/gtk:bg[SELECTED]/0.4&#8243;<br />
         x=&#8221;(3 `max` (width-title_width)) / 2 + 1&#8243;<br />
         y=&#8221;(((height - title_height) / 2) `max` 0) + 1&#8243;/&gt;<br />
  &lt;title color=&#8221;#ffffff&#8221;<br />
         x=&#8221;(3 `max` (width-title_width)) / 2&#8243;<br />
         y=&#8221;(((height - title_height) / 2) `max` 0)&#8221;/&gt;</tt></p>
<p>to:</p>
<p><tt>  &lt;title color=&#8221;shade/gtk:bg[SELECTED]/0.75&#8243;<br />
         x=&#8221;1&#8243;<br />
         y=&#8221;(((height - title_height) / 2) `max` 0) + 2&#8243;/&gt;<br />
  &lt;title color=&#8221;shade/gtk:bg[SELECTED]/0.7&#8243;<br />
         x=&#8221;2&#8243;<br />
         y=&#8221;(((height - title_height) / 2) `max` 0) + 2&#8243;/&gt;<br />
  &lt;title color=&#8221;shade/gtk:bg[SELECTED]/0.4&#8243;<br />
         x=&#8221;1&#8243;<br />
         y=&#8221;(((height - title_height) / 2) `max` 0) + 1&#8243;/&gt;<br />
  &lt;title color=&#8221;#ffffff&#8221;<br />
         x=&#8221;0&#8243;<br />
         y=&#8221;(((height - title_height) / 2) `max` 0)&#8221;/&gt;</tt></p>
<p>and so on throughout the file.</p>
<p>When you&#8217;re done:</p>
<p><tt>$ metacity-message reload-theme</tt></p>
<p>and presto!</p>
<p>You might say that this is a lot of work compared to just selecting a &#8220;left justify&#8221; button somewhere, and it is, but assuming your original theme file was free software, you can distribute derivatives of it.  So you should feel free to give your new left-justified version to your friends or stick it up on the web somewhere.  Don&#8217;t forget to add your name and copyright in the &lt;info&gt; section first.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.gnome.org/metacity/2008/05/31/justifying-window-titles/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Understanding Metacity themes</title>
		<link>http://blogs.gnome.org/metacity/2008/05/30/themes/</link>
		<comments>http://blogs.gnome.org/metacity/2008/05/30/themes/#comments</comments>
		<pubDate>Fri, 30 May 2008 20:36:56 +0000</pubDate>
		<dc:creator>Thomas Thurman</dc:creator>
		
		<category><![CDATA[Themes]]></category>

		<category><![CDATA[overview]]></category>

		<guid isPermaLink="false">http://blogs.gnome.org/metacity/2008/05/30/themes/</guid>
		<description><![CDATA[This is an article about how to theme Metacity.  It is a work in progress, and I have had to dig deeply to find some answers; I may well have made mistakes and I welcome corrections and suggestions.
GNOME lets you theme a bunch of different things, but we&#8217;re only talking about window border themes [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/monkeyc/180473681/" title="cleaning windows by monkeyc.net, on Flickr"><img src="http://farm1.static.flickr.com/48/180473681_3fbea1dc78.jpg" width="500" height="333" alt="cleaning windows" border="0" align="right"/></a>This is an article about how to theme Metacity.  It is a work in progress, and I have had to dig deeply to find some answers; I may well have made mistakes and I welcome corrections and suggestions.</p>
<p>GNOME lets you theme a bunch of different things, but we&#8217;re only talking about <b>window border</b> themes here, which some people call Metacity themes; <a href="http://en.wikipedia.org/wiki/Metacity#Themes">Wikipedia begins a sentence</a> with &#8220;Despite the incomplete state of Metacity theme development documentation&#8221;, and though there <em>is</em> <a href="http://svn.gnome.org/viewvc/metacity/trunk/doc/theme-format.txt?view=markup">documentation in the source</a>, apparently not many people find it, and it&#8217;s written more for programmers than theme designers.  Glynn Foster also wrote <a href="http://developer.gnome.org/doc/tutorials/metacity/metacity-themes.html">a very good introduction to Metacity themes</a> six years ago, but things have changed a little since then.  <a href="http://lists.freedesktop.org/archives/compiz/2006-September/000445.html">Metacity themes can also be used by Compiz</a>, and perhaps by other window managers for all I know.</p>
<p>So, a Metacity theme is a set of instructions about how to &#8220;decorate&#8221; (draw the borders around) a window.  Presumably you don&#8217;t want to style all windows identically, so the format lets you specify details for different kinds of window:</p>
<ul>
<li><b>state:</b> Every window must be in exactly one of these states: <b>normal</b>, <b>dialog</b>, <b>modal dialog</b> (i.e. a dialogue which means you can&#8217;t interact with the rest of the program while it&#8217;s up), <b>menu</b> (torn off from the main application, not that people do that much these days), <b>utility</b> (that is, palettes and toolboxes and things), and <b>border</b>.  X also allows a window to explicitly ask to be undecorated, but of course we don&#8217;t provide for those in a list of decoration instructions.</li>
<li><b>focused:</b> Every window is either the active window (which X people call &#8220;focused&#8221;), or it isn&#8217;t.</li>
<li><b>maximized:</b> Every window is either (fully) maximised (horizontal and vertical only don&#8217;t count), or it isn&#8217;t.</li>
<li><b>shaded:</b> Every window is either rolled up to show just its titlebar (which techies call &#8220;shaded&#8221; for some reason I can&#8217;t fathom), or it isn&#8217;t.</li>
<li><i>If a window is not fully maximised and not shaded,</i> it either allows horizontal resizing, or it doesn&#8217;t.</li>
<li><i>If a window is not fully maximised and not shaded,</i> it either allows vertical resizing, or it doesn&#8217;t.</li>
</ul>
<p><u><b>What&#8217;s in the file</b></u></p>
<p>The files must be called either
<ul>
<li><tt>~/.themes/<i>N</i>/metacity-1/metacity-theme-<i>V</i>.xml</tt><br /> for a theme used only by you, or</li>
<li><tt>/usr/share/themes/<i>N</i>/metacity-1/metacity-theme-<i>V</i>.xml</tt><br /> for a theme installed for all users.</li>
</ul>
<p>where <i>N</i> is the name of the theme and <i>V</i> is the version of the format.  Version 2, <a href="http://svn.gnome.org/viewvc/metacity?view=revision&#038;revision=2973">introduced in October 2006</a>, adds a few extra features, but it&#8217;s rarely used.  Version 1 is the original format.  The formats are fixed once they&#8217;re stable for both backwards and forwards compatibility; <a href="http://bugzilla.gnome.org/show_bug.cgi?id=482165">new features</a> can&#8217;t be added without introducing a new version number, which is why improvements come out rarely and in large clumps.  <tt>metacity-1</tt> in the names is a fossil and doesn&#8217;t mean version 1 of anything.</p>
<p>The metacity-theme-V.xml files are <a href="http://blogs.gnome.org/tthurman/2008/02/14/gmarkup/">GMarkup files</a>, which are very similar to XML.  For now, you actually have to write these in a text editor or something; you can either start with a blank page, or modify a theme someone else has made.  (I am thinking of writing a general theme editor program, but that&#8217;ll have to wait until I&#8217;ve reduced Metacity&#8217;s open bug queue a little.)  If you want to see a fully-fledged one, you can look at <a href="http://svn.gnome.org/viewvc/metacity/trunk/src/themes/Atlanta/metacity-theme-1.xml?view=markup">the current version of &#8220;Atlanta&#8221;</a>, one of the simplest themes, but even that is quite complicated-looking at first.</p>
<p>So, let&#8217;s talk about what actually goes inside the files.  As in any XML file, <tt>&lt;!&#8211; &#8230; &#8211;&gt;</tt> are comments.  At its most basic, it would go:<br />
<tt><br />
&lt;metacity_theme&gt;<br />
  &lt;!&#8211; Helper stuff: &#8211;&gt;<br />
  &lt;info &#8230;&gt; &lt;!&#8211; to be explained &#8211;&gt;<br />
  &lt;constant &#8230;&gt; &lt;!&#8211; maybe; to be explained &#8211;&gt;<br />
  &lt;draw_ops &#8230;&gt; &lt;!&#8211; maybe; to be explained &#8211;&gt;</p>
<p>  &lt;!&#8211; Things we build the top level onto: &#8211;&gt;<br />
  &lt;frame_geometry &#8230;&gt; &lt;!&#8211; to be explained &#8211;&gt;<br />
  &lt;frame_style &#8230;&gt; &lt;!&#8211; to be explained &#8211;&gt;<br />
  &lt;frame_style_set &#8230;&gt; &lt;!&#8211; to be explained &#8211;&gt;</p>
<p>  &lt;!&#8211; And the top level: &#8211;&gt;</p>
<p>  &lt;window type=&#8221;normal&#8221; style_set=&#8221;&#8230;&#8221; /&gt;<br />
  &lt;window type=&#8221;dialog&#8221; style_set=&#8221;&#8230;&#8221; /&gt;<br />
  &lt;window type=&#8221;modal_dialog&#8221; style_set=&#8221;&#8230;&#8221; /&gt;<br />
  &lt;window type=&#8221;menu&#8221; style_set=&#8221;&#8230;&#8221; /&gt;<br />
  &lt;window type=&#8221;utility&#8221; style_set=&#8221;&#8230;&#8221; /&gt;<br />
  &lt;window type=&#8221;border&#8221; style_set=&#8221;&#8230;&#8221; /&gt;<br />
&lt;/metacity_theme&gt;<br />
</tt></p>
<p><u><b>Matching windows</b></u></p>
<p><b>window:</b> You see that at the top level we have a list of &lt;window&gt; tags, one for each window state we discussed above.  The style_set argument of each of these gives the name of a frame_style_set.</p>
<p><b>frame_style_set:</b> &#8230;tells Metacity how to draw windows according to whether they&#8217;re focused or not, maximised or not, shaded or not, and allowing resizing vertically, horizontally, both, or neither.  It looks like this:</p>
<p><tt><br />
&lt;frame_style_set&gt;<br />
&lt;frame focus=&#8221;F&#8221; state=&#8221;S&#8221; resize=&#8221;R&#8221; style=&#8221;N&#8221;/&gt;<br />
&lt;frame&#8230; /&gt;<br />
&#8230;<br />
&lt;/frame_style_set&gt;<br />
</tt></p>
<p>where:<br />
<i>F</i> is yes for focused, no for unfocused<br />
<i>S</i> combines the shaded and maximized flags: normal, maximized, shaded, or maximized_and_shaded<br />
<i>R</i> represents resize permissions that the window gives us: none, vertical, horizontal, or both.  Frame settings for maximised windows, which can&#8217;t be resized, don&#8217;t have this attribute.<br />
<i>N</i> is the name of a <tt>frame_style</tt> to apply to a window which has these attributes.</p>
<p>A <tt>frame_style_set</tt> tag may also have a &#8220;parent&#8221; tag, which should be the name of another <tt>frame_style_set</tt>. This means that if Metacity wants to know about a kind of window which that <tt>frame_style_set</tt> doesn&#8217;t describe, it should look in the parent.  Most of the more complicated tags in Metacity theme files also have a &#8220;parent&#8221; attribute which work the same way.  This is particularly useful because, taken together, all the <tt>frame_style_set</tt>s in a theme file must be capable of matching every possible kind of window; if a window turns up that they can&#8217;t match, there will be an error at runtime.</p>
<p>Let&#8217;s recap what we&#8217;ve seen so far. The combination of a <tt>window</tt>, which matches a window&#8217;s state (normal, dialog, and so forth), with an entry in the corresponding <tt>frame_style_set</tt>, which matches its focus, shadedness, maximisedness, and resize permissions where relevant, will allow you to make a list of rules to match any window against.  The next piece of this puzzle lets you specify what Metacity should do with such windows once it&#8217;s matched them.</p>
<p><u><b>Actually drawing stuff</b></u></p>
<p><b>frame_style:</b> This is probably the most complicated part of the whole system. A <tt>frame_style</tt> is a series of <i>piece</i>s and <i>button</i>s.  It looks like this:</p>
<p><tt>&lt;frame_style name=&#8221;&#8230;&#8221; geometry=&#8221;G&#8221;&gt;<br />
&lt;piece position=&#8221;P&#8221;&gt;<br />
&lt;draw_ops&gt;<br />
&lt;/draw_ops&gt;<br />
&lt;/piece&gt;<br />
&#8230;<br />
&lt;button function=&#8221;F&#8221; state=&#8221;S&#8221; draw_ops=&#8221;D&#8221;/&gt;<br />
&lt;draw_ops&gt;<br />
&lt;/draw_ops&gt;<br />
&lt;/button&gt;<br />
&#8230;<br />
&lt;/frame_style&gt;</tt></p>
<p>The <b>pieces</b> are pieces of the window frame.  When Metacity draws a window frame, it renders its various pieces always in the same order.  The bolded parts are all the possible values of P:</p>
<ul>
<li>the <b>entire_background</b>, covering the whole frame</li>
<li>the <b>titlebar</b>, covering the entire background of the titlebar</li>
<li>the <b>titlebar_middle</b>, the part of the titlebar that doesn&#8217;t touch its edges</li>
<li>the <b>left_titlebar_edge</b>, <b>right_titlebar_edge</b>, <b>top_titlebar_edge</b>, and <b>bottom_titlebar_edge</b></li>
<li>the <b>title</b>, just exactly that area which is covered by the text on the titlebar</li>
<li>the <b>left_edge</b>, <b>right_edge</b>, and <b>bottom_edge</b> of the frame (yes, there is no top_edge: it&#8217;s identical to top_titlebar_edge, isn&#8217;t it?)</li>
<li>the <b>overlay</b>, which covers everything&#8211; the same as entire_background, but done last instead of first.</li>
</ul>
<p><i>What</i> Metacity draws in these pieces is decided by the theme.  If a <tt>frame_style</tt> or its parents don&#8217;t specify a particular piece, nothing will be drawn for that piece.  You have two ways to specify what to draw: one is that the <tt>piece</tt> tag can have a <tt>draw_ops</tt> tag inside it which lists a sequence of drawing operations in Metacity&#8217;s custom format.  <a href="http://bugzilla.gnome.org/show_bug.cgi?id=107012">You might ask why we don&#8217;t use SVG</a>; one answer is that SVG support wasn&#8217;t very strong when this format was designed, and another answer is that these days you can use SVG all you like; just include it as an image and Metacity will know what to do.  </p>
<p>An alternative to including a draw_ops tag inside a piece tag is to add a draw_ops attribute to the piece tag.  Then you can add a draw_ops tag at top level (inside the metacity_theme tag) with a name attribute, and Metacity will use that.  This is useful if you use similar draw_ops over and over.</p>
<p>I&#8217;m not going to document draw_ops at present, because this is already very long.  I will write it up later and link it from here.</p>
<p>The <b>button</b> tag tells Metacity how, but not where, to draw buttons.  Buttons are drawn after all the pieces are finished, and the way to draw them is also given using draw_ops.  You ought to provide buttons for all the possible kinds of button; if you don&#8217;t give one it won&#8217;t be drawn, which is unfortunate for the user who wants to use it:</p>
<ul>
<li><b>left_left_background</b>, <b>left_middle_background</b>, and <b>left_right_background</b> don&#8217;t represent buttons as such, but the background behind them, assuming there can be at most three buttons on the left.  These days there can be more, so the extra ones also use left_middle_background.</li>
<li><b>right_left_background</b>, <b>right_middle_background</b>, and <b>right_right_background</b> similarly.</li>
<li><b>close</b>, <b>minimize</b>, <b>maximize</b> are the obvious original three buttons.</li>
<li><b>menu</b> is the menu button you can click to get a list of actions you can perform on the window.</li>
<li><b>shade</b>, <b>above</b>, <b>stick</b> are similar to the original buttons but only allowed in version 2</li>
<li><b>unshade</b>, <b>unabove</b>, <b>unstick</b> are the toggled versions of these buttons.  Again, version 2 only.  <strike>It is not immediately apparent to me how the toggled version of <b>maximize</b> is generated, though I suppose I must have known at some point.</strike></li>
</ul>
<p><b>Update:</b> The reason there are toggled versions of shade, above, and stick, and not maximize, is that by the time you get this far you&#8217;ve probably already decided whether you&#8217;re drawing a maximised window.  So if you <em>are</em> drawing a maximised window, you can make the button called &#8220;maximize&#8221; look how you want the restore button to be; otherwise, make it look like you want the maximise button to be.</p>
<p>For each button tag you should also set a &#8220;state&#8221; attribute; this time the state is either <b>normal</b> (the way you see it most of the time), <b>pressed</b>, or <b>prelight</b> (this makes the buttons subtly light up when you hover over them).  You only really need &#8220;normal&#8221;, but the others are good to have too.</p>
<p>The &#8220;geometry&#8221; attribute of a <tt>frame_style</tt> tag is the name of a&#8230;</p>
<p><u><b>Geometry</b></u></p>
<p>The <b>geometry</b> tag defines the sizes of things around the window.  It is important, but not easy to explain, and again this file has gone on too long.  I&#8217;ll write it up later.</p>
<p><u><b>Other things which lie around a file</b></u></p>
<p>The most important other thing in a theme file is the metadata held in the <b>info</b> tag.  This contains a set of tags each of which contains some text explaining something about the theme itself, in a sort of <a href="http://en.wikipedia.org/wiki/Dublin_Core">Dublin Core</a> sort of way.  (Next time around, we should probably use the actual Dublin Core.)  The tags are <b>name</b>, <b>author</b>, <b>copyright</b>, <b>date</b>, and <b>description</b>.</p>
<p>Version 1 of the format had a <b>menu_icon</b> tag at top level, which let themes specify the icons beside options in the menu you get from the menu icon.  This has become redundant; the icons are taken from the icon theme!  The tag can still be used in all formats, but does nothing and is deprecated.</p>
<p>Version 2 of the format has a <b>fallback</b> tag at top level, which let the theme specify what icon a window should be considered to have if it doesn&#8217;t provide an icon of its own.  This should also be taken from the icon theme, <a href="http://bugzilla.gnome.org/show_bug.cgi?id=524343">if anyone fancies fixing it</a>, and the tag should also then be deprecated.  It shouldn&#8217;t be hard.</p>
<p><u><b>When you&#8217;re working on a theme</b></u></p>
<p>When you&#8217;re editing a theme, you can view it without using it on the whole desktop using<br />
<tt>metacity-theme-viewer <i>YourThemeName</i></tt></p>
<p>and view it on the whole desktop using<br />
<tt>gconftool -<!-- x -->-type=string -<!-- x -->-set /apps/metacity/general/theme <i>YourThemeName</i></tt></p>
<p>Whenever you change the selected theme in GConf, Metacity will load the newly-chosen theme.  This is how control-center does it.  But when you change a theme, as you&#8217;re working on it, you might want to ask Metacity to reload the theme which is currently used on the whole desktop to reflect your changes.  You can do this using the little-known <b><tt>metacity-message</tt></b> program, with the command <b>metacity-message reload-theme</b>.  This works by sending the ClientMessage <tt>_METACITY_RELOAD_THEME_MESSAGE</tt> to the root window, in case you&#8217;re interested.</p>
<p>Once you&#8217;re done with your theme, consider submitting it to <a href="http://art.gnome.org/themes/metacity/">the art.gnome.org site</a>, or <a href="http://www.gnome-look.org/index.php?xcontentmode=101">the gnome-look site</a>.</p>
<p><u><b>The future</b></u></p>
<p>Please feel free to link to this so people don&#8217;t have to keep asking the basic questions and can start asking the deeper ones.  One of the important deeper ones is: where should we go in the future?  Since this format is becoming something of a de facto standard between window managers, should we set up some kind of freedesktop.org standards discussion?  Would it be useful to spin off Metacity&#8217;s theme parsing code into a separate, LGPL-licensed library so that other applications could use it more easily?</p>
<p>What would a version 3 of this format look like?  Could we simplify the window / frame_style_set system? (I can imagine abolishing both, and being able to write <tt>&lt;frame_style for=&#8221;normal+unfocused+maximized&#8221;&gt;&#8230;</tt> and having Metacity assume it applied to all resize permissions and shadednesses.) Maybe we should try to do everything with SVG we can? Getting more wild and handwavey, is it worth keeping XML-like?  Maybe if other window managers were dealing with the files, .ini-style files would be more universally useful? Or perhaps not.  And then of course we need a decent graphical editor for it.  I have a few ideas, but if anyone fancies jumping in&#8230;</p>
<p><small><i>Photo: &#8220;Cleaning Windows&#8221;, cc-by-nc-sa, by <a href="http://flickr.com/people/monkeyc/">John Harvey</a>.</i></small></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.gnome.org/metacity/2008/05/30/themes/feed/</wfw:commentRss>
		</item>
		<item>
		<title>2.23.21</title>
		<link>http://blogs.gnome.org/metacity/2008/05/28/22321/</link>
		<comments>http://blogs.gnome.org/metacity/2008/05/28/22321/#comments</comments>
		<pubDate>Wed, 28 May 2008 02:30:58 +0000</pubDate>
		<dc:creator>Thomas Thurman</dc:creator>
		
		<category><![CDATA[2.23]]></category>

		<category><![CDATA[releases]]></category>

		<guid isPermaLink="false">http://blogs.gnome.org/metacity/2008/05/28/22321/</guid>
		<description><![CDATA[What is it ?
============
Metacity is a simple compositing window manager that integrates nicely with GNOME 2.
What&#8217;s changed ?
================
Thanks to Robert Escriva, Iain Holmes, Matt Krai, Thomas Thurman, and Chris Wang for improvements in this version.
  - Add shadow ability for menus and tooltips (Iain) (#517442 ) (GNOME bug 517524)
  - Fix possible crashes [...]]]></description>
			<content:encoded><![CDATA[<p>What is it ?<br />
============</p>
<p>Metacity is a simple compositing window manager that integrates nicely with GNOME 2.</p>
<p>What&#8217;s changed ?<br />
================</p>
<p>Thanks to Robert Escriva, Iain Holmes, Matt Krai, Thomas Thurman, and Chris Wang for improvements in this version.</p>
<p>  - Add shadow ability for menus and tooltips (Iain) (#517442 ) (<a href='http://bugzilla.gnome.org/show_bug.cgi?id=517524' class='bug-link bug-link-gnome'>GNOME bug 517524</a>)<br />
  - Fix possible crashes in compositor (Iain ) (<a href='http://bugzilla.gnome.org/show_bug.cgi?id=534569' class='bug-link bug-link-gnome'>GNOME bug 534569</a>) ( <a href='http://bugzilla.gnome.org/show_bug.cgi?id=528787' class='bug-link bug-link-gnome'>GNOME bug 528787</a>)<br />
  - Major reorganisation of compositor code (Iain)<br />
  - Initial version of XRender backend for the compositor (Iain)<br />
  - New basic public API for compositor (Iain)<br />
  - Window decoration updates colour when GTK theme changes (Robert ) (<a href='http://bugzilla.gnome.org/show_bug.cgi?id=511826' class='bug-link bug-link-gnome'>GNOME bug 511826</a>)<br />
  - Minor code cleanup for pedantic compilers (Thomas)<br />
  - Further code cleanup for pedantic compilers (Matt ) (<a href='http://bugzilla.gnome.org/show_bug.cgi?id=526049' class='bug-link bug-link-gnome'>GNOME bug 526049</a>)<br />
  - The atom list appears only once in the code (Thomas ) (<a href='http://bugzilla.gnome.org/show_bug.cgi?id=530843' class='bug-link bug-link-gnome'>GNOME bug 530843</a>)<br />
  - Don&#8217;t attempt to read attributes of invalid windows (Chris ) (<a href='http://bugzilla.gnome.org/show_bug.cgi?id=530485' class='bug-link bug-link-gnome'>GNOME bug 530485</a>)</p>
<p>Translations<br />
  Khaled Hosny (ar), Gabor Kelemen (hu), Kjartan Maraas (nb), Tino Meinen (nl), Theppitak Karoonboonyanan (th)</p>
<p>Where can I get it ?<br />
====================</p>
<p>As 780eddd5a57559c6255d7d2440f73114  <a href="http://download.gnome.org/sources/metacity/2.23/metacity-2.23.21.tar.bz2">bz2</a> or 75328c77f6de4e1c5ae638f3f0a4b0b6  <a href="http://download.gnome.org/sources/metacity/2.23/metacity-2.23.21.tar.gz">gz</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.gnome.org/metacity/2008/05/28/22321/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Xinerama</title>
		<link>http://blogs.gnome.org/metacity/2008/05/21/xinerama/</link>
		<comments>http://blogs.gnome.org/metacity/2008/05/21/xinerama/#comments</comments>
		<pubDate>Wed, 21 May 2008 00:29:51 +0000</pubDate>
		<dc:creator>Thomas Thurman</dc:creator>
		
		<category><![CDATA[Bugs and issues]]></category>

		<guid isPermaLink="false">http://blogs.gnome.org/metacity/2008/05/21/xinerama/</guid>
		<description><![CDATA[Xinerama: &#8220;As of 2007-09-20 10:44, this project is no longer under active development.&#8221;
Does this mean Metacity shouldn&#8217;t support it any more?  Does everyone use xrandr these days?
]]></description>
			<content:encoded><![CDATA[<p>Xinerama: <a href="http://sourceforge.net/projects/xinerama">&#8220;As of 2007-09-20 10:44, this project is no longer under active development.&#8221;</a></p>
<p>Does this mean Metacity shouldn&#8217;t support it any more?  Does everyone use xrandr these days?</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.gnome.org/metacity/2008/05/21/xinerama/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Build systems and version control</title>
		<link>http://blogs.gnome.org/metacity/2008/05/16/waf-bzr-git/</link>
		<comments>http://blogs.gnome.org/metacity/2008/05/16/waf-bzr-git/#comments</comments>
		<pubDate>Fri, 16 May 2008 02:37:45 +0000</pubDate>
		<dc:creator>Thomas Thurman</dc:creator>
		
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://blogs.gnome.org/metacity/2008/05/16/build-systems-and-version-control/</guid>
		<description><![CDATA[In  GNOME bug 532353, Elijah suggests switching Metacity to waf.  Your thoughts on this are requested.  I will build this into the test scripts whether or not we go with it in the long term.
Also, no work is getting done (or at least checked in) until the openssh débâcle is over and [...]]]></description>
			<content:encoded><![CDATA[<p>In  <a href='http://bugzilla.gnome.org/show_bug.cgi?id=532353' class='bug-link bug-link-gnome'>GNOME bug 532353</a>, Elijah suggests switching Metacity to <a href="http://code.google.com/p/waf/">waf</a>.  Your thoughts on this are requested.  I will build this into the test scripts whether or not we go with it in the long term.</p>
<p>Also, no work is getting done (or at least checked in) until <a href="http://mail.gnome.org/archives/devel-announce-list/2008-May/msg00002.html">the openssh débâcle is over and gone</a>.  Would this be a good excuse to move to bzr or git?  Advocate please!  I like bzr, but mainly because I already use it a lot and I love Python.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.gnome.org/metacity/2008/05/16/waf-bzr-git/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Bug hitlist, first week of May</title>
		<link>http://blogs.gnome.org/metacity/2008/05/03/bug-hitlist-first-week-of-may/</link>
		<comments>http://blogs.gnome.org/metacity/2008/05/03/bug-hitlist-first-week-of-may/#comments</comments>
		<pubDate>Sat, 03 May 2008 21:50:38 +0000</pubDate>
		<dc:creator>Thomas Thurman</dc:creator>
		
		<category><![CDATA[Bug hitlist]]></category>

		<guid isPermaLink="false">http://blogs.gnome.org/metacity/2008/05/03/bug-hitlist-first-week-of-may/</guid>
		<description><![CDATA[Hooray, hooray, the first of May, Metacity unit and regression testing begins today.  Okay, so it doesn&#8217;t scan as well as the original, but it&#8217;s almost as exciting.  Well, perhaps.  I (Thomas) am planning the framework at present, have something fairly solid in my head now, and will probably post something up [...]]]></description>
			<content:encoded><![CDATA[<p>Hooray, hooray, the first of May, Metacity unit and regression testing begins today.  Okay, so it doesn&#8217;t scan as well as the original, but it&#8217;s almost as exciting.  Well, perhaps.  I (Thomas) am planning the framework at present, have something fairly solid in my head now, and will probably post something up here in the next few days when I have it planned out so everyone else can argue it :)</p>
<p>As well as this, here are the bugs on the front burner for <i>me</i> for <i>this</i> week: if you want something else fixed, talk to us about it (and send us patches!):</p>
<p> * <a href='http://bugzilla.gnome.org/show_bug.cgi?id=499996' class='bug-link bug-link-gnome'>GNOME bug 499996</a> (possibly aka  <a href='http://bugs.debian.org/443933' class='bug-link bug-link-debian'>Debian bug 443933</a> possibly aka  <a href='http://bugs.debian.org/460712' class='bug-link bug-link-debian'>Debian bug 460712</a>)<br /> 
* <a href='https://launchpad.net/bugs/221144' class='bug-link bug-link-launchpad'>Launchpad bug 221144</a> (possibly aka  <a href='http://bugs.debian.org/476386' class='bug-link bug-link-debian'>Debian bug 476386</a>) (may be related to the above, although perhaps not)<br /> 
* <a href='https://launchpad.net/bugs/216049' class='bug-link bug-link-launchpad'>Launchpad bug 216049</a> - restore to wrong workspace<br /> 
* <a href='http://bugzilla.gnome.org/show_bug.cgi?id=468075' class='bug-link bug-link-gnome'>GNOME bug 468075</a> aka  <a href='https://launchpad.net/bugs/133541' class='bug-link bug-link-launchpad'>Launchpad bug 133541</a> - vertical maximisation ignores struts, apparent regression<br /> 
* <a href='http://bugzilla.gnome.org/show_bug.cgi?id=528927' class='bug-link bug-link-gnome'>GNOME bug 528927</a> &#8212; something to do with _net_wm_state_demands_attention, details a little unclear<br />
If you think it should be different, feel free to advocate below.</p>
<p>Are there distributions not using Launchpad which have a systematic way to link to upstream bugs that we could make use of for keeping people installed?</p>
<p>This is the first time we&#8217;ve used <a href="http://blogs.gnome.org/metacity/category/bugs-and-issues/bug-hitlist/">the new &#8220;bug hitlist&#8221; tag</a>, which may become partly automated like Metacity Journal is.  If you&#8217;re working on a bug in Metacity and you have an @gnome.org address, feel free to post bug hitlist entries; if you are and you don&#8217;t, feel free to comment to one of them and ask for one to be made or added to.</p>
<p>I shall post Metacity Journal tomorrow, I think, but I just wanted to acknowledge the particular good contributions that Santanu Chatterjee has been making on fixing problems with keyboard grabs during drag-and-drop.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.gnome.org/metacity/2008/05/03/bug-hitlist-first-week-of-may/feed/</wfw:commentRss>
		</item>
		<item>
		<title>2.23.13 out</title>
		<link>http://blogs.gnome.org/metacity/2008/04/27/22313-out/</link>
		<comments>http://blogs.gnome.org/metacity/2008/04/27/22313-out/#comments</comments>
		<pubDate>Sun, 27 Apr 2008 23:47:13 +0000</pubDate>
		<dc:creator>Thomas Thurman</dc:creator>
		
		<category><![CDATA[2.23]]></category>

		<guid isPermaLink="false">http://blogs.gnome.org/metacity/2008/04/27/22313-out/</guid>
		<description><![CDATA[What is it ?
Metacity is a simple compositing window manager that integrates nicely with GNOME 2.
What&#8217;s changed ?
Thanks to Erwann Chenede and Carlos Garnacho for improvements in this version.

Re-enable cascading (Erwann ) (GNOME bug #529925)
Propagate opacity to frame windows (spec compliance!) (Carlos)

Translations
None this time!
Where can I get it ?
http://download.gnome.org/sources/metacity/2.23/
c1c7f4ce88c42515917278d136080537  bzip2
5071f294e6fd4829db60fe7a6a5c705c  gzip
]]></description>
			<content:encoded><![CDATA[<p><b>What is it ?</b></p>
<p>Metacity is a simple compositing window manager that integrates nicely with GNOME 2.</p>
<p><b>What&#8217;s changed ?</b></p>
<p>Thanks to Erwann Chenede and Carlos Garnacho for improvements in this version.</p>
<ul>
<li>Re-enable cascading (Erwann ) (<a href='http://bugzilla.gnome.org/show_bug.cgi?id=529925' class='bug-link bug-link-gnome'>GNOME bug #529925</a>)</li>
<li>Propagate opacity to frame windows (spec compliance!) (Carlos)</li>
</ul>
<p><i>Translations</i><br />
None this time!</p>
<p><b>Where can I get it ?</b></p>
<p><a href="http://download.gnome.org/sources/metacity/2.23/">http://download.gnome.org/sources/metacity/2.23/</a></p>
<p>c1c7f4ce88c42515917278d136080537  <a href="http://download.gnome.org/sources/metacity/2.23/metacity-2.23.13.tar.bz2">bzip2</a><br />
5071f294e6fd4829db60fe7a6a5c705c  <a href="http://download.gnome.org/sources/metacity/2.23/metacity-2.23.13.tar.gz">gzip</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.gnome.org/metacity/2008/04/27/22313-out/feed/</wfw:commentRss>
		</item>
		<item>
		<title>2008-04-27: Metacity given enough eyeballs</title>
		<link>http://blogs.gnome.org/metacity/2008/04/27/2008-04-27-metacity-given-enough-eyeballs/</link>
		<comments>http://blogs.gnome.org/metacity/2008/04/27/2008-04-27-metacity-given-enough-eyeballs/#comments</comments>
		<pubDate>Sun, 27 Apr 2008 20:27:52 +0000</pubDate>
		<dc:creator>Thomas Thurman</dc:creator>
		
		<category><![CDATA[Bugs and issues]]></category>

		<category><![CDATA[journal]]></category>

		<guid isPermaLink="false">http://blogs.gnome.org/metacity/2008/04/27/2008-04-27-metacity-given-enough-eyeballs/</guid>
		<description><![CDATA[
Eric Raymond has proposed in his essay &#8220;The Cathedral and the Bazaar&#8221; that given enough eyeballs, all bugs are shallow, using Linux as a particular example.  The idea may be true in the abstract, but in practice even if a project has many users it won&#8217;t necessarily have enough eyeballs, and most users of [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://arglist.com/cgi-bin/image?gallery=st_albans_pubs&amp;name=20031112-018"><img src="http://www.gnome.org/~tthurman/pics/metacity/pubs/20031112-018t.jpg" align="right" width="200" height="150" alt="Ye Olde Fighting Cocks, St Albans. Photo by Gary Houston, public domain." /></a></p>
<p>Eric Raymond has proposed in his essay &#8220;<a href="http://catb.org/~esr/writings/cathedral-bazaar/">The Cathedral and the Bazaar</a>&#8221; that <i><a href="http://en.wikipedia.org/wiki/Linus%27s_Law">given enough eyeballs, all bugs are shallow</a></i>, using Linux as a particular example.  The idea may be true in the abstract, but in practice even if a project has many users it won&#8217;t necessarily have enough eyeballs, and most users of the program would just never be inspired to take printouts of the code to bed: sometimes this is because most users of the program aren&#8217;t programmers, other times, because the code is badly-commented and obscure, and still other times because <a href="http://use.perl.org/~scrottie/journal/36134">maintenance, frankly, often doesn&#8217;t seem immediately as much fun</a> as new development.  (Not that long ago, someone sent <a href="http://postsecret.blogspot.com">PostSecret</a> the back of a packet of Viagra <a href="http://stylizethis.blogspot.com/2008/01/postsecret-getting-through-deed.html">where they&#8217;d scribbled</a>: &#8220;These are for my wife&#8217;s benefit.  When I&#8217;m with my new love interest, I don&#8217;t need them.&#8221;)</p>
<p>But does this mean that we should just throw out reliable code every five years?  By no means!  That would just mean we had to go over and over through teething troubles and never reach maturity.  What we need is a way to make this code maintainable, so that it may asymptotically approach perfection, firstly by maintainable coding practices and secondly by having external support systems.  (Knuth has the asymptotic perfection approach to development of T<sub>E</sub>Χ, of course; interestingly he also <a href="http://www.informit.com/articles/article.aspx?p=1193856">recently said</a> that the idea of unit testing didn&#8217;t appeal to him because he rarely needed feedback on what would work and what wouldn&#8217;t; James Cape <a href="http://jcape.ignore-your.tv/2008/04/26/unknown-environments/">pointed out</a> that this runs rather counter to the idea of code maintenance.)  Elijah <a href="http://svn.gnome.org/viewvc/metacity/trunk/doc/code-overview.txt?revision=1837&amp;view=markup">used the analogy</a> of being dropped in an unfamiliar town with no street signs, but in the end it <em>should</em> be possible to drop people in the town and expect them to find their way, given some help.</p>
<p>The kernel <i>does</i> <a href="http://kernelnewbies.org">have this kind of structure</a>, of course, and that&#8217;s part of why it can be used as an example of the &#8220;given enough eyeballs&#8221; dictum in the first place.  The challenge for the rest of us is to <a href="http://live.gnome.org/GnomeLove">find ways to help paint the street signs</a>, both through keeping the code maintainable and through external structures.</p>
<p>This is all written from Thomas&#8217;s private opinion, and not the opinion of Metacity or GNOME or anyone else, really.  But this is here to say that a year ago Thomas, in fixing a complicated bug, accidentally removed Metacity&#8217;s ability to stack up several small windows in a cascade.  On Friday, in  <a href='http://bugzilla.gnome.org/show_bug.cgi?id=529925' class='bug-link bug-link-gnome'>GNOME bug 529925</a>, Erwann Chenede found the two missing lines and put them back in.  <a href="http://blogs.gnome.org/metacity/2008/04/27/22313-out/">A release</a> is imminent.  I am heartened that Erwann read the code, arrived out of the blue, and found the bug.  And I would like Metacity to have the sort of code where people take the printouts to bed to read.</p>
<p>(Ah, so good to see the script picked a photo of the Fighting Cocks for this entry where I&#8217;ve had many happy conversations over many pints.)</p>
<p><b>Bugs</b></p>
<p>Much busy activity, especially with making sure our bug tracker knows about <a href="https://launchpad.net/metacity">everything Launchpad knows about Metacity</a>; in particular,
<ul>
<li> <a href='http://bugzilla.gnome.org/show_bug.cgi?id=530056' class='bug-link bug-link-gnome'>GNOME bug 530056</a> - someone says Metacity becomes a zombie process when you start evince.  Anyone else seen this?  It&#8217;s never happened to me.
</li>
</ul>
<p><b>Checkins on trunk</b>
<ul>
<li><a href="http://svn.gnome.org/viewvc/metacity?rev=3667&amp;view=rev">ChangeLog, src/core/window.c</a> by tthurman</li>
<li><a href="http://svn.gnome.org/viewvc/metacity?rev=3668&amp;view=rev">ChangeLog, src/ui/preview-widget.c</a> by tthurman</li>
<li><a href="http://svn.gnome.org/viewvc/metacity?rev=3669&amp;view=rev">ChangeLog, src/Makefile.am, src/metacity.desktop.in</a> by tthurman</li>
<li><a href="http://svn.gnome.org/viewvc/metacity?rev=3673&amp;view=rev">ChangeLog, src/core/prefs.c</a> by tthurman</li>
<li><a href="http://svn.gnome.org/viewvc/metacity?rev=3677&amp;view=rev">ChangeLog, src/core/session.c</a> by jensg</li>
<li><a href="http://svn.gnome.org/viewvc/metacity?rev=3678&amp;view=rev">ChangeLog, src/core/compositor.c</a> by iain</li>
<li><a href="http://svn.gnome.org/viewvc/metacity?rev=3681&amp;view=rev">ChangeLog, src/Makefile.am</a> by lucasr</li>
<li><a href="http://svn.gnome.org/viewvc/metacity?rev=3685&amp;view=rev">ChangeLog, src/core/effects.c</a> by tthurman</li>
<li><a href="http://svn.gnome.org/viewvc/metacity?rev=3686&amp;view=rev">ChangeLog, configure.in</a> by tthurman</li>
<li><a href="http://svn.gnome.org/viewvc/metacity?rev=3688&amp;view=rev">ChangeLog</a> by tthurman</li>
<li><a href="http://svn.gnome.org/viewvc/metacity?rev=3691&amp;view=rev">ChangeLog, configure.in</a> by tthurman</li>
<li><a href="http://svn.gnome.org/viewvc/metacity?rev=3692&amp;view=rev">ChangeLog, src/core/compositor.c</a> by tthurman</li>
<li><a href="http://svn.gnome.org/viewvc/metacity?rev=3693&amp;view=rev">ChangeLog, src/core/place.c</a> by tthurman</li>
</ul>
<p><b>Links</b></p>
<p>Hmm, kind of quiet.
<ul>
<li><a href="http://jaysonrowe.wordpress.com/2008/04/17/ubuntu-bug-99508/">Jayson Rowe says he likes Metacity as a default</a></li>
</ul>
<p><b>Translations</b>
<ul>
<li>On branches/gnome-2-22: <a href="http://svn.gnome.org/viewvc/metacity?rev=3684&amp;view=rev">et</a> by plaes, <a href="http://svn.gnome.org/viewvc/metacity?rev=3679&amp;view=rev">he</a> by yairhr, <a href="http://svn.gnome.org/viewvc/metacity?rev=3675&amp;view=rev">nn</a> by eskildh, <a href="http://svn.gnome.org/viewvc/metacity?rev=3672&amp;view=rev">tr</a> by bcicek</li>
<li>On trunk: <a href="http://svn.gnome.org/viewvc/metacity?rev=3670&amp;view=rev">es</a> by jorgegonz, <a href="http://svn.gnome.org/viewvc/metacity?rev=3683&amp;view=rev">he</a> by yairhr, <a href="http://svn.gnome.org/viewvc/metacity?rev=3674&amp;view=rev">nn</a> by eskildh, <a href="http://svn.gnome.org/viewvc/metacity?rev=3682&amp;view=rev">sl</a> by mateju, <a href="http://svn.gnome.org/viewvc/metacity?rev=3671&amp;view=rev">tr</a> by bcicek</li>
</ul>
<p><i>Photo: Ye Olde Fighting Cocks, St Albans. Photo by Gary Houston, public domain.</i></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.gnome.org/metacity/2008/04/27/2008-04-27-metacity-given-enough-eyeballs/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 1.192 seconds -->
<!-- Cached page served by WP-Cache -->
