GtkOrientable and GtkBox

2009-06-03 Thread Davyd Madeley
I was experimenting with using GtkOrientable today and came across what
might be an oversight when using it with GtkBox'like objects.

I wanted to turn a hbox into a vbox, which is fine. However the buttons
in the box are then clearly in the reverse order to the one that makes
sense.

This can be hacked around by swapping PACK_START and PACK_END in the
child properties, but it doesn't work if another item is then added to
the box.

I was considering the usefulness of a gtk_box_set_reverse_order() that
reverses the meaning of PACK_START and PACK_END.

There are kludge ways of implementing this, but it seems like it would
be the most useful built into GtkBox.

Thoughts?

--davyd

-- 
Davyd Madeley

http://www.davyd.id.au/
08B0 341A 0B9B 08BB 2118  C060 2EDD BB4F 5191 6CDA

___
gtk-devel-list mailing list
gtk-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-devel-list


Re: GtkOrientable and GtkBox

2009-06-03 Thread Sven Neumann
Hi,

On Wed, 2009-06-03 at 14:25 +0800, Davyd Madeley wrote:
 I was experimenting with using GtkOrientable today and came across what
 might be an oversight when using it with GtkBox'like objects.
 
 I wanted to turn a hbox into a vbox, which is fine. However the buttons
 in the box are then clearly in the reverse order to the one that makes
 sense.

What order are they? What order would you suggest makes more sense?


Sven


___
gtk-devel-list mailing list
gtk-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-devel-list


Re: GtkOrientable and GtkBox

2009-06-03 Thread Davyd Madeley
On Wed, 2009-06-03 at 10:08 +0200, Sven Neumann wrote:
 Hi,
 
 On Wed, 2009-06-03 at 14:25 +0800, Davyd Madeley wrote:
  I was experimenting with using GtkOrientable today and came across what
  might be an oversight when using it with GtkBox'like objects.
  
  I wanted to turn a hbox into a vbox, which is fine. However the buttons
  in the box are then clearly in the reverse order to the one that makes
  sense.
 
 What order are they? What order would you suggest makes more sense?

This would be a usage-specific thing.

They're in the order they were packed. When you swap the orientation of
the vbox, they're still in the order they were packed, but that order
might be backwards from the order you desire (i.e. if you were going to
build the vbox from scratch).

E.g., you might have:

[1] [2] [3]

Which orients to become

[1]
[2]
[3]

But for whatever reason, what you desired was:

[3]
[2]
[1]

-- 
Davyd Madeley

http://www.davyd.id.au/
08B0 341A 0B9B 08BB 2118  C060 2EDD BB4F 5191 6CDA

___
gtk-devel-list mailing list
gtk-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-devel-list


Re: GtkOrientable and GtkBox

2009-06-03 Thread Christian Dywan
Am Wed, 03 Jun 2009 16:18:17 +0800
schrieb Davyd Madeley da...@madeley.id.au:

 On Wed, 2009-06-03 at 10:08 +0200, Sven Neumann wrote:
  Hi,
  
  On Wed, 2009-06-03 at 14:25 +0800, Davyd Madeley wrote:
   I was experimenting with using GtkOrientable today and came
   across what might be an oversight when using it with GtkBox'like
   objects.
   
   I wanted to turn a hbox into a vbox, which is fine. However the
   buttons in the box are then clearly in the reverse order to the
   one that makes sense.
  
  What order are they? What order would you suggest makes more sense?
 
 This would be a usage-specific thing.
 
 They're in the order they were packed. When you swap the orientation
 of the vbox, they're still in the order they were packed, but that
 order might be backwards from the order you desire (i.e. if you were
 going to build the vbox from scratch).
 
 E.g., you might have:
 
 [1] [2] [3]
 
 Which orients to become
 
 [1]
 [2]
 [3]
 
 But for whatever reason, what you desired was:
 
 [3]
 [2]
 [1]
 

Hey David,

how is this related to GtkOrientable at all? This was always
how a vertical box worked, ever since GtkVBox was there. There is
nothing new with it.

I'm afraid I don't see how Gtk could help you out, if what you
need really is a specific packing. Anything but the current way is
pretty much random and up to the application.

Yours,
Christian
___
gtk-devel-list mailing list
gtk-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-devel-list


Re: GtkOrientable and GtkBox

2009-06-03 Thread Davyd Madeley
On Wed, 2009-06-03 at 11:55 +0200, Christian Dywan wrote:

 how is this related to GtkOrientable at all? This was always
 how a vertical box worked, ever since GtkVBox was there. There is
 nothing new with it.
 
 I'm afraid I don't see how Gtk could help you out, if what you
 need really is a specific packing. Anything but the current way is
 pretty much random and up to the application.

It's not really related to GtkOrientable per se, but it's specifically
that when you change the runtime orientation you might also wish to
reverse the packing order (I guess think about wishing to do a -90
degree rotation rather than a +90 degree rotation).

Previously because you couldn't change the orientation, this was never
something that came up.

Does this clear up what I mean?

--d

