Having the list marked as visible when it shouldn't be could cause trouble
in some corner cases.
There's no need to resize the list if it isn't visible.
dropped = false;
add(list);
dropped = false;
add(list);
+ list.set_visible(false);
list.set_view_all();
list.signal_item_selected.connect(sigc::mem_fun(this, &Dropdown::list_item_selected));
list.signal_autosize_changed.connect(sigc::mem_fun(this, &Dropdown::list_autosize_changed));
list.set_view_all();
list.signal_item_selected.connect(sigc::mem_fun(this, &Dropdown::list_item_selected));
list.signal_autosize_changed.connect(sigc::mem_fun(this, &Dropdown::list_autosize_changed));
if(!click_focus)
{
dropped = false;
if(!click_focus)
{
dropped = false;
+ list.set_visible(false);
clear_state(ACTIVE);
signal_ungrab_pointer.emit();
}
clear_state(ACTIVE);
signal_ungrab_pointer.emit();
}
else if(btn==1)
{
dropped = true;
else if(btn==1)
{
dropped = true;
+ list.set_visible(true);
resize_list();
set_state(ACTIVE);
signal_grab_pointer.emit();
resize_list();
set_state(ACTIVE);
signal_grab_pointer.emit();
void Dropdown::on_geometry_change()
{
void Dropdown::on_geometry_change()
{
+ if(dropped)
+ resize_list();
}
void Dropdown::on_style_change()
{
text.set_style(style);
}
void Dropdown::on_style_change()
{
text.set_style(style);
+ if(dropped)
+ resize_list();
}
void Dropdown::list_autosize_changed()
{
}
void Dropdown::list_autosize_changed()
{
+ if(dropped)
+ resize_list();
signal_autosize_changed.emit();
}
signal_autosize_changed.emit();
}