]> git.tdb.fi Git - libs/gltk.git/commitdiff
Improve Dropdown list management
authorMikko Rasa <tdb@tdb.fi>
Tue, 21 Jan 2014 23:03:31 +0000 (01:03 +0200)
committerMikko Rasa <tdb@tdb.fi>
Tue, 21 Jan 2014 23:03:31 +0000 (01:03 +0200)
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.

source/dropdown.cpp

index 7dc0d3550bcaf7d8953ec2a8b5d1013355ad69fd..e48303317b809601514ce71db7dded49dffbc068 100644 (file)
@@ -28,6 +28,7 @@ void Dropdown::init()
        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));
@@ -90,6 +91,7 @@ void Dropdown::button_press(int x, int y, unsigned btn)
                if(!click_focus)
                {
                        dropped = false;
+                       list.set_visible(false);
                        clear_state(ACTIVE);
                        signal_ungrab_pointer.emit();
                }
@@ -97,6 +99,7 @@ void Dropdown::button_press(int x, int y, unsigned btn)
        else if(btn==1)
        {
                dropped = true;
+               list.set_visible(true);
                resize_list();
                set_state(ACTIVE);
                signal_grab_pointer.emit();
@@ -105,18 +108,21 @@ void Dropdown::button_press(int x, int y, unsigned btn)
 
 void Dropdown::on_geometry_change()
 {
-       resize_list();
+       if(dropped)
+               resize_list();
 }
 
 void Dropdown::on_style_change()
 {
        text.set_style(style);
-       resize_list();
+       if(dropped)
+               resize_list();
 }
 
 void Dropdown::list_autosize_changed()
 {
-       resize_list();
+       if(dropped)
+               resize_list();
        signal_autosize_changed.emit();
 }