X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fxforms%2FFormSpellchecker.C;h=97790852676ce535d728a5c91660e0500a15557f;hb=2c3af1475e2a408f725b5eea93583ee13e3d09cc;hp=53ac06cdf5b94a394add7333b13d352bc20616fe;hpb=711b3e0c8a0cb245ca5715dfe6df319d5db6a0fd;p=lyx.git diff --git a/src/frontends/xforms/FormSpellchecker.C b/src/frontends/xforms/FormSpellchecker.C index 53ac06cdf5..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"), false), 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,55 +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 const 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 const sel = fl_get_browser(dialog_->browser); - if (sel < 1) + int const line = fl_get_browser(dialog_->browser); + string const tmp = + getStringFromBrowser(dialog_->browser, line); + if (tmp.empty()) return ButtonPolicy::SMI_NOOP; - if (clickline_ == sel) { - string const tmp = fl_get_input(dialog_->input); + 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; - char const * cptmp = fl_get_browser_line(dialog_->browser, - clickline_); - string const tmp = (cptmp) ? cptmp : ""; - fl_set_input(dialog_->input, tmp.c_str()); } return ButtonPolicy::SMI_VALID; @@ -114,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()); } }