Re: problem with width_for_height
- From: Detlef Reichl <detlef reichl gmx org>
- To: gtk-list gnome org
- Subject: Re: problem with width_for_height
- Date: Thu, 12 Mar 2015 19:17:03 +0100
Am 09.03.2015 um 19:49 schrieb Detlef Reichl:
Hi,
I have an application, where I get the warning:
Gtk-CRITICAL **:gtk_widget_get_preferred_width_for_height: assertion
'height >= 0' failed
and some times the widgets get wrong widths. It comes from a
Gtk::ComboBoxText that is in this widget hierarchy (from the
ComboBoxText the parents up to the main window):
"Gtk::Box"
"Gtk::Box"
"Gtk::Box"
"Gtk::Frame"
"Gtk::Revealer"
"Gtk::Box"
"Gtk::Viewport"
"Gtk::ScrolledWindow"
"Gtk::Box"
"Gtk::Box"
"Gtk::Window"
Unless the ComboBox isn't shown, the warning does not appear. I do not
change any widget size requisitions by hand in the complete GUI. What is
so special with the combo box and what do I have to honor if I use them?
I've read the docs about "width for hight management" but from my point
of view it only affects own container implementations, which I don't use.
I use gtk 3.14.5 with ruby-gtk from git/master.
Hi,
I searched a little bit further and made the smallest possible example.
If you toggle the togglebutton and then shrink the window to the
smallest height, you will get the warning from my first post. The
warning comes from the function gtk_bin_get_preferred_width_for_height.
If you follow the height parameter of the function, it will go down to 0.
Because the border_width of the Gtk::Revealer is set to 1 in the
example, the gtk_widget_get_preferred_width_for_height function will fail.
It seems, that the Gtk::Bin that this function is called for, is the
Gtk::ComboBox in the example. So the bug seems to be in Gtk::ComboBox.
Also it seems so, that it is necessary that VBoxes and HBoxes are used
together. For now I did not get further.
Cheers, detlef
#!/usr/bin/env ruby
require 'gtk3'
class Win < Gtk::Window
def initialize
super
vBox = Gtk::Box.new :vertical
add vBox
hBox = Gtk::Box.new :horizontal
vBox.pack_start hBox, :expand => true, :fill => true
# The drawing area is only for filling the space
drawing = Gtk::DrawingArea.new
hBox.pack_start drawing, :expand => true, :fill => true
revealer = Gtk::Revealer.new
# The border_width has to be > 0 to show the warning
revealer.border_width = 1
revealer.transition_duration = 200
hBox.pack_start revealer
button = Gtk::ToggleButton.new 'toggle'
vBox.pack_start button
button.signal_connect(:toggled) do
revealer.reveal_child = button.active?
end
button.active = true
boxV = Gtk::Box.new :vertical
revealer.add boxV
combo = nil
0.upto(1) do |i|
boxH = Gtk::Box.new :horizontal
boxV.pack_start boxH
label = Gtk::Label.new "line#{i}"
boxH.pack_start label
combo = Gtk::ComboBoxText.new
0.upto(10) {|c| combo.append_text "combo entry #{c}"}
boxH.pack_start combo, :expand => false, :fill => false
end
combo.active = 1
show_all
end
end
win = Win.new
Gtk.main
I'm very obliged for any hints!
detlef
_______________________________________________
gtk-list mailing list
gtk-list gnome org
https://mail.gnome.org/mailman/listinfo/gtk-list
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]