<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>tag:www.nabble.com,2006:forum-1332</id>
	<title>Nabble - Gtk+ - Dev - General</title>
	<updated>2008-09-05T13:44:01Z</updated>
	<link rel="self" type="application/atom+xml" href="http://www.nabble.com/Gtk+---Dev---General-f1332.xml" />
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Gtk%2B---Dev---General-f1332.html" />
	<subtitle type="html"></subtitle>
	
<entry>
	<id>tag:www.nabble.com,2006:post-19339144</id>
	<title>Re: glib on Symbian</title>
	<published>2008-09-05T13:44:01Z</published>
	<updated>2008-09-05T13:44:01Z</updated>
	<author>
		<name>Behdad Esfahbod-3</name>
	</author>
	<content type="html">sparkymat wrote:
&lt;br&gt;&amp;gt; We are doing what you have mentioned above, i.e. defining name of global
&lt;br&gt;&amp;gt; variables as function calls returning a pointer.
&lt;br&gt;&lt;br&gt;So, this limitation is *only* for the simulator, not the actual Symbian
&lt;br&gt;running on mobile hardware, right? &amp;nbsp;If that's the case I believe the simulator
&lt;br&gt;should be fixed instead.
&lt;br&gt;&lt;br&gt;behdad
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; For example, in gdate.c,
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; static gboolean using_twodigit_years = FALSE;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; would become
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; #if defined(__SYMBIAN32__) &amp;&amp; defined(EMULATOR)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PLS(using_twodigit_years,gdate, gboolean)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#define using_twodigit_years &amp;nbsp;
&lt;br&gt;&amp;gt; (*FUNCTION_NAME(using_twodigit_years &amp;nbsp;,gdate)()
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; #else
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; static gboolean using_twodigit_years = FALSE;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; #endif
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; where the PLS() macro will add the specified variable to the Process
&lt;br&gt;&amp;gt; Local Storage, and the define will map it to a function pointer.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; This is repeated for all write-able static data (WSD).
&lt;/div&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;gtk-devel-list mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19339144&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gtk-devel-list@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/glib-on-Symbian-tp19324426p19339144.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19331774</id>
	<title>Re: Slaving the GTK+ main loop to an external main loop</title>
	<published>2008-09-05T06:51:14Z</published>
	<updated>2008-09-05T06:51:14Z</updated>
	<author>
		<name>Owen Taylor</name>
	</author>
	<content type="html">On Mon, 2008-09-01 at 15:11 -0400, Owen Taylor wrote:
&lt;br&gt;&amp;gt; One distinct problem for ports of GTK+ to other windowing systems has
&lt;br&gt;&amp;gt; been dealing with modal operations in the windowing systems API; 
&lt;br&gt;&lt;br&gt;[...]
&lt;br&gt;&lt;br&gt;&amp;gt; So all we have to do is do everything before the dispatch() step in
&lt;br&gt;&amp;gt; the thread, signal the main thread do the dispatch() call, wait for
&lt;br&gt;&amp;gt; that to complete, then continue.
&lt;br&gt;&lt;br&gt;I spent some time this week trying to get the idea implemented on OS X;
&lt;br&gt;although I got it working OK (I've attached the patch for reference)
&lt;br&gt;there were some significant bottlenecks that I wanted to write up here
&lt;br&gt;in case anyone else tries this in the future.
&lt;br&gt;&lt;br&gt;The big problems centered around loop ownership and reentrancy -
&lt;br&gt;inherently the main thread has to be the &amp;quot;owner&amp;quot; of the main loop - the
&lt;br&gt;caller of g_main_context_acquire(). If the helper thread is the owner of
&lt;br&gt;the main context, then you will get deadlocks if the application calls a
&lt;br&gt;function like gtk_dialog_run() because the main thread is waiting for
&lt;br&gt;the helper thread to process events to finish the dialog, but the helper
&lt;br&gt;thread is waiting for the main thread to do the dispatch part of the
&lt;br&gt;main loop.
&lt;br&gt;&lt;br&gt;Once the main thread is the loop owner, then you have the problem that
&lt;br&gt;the main loop iteration in the helper thread is only partially in sync
&lt;br&gt;with the operation of the main thread... so a lot of the assumptions
&lt;br&gt;that the GLib main loop makes don't fully work; attempts to do recursive
&lt;br&gt;main loop iterations in particular tend to trigger scary warnings. Also,
&lt;br&gt;you have problems where GTK+ code adds an event to the event queue in
&lt;br&gt;the expectation that the main thread is not blocking, but it is blocking
&lt;br&gt;in the other thread; a call to g_main_context_wakeup() needs to be
&lt;br&gt;added.
&lt;br&gt;&lt;br&gt;Efficiency is also pretty bad. You also get interactions like:
&lt;br&gt;&lt;br&gt;&amp;nbsp;- Window is resized, and a GDK event is queued
&lt;br&gt;&amp;nbsp;- Main thread calls g_main_context_wakeup() to wake up the helper
&lt;br&gt;&amp;nbsp; &amp;nbsp;thread.
&lt;br&gt;&amp;nbsp;- Helper thread sees the event has been queued and then sends a Cocoa
&lt;br&gt;&amp;nbsp; &amp;nbsp;event to wake up the main thread.
&lt;br&gt;&amp;nbsp;- Main thread wakes up and dispatches the event
&lt;br&gt;&lt;br&gt;There were also some quartz specific issues: for one thing, window
&lt;br&gt;resizing was my main target and it there's no easy begin/end
&lt;br&gt;notifications for that; you can use CFRunLoopObserver to detect entry
&lt;br&gt;and leaving the run loop, but that appears as a separate Enter/Leave
&lt;br&gt;notification for every motion event, which makes things even more
&lt;br&gt;inefficient since we have to keep starting and stopping the iteration
&lt;br&gt;in the helper thread.
&lt;br&gt;&lt;br&gt;A second quartz specific problem was simply that I was trying to use the
&lt;br&gt;same helper thread for poll() emulation and for iteration during modal
&lt;br&gt;operations so things got pretty hairy: lots of different states in the
&lt;br&gt;state machine.
&lt;br&gt;&lt;br&gt;During work on this approach, I realized that a more simple and
&lt;br&gt;efficient approach was possible on OS X based on CFRunLoopObserver...
&lt;br&gt;you could simply call the g_main_context_iteration() functions directly
&lt;br&gt;at the appropriate points in the native run loop. An alternate patch
&lt;br&gt;based on that approach came out quite a bit better and can be found at:
&lt;br&gt;&lt;br&gt;&amp;nbsp;&lt;a href=&quot;http://bugzilla.gnome.org/show_bug.cgi?id=550942&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bugzilla.gnome.org/show_bug.cgi?id=550942&lt;/a&gt;&lt;br&gt;&lt;br&gt;So the patch attached below, is in my opinion, a dead end as far as OS X
&lt;br&gt;is concerned. I think my conclusion on the general technique is that it
&lt;br&gt;is workable in situations when nothing else is possible, but shouldn't
&lt;br&gt;be a first choice.
&lt;br&gt;&lt;br&gt;- Owen
&lt;br&gt;&lt;br&gt;&lt;br /&gt; &lt;br /&gt;_______________________________________________
&lt;br&gt;gtk-devel-list mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19331774&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gtk-devel-list@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&lt;/a&gt;&lt;br&gt;&lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://www.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;main-loop-separate-thread.patch&lt;/strong&gt; (23K) &lt;a href=&quot;http://www.nabble.com/attachment/19331774/0/main-loop-separate-thread.patch&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Slaving-the-GTK%2B-main-loop-to-an-external-main-loop-tp19259370p19331774.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19328982</id>
	<title>Re: glib on Symbian</title>
	<published>2008-09-05T04:02:26Z</published>
	<updated>2008-09-05T04:02:26Z</updated>
	<author>
		<name>Tor Lillqvist</name>
	</author>
	<content type="html">&lt;div class='shrinkable-quote'&gt;&amp;gt; For example, in gdate.c,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; static gboolean using_twodigit_years = FALSE;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; would become
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; #if defined(__SYMBIAN32__) &amp;&amp; defined(EMULATOR)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;PLS(using_twodigit_years,gdate, gboolean)
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;#define using_twodigit_years &amp;nbsp; (*FUNCTION_NAME(using_twodigit_years
&lt;br&gt;&amp;gt; ,gdate)()
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; #else
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; static gboolean using_twodigit_years = FALSE;
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; #endif
&lt;/div&gt;&lt;br&gt;OK, I see, I think it would be cleaner to do it like this: in gdate.c
&lt;br&gt;the only change would be to have:
&lt;br&gt;&lt;br&gt;GLIB_STATIC (gboolean, using_twodigit_years, FALSE);
&lt;br&gt;&lt;br&gt;and then have the GLIB_STATIC macro defined in some suitable header:
&lt;br&gt;&lt;br&gt;#if defined(__SYMBIAN32__) &amp;&amp; defined(EMULATOR)
&lt;br&gt;# &amp;nbsp;define GLIB_STATIC(type, name, initvalue) \
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; PLS(name, type) \
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; static type PTR_name(void) \
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; { \
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; static type value = initvalue; \
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return &amp;value; \
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;#else
&lt;br&gt;# &amp;nbsp;define GLIB_STATIC(type, name, initvalue) type name = initvalue
&lt;br&gt;#endif
&lt;br&gt;&lt;br&gt;and then have a preprocessing script that changes all occurences of
&lt;br&gt;identifiers that are seen in GLIB_STATIC() macros to
&lt;br&gt;(*PTR_identiifier) instead, i.e. for instance it would change all uses
&lt;br&gt;of using_twodigit_years to *(PTR_using_twodigit_years) after it sees
&lt;br&gt;the GLIB_STATIC (gboolean, using_twodigit_years, FALSE) in gdate.c
&lt;br&gt;&lt;br&gt;(This is just a quick sketch, no idea if it actually would work in
&lt;br&gt;general, etc.)
&lt;br&gt;&lt;br&gt;--tml
&lt;br&gt;_______________________________________________
&lt;br&gt;gtk-devel-list mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19328982&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gtk-devel-list@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/glib-on-Symbian-tp19324426p19328982.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19328765</id>
	<title>Re: glib on Symbian</title>
	<published>2008-09-05T03:46:23Z</published>
	<updated>2008-09-05T03:46:23Z</updated>
	<author>
		<name>sparkymat</name>
	</author>
	<content type="html">&lt;div dir=&quot;ltr&quot;&gt;&lt;div class=&quot;gmail_quote&quot;&gt;&lt;blockquote class=&quot;gmail_quote&quot; style=&quot;border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;&quot;&gt;Please show some concrete (minimal) example... I have a hard time to&lt;br&gt;

understand *exactly* what you mean.&lt;br&gt;
&lt;br&gt;
There must be some better way around this than adding 2000 ifdefs all&lt;br&gt;
around the code, which frankly doesn&amp;#39;t sound acceptable to me. Sure,&lt;br&gt;
some ifdefs can be added, but in as few places as possible. Some&lt;br&gt;
clever use of the C preprocessor defining names of &amp;nbsp;global variables&lt;br&gt;
as function calls retuning a pointer to function-local static data&lt;br&gt;
instead, or some clever preprocessing script used for Symbian&lt;br&gt;
compilations, or whatever.&lt;br&gt;
&lt;br&gt;
--tml&lt;/blockquote&gt;&lt;div&gt;&lt;br&gt;We are doing what you have mentioned above, i.e. defining name of global variables as function calls returning a pointer. &lt;br&gt;&lt;br&gt;For example, in gdate.c,&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; static gboolean using_twodigit_years = FALSE;&lt;br&gt;
&lt;br&gt;would become &lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #if defined(__SYMBIAN32__) &amp;amp;&amp;amp; defined(EMULATOR)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PLS(using_twodigit_years,gdate, gboolean)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #define using_twodigit_years&amp;nbsp;&amp;nbsp; (*FUNCTION_NAME(using_twodigit_years&amp;nbsp; ,gdate)()&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; #else&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static gboolean using_twodigit_years = FALSE;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endif&lt;br&gt;&lt;br&gt;where the PLS() macro will add the specified variable to the Process Local Storage, and the define will map it to a function pointer.&lt;br&gt;
&lt;br&gt;This is repeated for all write-able static data (WSD).&lt;br&gt;&lt;br&gt;&lt;/div&gt;
&lt;br /&gt;_______________________________________________
&lt;br&gt;gtk-devel-list mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19328765&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gtk-devel-list@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/glib-on-Symbian-tp19324426p19328765.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19328132</id>
	<title>Re: glib on Symbian</title>
	<published>2008-09-05T02:51:57Z</published>
	<updated>2008-09-05T02:51:57Z</updated>
	<author>
		<name>Tor Lillqvist</name>
	</author>
	<content type="html">&amp;gt; There is one more issue that needs addressing. The Symbian OS emulator does
&lt;br&gt;&amp;gt; not support global static data in libraries. We found a fair amount of
&lt;br&gt;&amp;gt; global static data in the code and to work around these, we have symbian
&lt;br&gt;&amp;gt; specific code inserted within '#ifdef SYMBIAN32' . The problem here is that
&lt;br&gt;&amp;gt; these changes are peppered throughout the code and rack up nearly 2000 lines
&lt;br&gt;&amp;gt; of changed code.
&lt;br&gt;&lt;br&gt;Please show some concrete (minimal) example... I have a hard time to
&lt;br&gt;understand *exactly* what you mean.
&lt;br&gt;&lt;br&gt;There must be some better way around this than adding 2000 ifdefs all
&lt;br&gt;around the code, which frankly doesn't sound acceptable to me. Sure,
&lt;br&gt;some ifdefs can be added, but in as few places as possible. Some
&lt;br&gt;clever use of the C preprocessor defining names of &amp;nbsp;global variables
&lt;br&gt;as function calls retuning a pointer to function-local static data
&lt;br&gt;instead, or some clever preprocessing script used for Symbian
&lt;br&gt;compilations, or whatever.
&lt;br&gt;&lt;br&gt;--tml
&lt;br&gt;_______________________________________________
&lt;br&gt;gtk-devel-list mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19328132&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gtk-devel-list@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/glib-on-Symbian-tp19324426p19328132.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19324426</id>
	<title>glib on Symbian</title>
	<published>2008-09-04T20:49:18Z</published>
	<updated>2008-09-04T20:49:18Z</updated>
	<author>
		<name>sparkymat</name>
	</author>
	<content type="html">&lt;div dir=&quot;ltr&quot;&gt;I am a developer working for Symbian. We have ported glib to the Symbian OS and wish to contribute the changes back to the main codeline. We had talked to Tim Janik and Dave Neary regarding this and they recommended the changes be split up into smaller patches and be submitted to either of bugzilla or the mailinglist. &lt;br&gt;
&lt;br&gt;There is one more issue that needs addressing. The Symbian OS emulator does not support global static data in libraries. We found a fair amount of global static data in the code and to work around these, we have symbian specific code inserted within &amp;#39;#ifdef SYMBIAN32&amp;#39; . The problem here is that these changes are peppered throughout the code and rack up nearly 2000 lines of changed code. Without these changes, glib will not work on the Symbian OS emulator.&lt;br&gt;
&lt;br&gt;I am looking for your opinions regarding how to handle this particular changeset.&lt;br&gt;&lt;br&gt;Thanks &amp;amp; Regards,&lt;br&gt;Ajith&lt;br&gt;&lt;br&gt;&lt;/div&gt;
&lt;br /&gt;_______________________________________________
&lt;br&gt;gtk-devel-list mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19324426&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gtk-devel-list@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/glib-on-Symbian-tp19324426p19324426.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19323931</id>
	<title>GTK+ 2.14.1</title>
	<published>2008-09-04T19:48:24Z</published>
	<updated>2008-09-04T19:48:24Z</updated>
	<author>
		<name>Matthias Clasen</name>
	</author>
	<content type="html">GTK+ 2.14.1 is now available for download at:
&lt;br&gt;&lt;br&gt;&amp;nbsp;&lt;a href=&quot;http://download.gnome.org/sources/gtk+/2.14/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://download.gnome.org/sources/gtk+/2.14/&lt;/a&gt;&lt;br&gt;&lt;br&gt;gtk+-2.14.1.tar.bz2 &amp;nbsp; md5sum: c6e66ffe92724d83391187f0af016b23
&lt;br&gt;gtk+-2.14.1.tar.gz &amp;nbsp; &amp;nbsp;md5sum: 48003f502e916e6f004a23c6985d4432
&lt;br&gt;&lt;br&gt;This is a quick followup release to fix a deadlock in 
&lt;br&gt;pixbuf loader initialization that was introduced by a
&lt;br&gt;last-minute fix before 2.14.0.
&lt;br&gt;&lt;br&gt;&lt;br&gt;September 4, 2008
&lt;br&gt;Matthias Clasen
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;gtk-devel-list mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19323931&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gtk-devel-list@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/GTK%2B-2.14.1-tp19323931p19323931.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19317041</id>
	<title>GTK+ 2.14.0 released</title>
	<published>2008-09-04T11:27:20Z</published>
	<updated>2008-09-04T11:27:20Z</updated>
	<author>
		<name>Matthias Clasen</name>
	</author>
	<content type="html">GTK+ 2.14.0 is now available for download at:
&lt;br&gt;&lt;br&gt;&amp;nbsp;&lt;a href=&quot;http://download.gnome.org/sources/gtk+/2.14/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://download.gnome.org/sources/gtk+/2.14/&lt;/a&gt;&lt;br&gt;&lt;br&gt;gtk+-2.14.0.tar.bz2 &amp;nbsp; md5sum: 8cd2732b4e07a490691ae3635b71d932
&lt;br&gt;gtk+-2.14.0.tar.gz &amp;nbsp; &amp;nbsp;md5sum: 8ae7ed0c95907b5be29fc4a3c36f0499
&lt;br&gt;&lt;br&gt;&lt;br&gt;Release notes are available at:
&lt;br&gt;&lt;br&gt;&amp;nbsp;&lt;a href=&quot;http://www.gtk.org/notes/gtk-2.14.0-notes.txt&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.gtk.org/notes/gtk-2.14.0-notes.txt&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;What is GTK+
&lt;br&gt;============
&lt;br&gt;&lt;br&gt;GTK+ is a multi-platform toolkit for creating graphical user
&lt;br&gt;interfaces. Offering a complete set of widgets, GTK+ is
&lt;br&gt;suitable for projects ranging from small one-off tools to
&lt;br&gt;complete application suites.
&lt;br&gt;&lt;br&gt;GTK+ has been designed from the ground up to support a range
&lt;br&gt;of languages, not only C/C++. Using GTK+ from languages such
&lt;br&gt;as Perl and Python (especially in combination with the Glade
&lt;br&gt;GUI builder) provides an effective method of rapid application
&lt;br&gt;development.
&lt;br&gt;&lt;br&gt;GTK+ is free software and part of the GNU Project. However,
&lt;br&gt;the licensing terms for GTK+, the GNU LGPL, allow it to be
&lt;br&gt;used by all developers, including those developing proprietary
&lt;br&gt;software, without any license fees or royalties. GTK+ is the
&lt;br&gt;only 100% free-of-cost open source industrial-strength GUI
&lt;br&gt;toolkit available today.
&lt;br&gt;&lt;br&gt;Since its origins as the toolkit for the GNU Image
&lt;br&gt;Manipulation Program (GIMP), GTK+ has been used in a wide
&lt;br&gt;range of software. Notably, GTK+ is the foundation of the
&lt;br&gt;GNOME desktop; GTK+ 2.14 will be incorporated into version
&lt;br&gt;2.24 of the GNOME desktop. 
&lt;br&gt;&lt;br&gt;&lt;br&gt;What's new in GTK+ 2.14
&lt;br&gt;=======================
&lt;br&gt;&lt;br&gt;GTK+ 2.14 adds new functionality while maintaining source and binary 
&lt;br&gt;compatibility with GTK+ 2.12. Highlights of new features and
&lt;br&gt;improvements in GTK+ 2.14 are:
&lt;br&gt;&lt;br&gt;New widgets and objects
&lt;br&gt;&lt;br&gt;&amp;nbsp;* GdkAppLaunchContext, provides startup notification with 
&lt;br&gt;&amp;nbsp; &amp;nbsp;g_app_info_launch()
&lt;br&gt;&amp;nbsp;* GtkMountOperation, can ask for passwords when mounting 
&lt;br&gt;&amp;nbsp; &amp;nbsp;volumes with g_volume_mount()
&lt;br&gt;&amp;nbsp;* GtkToolShell, an interface for containers of GtkToolItems
&lt;br&gt;&lt;br&gt;Noteworthy new APIs
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;* gtk_show_uri(), a replacement for gnome_vfs_url_show() and
&lt;br&gt;&amp;nbsp; &amp;nbsp;gnome_url_show()
&lt;br&gt;&amp;nbsp;* gtk_widget_get_snapshot(), using pixmap redirection to render 
&lt;br&gt;&amp;nbsp; &amp;nbsp;snapshots of widgets
&lt;br&gt;&lt;br&gt;Changes in the file chooser
&lt;br&gt;&lt;br&gt;&amp;nbsp;The file chooser uses GIO directly, loadable backends are no longer 
&lt;br&gt;&amp;nbsp;supported. Autocompletion in the file chooser entry has been improved.
&lt;br&gt;&lt;br&gt;Changes in printing support
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;The print dialog displays printer status information. Support for
&lt;br&gt;&amp;nbsp;rearranging pages when printing multiple pages per sheet has been
&lt;br&gt;&amp;nbsp;added to the cups backend. 
&lt;br&gt;&lt;br&gt;Accessibility support
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;The gail module is shipped with GTK+, GtkBuilder supports
&lt;br&gt;&amp;nbsp;accessibility attributes and GtkStatusIcon supports keyboard
&lt;br&gt;&amp;nbsp;navigation.
&lt;br&gt;&lt;br&gt;Internationalization support
&lt;br&gt;&lt;br&gt;&amp;nbsp;The compose sequences understood by GTK+'s builtin input method
&lt;br&gt;&amp;nbsp;have been synchronized with recent X.org compose sequences, adding
&lt;br&gt;&amp;nbsp;a large number of new sequences. GTK+ no longer uses translations
&lt;br&gt;&amp;nbsp;when an application is not translated to the current locale.
&lt;br&gt;&lt;br&gt;gdk-pixbuf changes
&lt;br&gt;&lt;br&gt;&amp;nbsp;* Support loading OS X icns format
&lt;br&gt;&amp;nbsp;* Support loading JPEG 2000 images
&lt;br&gt;&amp;nbsp;* Support loading and saving to GIO streams
&lt;br&gt;&amp;nbsp;* Use GIO for mime information
&lt;br&gt;&amp;nbsp;
&lt;br&gt;GDK changes
&lt;br&gt;&lt;br&gt;&amp;nbsp;GDK uses Xrandr instead of Xinerama to provide more (and dynamic)
&lt;br&gt;&amp;nbsp;monitor information. Font configuration changes are now picked up
&lt;br&gt;&amp;nbsp;at runtime, without an application restart.
&lt;br&gt;&lt;br&gt;For more details and lists of fixed bugs, see the
&lt;br&gt;announcements for the 2.13.x development releases:
&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/archives/gtk-devel-list/2008-February/msg00079.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/archives/gtk-devel-list/2008-February/msg00079.html&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/archives/gtk-devel-list/2008-May/msg00112.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/archives/gtk-devel-list/2008-May/msg00112.html&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/archives/gtk-devel-list/2008-June/msg00033.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/archives/gtk-devel-list/2008-June/msg00033.html&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/archives/gtk-devel-list/2008-June/msg00158.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/archives/gtk-devel-list/2008-June/msg00158.html&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/archives/gtk-devel-list/2008-July/msg00044.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/archives/gtk-devel-list/2008-July/msg00044.html&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/archives/gtk-devel-list/2008-July/msg00182.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/archives/gtk-devel-list/2008-July/msg00182.html&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/archives/gtk-devel-list/2008-August/msg00023.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/archives/gtk-devel-list/2008-August/msg00023.html&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/archives/gtk-devel-list/2008-August/msg00153.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/archives/gtk-devel-list/2008-August/msg00153.html&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Where to get more information about GTK+
&lt;br&gt;========================================
&lt;br&gt;&lt;br&gt;Information about GTK+ including links to documentation can be
&lt;br&gt;found at:
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;&lt;a href=&quot;http://www.gtk.org/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.gtk.org/&lt;/a&gt;&lt;br&gt;&lt;br&gt;An installation guide for GTK+ 2.x is found at:
&lt;br&gt;&lt;br&gt;&amp;nbsp;&lt;a href=&quot;http://developer.gnome.org/doc/API/2.0/gtk/gtk-building.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://developer.gnome.org/doc/API/2.0/gtk/gtk-building.html&lt;/a&gt;&lt;br&gt;&lt;br&gt;Common questions:
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;&lt;a href=&quot;http://developer.gnome.org/doc/API/2.0/gtk/gtk-question-index.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://developer.gnome.org/doc/API/2.0/gtk/gtk-question-index.html&lt;/a&gt;&lt;br&gt;&amp;nbsp;&lt;a href=&quot;http://www.gtk.org/faq/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.gtk.org/faq/&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Contributing
&lt;br&gt;============
&lt;br&gt;&lt;br&gt;GTK+ is a large project and relies on voluntary contributions.
&lt;br&gt;We are actively searching for new contributors in various areas
&lt;br&gt;and invite everyone to help project development.
&lt;br&gt;If you are willing to participate, please subscribe to the project
&lt;br&gt;mailing lists to offer your help and read over our list of vacant
&lt;br&gt;project tasks:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://live.gnome.org/GtkTasks&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://live.gnome.org/GtkTasks&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;The GTK+ Team:
&lt;br&gt;&lt;br&gt;&amp;nbsp;Jonathan Blandford, Hans Breuer, Kristian Rietveld, 
&lt;br&gt;&amp;nbsp;Matthias Clasen, Tim Janik, Tor Lillqvist, Federico Mena Quintero, 
&lt;br&gt;&amp;nbsp;Søren Sandmann, Manish Singh, and Owen Taylor
&lt;br&gt;&lt;br&gt;Special thanks to Ed Catmur and Cody Russell for fixing the
&lt;br&gt;most annoying bug 56070
&lt;br&gt;&lt;br&gt;Thanks to everybody else who has contributed to this release:
&lt;br&gt;Akira Tagoh, Alberto Ruiz, Alexander Larsson, Alex Simon,
&lt;br&gt;Anders Carlsson, Andreas Köhler, Andreas Sandberg, Andre Klapper,
&lt;br&gt;Andrew Cowie, Andrey Tsyvarev, Antti Kaijanmäki, Armin Burgmeier,
&lt;br&gt;Attilio Fiandrotti, Baptiste Mille-Mathias, Bastien Nocera,
&lt;br&gt;Behdad Esfahbod, Ben Hague, Benjamin Berg, Björn Lindqvist,
&lt;br&gt;Brian Pepple, Carlos Garcia Campos, Carlos Garnacho, Chris Lord,
&lt;br&gt;Christian Dywan, Christian Hammond, Christian Kellner, 
&lt;br&gt;Christian Neumair, Christian Persch, Chris Vine, Chris Wang, 
&lt;br&gt;Chris Wilson, Claudio Ciccani, Claudio Saavedra, Colin Walters, 
&lt;br&gt;Cosimo Cecchi, Czirkos Zoltan, Damien Carbery, Daniel Atallah, 
&lt;br&gt;Daniel Berrange, Danny Baumann, David Brigada, David Lambert, 
&lt;br&gt;David Miller, David Zeuthen, Denis Oliver Kropp, Dominic Lachowicz,
&lt;br&gt;Emmanuele Bassi, Erik van Pienbroek, Erwann Chenede, Étienne Bersac,
&lt;br&gt;Felix Riemann, Francesco Montorsi, Frederic Crozat, 
&lt;br&gt;Gian Mario Tagliaretti, Gil Forcada, Guido Berhoerster, 
&lt;br&gt;Guillaume Cottenceau, Herbert Valerio Riedel, Hiroyuki Ikezoe, 
&lt;br&gt;Hong Jen Yee, Huang Peng, Hubert Figuire, Huimin He, Ian Turner, 
&lt;br&gt;Jaap A. Haitsma, James Pelletier, James Sharpe, Jan Arne Petersen, 
&lt;br&gt;Jan Janech, Jean-Yves Lefort, Jelte van der Hoek, Jens Granseuer, 
&lt;br&gt;Jody Goldberg, Joe Halliwell, Joe Shaw, Johan Dahlin, Johannes Schmid,
&lt;br&gt;Jonh Wendell, Josselin Mouette, Juan Manuel Palacios, Juri Pakaste,
&lt;br&gt;Kazuki Iwamoto, Kevin Ryde, Kjartan Maraas, Lapo Calamandrei,
&lt;br&gt;Lennart Poettering, Leonardo Ferreira Fontenelle, Liqing Huang,
&lt;br&gt;LiYan Zhang, Li Yuan, Marcus Brinkmann, Marek Kašík, 
&lt;br&gt;Mariano Suárez-Alvarez, Marko Lindqvist, Martyn Russell,
&lt;br&gt;Mathias Hasselmann, Matthew Barnes, Matthias Warkus, Matt Kraai,
&lt;br&gt;Michael Emmel, Michael Hofmann, Michael Natterer, Miguel Gomez,
&lt;br&gt;Mikael Hallendal, Mike Calmus, Mike Langlie, Mike Morrison,
&lt;br&gt;Milan Crha, MINAMI Hirokazu, Morten Welinder, Murray Cumming,
&lt;br&gt;Nathaniel Smith, Neil Roberts, Nelson Benitez, Nicolas Setton,
&lt;br&gt;Olle Bergkvist, Paolo Borelli, Paul Davis, Pavel Syomin,
&lt;br&gt;Pedro Villavicencio, Peter Bloomfield, Peter Johanson, Philip Van Hoof,
&lt;br&gt;Phil Lello, Ray Strode, Ricardo Cruz, Richard Hult, Rich Burridge,
&lt;br&gt;Roger Brown, Ross Burton, Ryan Lortie, Sadrul Habib Chowdhury,
&lt;br&gt;Samuel Fogh, Sebastian Dröge, Sebastien Bacher, Sébastien Granjoux,
&lt;br&gt;Simos Xenitellis, Stefan Kost, Stijn Hoop, Sven Herzberg,
&lt;br&gt;Sven Neumann, Sylvain Pasche, Thomas Bleeker, Thomas Klausner,
&lt;br&gt;Tim Evans, Tomas Bzatek, Tommi Komulainen, Torsten Schoenfeld,
&lt;br&gt;Tristan Van Berkom, Vaclav Slavik, Wang Diancheng, William Lachance,
&lt;br&gt;William Pitcock, Wolfgang Oertl, Wouter Bolsterlee, Xan Lopez,
&lt;br&gt;Xavier Claessens, Yevgen Muntyan, Yuri Pimenov 
&lt;br&gt;&lt;br&gt;&lt;br&gt;September 4, 2008
&lt;br&gt;Matthias Clasen
&lt;br&gt;&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;gtk-devel-list mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19317041&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gtk-devel-list@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/GTK%2B-2.14.0-released-tp19317041p19317041.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19307128</id>
	<title>Re: [PATCH] limit the number of extended layout features supported by GtkLabel at the same time</title>
	<published>2008-09-04T02:58:13Z</published>
	<updated>2008-09-04T02:58:13Z</updated>
	<author>
		<name>Paolo Bonzini-2</name>
	</author>
	<content type="html">&lt;br&gt;&amp;gt; However, I'm actually thinking of disabling completely
&lt;br&gt;&amp;gt; height_for_width/width_for_height for non-wrapping labels (right now
&lt;br&gt;&amp;gt; it's accepted for elliipsizing labels), as well as disabling
&lt;br&gt;&amp;gt; get_natural_size for wrapping labels. &amp;nbsp;In the meanwhile, this patch
&lt;br&gt;&amp;gt; makes things work properly.
&lt;br&gt;&lt;br&gt;Here is the patch to do that, on top of the other patch I sent (the
&lt;br&gt;changes to gtk_label_style_set and
&lt;br&gt;gtk_label_extended_layout_get_size_for_allocation are needed even with
&lt;br&gt;this patch).
&lt;br&gt;&lt;br&gt;The results of testextendedlayout are okay (except that baseline
&lt;br&gt;alignment does not work with or without my patch), and I also fixed
&lt;br&gt;autotestextendedlayout because it failed in the current tip of the
&lt;br&gt;branch, independent of my previous patch.
&lt;br&gt;&lt;br&gt;Paolo
&lt;br&gt;&lt;br /&gt;2008-09-03 &amp;nbsp;Paolo Bonzini &amp;nbsp;&amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19307128&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bonzini@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; 	* gtk/gtklabel.c: Disable natural size layout for wrapping
&lt;br&gt;&amp;nbsp; &amp;nbsp; 	labels (undoing part of the previous patch), and disable
&lt;br&gt;&amp;nbsp; &amp;nbsp; 	height-for-width/width-for-height layout for non-wrapping,
&lt;br&gt;&amp;nbsp; &amp;nbsp; 	ellipsizing labels.
&lt;br&gt;&amp;nbsp; &amp;nbsp; 
&lt;br&gt;&amp;nbsp; &amp;nbsp; 	* tests/autotestextendedlayout.c: Update to match the above.
&lt;br&gt;&lt;br&gt;diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c
&lt;br&gt;index fac4b7f..9adbc68 100644
&lt;br&gt;--- a/gtk/gtklabel.c
&lt;br&gt;+++ b/gtk/gtklabel.c
&lt;br&gt;@@ -4367,11 +4367,12 @@ gtk_label_extended_layout_get_features (GtkExtendedLayout *layout)
&lt;br&gt;&amp;nbsp; &amp;nbsp;GtkLabelPrivate *priv = GTK_LABEL_GET_PRIVATE (label);
&lt;br&gt;&amp;nbsp; &amp;nbsp;GtkExtendedLayoutFeatures features;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;features =
&lt;br&gt;- &amp;nbsp; &amp;nbsp;GTK_EXTENDED_LAYOUT_NATURAL_SIZE |
&lt;br&gt;- &amp;nbsp; &amp;nbsp;GTK_EXTENDED_LAYOUT_BASELINES;
&lt;br&gt;+ &amp;nbsp;features = GTK_EXTENDED_LAYOUT_BASELINES;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;if (label-&amp;gt;ellipsize || (label-&amp;gt;wrap &amp;&amp; priv-&amp;gt;full_size))
&lt;br&gt;+ &amp;nbsp;if (!label-&amp;gt;wrap)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;features |= GTK_EXTENDED_LAYOUT_NATURAL_SIZE;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;else if (priv-&amp;gt;full_size)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;gdouble angle = gtk_label_get_angle (label);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -4416,40 +4417,24 @@ gtk_label_extended_layout_get_natural_size (GtkExtendedLayout *layout,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;GtkRequisition &amp;nbsp; &amp;nbsp;*requisition)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp;GtkLabel *label;
&lt;br&gt;- &amp;nbsp;GtkLabelPrivate *priv;
&lt;br&gt;&amp;nbsp; &amp;nbsp;gboolean ellipsize;
&lt;br&gt;- &amp;nbsp;gint wrap_width;
&lt;br&gt;&amp;nbsp; &amp;nbsp;PangoLayout *tmp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;label = GTK_LABEL (layout);
&lt;br&gt;- &amp;nbsp;priv = GTK_LABEL_GET_PRIVATE (label);
&lt;br&gt;+ &amp;nbsp;g_assert (!label-&amp;gt;wrap);
&lt;br&gt;&amp;nbsp; &amp;nbsp;gtk_label_ensure_layout (label);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;ellipsize = label-&amp;gt;ellipsize;
&lt;br&gt;&amp;nbsp; &amp;nbsp;label-&amp;gt;ellipsize = PANGO_ELLIPSIZE_NONE;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;wrap_width = priv-&amp;gt;wrap_width;
&lt;br&gt;&amp;nbsp; &amp;nbsp;tmp = label-&amp;gt;layout;
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;/* See comment in gtk_label_size_request. &amp;nbsp;*/
&lt;br&gt;-
&lt;br&gt;- &amp;nbsp;if (label-&amp;gt;wrap)
&lt;br&gt;- &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;g_object_ref (label-&amp;gt;layout);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;gtk_label_clear_layout (label);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;}
&lt;br&gt;- &amp;nbsp;else
&lt;br&gt;- &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;label-&amp;gt;layout = pango_layout_copy (tmp);
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;pango_layout_set_width (label-&amp;gt;layout, -1);
&lt;br&gt;- &amp;nbsp; &amp;nbsp;}
&lt;br&gt;-
&lt;br&gt;+ &amp;nbsp;label-&amp;gt;layout = pango_layout_copy (tmp);
&lt;br&gt;+ &amp;nbsp;pango_layout_set_width (label-&amp;gt;layout, -1);
&lt;br&gt;&amp;nbsp; &amp;nbsp;gtk_label_size_request (GTK_WIDGET (label), requisition);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;g_object_unref (label-&amp;gt;layout);
&lt;br&gt;&amp;nbsp; &amp;nbsp;label-&amp;gt;ellipsize = ellipsize;
&lt;br&gt;&amp;nbsp; &amp;nbsp;label-&amp;gt;layout = tmp;
&lt;br&gt;- &amp;nbsp;priv-&amp;gt;wrap_width = wrap_width;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static gint
&lt;br&gt;diff --git a/tests/autotestextendedlayout.c b/tests/autotestextendedlayout.c
&lt;br&gt;index 6b47477..cf731fd 100644
&lt;br&gt;--- a/tests/autotestextendedlayout.c
&lt;br&gt;+++ b/tests/autotestextendedlayout.c
&lt;br&gt;@@ -264,8 +264,6 @@ gtk_label_test_natural_size (void)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const GEnumValue *const wrap = (i &amp;gt;= 0 ? &amp;wrap_class-&amp;gt;values[i] : NULL);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;const gchar *wrap_mode = (wrap ? wrap-&amp;gt;value_nick : &amp;quot;none&amp;quot;);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;gtk_label_set_line_wrap (label, NULL != wrap);
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (wrap)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;gtk_label_set_line_wrap_mode (label, wrap-&amp;gt;value);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -311,7 +309,7 @@ gtk_label_test_extended_layout (void)
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;log_test (NULL != iface-&amp;gt;get_features);
&lt;br&gt;&amp;nbsp; &amp;nbsp;log_test (NULL != iface-&amp;gt;get_height_for_width);
&lt;br&gt;- &amp;nbsp;log_test (NULL == iface-&amp;gt;get_width_for_height);
&lt;br&gt;+ &amp;nbsp;log_test (NULL != iface-&amp;gt;get_width_for_height);
&lt;br&gt;&amp;nbsp; &amp;nbsp;log_test (NULL != iface-&amp;gt;get_natural_size);
&lt;br&gt;&amp;nbsp; &amp;nbsp;log_test (NULL != iface-&amp;gt;get_baselines);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -324,19 +322,22 @@ gtk_label_test_extended_layout (void)
&lt;br&gt;&amp;nbsp; &amp;nbsp;log_test (0 != (features &amp; GTK_EXTENDED_LAYOUT_NATURAL_SIZE));
&lt;br&gt;&amp;nbsp; &amp;nbsp;log_test (0 != (features &amp; GTK_EXTENDED_LAYOUT_BASELINES));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp;gtk_label_test_baselines ();
&lt;br&gt;+ &amp;nbsp;gtk_label_test_natural_size ();
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;gtk_label_set_line_wrap (label, TRUE);
&lt;br&gt;+ &amp;nbsp;gtk_label_set_full_size (label, TRUE);
&lt;br&gt;&amp;nbsp; &amp;nbsp;features = gtk_extended_layout_get_features (layout);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;log_test (0 != (features &amp; GTK_EXTENDED_LAYOUT_HEIGHT_FOR_WIDTH));
&lt;br&gt;&amp;nbsp; &amp;nbsp;log_test (0 == (features &amp; GTK_EXTENDED_LAYOUT_WIDTH_FOR_HEIGHT));
&lt;br&gt;- &amp;nbsp;log_test (0 != (features &amp; GTK_EXTENDED_LAYOUT_NATURAL_SIZE));
&lt;br&gt;+ &amp;nbsp;log_test (0 == (features &amp; GTK_EXTENDED_LAYOUT_NATURAL_SIZE));
&lt;br&gt;&amp;nbsp; &amp;nbsp;log_test (0 != (features &amp; GTK_EXTENDED_LAYOUT_BASELINES));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;g_object_unref (widget);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;gtk_label_test_baselines ();
&lt;br&gt;&amp;nbsp; &amp;nbsp;gtk_label_test_height_for_width ();
&lt;br&gt;- &amp;nbsp;gtk_label_test_natural_size ();
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static void
&lt;br&gt;@@ -397,11 +398,12 @@ gtk_bin_test_extended_layout (void)
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;log_test (0 != (features &amp; GTK_EXTENDED_LAYOUT_BASELINES));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;gtk_label_set_full_size (GTK_LABEL (label), TRUE);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;features = gtk_extended_layout_get_features (layout);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;log_test (0 != (features &amp; GTK_EXTENDED_LAYOUT_HEIGHT_FOR_WIDTH));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;log_test (0 == (features &amp; GTK_EXTENDED_LAYOUT_WIDTH_FOR_HEIGHT));
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;log_test (0 != (features &amp; GTK_EXTENDED_LAYOUT_NATURAL_SIZE));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;log_test (0 == (features &amp; GTK_EXTENDED_LAYOUT_NATURAL_SIZE));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;log_test (0 != (features &amp; GTK_EXTENDED_LAYOUT_BASELINES));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/* verify baseline propagation */
&lt;br&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;gtk-devel-list mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19307128&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gtk-devel-list@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/-PATCH--Fix-a-number-of-GtkLabel-extended-layout-issues-tp19305153p19307128.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19305346</id>
	<title>[PATCH] Add extended layout support for GtkViewport</title>
	<published>2008-09-04T00:56:35Z</published>
	<updated>2008-09-04T00:56:35Z</updated>
	<author>
		<name>Paolo Bonzini-2</name>
	</author>
	<content type="html">This patch adds extended layout support for GtkViewport. &amp;nbsp;While natural
&lt;br&gt;size support is easy (I would say natural...), adding
&lt;br&gt;height-for-width/width-for-height support requires a new property. &amp;nbsp;The
&lt;br&gt;property, however, is useful even without extended layout support.
&lt;br&gt;&lt;br&gt;The idea is that right now the viewport will never give an allocation to
&lt;br&gt;the child that is narrower than the requisition. &amp;nbsp;However, it can be
&lt;br&gt;useful to force the viewport to have only the vertical scrollbar (or
&lt;br&gt;dually the horizontal scrollbar). &amp;nbsp;This is a great application of
&lt;br&gt;height-for-width/width-for-height, because these extended layout hooks
&lt;br&gt;are just what is needed to get the range of the single visible scrollbar.
&lt;br&gt;&lt;br&gt;The patch implements this and adds a test (which won't work unless the
&lt;br&gt;GtkLabel patch is applied).
&lt;br&gt;&lt;br&gt;With these two patches, I *guess* that extended layout branch suits my
&lt;br&gt;needs. &amp;nbsp;I might need to implement GtkExtendedLayout on GtkExpander, and
&lt;br&gt;that's it.
&lt;br&gt;&lt;br&gt;Also, the &amp;quot;flow&amp;quot; behavior could indeed be implemented on GtkHBox with a
&lt;br&gt;&amp;quot;wrap&amp;quot; property; I started working on a patch but it is more complicated
&lt;br&gt;than I'd like for various reasons:
&lt;br&gt;&lt;br&gt;1) getting the algorithm right is already a mess;
&lt;br&gt;&lt;br&gt;2) to do it properly, it should be done in GtkVBox too (laying out in
&lt;br&gt;multiple columns when you reach the bottom of the allocation); I don't
&lt;br&gt;need this so I don't have very much the incentive;
&lt;br&gt;&lt;br&gt;3) then, does this mean that I need a new abstract class between GtkBox
&lt;br&gt;and Gtk{H,V}Box? &amp;nbsp;Or that I need to implement the new behavior in the
&lt;br&gt;two button box classes too? &amp;nbsp;This also reduces my willingness to do this.
&lt;br&gt;&lt;br&gt;4) Thinking more about it, it actually seems to me that the &amp;quot;flow&amp;quot;
&lt;br&gt;concept is most similar to a GtkHButtonBox with left-edge packing, more
&lt;br&gt;than to a GtkHBox. &amp;nbsp;So I'm a bit lost about where to implement it. &amp;nbsp;I'll
&lt;br&gt;probably make my own container when time comes.
&lt;br&gt;&lt;br&gt;(Of course, I cannot really rely on something that is on a branch, so
&lt;br&gt;I'll go on with my GtkManagedLayout for a while. &amp;nbsp;However, I'll eagerly
&lt;br&gt;wait for GTK+ 2.16 so that I can get rid of it).
&lt;br&gt;&lt;br&gt;Paolo
&lt;br&gt;&lt;br /&gt;2008-09-03 &amp;nbsp;Paolo Bonzini &amp;nbsp;&amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19305346&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bonzini@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * gtk/gtk.symbols: Add new symbols for GtkViewportConstraint and
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; its usage in gtk_viewport.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * gtk/gtkenums.h: Add GtkViewportConstraint.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * gtk/gtkviewport.h: Add a new GtkViewportConstraint field and
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; its accessors. &amp;nbsp;Turn the existing shadow_type field into a bitfield.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * gtk/gtkviewport.c: Add the corresponding property; use
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; extended layout info.
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * tests/testextlayoutviewport.c: New.
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * tests/Makefile.am: Add rules for it.
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;gtk/gtk.symbols &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;3 +
&lt;br&gt;&amp;nbsp;gtk/gtkenums.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp;8 +++
&lt;br&gt;&amp;nbsp;gtk/gtkviewport.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp;115 +++++++++++++++++++++++++++++++++++++++--
&lt;br&gt;&amp;nbsp;gtk/gtkviewport.h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; 31 ++++++-----
&lt;br&gt;&amp;nbsp;tests/Makefile.am &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | &amp;nbsp; &amp;nbsp;7 +++
&lt;br&gt;&amp;nbsp;tests/testextlayoutviewport.c | &amp;nbsp; 80 ++++++++++++++++++++++++++++
&lt;br&gt;&amp;nbsp;7 files changed, 236 insertions(+), 18 deletions(-)
&lt;br&gt;&amp;nbsp;create mode 100644 tests/testextlayoutviewport.c
&lt;br&gt;&lt;br&gt;diff --git a/gtk/gtk.symbols b/gtk/gtk.symbols
&lt;br&gt;index 842148a..dc9f6a5 100644
&lt;br&gt;--- a/gtk/gtk.symbols
&lt;br&gt;+++ b/gtk/gtk.symbols
&lt;br&gt;@@ -358,6 +358,7 @@ gtk_icon_theme_error_get_type G_GNUC_CONST
&lt;br&gt;&amp;nbsp;gtk_toolbar_child_type_get_type G_GNUC_CONST
&lt;br&gt;&amp;nbsp;gtk_toolbar_space_style_get_type G_GNUC_CONST
&lt;br&gt;&amp;nbsp;gtk_toolbar_style_get_type G_GNUC_CONST
&lt;br&gt;+gtk_viewport_constraint_get_type G_GNUC_CONST
&lt;br&gt;&amp;nbsp;#endif
&lt;br&gt;&amp;nbsp;#endif
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -4553,11 +4554,13 @@ gtk_vbutton_box_new
&lt;br&gt;&amp;nbsp;#if IN_FILE(__GTK_VIEWPORT_C__)
&lt;br&gt;&amp;nbsp;gtk_viewport_get_hadjustment
&lt;br&gt;&amp;nbsp;gtk_viewport_get_shadow_type
&lt;br&gt;+gtk_viewport_get_size_constraint
&lt;br&gt;&amp;nbsp;gtk_viewport_get_type G_GNUC_CONST
&lt;br&gt;&amp;nbsp;gtk_viewport_get_vadjustment
&lt;br&gt;&amp;nbsp;gtk_viewport_new
&lt;br&gt;&amp;nbsp;gtk_viewport_set_hadjustment
&lt;br&gt;&amp;nbsp;gtk_viewport_set_shadow_type
&lt;br&gt;+gtk_viewport_set_size_constraint
&lt;br&gt;&amp;nbsp;gtk_viewport_set_vadjustment
&lt;br&gt;&amp;nbsp;#endif
&lt;br&gt;&amp;nbsp;#endif
&lt;br&gt;diff --git a/gtk/gtkenums.h b/gtk/gtkenums.h
&lt;br&gt;index eeb3ac7..c8cde2a 100644
&lt;br&gt;--- a/gtk/gtkenums.h
&lt;br&gt;+++ b/gtk/gtkenums.h
&lt;br&gt;@@ -413,6 +413,14 @@ typedef enum
&lt;br&gt;&amp;nbsp; &amp;nbsp;GTK_UPDATE_DELAYED
&lt;br&gt;&amp;nbsp;} GtkUpdateType;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+/* Viewport flags to constrain width or height */
&lt;br&gt;+typedef enum
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;GTK_VIEWPORT_CONSTRAIN_NONE,
&lt;br&gt;+ &amp;nbsp;GTK_VIEWPORT_CONSTRAIN_WIDTH,
&lt;br&gt;+ &amp;nbsp;GTK_VIEWPORT_CONSTRAIN_HEIGHT
&lt;br&gt;+} GtkViewportConstraint;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;/* Generic visibility flags */
&lt;br&gt;&amp;nbsp;typedef enum
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;diff --git a/gtk/gtkviewport.c b/gtk/gtkviewport.c
&lt;br&gt;index 114415b..c504f33 100644
&lt;br&gt;--- a/gtk/gtkviewport.c
&lt;br&gt;+++ b/gtk/gtkviewport.c
&lt;br&gt;@@ -28,6 +28,7 @@
&lt;br&gt;&amp;nbsp;#include &amp;quot;gtkviewport.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;gtkintl.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;gtkmarshalers.h&amp;quot;
&lt;br&gt;+#include &amp;quot;gtkextendedlayout.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;gtkprivate.h&amp;quot;
&lt;br&gt;&amp;nbsp;#include &amp;quot;gtkalias.h&amp;quot;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -35,7 +36,8 @@ enum {
&lt;br&gt;&amp;nbsp; &amp;nbsp;PROP_0,
&lt;br&gt;&amp;nbsp; &amp;nbsp;PROP_HADJUSTMENT,
&lt;br&gt;&amp;nbsp; &amp;nbsp;PROP_VADJUSTMENT,
&lt;br&gt;- &amp;nbsp;PROP_SHADOW_TYPE
&lt;br&gt;+ &amp;nbsp;PROP_SHADOW_TYPE,
&lt;br&gt;+ &amp;nbsp;PROP_SIZE_CONSTRAINT
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -125,6 +127,15 @@ gtk_viewport_class_init (GtkViewportClass *class)
&lt;br&gt;&amp;nbsp;						 &amp;nbsp; &amp;nbsp; &amp;nbsp;GTK_SHADOW_IN,
&lt;br&gt;&amp;nbsp;						 &amp;nbsp; &amp;nbsp; &amp;nbsp;GTK_PARAM_READWRITE));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp;g_object_class_install_property (gobject_class,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PROP_SIZE_CONSTRAINT,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; g_param_spec_enum (&amp;quot;size-constraint&amp;quot;,
&lt;br&gt;+						 &amp;nbsp; &amp;nbsp; &amp;nbsp;P_(&amp;quot;Size constraint&amp;quot;),
&lt;br&gt;+						 &amp;nbsp; &amp;nbsp; &amp;nbsp;P_(&amp;quot;Determines whether the viewport constrains the width or height of its child&amp;quot;),
&lt;br&gt;+						 &amp;nbsp; &amp;nbsp; &amp;nbsp;GTK_TYPE_VIEWPORT_CONSTRAINT,
&lt;br&gt;+						 &amp;nbsp; &amp;nbsp; &amp;nbsp;GTK_VIEWPORT_CONSTRAIN_NONE,
&lt;br&gt;+						 &amp;nbsp; &amp;nbsp; &amp;nbsp;GTK_PARAM_READWRITE));
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;widget_class-&amp;gt;set_scroll_adjustments_signal =
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;g_signal_new (I_(&amp;quot;set_scroll_adjustments&amp;quot;),
&lt;br&gt;&amp;nbsp;		 &amp;nbsp;G_OBJECT_CLASS_TYPE (gobject_class),
&lt;br&gt;@@ -158,6 +169,9 @@ gtk_viewport_set_property (GObject &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *object,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;case PROP_SHADOW_TYPE:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;gtk_viewport_set_shadow_type (viewport, g_value_get_enum (value));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case PROP_SIZE_CONSTRAINT:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;gtk_viewport_set_size_constraint (viewport, g_value_get_enum (value));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;default:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;@@ -185,6 +199,9 @@ gtk_viewport_get_property (GObject &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; *object,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;case PROP_SHADOW_TYPE:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;g_value_set_enum (value, viewport-&amp;gt;shadow_type);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;case PROP_SIZE_CONSTRAINT:
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;g_value_set_enum (value, viewport-&amp;gt;size_constraint);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;default:
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;break;
&lt;br&gt;@@ -200,6 +217,8 @@ gtk_viewport_init (GtkViewport *viewport)
&lt;br&gt;&amp;nbsp; &amp;nbsp;gtk_container_set_resize_mode (GTK_CONTAINER (viewport), GTK_RESIZE_QUEUE);
&lt;br&gt;&amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;viewport-&amp;gt;shadow_type = GTK_SHADOW_IN;
&lt;br&gt;+ &amp;nbsp;viewport-&amp;gt;size_constraint = GTK_VIEWPORT_CONSTRAIN_NONE;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;viewport-&amp;gt;view_window = NULL;
&lt;br&gt;&amp;nbsp; &amp;nbsp;viewport-&amp;gt;bin_window = NULL;
&lt;br&gt;&amp;nbsp; &amp;nbsp;viewport-&amp;gt;hadjustment = NULL;
&lt;br&gt;@@ -348,6 +367,50 @@ viewport_reclamp_adjustment (GtkAdjustment *adjustment,
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static void
&lt;br&gt;+viewport_child_size_request (GtkViewport &amp;nbsp; 	 &amp;nbsp;*viewport,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; GtkWidget &amp;nbsp; &amp;nbsp; 	 &amp;nbsp;*child,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; GtkRequisition	 &amp;nbsp;*requisition,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; GtkChildSizeRequest &amp;nbsp; size_request_func)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;GtkExtendedLayoutFeatures features = 0;
&lt;br&gt;+ &amp;nbsp;gboolean width_for_height;
&lt;br&gt;+ &amp;nbsp;gboolean height_for_width;
&lt;br&gt;+ 
&lt;br&gt;+ &amp;nbsp;if (GTK_IS_EXTENDED_LAYOUT (child))
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;features = gtk_extended_layout_get_features ((GtkExtendedLayout*) child);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;width_for_height = (viewport-&amp;gt;size_constraint == GTK_VIEWPORT_CONSTRAIN_HEIGHT &amp;&amp;
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;(features &amp; GTK_EXTENDED_LAYOUT_WIDTH_FOR_HEIGHT));
&lt;br&gt;+ &amp;nbsp;height_for_width = (viewport-&amp;gt;size_constraint == GTK_VIEWPORT_CONSTRAIN_WIDTH &amp;&amp;
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp;(features &amp; GTK_EXTENDED_LAYOUT_HEIGHT_FOR_WIDTH));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;if (height_for_width || width_for_height)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;GtkAllocation view_allocation;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;viewport_get_view_allocation (viewport, &amp;view_allocation);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;if (height_for_width)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;requisition-&amp;gt;width = view_allocation.width;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;requisition-&amp;gt;height = gtk_extended_layout_get_height_for_width (
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(GtkExtendedLayout*) child, view_allocation.width);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;requisition-&amp;gt;width = gtk_extended_layout_get_width_for_height (
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(GtkExtendedLayout*) child, view_allocation.height);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;requisition-&amp;gt;height = view_allocation.height;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;else if (features &amp; GTK_EXTENDED_LAYOUT_NATURAL_SIZE)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;gtk_extended_layout_get_natural_size ((GtkExtendedLayout*) child, requisition);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;else 
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;size_request_func (child, requisition, (GtkWidget *) viewport);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+static void
&lt;br&gt;&amp;nbsp;viewport_set_hadjustment_values (GtkViewport *viewport,
&lt;br&gt;&amp;nbsp;				 gboolean &amp;nbsp; &amp;nbsp;*value_changed)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;@@ -373,7 +436,8 @@ viewport_set_hadjustment_values (GtkViewport *viewport,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;GtkRequisition child_requisition;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;gtk_widget_get_child_requisition (bin-&amp;gt;child, &amp;child_requisition);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;viewport_child_size_request (viewport, bin-&amp;gt;child, &amp;child_requisition,
&lt;br&gt;+				 &amp;nbsp; (GtkChildSizeRequest) gtk_widget_get_child_requisition);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;hadjustment-&amp;gt;upper = MAX (child_requisition.width, view_allocation.width);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;else
&lt;br&gt;@@ -410,7 +474,8 @@ viewport_set_vadjustment_values (GtkViewport *viewport,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;GtkRequisition child_requisition;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;gtk_widget_get_child_requisition (bin-&amp;gt;child, &amp;child_requisition);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;viewport_child_size_request (viewport, bin-&amp;gt;child, &amp;child_requisition,
&lt;br&gt;+				 &amp;nbsp; (GtkChildSizeRequest) gtk_widget_get_child_requisition);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;vadjustment-&amp;gt;upper = MAX (child_requisition.height, view_allocation.height);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;&amp;nbsp; &amp;nbsp;else
&lt;br&gt;@@ -547,6 +612,45 @@ gtk_viewport_get_shadow_type (GtkViewport *viewport)
&lt;br&gt;&amp;nbsp; &amp;nbsp;return viewport-&amp;gt;shadow_type;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+
&lt;br&gt;+/** 
&lt;br&gt;+ * gtk_viewport_set_size_constraint:
&lt;br&gt;+ * @viewport: a #GtkViewport.
&lt;br&gt;+ * @type: the new size constraint.
&lt;br&gt;+ *
&lt;br&gt;+ * Sets the size constraint of the viewport.
&lt;br&gt;+ **/ 
&lt;br&gt;+void
&lt;br&gt;+gtk_viewport_set_size_constraint (GtkViewport &amp;nbsp; *viewport,
&lt;br&gt;+			 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;GtkViewportConstraint &amp;nbsp;type)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;g_return_if_fail (GTK_IS_VIEWPORT (viewport));
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;if ((GtkViewportConstraint) viewport-&amp;gt;size_constraint != type)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;viewport-&amp;gt;size_constraint = type;
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;gtk_widget_queue_resize (GTK_WIDGET (viewport));
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;g_object_notify (G_OBJECT (viewport), &amp;quot;size-constraint&amp;quot;);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+/**
&lt;br&gt;+ * gtk_viewport_get_size_constraint:
&lt;br&gt;+ * @viewport: a #GtkViewport
&lt;br&gt;+ *
&lt;br&gt;+ * Gets the shadow type of the #GtkViewport. See
&lt;br&gt;+ * gtk_viewport_set_size_constraint().
&lt;br&gt;+ 
&lt;br&gt;+ * Return value: the size constraint
&lt;br&gt;+ **/
&lt;br&gt;+GtkViewportConstraint
&lt;br&gt;+gtk_viewport_get_size_constraint (GtkViewport *viewport)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;g_return_val_if_fail (GTK_IS_VIEWPORT (viewport), GTK_VIEWPORT_CONSTRAIN_NONE);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;return viewport-&amp;gt;size_constraint;
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;static void
&lt;br&gt;&amp;nbsp;gtk_viewport_realize (GtkWidget *widget)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;@@ -720,7 +824,10 @@ gtk_viewport_size_request (GtkWidget &amp;nbsp; &amp;nbsp; &amp;nbsp;*widget,
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;if (bin-&amp;gt;child &amp;&amp; GTK_WIDGET_VISIBLE (bin-&amp;gt;child))
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{
&lt;br&gt;- &amp;nbsp; &amp;nbsp; &amp;nbsp;gtk_widget_size_request (bin-&amp;gt;child, &amp;child_requisition);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;viewport_child_size_request (GTK_VIEWPORT (widget), bin-&amp;gt;child,
&lt;br&gt;+				 &amp;nbsp; &amp;child_requisition,
&lt;br&gt;+				 &amp;nbsp; (GtkChildSizeRequest) gtk_widget_size_request);
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;requisition-&amp;gt;width += child_requisition.width;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;requisition-&amp;gt;height += child_requisition.height;
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;diff --git a/gtk/gtkviewport.h b/gtk/gtkviewport.h
&lt;br&gt;index 8b64f17..b07382a 100644
&lt;br&gt;--- a/gtk/gtkviewport.h
&lt;br&gt;+++ b/gtk/gtkviewport.h
&lt;br&gt;@@ -51,7 +51,9 @@ struct _GtkViewport
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp;GtkBin bin;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;GtkShadowType shadow_type;
&lt;br&gt;+ &amp;nbsp;guint shadow_type : 3;
&lt;br&gt;+ &amp;nbsp;guint size_constraint : 2;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;GdkWindow *view_window;
&lt;br&gt;&amp;nbsp; &amp;nbsp;GdkWindow *bin_window;
&lt;br&gt;&amp;nbsp; &amp;nbsp;GtkAdjustment *hadjustment;
&lt;br&gt;@@ -68,18 +70,21 @@ struct _GtkViewportClass
&lt;br&gt;&amp;nbsp;};
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;-GType &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;gtk_viewport_get_type &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(void) G_GNUC_CONST;
&lt;br&gt;-GtkWidget* &amp;nbsp; &amp;nbsp; gtk_viewport_new &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (GtkAdjustment *hadjustment,
&lt;br&gt;-					 &amp;nbsp; &amp;nbsp; GtkAdjustment *vadjustment);
&lt;br&gt;-GtkAdjustment* gtk_viewport_get_hadjustment (GtkViewport &amp;nbsp; *viewport);
&lt;br&gt;-GtkAdjustment* gtk_viewport_get_vadjustment (GtkViewport &amp;nbsp; *viewport);
&lt;br&gt;-void &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gtk_viewport_set_hadjustment (GtkViewport &amp;nbsp; *viewport,
&lt;br&gt;-					 &amp;nbsp; &amp;nbsp; GtkAdjustment *adjustment);
&lt;br&gt;-void &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gtk_viewport_set_vadjustment (GtkViewport &amp;nbsp; *viewport,
&lt;br&gt;-					 &amp;nbsp; &amp;nbsp; GtkAdjustment *adjustment);
&lt;br&gt;-void &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gtk_viewport_set_shadow_type (GtkViewport &amp;nbsp; *viewport,
&lt;br&gt;-					 &amp;nbsp; &amp;nbsp; GtkShadowType &amp;nbsp;type);
&lt;br&gt;-GtkShadowType &amp;nbsp;gtk_viewport_get_shadow_type (GtkViewport &amp;nbsp; *viewport);
&lt;br&gt;+GType &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gtk_viewport_get_type &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(void) G_GNUC_CONST;
&lt;br&gt;+GtkWidget* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;gtk_viewport_new &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (GtkAdjustment *hadjustment,
&lt;br&gt;+							GtkAdjustment *vadjustment);
&lt;br&gt;+GtkAdjustment* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;gtk_viewport_get_hadjustment &amp;nbsp; &amp;nbsp; (GtkViewport &amp;nbsp; *viewport);
&lt;br&gt;+GtkAdjustment* &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;gtk_viewport_get_vadjustment &amp;nbsp; &amp;nbsp; (GtkViewport &amp;nbsp; *viewport);
&lt;br&gt;+void &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;gtk_viewport_set_hadjustment &amp;nbsp; &amp;nbsp; (GtkViewport &amp;nbsp; *viewport,
&lt;br&gt;+							GtkAdjustment *adjustment);
&lt;br&gt;+void &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;gtk_viewport_set_vadjustment &amp;nbsp; &amp;nbsp; (GtkViewport &amp;nbsp; *viewport,
&lt;br&gt;+							GtkAdjustment *adjustment);
&lt;br&gt;+void &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;gtk_viewport_set_shadow_type &amp;nbsp; &amp;nbsp; (GtkViewport &amp;nbsp; *viewport,
&lt;br&gt;+							GtkShadowType &amp;nbsp;type);
&lt;br&gt;+GtkShadowType &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gtk_viewport_get_shadow_type &amp;nbsp; &amp;nbsp; (GtkViewport &amp;nbsp; *viewport);
&lt;br&gt;+void &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;gtk_viewport_set_size_constraint (GtkViewport &amp;nbsp; *viewport,
&lt;br&gt;+							GtkViewportConstraint &amp;nbsp;type);
&lt;br&gt;+GtkViewportConstraint gtk_viewport_get_size_constraint (GtkViewport &amp;nbsp; *viewport);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;G_END_DECLS
&lt;br&gt;diff --git a/tests/Makefile.am b/tests/Makefile.am
&lt;br&gt;index 99c19e6..1338dd8 100644
&lt;br&gt;--- a/tests/Makefile.am
&lt;br&gt;+++ b/tests/Makefile.am
&lt;br&gt;@@ -45,6 +45,7 @@ noinst_PROGRAMS =			\
&lt;br&gt;&amp;nbsp;	testellipsise			\
&lt;br&gt;&amp;nbsp;	testentrycompletion 		\
&lt;br&gt;&amp;nbsp;	testextendedlayout 		\
&lt;br&gt;+	testextlayoutviewport 		\
&lt;br&gt;&amp;nbsp;	testfilechooser			\
&lt;br&gt;&amp;nbsp;	testfilechooserbutton		\
&lt;br&gt;&amp;nbsp;	testgtk				\
&lt;br&gt;@@ -111,6 +112,7 @@ testdnd_DEPENDENCIES = $(TEST_DEPS)
&lt;br&gt;&amp;nbsp;testellipsise_DEPENDENCIES = $(TEST_DEPS)
&lt;br&gt;&amp;nbsp;testentrycompletion_DEPENDENCIES = $(TEST_DEPS)
&lt;br&gt;&amp;nbsp;testextendedlayout_DEPENDENCIES = $(TEST_DEPS)
&lt;br&gt;+testextlayoutviewport_DEPENDENCIES = $(TEST_DEPS)
&lt;br&gt;&amp;nbsp;testfilechooser_DEPENDENCIES = $(TEST_DEPS)
&lt;br&gt;&amp;nbsp;testfilechooserbutton_DEPENDENCIES = $(TEST_DEPS)
&lt;br&gt;&amp;nbsp;testgtk_DEPENDENCIES = $(TEST_DEPS)
&lt;br&gt;@@ -167,6 +169,7 @@ testdnd_LDADD = $(LDADDS)
&lt;br&gt;&amp;nbsp;testellipsise_LDADD = $(LDADDS)
&lt;br&gt;&amp;nbsp;testentrycompletion_LDADD = $(LDADDS)
&lt;br&gt;&amp;nbsp;testextendedlayout_LDADD = $(LDADDS)
&lt;br&gt;+testextlayoutviewport_LDADD = $(LDADDS)
&lt;br&gt;&amp;nbsp;testfilechooser_LDADD = $(LDADDS)
&lt;br&gt;&amp;nbsp;testfilechooserbutton_LDADD = $(LDADDS)
&lt;br&gt;&amp;nbsp;testgtk_LDADD = $(LDADDS)
&lt;br&gt;@@ -230,6 +234,9 @@ testentrycompletion_SOURCES = 	\
&lt;br&gt;&amp;nbsp;testextendedlayout_SOURCES = 	\
&lt;br&gt;&amp;nbsp;	testextendedlayout.c
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+testextlayoutviewport_SOURCES = 	\
&lt;br&gt;+	testextlayoutviewport.c
&lt;br&gt;+
&lt;br&gt;&amp;nbsp;testfilechooser_SOURCES = 	\
&lt;br&gt;&amp;nbsp;	prop-editor.c		\
&lt;br&gt;&amp;nbsp;	testfilechooser.c 	
&lt;br&gt;diff --git a/tests/testextlayoutviewport.c b/tests/testextlayoutviewport.c
&lt;br&gt;new file mode 100644
&lt;br&gt;index 0000000..724e816
&lt;br&gt;--- /dev/null
&lt;br&gt;+++ b/tests/testextlayoutviewport.c
&lt;br&gt;@@ -0,0 +1,80 @@
&lt;br&gt;+/*
&lt;br&gt;+ * Copyright (C) 2008 Free Software Foundation, Inc.
&lt;br&gt;+ * Author: Paolo Bonzini &amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19305346&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bonzini@...&lt;/a&gt;&amp;gt;
&lt;br&gt;+ *
&lt;br&gt;+ * This library is free software; you can redistribute it and/or
&lt;br&gt;+ * modify it under the terms of the GNU Lesser General Public License
&lt;br&gt;+ * version 2.1 as published by the Free Software Foundation.
&lt;br&gt;+ *
&lt;br&gt;+ * This library is distributed in the hope that it will be useful, but
&lt;br&gt;+ * WITHOUT ANY WARRANTY; without even the implied warranty of
&lt;br&gt;+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
&lt;br&gt;+ * Lesser General Public License for more details.
&lt;br&gt;+ *
&lt;br&gt;+ * You should have received a copy of the GNU Lesser General Public
&lt;br&gt;+ * License along with this library; if not, write to the Free Software
&lt;br&gt;+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
&lt;br&gt;+ * 02110-1301 USA
&lt;br&gt;+ *
&lt;br&gt;+ */
&lt;br&gt;+
&lt;br&gt;+#include &amp;lt;gtk/gtk.h&amp;gt;
&lt;br&gt;+
&lt;br&gt;+static void
&lt;br&gt;+option_cb (GtkToggleButton *option,
&lt;br&gt;+	 &amp;nbsp; GtkWidget *viewport)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;gboolean active = gtk_toggle_button_get_active (option);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;gtk_viewport_set_size_constraint (GTK_VIEWPORT (viewport),
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;active ? GTK_VIEWPORT_CONSTRAIN_HEIGHT
&lt;br&gt;+					 &amp;nbsp; : GTK_VIEWPORT_CONSTRAIN_WIDTH);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;gtk_label_set_angle (GTK_LABEL (gtk_bin_get_child (GTK_BIN (viewport))),
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp; &amp;nbsp; active ? 90 : 0);
&lt;br&gt;+}
&lt;br&gt;+
&lt;br&gt;+int
&lt;br&gt;+main (int &amp;nbsp; &amp;nbsp;argc,
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;char **argv)
&lt;br&gt;+{
&lt;br&gt;+ &amp;nbsp;GtkWidget *window;
&lt;br&gt;+ &amp;nbsp;GtkWidget *scrolled_window, *viewport, *label, *vbox, *option;
&lt;br&gt;+ &amp;nbsp;
&lt;br&gt;+ &amp;nbsp;gtk_init (&amp;argc, &amp;argv);
&lt;br&gt;+ &amp;nbsp;
&lt;br&gt;+ &amp;nbsp;window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
&lt;br&gt;+ &amp;nbsp;g_signal_connect (G_OBJECT (window), &amp;quot;delete-event&amp;quot;,
&lt;br&gt;+		 &amp;nbsp; &amp;nbsp;G_CALLBACK (gtk_main_quit), NULL);
&lt;br&gt;+ &amp;nbsp;
&lt;br&gt;+ &amp;nbsp;vbox = gtk_vbox_new (FALSE, 4);
&lt;br&gt;+ &amp;nbsp;gtk_container_add (GTK_CONTAINER (window), vbox);
&lt;br&gt;+ &amp;nbsp;
&lt;br&gt;+ &amp;nbsp;scrolled_window = gtk_scrolled_window_new (NULL, NULL);
&lt;br&gt;+ &amp;nbsp;gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
&lt;br&gt;+ &amp;nbsp;
&lt;br&gt;+ &amp;nbsp;viewport = gtk_viewport_new (NULL, NULL);
&lt;br&gt;+ &amp;nbsp;gtk_viewport_set_size_constraint (GTK_VIEWPORT (viewport),
&lt;br&gt;+				 &amp;nbsp; &amp;nbsp;GTK_VIEWPORT_CONSTRAIN_WIDTH);
&lt;br&gt;+ &amp;nbsp;gtk_container_add (GTK_CONTAINER (scrolled_window), viewport);
&lt;br&gt;+ &amp;nbsp;
&lt;br&gt;+#define STR &amp;quot;This is a test %# This is a test %@# This is a test %@#$ &amp;quot;
&lt;br&gt;+ &amp;nbsp;label = gtk_label_new (STR STR STR STR STR STR STR STR STR STR STR STR STR
&lt;br&gt;+			 STR STR STR STR STR STR STR STR STR STR STR STR STR
&lt;br&gt;+			 STR STR STR STR STR STR STR STR STR STR STR STR STR
&lt;br&gt;+			 STR STR STR STR STR STR STR STR STR STR STR STR STR);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
&lt;br&gt;+ &amp;nbsp;gtk_label_set_full_size (GTK_LABEL (label), TRUE);
&lt;br&gt;+ &amp;nbsp;gtk_misc_set_alignment (&amp;(GTK_LABEL (label)-&amp;gt;misc), 0.0, 0.0);
&lt;br&gt;+ &amp;nbsp;gtk_container_add (GTK_CONTAINER (viewport), label);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;option = gtk_check_button_new_with_label (&amp;quot;Horizontal scrollbar&amp;quot;);
&lt;br&gt;+ &amp;nbsp;g_signal_connect (G_OBJECT (option), &amp;quot;toggled&amp;quot;, G_CALLBACK (option_cb), viewport);
&lt;br&gt;+ &amp;nbsp;
&lt;br&gt;+ &amp;nbsp;gtk_box_pack_end (GTK_BOX (vbox), option, FALSE, FALSE, 0);
&lt;br&gt;+ &amp;nbsp;
&lt;br&gt;+ &amp;nbsp;gtk_widget_show_all (window);
&lt;br&gt;+ &amp;nbsp;gtk_main ();
&lt;br&gt;+ &amp;nbsp;return 0;
&lt;br&gt;+}
&lt;br&gt;-- 
&lt;br&gt;1.5.5
&lt;br&gt;&lt;br&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;gtk-devel-list mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19305346&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gtk-devel-list@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/-PATCH--Add-extended-layout-support-for-GtkViewport-tp19305346p19305346.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19305153</id>
	<title>[PATCH] Fix a number of GtkLabel extended layout issues</title>
	<published>2008-09-04T00:44:35Z</published>
	<updated>2008-09-04T00:44:35Z</updated>
	<author>
		<name>Paolo Bonzini-2</name>
	</author>
	<content type="html">This is my first patch, so sorry if I get the submission process wrong.
&lt;br&gt;&amp;nbsp;This patch is meant for extended-layout branch, which hasn't been
&lt;br&gt;merged in a year.
&lt;br&gt;&lt;br&gt;It fixes a number of issues with GtkLabel's extended layout support
&lt;br&gt;which are uncovered by my next patch:
&lt;br&gt;&lt;br&gt;1) the height_for_width/width_for_height implementations worked by
&lt;br&gt;computing the height in a separate PangoLayout object. &amp;nbsp;However, they
&lt;br&gt;did not record the desired wrapping width anywhere. &amp;nbsp;This patch fixes it
&lt;br&gt;by recording it in GtkLabelPrivate.
&lt;br&gt;&lt;br&gt;A side issue is that layout could be done before realizing. &amp;nbsp;Then, upon
&lt;br&gt;realizing, gtk_label_style_set is called and it invalidates the wrapping
&lt;br&gt;with. &amp;nbsp;This patch fixes it by not invalidating the wrapping width if it
&lt;br&gt;was set by height_for_width/width_for_height.
&lt;br&gt;&lt;br&gt;2) For wrapping labels, gtk_label_extended_layout_get_natural_size was
&lt;br&gt;destroying the wrapping width set by height_for_width/width_for_height.
&lt;br&gt;&amp;nbsp;This happened because it uses gtk_label_size_request which in turn
&lt;br&gt;clears the layout in the case of a wrapping label.
&lt;br&gt;&lt;br&gt;This patch fixes it by preserving priv-&amp;gt;wrap_width around
&lt;br&gt;get_natural_size. &amp;nbsp;I also modified a little the code to make it more
&lt;br&gt;explicit that gtk_label_size_request computes a fresh layout for
&lt;br&gt;wrapping labels.
&lt;br&gt;&lt;br&gt;However, I'm actually thinking of disabling completely
&lt;br&gt;height_for_width/width_for_height for non-wrapping labels (right now
&lt;br&gt;it's accepted for elliipsizing labels), as well as disabling
&lt;br&gt;get_natural_size for wrapping labels. &amp;nbsp;In the meanwhile, this patch
&lt;br&gt;makes things work properly.
&lt;br&gt;&lt;br&gt;Ok? &amp;nbsp;(I obviously require someone to commit it for me if accepted).
&lt;br&gt;&lt;br&gt;Paolo
&lt;br&gt;&lt;br /&gt;2008-09-04 &amp;nbsp;Paolo Bonzini &amp;nbsp;&amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19305153&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;bonzini@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * gtk/gtklabel.c: Set priv-&amp;gt;wrap_width in the extended-layout
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; height_for_width code. &amp;nbsp;Preserve it in get_natural_size
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; because when label-&amp;gt;wrap is set, gtk_label_size_request will
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; invalidate the layout and hence modify priv-&amp;gt;wrap_width; for
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; the same reason, don't bother setting the layout's width to -1
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if the label is wrapping. &amp;nbsp;Add priv-&amp;gt;wrap_at_container_size
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; so that changing the style (e.g. &amp;nbsp;upon realization) does not
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; invalidate the layout.
&lt;br&gt;---
&lt;br&gt;&amp;nbsp;ChangeLog.gtk-extended-layout | &amp;nbsp; 11 +++++++++
&lt;br&gt;&amp;nbsp;gtk/gtklabel.c &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; 48 ++++++++++++++++++++++++++++++++++------
&lt;br&gt;&amp;nbsp;2 files changed, 51 insertions(+), 8 deletions(-)
&lt;br&gt;&lt;br&gt;diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c
&lt;br&gt;index 2082d6a..fac4b7f 100644
&lt;br&gt;--- a/gtk/gtklabel.c
&lt;br&gt;+++ b/gtk/gtklabel.c
&lt;br&gt;@@ -60,7 +60,9 @@ typedef struct
&lt;br&gt;&amp;nbsp; &amp;nbsp;gint width_chars;
&lt;br&gt;&amp;nbsp; &amp;nbsp;gint max_width_chars;
&lt;br&gt;&amp;nbsp; &amp;nbsp;gint baseline_offset;
&lt;br&gt;- &amp;nbsp;gboolean full_size;
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;guint full_size : 1;
&lt;br&gt;+ &amp;nbsp;guint wrap_at_container_size : 1;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;GtkLabelPrivate;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -826,6 +828,8 @@ gtk_label_init (GtkLabel *label)
&lt;br&gt;&amp;nbsp; &amp;nbsp;priv-&amp;gt;width_chars = -1;
&lt;br&gt;&amp;nbsp; &amp;nbsp;priv-&amp;gt;max_width_chars = -1;
&lt;br&gt;&amp;nbsp; &amp;nbsp;priv-&amp;gt;wrap_width = -1;
&lt;br&gt;+ &amp;nbsp;priv-&amp;gt;wrap_at_container_size = FALSE;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;label-&amp;gt;label = NULL;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;label-&amp;gt;jtype = GTK_JUSTIFY_LEFT;
&lt;br&gt;@@ -1987,6 +1991,7 @@ gtk_label_invalidate_wrap_width (GtkLabel *label)
&lt;br&gt;&amp;nbsp; &amp;nbsp;priv = GTK_LABEL_GET_PRIVATE (label);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;priv-&amp;gt;wrap_width = -1;
&lt;br&gt;+ &amp;nbsp;priv-&amp;gt;wrap_at_container_size = FALSE;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static gint
&lt;br&gt;@@ -2366,6 +2371,7 @@ gtk_label_style_set (GtkWidget *widget,
&lt;br&gt;&amp;nbsp;		 &amp;nbsp; &amp;nbsp; GtkStyle &amp;nbsp;*previous_style)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp;GtkLabel *label;
&lt;br&gt;+ &amp;nbsp;GtkLabelPrivate *priv;
&lt;br&gt;&amp;nbsp; &amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;g_return_if_fail (GTK_IS_LABEL (widget));
&lt;br&gt;&amp;nbsp; &amp;nbsp;
&lt;br&gt;@@ -2373,7 +2379,10 @@ gtk_label_style_set (GtkWidget *widget,
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;/* We have to clear the layout, fonts etc. may have changed */
&lt;br&gt;&amp;nbsp; &amp;nbsp;gtk_label_clear_layout (label);
&lt;br&gt;- &amp;nbsp;gtk_label_invalidate_wrap_width (label);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;priv = GTK_LABEL_GET_PRIVATE (label);
&lt;br&gt;+ &amp;nbsp;if (!priv-&amp;gt;wrap_at_container_size)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;gtk_label_invalidate_wrap_width (label);
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static void 
&lt;br&gt;@@ -4379,19 +4388,26 @@ static gint
&lt;br&gt;&amp;nbsp;gtk_label_extended_layout_get_size_for_allocation (GtkExtendedLayout *layout,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gint &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; size)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;- &amp;nbsp;GtkLabel *label = GTK_LABEL (layout);
&lt;br&gt;- &amp;nbsp;gdouble angle = gtk_label_get_angle (label);
&lt;br&gt;+ &amp;nbsp;GtkLabel *label;
&lt;br&gt;+ &amp;nbsp;GtkLabelPrivate *priv;
&lt;br&gt;+ &amp;nbsp;gdouble angle;
&lt;br&gt;&amp;nbsp; &amp;nbsp;PangoLayout *tmp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;// this test is slightly more tolerant than the get_features test
&lt;br&gt;+ &amp;nbsp;label = GTK_LABEL (layout);
&lt;br&gt;+ &amp;nbsp;priv = GTK_LABEL_GET_PRIVATE (label);
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;/* This test is valid for both width_for_height, and height_for_width. &amp;nbsp;*/
&lt;br&gt;+ &amp;nbsp;angle = gtk_label_get_angle (label);
&lt;br&gt;&amp;nbsp; &amp;nbsp;g_assert (0 == (((gint)angle) % 90));
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;gtk_label_ensure_layout (label);
&lt;br&gt;&amp;nbsp; &amp;nbsp;tmp = pango_layout_copy (label-&amp;gt;layout);
&lt;br&gt;&amp;nbsp; &amp;nbsp;pango_layout_set_width (tmp, PANGO_SCALE * size);
&lt;br&gt;+ &amp;nbsp;priv-&amp;gt;wrap_width = PANGO_SCALE * size;
&lt;br&gt;+ &amp;nbsp;priv-&amp;gt;wrap_at_container_size = TRUE;
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;pango_layout_get_pixel_size (tmp, NULL, &amp;size);
&lt;br&gt;&amp;nbsp; &amp;nbsp;g_object_unref (tmp);
&lt;br&gt;-
&lt;br&gt;&amp;nbsp; &amp;nbsp;return size;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;@@ -4400,24 +4416,40 @@ gtk_label_extended_layout_get_natural_size (GtkExtendedLayout *layout,
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;GtkRequisition &amp;nbsp; &amp;nbsp;*requisition)
&lt;br&gt;&amp;nbsp;{
&lt;br&gt;&amp;nbsp; &amp;nbsp;GtkLabel *label;
&lt;br&gt;+ &amp;nbsp;GtkLabelPrivate *priv;
&lt;br&gt;&amp;nbsp; &amp;nbsp;gboolean ellipsize;
&lt;br&gt;+ &amp;nbsp;gint wrap_width;
&lt;br&gt;&amp;nbsp; &amp;nbsp;PangoLayout *tmp;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;label = GTK_LABEL (layout);
&lt;br&gt;+ &amp;nbsp;priv = GTK_LABEL_GET_PRIVATE (label);
&lt;br&gt;&amp;nbsp; &amp;nbsp;gtk_label_ensure_layout (label);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;ellipsize = label-&amp;gt;ellipsize;
&lt;br&gt;&amp;nbsp; &amp;nbsp;label-&amp;gt;ellipsize = PANGO_ELLIPSIZE_NONE;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;+ &amp;nbsp;wrap_width = priv-&amp;gt;wrap_width;
&lt;br&gt;&amp;nbsp; &amp;nbsp;tmp = label-&amp;gt;layout;
&lt;br&gt;- &amp;nbsp;label-&amp;gt;layout = pango_layout_copy (tmp);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;- &amp;nbsp;pango_layout_set_width (label-&amp;gt;layout, -1);
&lt;br&gt;+ &amp;nbsp;/* See comment in gtk_label_size_request. &amp;nbsp;*/
&lt;br&gt;+
&lt;br&gt;+ &amp;nbsp;if (label-&amp;gt;wrap)
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;g_object_ref (label-&amp;gt;layout);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;gtk_label_clear_layout (label);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+ &amp;nbsp;else
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;{
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;label-&amp;gt;layout = pango_layout_copy (tmp);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp; &amp;nbsp;pango_layout_set_width (label-&amp;gt;layout, -1);
&lt;br&gt;+ &amp;nbsp; &amp;nbsp;}
&lt;br&gt;+
&lt;br&gt;&amp;nbsp; &amp;nbsp;gtk_label_size_request (GTK_WIDGET (label), requisition);
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp; &amp;nbsp;g_object_unref (label-&amp;gt;layout);
&lt;br&gt;&amp;nbsp; &amp;nbsp;label-&amp;gt;ellipsize = ellipsize;
&lt;br&gt;&amp;nbsp; &amp;nbsp;label-&amp;gt;layout = tmp;
&lt;br&gt;+ &amp;nbsp;priv-&amp;gt;wrap_width = wrap_width;
&lt;br&gt;&amp;nbsp;}
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;static gint
&lt;br&gt;-- 
&lt;br&gt;1.5.5
&lt;br&gt;&lt;br&gt;&lt;br /&gt;_______________________________________________
&lt;br&gt;gtk-devel-list mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19305153&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gtk-devel-list@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/-PATCH--Fix-a-number-of-GtkLabel-extended-layout-issues-tp19305153p19305153.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19302188</id>
	<title>Re: GIO and sockets</title>
	<published>2008-09-03T19:29:22Z</published>
	<updated>2008-09-03T19:29:22Z</updated>
	<author>
		<name>Dan Winship-2</name>
	</author>
	<content type="html">Felipe Contreras wrote:
&lt;br&gt;&amp;gt; How should applications use sockets with GIO?
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I'm interested in hostname resolution, and socket handling. If
&lt;br&gt;&amp;gt; possible also proxy handling.
&lt;br&gt;&lt;br&gt;There isn't yet a good story here. See
&lt;br&gt;&lt;a href=&quot;http://bugzilla.gnome.org/show_bug.cgi?id=515973&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bugzilla.gnome.org/show_bug.cgi?id=515973&lt;/a&gt;&amp;nbsp;and
&lt;br&gt;&lt;a href=&quot;http://bugzilla.gnome.org/show_bug.cgi?id=548466&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bugzilla.gnome.org/show_bug.cgi?id=548466&lt;/a&gt;.
&lt;br&gt;&lt;br&gt;One possibility that's available now is to use SoupAddress and
&lt;br&gt;SoupSocket from libsoup, and just ignore the HTTP parts of the library.
&lt;br&gt;This is what the gvfs ftp backend does (although gvfs already depended
&lt;br&gt;on libsoup anyway, so it was an easy decision to make there).
&lt;br&gt;&lt;br&gt;-- Dan
&lt;br&gt;_______________________________________________
&lt;br&gt;gtk-devel-list mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19302188&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gtk-devel-list@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/GIO-and-sockets-tp19300050p19302188.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19300050</id>
	<title>GIO and sockets</title>
	<published>2008-09-03T16:04:43Z</published>
	<updated>2008-09-03T16:04:43Z</updated>
	<author>
		<name>Felipe Contreras</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;How should applications use sockets with GIO?
&lt;br&gt;&lt;br&gt;I'm interested in hostname resolution, and socket handling. If
&lt;br&gt;possible also proxy handling.
&lt;br&gt;&lt;br&gt;Any pointers?
&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Felipe Contreras
&lt;br&gt;_______________________________________________
&lt;br&gt;gtk-devel-list mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19300050&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gtk-devel-list@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/GIO-and-sockets-tp19300050p19300050.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19291758</id>
	<title>Re: g_format_file_size_for_display()</title>
	<published>2008-09-03T08:29:29Z</published>
	<updated>2008-09-03T08:29:29Z</updated>
	<author>
		<name>Christian Neumair-2</name>
	</author>
	<content type="html">Am Mittwoch, den 19.12.2007, 08:52 +0100 schrieb Sven Neumann:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; On Tue, 2007-12-18 at 17:14 -0600, Federico Mena Quintero wrote:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; char *g_format_file_size_for_display (goffset size);
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; Ideally this one needs to take another parameter indicating
&lt;br&gt;&amp;gt; whether you
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; want 1kb = 1000 bytes or 1kb = 1024 bytes. 
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; No, because then you'll have applications using either, and then
&lt;br&gt;&amp;gt; someone
&lt;br&gt;&amp;gt; &amp;gt; will want to make them consistent and we'll get an option in the
&lt;br&gt;&amp;gt; control
&lt;br&gt;&amp;gt; &amp;gt; center an an XSETTING, which is yet another thing we'll have to port
&lt;br&gt;&amp;gt; &amp;gt; over when moving from GConf to DConf, and it's just a big fat mess.
&lt;/div&gt;﻿
&lt;br&gt;The issue seems to be a constant source of conflict, so why shouldn't we
&lt;br&gt;add another preference? The dispute under
&lt;br&gt;&lt;br&gt;﻿&lt;a href=&quot;http://bugzilla.gnome.org/show_bug.cgi?id=550100&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bugzilla.gnome.org/show_bug.cgi?id=550100&lt;/a&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;proofs it. An environment variable would be enough, and if it was
&lt;br&gt;outside the GLib name space it could even be used by console
&lt;br&gt;applications (like ls).
&lt;br&gt;&lt;br&gt;&amp;gt; Yes, because this is a choice that the application developer needs to
&lt;br&gt;&amp;gt; make, not the user. So this is never going to become am option in the
&lt;br&gt;&amp;gt; control center or an XSETTING. We just need to make sure that the API
&lt;br&gt;&amp;gt; docs give the application developer the information they need to make
&lt;br&gt;&amp;gt; the right choice.
&lt;br&gt;&lt;br&gt;I'm not sure why application developers may want to enforce this
&lt;br&gt;decision. Maybe you could give an example where it is important?
&lt;br&gt;&lt;br&gt;I tend to call it a cultural decision, i.e. something like a time format
&lt;br&gt;or measurement units. Maybe it should be put into a LC_* environment
&lt;br&gt;variable (cf. man locale)? That would at least make sense if it directly
&lt;br&gt;depends on the country or origin of the user, rather than being “just” a
&lt;br&gt;matter of taste.
&lt;br&gt;&lt;br&gt;best regards,
&lt;br&gt;&amp;nbsp;Christian Neumair
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Christian Neumair &amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19291758&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;cneumair@...&lt;/a&gt;&amp;gt;
&lt;br&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;gtk-devel-list mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19291758&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gtk-devel-list@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/g_format_file_size_for_display%28%29-tp14405556p19291758.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19290514</id>
	<title>Re: Theming API Hackfest</title>
	<published>2008-09-03T07:32:07Z</published>
	<updated>2008-09-03T07:32:07Z</updated>
	<author>
		<name>Robert Staudinger</name>
	</author>
	<content type="html">On Wed, Sep 3, 2008 at 1:25 PM, Alberto Ruiz &amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19290514&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;aruiz@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;br&gt;[...]
&lt;br&gt;&lt;br&gt;&amp;gt;&amp;gt; Thinking again, most of the detail strings are actually redundant if
&lt;br&gt;&amp;gt;&amp;gt; the engine is allowed to know what kind of widget is drawn.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; No, they are not always redundant, and the engine is allowed actually.
&lt;br&gt;&lt;br&gt;I did not say /all/ detail strings are redundant, but if the redundant
&lt;br&gt;ones were removed it might be easier to find a solution avoiding the
&lt;br&gt;quirks of a string API for the remaining ones.
&lt;br&gt;&lt;br&gt;Also I thought this whole thread was about theming in gtk3, for which
&lt;br&gt;it was proposed that direct access to widgets should be revoked. In
&lt;br&gt;gtk2 it's a different story, as we all know ...
&lt;br&gt;&lt;br&gt;&amp;gt; That approach (which is quite used), suddenly ties engines to
&lt;br&gt;&amp;gt; implementation details of widgets, denying developers to change those
&lt;br&gt;&amp;gt; implementations since the theming API is a public interface that
&lt;br&gt;&amp;gt; people consume to make third party engines.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Now, the idea discussed is to solve that by allowing widgets to give
&lt;br&gt;&amp;gt; more information without allowing engines to crawl up over the
&lt;br&gt;&amp;gt; widget's parents and stuff like that.
&lt;br&gt;&lt;br&gt;My point is that permitting to traverse the widget tree allows for
&lt;br&gt;simpler and more generic code in gtk proper. gtk_widget_get_parent()
&lt;br&gt;is already there, nothing new required. See below for details.
&lt;br&gt;&lt;br&gt;[...]
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; It is actually a quite valuable work that people start playing with
&lt;br&gt;&amp;gt; more usable engines for artists and i'm pretty sure as soon the idea
&lt;br&gt;&amp;gt; progress you would be able to give us a quite valuable feedback.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Generally, instead of passing more context information to the engine
&lt;br&gt;&amp;gt;&amp;gt; as it is being discussed, I'd rather provide hooks to the style
&lt;br&gt;&amp;gt;&amp;gt; matching subsystem for widget implementers and look mimicking. This is
&lt;br&gt;&amp;gt;&amp;gt; also the approach taken in the CSS engine.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; You mean hooks as in &amp;quot;widget: If I match this style matching
&lt;br&gt;&amp;gt; expression I send this event&amp;quot; or something like that?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Could you elaborate a little bit on how this could be implemented and
&lt;br&gt;&amp;gt; how much effort for a widget implementer would take to do it properly?
&lt;/div&gt;&lt;br&gt;The CSS engine fills a vtable, so the selection engine can traverse
&lt;br&gt;the widget hierarchy without actually knowing anything about widgets.
&lt;br&gt;Look for `ccd_node_class_t' in the file linked below. Lookalike
&lt;br&gt;toolkits could fill the vtable with their own functions, thus being
&lt;br&gt;able to fake entire widget hierarchies without creating any gtk widget
&lt;br&gt;offscreen to have it drawn correctly.
&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://bzr-playground.gnome.org/~robsta/gtk-css-engine/annotate/54?file_id=ccdnode.h-20080812073847-d210lox1qul689g2-44&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://bzr-playground.gnome.org/~robsta/gtk-css-engine/annotate/54?file_id=ccdnode.h-20080812073847-d210lox1qul689g2-44&lt;/a&gt;&lt;br&gt;_______________________________________________
&lt;br&gt;gtk-devel-list mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19290514&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gtk-devel-list@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Theming-API-Hackfest-tp19200718p19290514.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19287347</id>
	<title>Re: Theming API Hackfest</title>
	<published>2008-09-03T04:25:46Z</published>
	<updated>2008-09-03T04:25:46Z</updated>
	<author>
		<name>Alberto Ruiz-4</name>
	</author>
	<content type="html">2008/9/3 Robert Staudinger &amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19287347&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;robert.staudinger@...&lt;/a&gt;&amp;gt;:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; On Fri, Aug 29, 2008 at 6:13 PM, Benjamin Berg
&lt;br&gt;&amp;gt; &amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19287347&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;benjamin@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; [...]
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Here's what I learned so far:
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; - The biggest issue is the impedance mismatch between configuring
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; widget style properties in gtkrc while engines are built around
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; drawing primitives.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Not quite sure what you mean here exactly.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Two issues:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; (1) The gtk/engine interface allows for implicit styling by the
&lt;br&gt;&amp;gt; engine. It is possible to write a fancy engine that just uses a 3 line
&lt;br&gt;&amp;gt; boilerplate gtkrc loading the engine library. Of course this breaks
&lt;br&gt;&amp;gt; toolkits that try to look like gtk using gtk_rc_get_style_by_paths().
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; (2) Gtkrc talks about widgets but engines draw primitives. E.g. a
&lt;br&gt;&amp;gt; GtkNotebook is drawn using &amp;quot;box_gap&amp;quot; and &amp;quot;extender&amp;quot; primitives.
&lt;br&gt;&amp;gt; However, there is no vocabulary in gtkrc to configure primitives.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; [...] (There are of course dusty corners)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; - Detail strings are not the problem they're sometimes made to be.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Detail strings are part of the problem. I see two important flaws with
&lt;br&gt;&amp;gt;&amp;gt; the current detail strings. The first one is that they are fixed and
&lt;br&gt;&amp;gt;&amp;gt; cannot be extended easily because of API compatibility. The second one
&lt;br&gt;&amp;gt;&amp;gt; is that there are a lot of inconsistencies in their naming.
&lt;br&gt;&amp;gt;&amp;gt; As an example for this look at the different style properties that only
&lt;br&gt;&amp;gt;&amp;gt; exists to add more information to detail strings. Or look at the two
&lt;br&gt;&amp;gt;&amp;gt; scrollbars and scales. One calls the slider &amp;quot;[hv]scale&amp;quot; the other
&lt;br&gt;&amp;gt;&amp;gt; &amp;quot;slider&amp;quot;. And guess what? The scrollbar calls the stepper buttons
&lt;br&gt;&amp;gt;&amp;gt; &amp;quot;[hv]scrollbar&amp;quot;.
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Both of these make it harder to create good themes. One needs to shift
&lt;br&gt;&amp;gt;&amp;gt; trough a lot of style properties and learn the different quirks of
&lt;br&gt;&amp;gt;&amp;gt; widgets -- often by reading the GTK+ source code.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Thinking again, most of the detail strings are actually redundant if
&lt;br&gt;&amp;gt; the engine is allowed to know what kind of widget is drawn.
&lt;/div&gt;&lt;br&gt;No, they are not always redundant, and the engine is allowed actually.
&lt;br&gt;That approach (which is quite used), suddenly ties engines to
&lt;br&gt;implementation details of widgets, denying developers to change those
&lt;br&gt;implementations since the theming API is a public interface that
&lt;br&gt;people consume to make third party engines.
&lt;br&gt;&lt;br&gt;Now, the idea discussed is to solve that by allowing widgets to give
&lt;br&gt;more information without allowing engines to crawl up over the
&lt;br&gt;widget's parents and stuff like that.
&lt;br&gt;&lt;br&gt;&amp;gt; I did not mean to say that there are great engines out there or that
&lt;br&gt;&amp;gt; they weren't a lot of work, just that the internal gtk/engine
&lt;br&gt;&amp;gt; interface is way more powerful that what most engines expose.
&lt;br&gt;&lt;br&gt;Powerful in this case is an enemy of maintenable code I'm afraid.
&lt;br&gt;&lt;br&gt;&amp;gt; To sum up, here is what I'm prototyping:
&lt;br&gt;&amp;gt; - Use CSS vocabulary to match all widgets and primitives.
&lt;br&gt;&amp;gt; - Only what is specified in CSS is drawn, nothing is implicit or
&lt;br&gt;&amp;gt; special-cased inside the engine.
&lt;br&gt;&amp;gt; - Feed back gtkrc snippets created from CSS to support
&lt;br&gt;&amp;gt; gtk_rc_get_style_by_paths() [future].
&lt;br&gt;&lt;br&gt;It is actually a quite valuable work that people start playing with
&lt;br&gt;more usable engines for artists and i'm pretty sure as soon the idea
&lt;br&gt;progress you would be able to give us a quite valuable feedback.
&lt;br&gt;&lt;br&gt;&amp;gt; Generally, instead of passing more context information to the engine
&lt;br&gt;&amp;gt; as it is being discussed, I'd rather provide hooks to the style
&lt;br&gt;&amp;gt; matching subsystem for widget implementers and look mimicking. This is
&lt;br&gt;&amp;gt; also the approach taken in the CSS engine.
&lt;br&gt;&lt;br&gt;You mean hooks as in &amp;quot;widget: If I match this style matching
&lt;br&gt;expression I send this event&amp;quot; or something like that?
&lt;br&gt;&lt;br&gt;Could you elaborate a little bit on how this could be implemented and
&lt;br&gt;how much effort for a widget implementer would take to do it properly?
&lt;br&gt;&lt;br&gt;&lt;br&gt;-- 
&lt;br&gt;Cheers,
&lt;br&gt;Alberto Ruiz
&lt;br&gt;_______________________________________________
&lt;br&gt;gtk-devel-list mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19287347&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gtk-devel-list@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Theming-API-Hackfest-tp19200718p19287347.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19287057</id>
	<title>Re: Theming API Hackfest</title>
	<published>2008-09-03T04:01:46Z</published>
	<updated>2008-09-03T04:01:46Z</updated>
	<author>
		<name>Robert Staudinger</name>
	</author>
	<content type="html">On Fri, Aug 29, 2008 at 6:13 PM, Benjamin Berg
&lt;br&gt;&amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19287057&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;benjamin@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&lt;br&gt;[...]
&lt;br&gt;&lt;br&gt;&amp;gt;&amp;gt; Here's what I learned so far:
&lt;br&gt;&amp;gt;&amp;gt; - The biggest issue is the impedance mismatch between configuring
&lt;br&gt;&amp;gt;&amp;gt; widget style properties in gtkrc while engines are built around
&lt;br&gt;&amp;gt;&amp;gt; drawing primitives.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Not quite sure what you mean here exactly.
&lt;br&gt;&lt;br&gt;Two issues:
&lt;br&gt;&lt;br&gt;(1) The gtk/engine interface allows for implicit styling by the
&lt;br&gt;engine. It is possible to write a fancy engine that just uses a 3 line
&lt;br&gt;boilerplate gtkrc loading the engine library. Of course this breaks
&lt;br&gt;toolkits that try to look like gtk using gtk_rc_get_style_by_paths().
&lt;br&gt;&lt;br&gt;(2) Gtkrc talks about widgets but engines draw primitives. E.g. a
&lt;br&gt;GtkNotebook is drawn using &amp;quot;box_gap&amp;quot; and &amp;quot;extender&amp;quot; primitives.
&lt;br&gt;However, there is no vocabulary in gtkrc to configure primitives.
&lt;br&gt;&lt;br&gt;[...] (There are of course dusty corners)
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;&amp;gt; - Detail strings are not the problem they're sometimes made to be.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Detail strings are part of the problem. I see two important flaws with
&lt;br&gt;&amp;gt; the current detail strings. The first one is that they are fixed and
&lt;br&gt;&amp;gt; cannot be extended easily because of API compatibility. The second one
&lt;br&gt;&amp;gt; is that there are a lot of inconsistencies in their naming.
&lt;br&gt;&amp;gt; As an example for this look at the different style properties that only
&lt;br&gt;&amp;gt; exists to add more information to detail strings. Or look at the two
&lt;br&gt;&amp;gt; scrollbars and scales. One calls the slider &amp;quot;[hv]scale&amp;quot; the other
&lt;br&gt;&amp;gt; &amp;quot;slider&amp;quot;. And guess what? The scrollbar calls the stepper buttons
&lt;br&gt;&amp;gt; &amp;quot;[hv]scrollbar&amp;quot;.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Both of these make it harder to create good themes. One needs to shift
&lt;br&gt;&amp;gt; trough a lot of style properties and learn the different quirks of
&lt;br&gt;&amp;gt; widgets -- often by reading the GTK+ source code.
&lt;/div&gt;&lt;br&gt;Thinking again, most of the detail strings are actually redundant if
&lt;br&gt;the engine is allowed to know what kind of widget is drawn.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;&amp;gt; Frankly, and this is also heavily influenced by the recent
&lt;br&gt;&amp;gt;&amp;gt; gtk-css-engine work, I think nobody ever tried to push an engine to
&lt;br&gt;&amp;gt;&amp;gt; the edge of what's actually possible.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I do think that you are underestimating the work done by other people
&lt;br&gt;&amp;gt; here. Look at the huge maemo theme. Look at the sugar theme, which while
&lt;br&gt;&amp;gt; looking pretty simple has some interesting issues. Look at the
&lt;br&gt;&amp;gt; Clearlooks engine and all its derivatives. Or maybe the the eXperience
&lt;br&gt;&amp;gt; engine, a very powerful pixmap based engine that never took off ...
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; There are probably a lot more examples that I do not know about.
&lt;/div&gt;&lt;br&gt;I did not mean to say that there are great engines out there or that
&lt;br&gt;they weren't a lot of work, just that the internal gtk/engine
&lt;br&gt;interface is way more powerful that what most engines expose.
&lt;br&gt;&lt;br&gt;[...]
&lt;br&gt;&lt;br&gt;To sum up, here is what I'm prototyping:
&lt;br&gt;- Use CSS vocabulary to match all widgets and primitives.
&lt;br&gt;- Only what is specified in CSS is drawn, nothing is implicit or
&lt;br&gt;special-cased inside the engine.
&lt;br&gt;- Feed back gtkrc snippets created from CSS to support
&lt;br&gt;gtk_rc_get_style_by_paths() [future].
&lt;br&gt;&lt;br&gt;Generally, instead of passing more context information to the engine
&lt;br&gt;as it is being discussed, I'd rather provide hooks to the style
&lt;br&gt;matching subsystem for widget implementers and look mimicking. This is
&lt;br&gt;also the approach taken in the CSS engine.
&lt;br&gt;&lt;br&gt;- Rob
&lt;br&gt;_______________________________________________
&lt;br&gt;gtk-devel-list mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19287057&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gtk-devel-list@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Theming-API-Hackfest-tp19200718p19287057.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19279100</id>
	<title>GLib 2.18 released</title>
	<published>2008-09-02T14:47:11Z</published>
	<updated>2008-09-02T14:47:11Z</updated>
	<author>
		<name>Matthias Clasen-2</name>
	</author>
	<content type="html">GLib 2.18.0 is now available for download at:
&lt;br&gt;&lt;br&gt;&amp;nbsp;&lt;a href=&quot;http://download.gnome.org/sources/glib/2.18&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://download.gnome.org/sources/glib/2.18&lt;/a&gt;&lt;br&gt;&lt;br&gt;glib-2.18.0.tar.bz2 &amp;nbsp; md5sum: 06e5afe4ce055085dc5fd9fdab527bf7
&lt;br&gt;glib-2.18.0.tar.gz &amp;nbsp; &amp;nbsp;md5sum: e55609e7a08755b40d234090f5dfd530
&lt;br&gt;&lt;br&gt;GLib is the low-level core library that forms the basis for projects
&lt;br&gt;such as GTK+ and GNOME. It provides data structure handling for C,
&lt;br&gt;portability wrappers, and interfaces for such runtime functionality
&lt;br&gt;as an event loop, threads, dynamic loading, and an object system.
&lt;br&gt;&lt;br&gt;GLib 2.18 is a stable release adding an incremental improvement
&lt;br&gt;in functionality over GLib 2.16 while maintaining binary and
&lt;br&gt;source compatibility.
&lt;br&gt;&lt;br&gt;Major new features include:
&lt;br&gt;&lt;br&gt;&amp;nbsp;* Unicode 5.1 support
&lt;br&gt;&lt;br&gt;&amp;nbsp;* Support for the latest version of the shared-mime specification,
&lt;br&gt;&amp;nbsp; &amp;nbsp;including icons for mime types and content types for volumes
&lt;br&gt;&lt;br&gt;&amp;nbsp;* Improved internationalization support with g_dgettext(), g_dngettext()
&lt;br&gt;&amp;nbsp; &amp;nbsp;and NC_()
&lt;br&gt;&lt;br&gt;&amp;nbsp;* Support for &amp;quot;subparsers&amp;quot; in GMarkup
&lt;br&gt;&lt;br&gt;&amp;nbsp;* Support for emblems on icons
&lt;br&gt;&lt;br&gt;&amp;nbsp;* GIO supports HTTP URIs on Windows
&lt;br&gt;&lt;br&gt;For more details and lists of fixed bugs, see the
&lt;br&gt;announcements of the 2.17.x development releases:
&lt;br&gt;&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/archives/gtk-devel-list/2008-May/msg00108.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/archives/gtk-devel-list/2008-May/msg00108.html&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/archives/gtk-devel-list/2008-June/msg00155.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/archives/gtk-devel-list/2008-June/msg00155.html&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/archives/gtk-devel-list/2008-June/msg00156.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/archives/gtk-devel-list/2008-June/msg00156.html&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/archives/gtk-devel-list/2008-July/msg00019.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/archives/gtk-devel-list/2008-July/msg00019.html&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/archives/gtk-devel-list/2008-July/msg00180.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/archives/gtk-devel-list/2008-July/msg00180.html&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/archives/gtk-devel-list/2008-August/msg00010.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/archives/gtk-devel-list/2008-August/msg00010.html&lt;/a&gt;&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/archives/gtk-devel-list/2008-August/msg00152.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/archives/gtk-devel-list/2008-August/msg00152.html&lt;/a&gt;&lt;br&gt;&lt;br&gt;More information about GLib is available at:
&lt;br&gt;&lt;br&gt;&amp;nbsp;&lt;a href=&quot;http://www.gtk.org/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.gtk.org/&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;The GLib Team:
&lt;br&gt;&lt;br&gt;&amp;nbsp;Hans Breuer, Matthias Clasen, Tim Janik, Tor Lillqvist,
&lt;br&gt;&amp;nbsp;Manish Singh, Owen Taylor, and Sebastian Wilhelmi
&lt;br&gt;&lt;br&gt;&lt;br&gt;Thanks to all the GLib 2.16 contributors, including
&lt;br&gt;Akira Tagoh
&lt;br&gt;Alessandro Morandi
&lt;br&gt;Alessandro Vesely
&lt;br&gt;Alexander Larsson
&lt;br&gt;Andrew Walton
&lt;br&gt;Areg Beketovski
&lt;br&gt;Arfrever Frehtes Taifersar Arahesis
&lt;br&gt;Bastien Nocera
&lt;br&gt;Behdad Esfahbod
&lt;br&gt;Benjamin Otte
&lt;br&gt;Björn Lindqvist
&lt;br&gt;Carlos Garcia Campos
&lt;br&gt;Christian Kellner
&lt;br&gt;Christian Neumair
&lt;br&gt;Christian Persch
&lt;br&gt;Claudio Saavedra
&lt;br&gt;Clemens Buss
&lt;br&gt;Cody Russell
&lt;br&gt;Colin Walters
&lt;br&gt;Cosmio Cecchi
&lt;br&gt;Danny Baumann
&lt;br&gt;David Zeuthen
&lt;br&gt;Emmanuele Bassi
&lt;br&gt;Erik van Pienbroek
&lt;br&gt;Erik Walthinsen
&lt;br&gt;Federico Mena Quintero
&lt;br&gt;Felix Riemann
&lt;br&gt;Hiroyuki Ikezoe
&lt;br&gt;Holger Berndt
&lt;br&gt;Jared Moore
&lt;br&gt;Jean-Yves Lefort
&lt;br&gt;Jeffrey Stedfast
&lt;br&gt;Jens Granseuer
&lt;br&gt;Joe Marcus Clarke
&lt;br&gt;Joe Shaw
&lt;br&gt;Johan Dahlin
&lt;br&gt;John Ehresman
&lt;br&gt;Josselin Mouette
&lt;br&gt;Kalle Vahlman
&lt;br&gt;Kazuki Iwamoto
&lt;br&gt;Kjartan Maraas
&lt;br&gt;Kouhei Sutou
&lt;br&gt;Kristian Rietveld
&lt;br&gt;Lieven van der Heide
&lt;br&gt;Lin Ma
&lt;br&gt;Loïc Minier
&lt;br&gt;Luca Ferretti
&lt;br&gt;Marc-Andre Lureau
&lt;br&gt;Marek Kasik
&lt;br&gt;Markus Bergman
&lt;br&gt;Markus Brinkmann
&lt;br&gt;Mart Raudsepp
&lt;br&gt;Mathias Hasselmann
&lt;br&gt;Michael Meeks
&lt;br&gt;Michael Natterer
&lt;br&gt;Mikkel Kamstrup Erlandsen
&lt;br&gt;Morten Welinder
&lt;br&gt;Mukund Sivaraman
&lt;br&gt;Neil Roberts
&lt;br&gt;Olivier Crete
&lt;br&gt;Padraig O'Briain
&lt;br&gt;Paolo Borelli
&lt;br&gt;Patrik Olsson
&lt;br&gt;Paul Bolle
&lt;br&gt;Paul Pogonyshev
&lt;br&gt;Peter Kjellerstedt
&lt;br&gt;Peter O'Gorman
&lt;br&gt;Priit Laes
&lt;br&gt;Richard Hult
&lt;br&gt;Rob Bradford
&lt;br&gt;Rodrigo Moya
&lt;br&gt;Ross Burton
&lt;br&gt;Ryan Lortie
&lt;br&gt;Ryan Schmidt
&lt;br&gt;Salvatore Iovene
&lt;br&gt;Samuel Thibault
&lt;br&gt;Sebastian Dröge
&lt;br&gt;Sebastien Bacher
&lt;br&gt;Simon Zheng
&lt;br&gt;Sjoerd Simons
&lt;br&gt;Stefan Kost
&lt;br&gt;Sven Herzberg
&lt;br&gt;Sven Neumann
&lt;br&gt;Takao Fujiwara
&lt;br&gt;Ted Percival
&lt;br&gt;Thiago Macieira
&lt;br&gt;Thomas Andersen
&lt;br&gt;Tim-Philipp Müller
&lt;br&gt;Tomas Bzatek
&lt;br&gt;Vlad Grecescu
&lt;br&gt;Yevgen Muntyan
&lt;br&gt;Yukihiro Nakadaira
&lt;br&gt;Yu Kuan
&lt;br&gt;&lt;br&gt;&lt;br&gt;September 2, 2008
&lt;br&gt;Matthias Clasen
&lt;br&gt;_______________________________________________
&lt;br&gt;gtk-devel-list mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19279100&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gtk-devel-list@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/GLib-2.18-released-tp19279100p19279100.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19278268</id>
	<title>Proposal: Engine Schema inclusion in GTK+</title>
	<published>2008-09-02T13:59:17Z</published>
	<updated>2008-09-02T13:59:17Z</updated>
	<author>
		<name>Werner Pantke</name>
	</author>
	<content type="html">Dear GTK+ Devs!
&lt;br&gt;(If you don't like long introductions, just skip the first chapter)
&lt;br&gt;&lt;br&gt;Chapter 1:
&lt;br&gt;&lt;br&gt;Some time ago I created a very simple XML format[1] that GTK+ engines
&lt;br&gt;could use to expose its (GTKRC) options as well as some metadata like
&lt;br&gt;version number and author contacts. Engines with relatively simple
&lt;br&gt;options like Clearlooks, High Contrast, Industrial, etc are shipped with
&lt;br&gt;such &amp;quot;Engine Schema&amp;quot; files since then, which are used by tools like
&lt;br&gt;GNOME Color Chooser[2] and GTKConf[3] to allow GTK+/GNOME users to
&lt;br&gt;change engine options of a theme.
&lt;br&gt;&lt;br&gt;As the old format (0.1) isn't enough to describe more complex options
&lt;br&gt;like the one of the Pixmap or Smooth GTK+ engine and because engine
&lt;br&gt;authors and GTKConf maintainers would like to have more contextual
&lt;br&gt;information about engine options so that similar options can e.g. be
&lt;br&gt;grouped together in a GUI instead of forcing them to provide just a list
&lt;br&gt;of available options to a user, i decided to update the XML format
&lt;br&gt;specifications.
&lt;br&gt;&lt;br&gt;With version 0.2 of the Engine Schema format, it's now flexible enough
&lt;br&gt;to fully describe Pixmap options[4] and let engines like murrine
&lt;br&gt;structure its huge amount of available parameters. Additionally there's
&lt;br&gt;an XML Schema[5] that documents the format and can be used to validate a
&lt;br&gt;given schema file. GUIs can use it to easily validate schema files found
&lt;br&gt;on a user's computer before loading them to keep the need of own error
&lt;br&gt;checking to a minimum while engine authors can use a validator (e.g.
&lt;br&gt;contained in GNOME Color Chooser trunk) to debug their schemas before
&lt;br&gt;shipping them.
&lt;br&gt;&lt;br&gt;As before, the format has 100% i18n support and can easily be translated
&lt;br&gt;using intltool.
&lt;br&gt;&lt;br&gt;So why do I tell you all this at all?
&lt;br&gt;&lt;br&gt;&lt;br&gt;Chapter 2:
&lt;br&gt;&lt;br&gt;I wondered where to publish the XML Schema[5] that describes the new
&lt;br&gt;Engine Schema format and Benjamin Berg pointed out that it could be nice
&lt;br&gt;to have it shipped with GTK+. This allows easy validation of every
&lt;br&gt;installed engine schema (by tools and engine authors) and prevents those
&lt;br&gt;tools and GTK+ engines from shipping with its own (and maybe even
&lt;br&gt;modified) copy.
&lt;br&gt;&lt;br&gt;You could also ship the Pixmap engine schema[4] with GTK+ if you want.
&lt;br&gt;However, this would require (or even introduce?) the compile-time
&lt;br&gt;dependency of intltool/gettext to GTK+, as it is meant to be translated
&lt;br&gt;into different languages. Also some more explanations to each option
&lt;br&gt;should be added. ;-)
&lt;br&gt;&lt;br&gt;What do you think about such an inclusion, would it be possible/sensible?
&lt;br&gt;&lt;br&gt;I'm also open for discussions on the new engine schema format itself, of
&lt;br&gt;course. Or if anyone of you is into XSD files, feel free to check the
&lt;br&gt;file at [5] as i never created XML Schemas before. ;-)
&lt;br&gt;&lt;br&gt;&lt;br&gt;Best regards,
&lt;br&gt;Werner Pantke
&lt;br&gt;&lt;br&gt;&lt;br&gt;1: &lt;a href=&quot;http://live.gnome.org/GnomeArt/EngineSchema&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://live.gnome.org/GnomeArt/EngineSchema&lt;/a&gt;&lt;br&gt;2: &lt;a href=&quot;http://gnomecc.sourceforge.net/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://gnomecc.sourceforge.net/&lt;/a&gt;&lt;br&gt;3: &lt;a href=&quot;https://code.launchpad.net/~gtkconf/murrine/murrine-configurator&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;https://code.launchpad.net/~gtkconf/murrine/murrine-configurator&lt;/a&gt;&lt;br&gt;4:
&lt;br&gt;&lt;a href=&quot;http://gnomecc.svn.sourceforge.net/viewvc/gnomecc/gtk-engine-schema/pixmap.xml?content-type=text%2Fplain&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://gnomecc.svn.sourceforge.net/viewvc/gnomecc/gtk-engine-schema/pixmap.xml?content-type=text%2Fplain&lt;/a&gt;&lt;br&gt;5:
&lt;br&gt;&lt;a href=&quot;http://gnomecc.svn.sourceforge.net/viewvc/gnomecc/gtk-engine-schema/schema_0_2.xsd?content-type=text%2Fplain&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://gnomecc.svn.sourceforge.net/viewvc/gnomecc/gtk-engine-schema/schema_0_2.xsd?content-type=text%2Fplain&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br /&gt; &lt;br /&gt;_______________________________________________
&lt;br&gt;gtk-devel-list mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19278268&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gtk-devel-list@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&lt;/a&gt;&lt;br&gt;&lt;div class=&quot;small&quot;&gt;&lt;br/&gt;&lt;img src=&quot;http://www.nabble.com/images/icon_attachment.gif&quot; &gt; &lt;strong&gt;signature.asc&lt;/strong&gt; (268 bytes) &lt;a href=&quot;http://www.nabble.com/attachment/19278268/0/signature.asc&quot; target=&quot;_top&quot;&gt;Download Attachment&lt;/a&gt;&lt;/div&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Proposal%3A-Engine-Schema-inclusion-in-GTK%2B-tp19278268p19278268.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19310365</id>
	<title>Re: [RFC] supporting an alternative layout management algorithm</title>
	<published>2008-09-02T10:45:30Z</published>
	<updated>2008-09-02T10:45:30Z</updated>
	<author>
		<name>Paolo Bonzini-2</name>
	</author>
	<content type="html">Matthias Clasen wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; On Tue, Sep 2, 2008 at 1:24 PM, Behdad Esfahbod
&lt;br&gt;&amp;gt;&amp;gt; These changes of your to GTK+ are quite similar to the &amp;quot;ExtendedLayout&amp;quot; work
&lt;br&gt;&amp;gt;&amp;gt; that Mathias Hasselmann has done previously, though that's not merged into
&lt;br&gt;&amp;gt;&amp;gt; GTK+ yet. &amp;nbsp;He also introduces an interface that adds height-for-width and
&lt;br&gt;&amp;gt;&amp;gt; width-for-height methods for sophisticated size allocation. &amp;nbsp;That's a more
&lt;br&gt;&amp;gt;&amp;gt; generic approach than yours from what I understand. &amp;nbsp;See:
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; &amp;nbsp;&lt;a href=&quot;http://live.gnome.org/MathiasHasselmann/NewLayoutManager&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://live.gnome.org/MathiasHasselmann/NewLayoutManager&lt;/a&gt;&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; Can you give it a test and verify that it is flexible enough for your usecase?
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Yes, please.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; We'll take a serious effort at integrating the width-for-height work
&lt;br&gt;&amp;gt; in the next cycle, so making sure that it is flexible enough for your
&lt;br&gt;&amp;gt; needs would be very valuable.
&lt;/div&gt;&lt;br&gt;Yes, it seems feasible. &amp;nbsp;I think I can implement the flow container by
&lt;br&gt;making a GtkBox subclass that asks for its size like this:
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; __________
&lt;br&gt;&amp;nbsp; &amp;nbsp;| &amp;nbsp;B1 &amp;nbsp; &amp;nbsp; &amp;nbsp;|
&lt;br&gt;&amp;nbsp; &amp;nbsp;|__________|
&lt;br&gt;&amp;nbsp; &amp;nbsp;| &amp;nbsp;B2 &amp;nbsp;|
&lt;br&gt;&amp;nbsp; &amp;nbsp;|______|_
&lt;br&gt;&amp;nbsp; &amp;nbsp;| &amp;nbsp;B3 &amp;nbsp; &amp;nbsp;|
&lt;br&gt;&amp;nbsp; &amp;nbsp;|________|_
&lt;br&gt;&amp;nbsp; &amp;nbsp;| &amp;nbsp;B4 &amp;nbsp; &amp;nbsp; &amp;nbsp;|
&lt;br&gt;&amp;nbsp; &amp;nbsp;|__________|
&lt;br&gt;&lt;br&gt;... but can trade &amp;quot;height for width&amp;quot; to pack more items on the same
&lt;br&gt;line. &amp;nbsp;This probably is not covered by Matthias' work, and it should be
&lt;br&gt;a worthwhile addition to the first GTK+ release that has extended layout.
&lt;br&gt;&lt;br&gt;And I think the GtkManagedLayout would be replaced simply by GtkViewport
&lt;br&gt;-- but I don't see it on the list on the wiki page, and it might be that
&lt;br&gt;GtkViewport needs to be made aware of extended layouts.
&lt;br&gt;&lt;br&gt;I'll check out the branch but anyway I'll ask, can the code be
&lt;br&gt;&amp;quot;injected&amp;quot; into a current GTK+ release like I'm doing now or does it
&lt;br&gt;touch the very innards of GTK+?
&lt;br&gt;&lt;br&gt;Thanks for the very quick turnaround,
&lt;br&gt;&lt;br&gt;Paolo
&lt;br&gt;_______________________________________________
&lt;br&gt;gtk-devel-list mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19310365&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gtk-devel-list@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Re%3A--RFC--supporting-an-alternative-layout-management-algorithm-tp19274586p19310365.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19274726</id>
	<title>Re: [RFC] supporting an alternative layout management algorithm</title>
	<published>2008-09-02T10:30:49Z</published>
	<updated>2008-09-02T10:30:49Z</updated>
	<author>
		<name>Matthias Clasen-2</name>
	</author>
	<content type="html">On Tue, Sep 2, 2008 at 1:24 PM, Behdad Esfahbod
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; These changes of your to GTK+ are quite similar to the &amp;quot;ExtendedLayout&amp;quot; work
&lt;br&gt;&amp;gt; that Mathias Hasselmann has done previously, though that's not merged into
&lt;br&gt;&amp;gt; GTK+ yet. &amp;nbsp;He also introduces an interface that adds height-for-width and
&lt;br&gt;&amp;gt; width-for-height methods for sophisticated size allocation. &amp;nbsp;That's a more
&lt;br&gt;&amp;gt; generic approach than yours from what I understand. &amp;nbsp;See:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;&lt;a href=&quot;http://live.gnome.org/MathiasHasselmann/NewLayoutManager&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://live.gnome.org/MathiasHasselmann/NewLayoutManager&lt;/a&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Can you give it a test and verify that it is flexible enough for your usecase?
&lt;/div&gt;&lt;br&gt;Yes, please.
&lt;br&gt;&lt;br&gt;We'll take a serious effort at integrating the width-for-height work
&lt;br&gt;in the next cycle, so making sure that it is flexible enough for your
&lt;br&gt;needs would be very valuable.
&lt;br&gt;_______________________________________________
&lt;br&gt;gtk-devel-list mailing list
&lt;br&gt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=19274726&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;gtk-devel-list@...&lt;/a&gt;
&lt;br&gt;&lt;a href=&quot;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.gnome.org/mailman/listinfo/gtk-devel-list&lt;/a&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Re%3A--RFC--supporting-an-alternative-layout-management-algorithm-tp19274586p19274726.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-19274586</id>
	<title>Re: [RFC] supporting an alternative layout management algorithm</title>
	<published>2008-09-02T10:24:09Z</published>
	<updated>2008-09-02T10:24:09Z</updated>
	<author>
		<name>Behdad Esfahbod-3</name>
	</author>
	<content type="html">Paolo Bonzini wrote:
&lt;br&gt;&amp;gt; Hi everybody,
&lt;br&gt;&lt;br&gt;Ha Paolo,
&lt;br&gt;&lt;br&gt;CC'ing gtk-devel-list.
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; I am trying to bring &amp;quot;stack-flow layout&amp;quot; (see
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://code.whytheluckystiff.net/shoes/wiki/StacksAndFlows&quot; target=&