X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fxforms%2FFormSpellchecker.C;h=97790852676ce535d728a5c91660e0500a15557f;hb=2c3af1475e2a408f725b5eea93583ee13e3d09cc;hp=b363e6c5b94bf3c5a5f36648d0b0cca19f7724e4;hpb=6bbcb978c5b6704d0a59a45b5865b18787464cd5;p=lyx.git diff --git a/src/frontends/xforms/FormSpellchecker.C b/src/frontends/xforms/FormSpellchecker.C index b363e6c5b9..9779085267 100644 --- a/src/frontends/xforms/FormSpellchecker.C +++ b/src/frontends/xforms/FormSpellchecker.C @@ -21,7 +21,7 @@ typedef FormCB > base_class; FormSpellchecker::FormSpellchecker(ControlSpellchecker & c) - : base_class(c, _("LyX: Spellchecker")), clickline_(-1) + : base_class(c, _("LyX: Spellchecker"), false) {} @@ -32,6 +32,9 @@ void FormSpellchecker::build() fl_set_slider_bounds(dialog_->slider, 0.0, 100.0); fl_set_slider_step(dialog_->slider, 1.0); + fl_set_browser_dblclick_callback(dialog_->browser, + C_FormBaseInputCB, 2); + // Manage the buttons bc().setCancel(dialog_->done); bc().addReadOnly(dialog_->replace); @@ -45,49 +48,58 @@ void FormSpellchecker::build() void FormSpellchecker::update() { - string w = ""; + string const w; fl_set_input(dialog_->input, w.c_str()); fl_set_object_label(dialog_->text, w.c_str()); fl_clear_browser(dialog_->browser); fl_set_slider_value(dialog_->slider, 0); } -void FormSpellchecker::hide() -{ - clickline_ = -1; - - if (form() && form()->visible) - fl_hide_form(form()); -} - -ButtonPolicy::SMInput FormSpellchecker::input(FL_OBJECT * obj, long) +ButtonPolicy::SMInput FormSpellchecker::input(FL_OBJECT * obj, long val) { if (obj == dialog_->replace) { - string tmp = fl_get_input(dialog_->input); + string const tmp = getStringFromInput(dialog_->input); controller().replace(tmp); + } else if (obj == dialog_->start) { controller().check(); stop(false); + } else if (obj == dialog_->stop) { controller().stop(); stop(true); + } else if (obj == dialog_->ignore) { controller().check(); + } else if (obj == dialog_->accept) { controller().ignoreAll(); + } else if (obj == dialog_->insert) { controller().insert(); + } else if (obj == dialog_->options) { controller().options(); + } else if (obj == dialog_->browser) { - int sel = fl_get_browser(dialog_->browser); - if (clickline_==sel) { - string tmp = fl_get_input(dialog_->input); + int const line = fl_get_browser(dialog_->browser); + string const tmp = + getStringFromBrowser(dialog_->browser, line); + if (tmp.empty()) + return ButtonPolicy::SMI_NOOP; + + if (val != 2) { + // single-click + // place the chosen string in the input as feedback + fl_set_input(dialog_->input, tmp.c_str()); + + } else { + // double-click controller().replace(tmp); + // reset the browser so that the following + // single-click callback doesn't do anything + fl_deselect_browser_line(dialog_->browser, line); } - clickline_ = sel; - string tmp = fl_get_browser_line(dialog_->browser, clickline_); - fl_set_input(dialog_->input, tmp.c_str()); } return ButtonPolicy::SMI_VALID; @@ -108,7 +120,7 @@ void FormSpellchecker::partialUpdate(int id) fl_set_input(dialog_->input, w.c_str()); fl_set_object_label(dialog_->text, w.c_str()); fl_clear_browser(dialog_->browser); - while ( !(w = controller().getSuggestion()).empty() ) { + while (!(w = controller().getSuggestion()).empty()) { fl_add_browser_line(dialog_->browser, w.c_str()); } }