void MiniBuffer::dd_init()
{
dropdown_ = new DropDown(owner_, the_buffer);
- dropdown_->result.connect(slot(this, &MiniBuffer::set_input));
+ dropdown_->result.connect(slot(this, &MiniBuffer::set_complete_input));
}
int MiniBuffer::peek_event(FL_OBJECT * ob, int event, int key)
{
switch (event) {
+ case FL_UNFOCUS:
+ deactivate();
+ break;
case FL_KEYBOARD:
{
char const * tmp = fl_get_input(ob);
// Perfect match
string const tmp =
comp[0] + _(" [sole completion]");
- stored_set(comp[0]);
+ stored_set(comp[0] + " ");
set_input(tmp);
} else {
// More that one match
// Find maximal avaliable prefix
string const tmp = comp[0];
string test(input);
- test += tmp[test.length()];
+ if (tmp.length() > test.length())
+ test += tmp[test.length()];
while (test.length() < tmp.length()) {
vector<string> vtmp;
lyx::copy_if(comp.begin(),
// Return the inputted string
deactivate();
owner_->view()->focus(true);
- history_->push_back(input);
+ if (!input.empty()) {
+ history_->push_back(input);
+ }
stringReady.emit(input);
# if 0
}
}
+void MiniBuffer::set_complete_input(string const & str)
+{
+ if (!str.empty()) {
+ // add a space so the user can type
+ // an argument immediately
+ set_input(str + " ");
+ }
+}
+
+
void MiniBuffer::set_input(string const & str)
{
fl_set_input(the_buffer, str.c_str());