-- 
Davyd Madeley

http://www.davyd.id.au/
08B0 341A 0B9B 08BB 2118  C060 2EDD BB4F 5191 6CDA

___
gtk-devel-list mailing list
gtk-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-devel-list


Re: GtkOrientable and GtkBox

2009-06-03 Thread Sven Neumann
Hi,

On Wed, 2009-06-03 at 19:03 +0800, Davyd Madeley wrote:

 It's not really related to GtkOrientable per se, but it's specifically
 that when you change the runtime orientation you might also wish to
 reverse the packing order (I guess think about wishing to do a -90
 degree rotation rather than a +90 degree rotation).
 
 Previously because you couldn't change the orientation, this was never
 something that came up.
 
 Does this clear up what I mean?

Sure. But it would probably help to come up with a use case for this. I
can not think of any good use case for changing the box orientation at
run-time. And without such a use case, it becomes even harder to imagine
that one would also want to reverse the packing order.


Sven


___
gtk-devel-list mailing list
gtk-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-devel-list


Re: GtkOrientable and GtkBox

2009-06-03 Thread Tristan Van Berkom
On Wed, Jun 3, 2009 at 7:18 AM, Davyd Madeley da...@madeley.id.au wrote:
[...]

 In general though, GtkOrientable already exists. People are bound to use
 it.


An example use case of this would be a custom toolbar that could be
placed optionally on top or on the side of the workspace where the tool
ordering is relevant, but thats not really the point right, aren't we more after
making sure the use cases we haven't thought of yet are still valid ? ;-)

I think a more interesting question is, what are we going to do with
GtkVBox and GtkHBox, just keep them around for api stability ?

Have them subclass GtkBox and override the orientation property
to mark it as G_PARAM_READABLE only ?

If we were to add a GtkBox:reverse-order property, would it still
play fair in GtkBox subclasses ? hmmm I think so.

Another worry is that pack start/pack end properties can already
be confusing, will adding a reverse-order property make things more
or less confusing to the user ?

Just some thoughts, personally I think if start/end pack properties
dont cut it then its probably worth just a little switch in GtkBox
(sounds like more fun than manually repopulating boxes at runtime).

Cheers,
   -Tristan
___
gtk-devel-list mailing list
gtk-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-devel-list


Re: GtkOrientable and GtkBox

2009-06-03 Thread Freddie Unpenstein
From: Tristan Van Berkom, Date: 04/06/2009 00:13, Wrote:

 In general though, GtkOrientable already exists. People are bound to
 use it.
 An example use case of this would be a custom toolbar that could be
 placed optionally on top or on the side of the workspace where the tool
 ordering is relevant, but thats not really the point right, aren't we more 
 after
 making sure the use cases we haven't thought of yet are still valid ? ;-)

I have had a use case...  Wasn't critical, just a two-pane window, and wanted 
to allow the two halves to be swapped.  Since the thing was loaded from a glade 
file, it was a pain to do it manually, and I ended up just ditching the idea in 
favour or more useful functionality.

A more significant case, is where I wanted to be able to rotate three widgets 
relative to each other though 90 degree increments.  The end two were 
toolbar's, the middle one was the main set of controls, with separators between 
them all.  Again, though it would have been handy thing to be able to do, it 
really wasn't worth the effort of implementing it.

Another spot where it could be useful, is in toolbars.  I could imagine 
grabbing the handle of a floating toolbar, dragging it to the other end, and 
having all the buttons reverse their order.  Might be appreciated by 
right-to-left reading users...  (By the way, is floating toolbars and menus 
actually useful yet...?  There really needs to be a handle box which allows 
multiple toobars/menus to be attached to all four sides of a central widget...)


 I think a more interesting question is, what are we going to do with
 GtkVBox and GtkHBox, just keep them around for api stability ?
 Have them subclass GtkBox and override the orientation property
 to mark it as G_PARAM_READABLE only ?

Is that really neccessary...?  They could simply be used to specify the 
default orientation...  With it having to be specified explicitly in the base 
Box class, perhaps?  Old apps that don't know about the re-orientation, 
shouldn't be using it.  But some of them may still make sense even if they 
don't know about it, if it can be asserted through styles, for example.


 Another worry is that pack start/pack end properties can already
 be confusing, will adding a reverse-order property make things more
 or less confusing to the user ?

It's just defining an end and a direction...  start and end still fit.  
Just need to describe them a little better, perhaps...

This facility would allow allow for 90 degree rotation helper functions that 
do a orient-and-reverse combo.


Fredderic



LSAT
Learn more about study prep, LSAT info and tips. Free info!
http://tagline.excite.com/fc/FgElN1g1t3cOLKPdbTCLUznx4AU4tBJPehIUAIZh3oDIjuu6pEAa3vWGZKg/___
gtk-devel-list mailing list
gtk-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-devel-list


Re: GtkOrientable and GtkBox

2009-06-03 Thread Sven Neumann
Hi,

