From 13daca767e6149ebaf9b391fbd7197d3462b2e7b Mon Sep 17 00:00:00 2001 From: Angus Leeming Date: Tue, 8 Jan 2002 10:05:53 +0000 Subject: [PATCH] John's spellchecker patch plus a new helper function getStringFromBrowser. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@3309 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/frontends/xforms/ChangeLog | 9 +++++++++ src/frontends/xforms/FormSpellchecker.C | 16 +++++++++++----- src/frontends/xforms/xforms_helpers.C | 13 +++++++++++++ src/frontends/xforms/xforms_helpers.h | 8 ++++++++ 4 files changed, 41 insertions(+), 5 deletions(-) diff --git a/src/frontends/xforms/ChangeLog b/src/frontends/xforms/ChangeLog index fd51c285ae..216d3381ea 100644 --- a/src/frontends/xforms/ChangeLog +++ b/src/frontends/xforms/ChangeLog @@ -1,3 +1,12 @@ +2002-01-08 Angus Leeming + + * xform_helpers.[Ch] (getStringFromBrowser): a littel wrapper function + for fl_get_browser_line that is guaranteed to return a valid string. + +2002-01-08 John Levon + + * FormSpellchecker.C: fix possible crash on clicking a suggestion + 2002-01-07 Angus Leeming * FormDocument.C: diff --git a/src/frontends/xforms/FormSpellchecker.C b/src/frontends/xforms/FormSpellchecker.C index b363e6c5b9..d13d6fe23b 100644 --- a/src/frontends/xforms/FormSpellchecker.C +++ b/src/frontends/xforms/FormSpellchecker.C @@ -63,7 +63,7 @@ void FormSpellchecker::hide() ButtonPolicy::SMInput FormSpellchecker::input(FL_OBJECT * obj, long) { if (obj == dialog_->replace) { - string tmp = fl_get_input(dialog_->input); + string const tmp = fl_get_input(dialog_->input); controller().replace(tmp); } else if (obj == dialog_->start) { controller().check(); @@ -80,13 +80,19 @@ ButtonPolicy::SMInput FormSpellchecker::input(FL_OBJECT * obj, long) } 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 sel = fl_get_browser(dialog_->browser); + if (sel < 1) + return ButtonPolicy::SMI_NOOP; + + if (clickline_ == sel) { + string const tmp = fl_get_input(dialog_->input); controller().replace(tmp); } + clickline_ = sel; - string tmp = fl_get_browser_line(dialog_->browser, clickline_); + char const * cptmp = fl_get_browser_line(dialog_->browser, + clickline_); + string const tmp = (cptmp) ? cptmp : ""; fl_set_input(dialog_->input, tmp.c_str()); } diff --git a/src/frontends/xforms/xforms_helpers.C b/src/frontends/xforms/xforms_helpers.C index eb39bd38c2..f65b708255 100644 --- a/src/frontends/xforms/xforms_helpers.C +++ b/src/frontends/xforms/xforms_helpers.C @@ -90,6 +90,19 @@ vector const getVectorFromChoice(FL_OBJECT * ob) } +// Given an fl_browser, return the contents of the currently +// highlighted line. +// If nothing is selected, return an empty string +string const getStringFromBrowser(FL_OBJECT * ob, int line) +{ + if (!ob || ob->objclass != FL_BROWSER || + line < 1 || line > fl_get_browser_maxline(ob)) + return string(); + + char const * tmp = fl_get_browser_line(ob, line); + return (tmp) ? tmp : string(); +} + // Given an fl_browser, create a vector of its entries vector const getVectorFromBrowser(FL_OBJECT * ob) { diff --git a/src/frontends/xforms/xforms_helpers.h b/src/frontends/xforms/xforms_helpers.h index 9c1184e503..828ada07a0 100644 --- a/src/frontends/xforms/xforms_helpers.h +++ b/src/frontends/xforms/xforms_helpers.h @@ -39,6 +39,14 @@ std::vector const getVectorFromChoice(FL_OBJECT *); /// Given an fl_browser, create a vector of its entries std::vector const getVectorFromBrowser(FL_OBJECT *); +/** Given an fl_browser, return the contents of the currently + highlighted line (xforms numbering convention; starts at 1). + If nothing is selected, return an empty string. + This function, although apparently overkill, ensures that we don't get + unexpected crashes. +*/ +string const getStringFromBrowser(FL_OBJECT * ob, int line); + /// Given input and choice widgets, create a string such as "1cm" string getLengthFromWidgets(FL_OBJECT * input, FL_OBJECT * choice); -- 2.39.2