OK, last update on this issue: the problem lies in the fact that the X
server doesn't know anything about trading width for height, and so
determining a (minimum) allocation to ask for the toplevel window is not
a trivial thing to do for the layouting engine.

See this reply:
https://mail.gnome.org/archives/gtk-devel-list/2013-June/msg00053.html

and this bug:
https://bugzilla.gnome.org/show_bug.cgi?id=681937#c12

for more info.

Pietro


Il giorno mar, 18/06/2013 alle 17.10 +0200, Pietro Battiston ha scritto:
> I have found an explanation... in the official documentation.
> 
> "The minimum height for the minimum width is normally used to set the
> minimum size constraint on the toplevel (unless
> gtk_window_set_geometry_hints() is explicitly used instead)."
> 
> But the real answer to my problem is not in that sentence, but in its
> non-obvious (to me) consequence: Gtk.Widget.do_get_preferred_width()
> should _not_ return the minimal width the widget will ever be able to
> cope with, but rather its width in some reasonable form factor, though
> as compressed as possible.
> 
> (still, I don't see the rational for this design choice, since the
> layout algorithm will not be able to know the _real_ minimum width of my
> widget)
> 
> Pietro
> 
> Il giorno lun, 17/06/2013 alle 20.20 +0200, Pietro Battiston ha scritto:
> > Hello,
> > 
> > I'm designing a widget. Its "do_get_request_mode(self)" returns
> > Gtk.SizeRequestMode.HEIGHT_FOR_WIDTH.
> > 
> > 
> > Now, in a testcase, the widget does the following:
> > 1) do_get_preferred_width() is called: it returns 53 (minimum), 212
> > (natural)
> > 2) do_get_preferred_height_for_width() is called with width 53: it
> > returns 170, 170
> > 3) do_get_preferred_height_for_width() is called with width 212: it
> > returns 51, 51
> > 
> > So far, so good: the widget has received all the calls I expected, and
> > returned what I wanted it to. But now, what I would expect (at least in
> > a test case in which no other widgets are reclaiming anything) would be
> > that the widget is offered (212, 51). Instead, not only it is offered
> > (212, 170), but the 170 is considered as minimum - I'm unable to resize
> > the widget to something smaller. Now, I did declare 170 as a minimum...
> > but only in the case in which the width is 53!
> > 
> > To reproduce, you can do:
> > git clone git://pietrobattiston.it/quack
> > cd quack
> > git checkout wrapbox_error
> > cd plugins/tags
> > python test_wrapbox.py
> > 
> > to understand what I would like, just replace the "if nat:" at line 93
> > with "if True:", and rerun.
> > 
> > Thank you in advance for any enlightenment, or pointer to a good
> > discussion of such issues.
> > 
> > Pietro
> > 
> > _______________________________________________
> > pygtk mailing list   pygtk@daa.com.au
> > http://www.daa.com.au/mailman/listinfo/pygtk
> > Read the PyGTK FAQ: http://faq.pygtk.org/
> 
> 
> _______________________________________________
> pygtk mailing list   pygtk@daa.com.au
> http://www.daa.com.au/mailman/listinfo/pygtk
> Read the PyGTK FAQ: http://faq.pygtk.org/


_______________________________________________
pygtk mailing list   pygtk@daa.com.au
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://faq.pygtk.org/

Reply via email to