On Wed, 2009-06-03 at 13:32 -0400, Freddie Unpenstein wrote:
 From: Tristan Van Berkom, Date: 04/06/2009 00:13, Wrote:
 
  In general though, GtkOrientable already exists. People are bound
 to
  use it.
  An example use case of this would be a custom toolbar that could be
  placed optionally on top or on the side of the workspace where the
 tool
  ordering is relevant, but thats not really the point right, aren't
 we more after
  making sure the use cases we haven't thought of yet are still
 valid ? ;-)
 
 I have had a use case... Wasn't critical, just a two-pane window, and
 wanted to allow the two halves to be swapped. Since the thing was
 loaded from a glade file, it was a pain to do it manually, and I ended
 up just ditching the idea in favour or more useful functionality.

what's so painful about:

GList *list = gtk_container_get_children (GTK_CONTAINER (box));
gint   pos  = g_list_length (list) - 1;

for (; list; list = list-next, pos--)
  gtk_box_reorder_child (GTK_BOX (box), list-data, pos);

I haven't tried this, but unless I am mistaken this should reverse the
order of children in a box. Seems easy enough to do and avoids the need
to introduce yet another special case in the GtkBox code. Perhaps if
this solution is not obvious enough, this should be turned into a
utility function gtk_box_reverse_children_order() ?


Sven


___
gtk-devel-list mailing list
gtk-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-devel-list


Re: GtkOrientable and GtkBox

2009-06-03 Thread Tristan Van Berkom
On Wed, Jun 3, 2009 at 1:56 PM, Sven Neumann s...@gimp.org wrote:
[...]

 I haven't tried this, but unless I am mistaken this should reverse the
 order of children in a box. Seems easy enough to do and avoids the need
 to introduce yet another special case in the GtkBox code. Perhaps if
 this solution is not obvious enough, this should be turned into a
 utility function gtk_box_reverse_children_order() ?

Good point I over looked this api

no need to ref, unparent, repack children, unref.

Cheers,
  -Tristan
___
gtk-devel-list mailing list
gtk-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-devel-list


Re: GtkOrientable and GtkBox

2009-06-03 Thread Davyd Madeley
On Wed, 2009-06-03 at 19:56 +0200, Sven Neumann wrote:

 what's so painful about:
 
 GList *list = gtk_container_get_children (GTK_CONTAINER (box));
 gint   pos  = g_list_length (list) - 1;
 
 for (; list; list = list-next, pos--)
   gtk_box_reorder_child (GTK_BOX (box), list-data, pos);
 
 I haven't tried this, but unless I am mistaken this should reverse the
 order of children in a box. Seems easy enough to do and avoids the need
 to introduce yet another special case in the GtkBox code. Perhaps if
 this solution is not obvious enough, this should be turned into a
 utility function gtk_box_reverse_children_order() ?

For the GtkBox case, this assumes that you're not going to be making any
calls to pack_start() or pack_end() in the future. Otherwise you end up
with the button ordering that is not independent of your orientation.

-- 
Davyd Madeley

http://www.davyd.id.au/
08B0 341A 0B9B 08BB 2118  C060 2EDD BB4F 5191 6CDA

___
gtk-devel-list mailing list
gtk-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-devel-list


Re: GtkOrientable and GtkBox

2009-06-03 Thread Freddie Unpenstein
From: Davyd Madeley, Date: 04/06/2009 10:59, Wrote:

 I haven't tried this, but unless I am mistaken this should reverse the
 order of children in a box. Seems easy enough to do and avoids the need
 to introduce yet another special case in the GtkBox code. Perhaps if
 this solution is not obvious enough, this should be turned into a
 utility function gtk_box_reverse_children_order() ?
 For the GtkBox case, this assumes that you're not going to be making any
 calls to pack_start() or pack_end() in the future. Otherwise you end up
 with the button ordering that is not independent of your orientation.

I think gtk_box_reverse_children_order() might be a good helper to have, I've 
personally thus far been moderately afraid to delve into the inner structure 
like that.  Though I think now after seeing that snippet, it does look pretty 
straight forward.  Still, I would count it as non-obvious, though, on the 
grounds that if there is the question of people not understanding pack_start() 
and pack_end() properly, then there's definitely people who don't understand 
how these packing methods interact with the list of widgets in the box.

But I think GTK+ needs more model-view separation, not less.  If an application 
puts stuff into a box, it's kinda handy if it comes back out in a predictable 
fashion.  Having to remember and compensate for the   Especially if it wants to 
rearrange the boxes contents, without having to iterate through the box looking 
for the item it wants to move.  (Imagine, for example, if it were possible that 
a style change could cause the boxes contents to be reversed part way through 
that gtk_box_reverse_children_order() call...  I'm pretty certain that can't 
happen, but I think it's an apt analogy.)


Fredderic



Hit it out of the park with a new bat. Click now!
Bats
http://tagline.excite.com/fc/FgElN1g3ri4MRUqgf2duKtUVR9QTdqC4pfLYZBg1ef9D4fkNnmOSwvhbH36/___
gtk-devel-list mailing list
gtk-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-devel-list