Editable combo-boxes

An editable combo-box replaces the label with an input field. Typing text in the input field uses the combo-box's items to auto-complete the typed text. It's also possible to type in something different, that doesn't match any of the combo-box items. Running combobox.C with the -e option creates an editable combo-box instead of a standard combo-box.

x::w::new_editable_comboboxlayoutmanager
	nclm([]
	     (ONLY IN_THREAD,
	      const x::w::editable_combobox_selection_changed_info_t &info)
	     {
                  // ...
             });

auto container=factory->create_focusable_container([]
                                                  (const auto &container)
                                                  {
                                                  }, nclm);
// ...
x::w::editable_comboboxlayoutmanager lm=container->get_layoutmanager();

std::string s=lm->get();

Passing an x::w::new_editable_comboboxlayoutmanager instead of a x::w::new_standard_comboboxlayoutmanager to create_focusable_container() constructs an x::w::focusable_container whose layout manager is an x::w::editable_comboboxlayoutmanager.

x::w::editable_comboboxlayoutmanager is a subclass of a x::w::new_standard_comboboxlayoutmanager and inherits all of its methods. Additionally, it inherits several methods from the underlying x::w::input_field, and its associated x::w::input_lock (which is held, internally, by the x::w::editable_comboboxlayoutmanager), like get() and set();