Reduce UI draw stalls from LLSpellChecker singleton via simpleton
parent
ad8dc13150
commit
2cff1e217b
|
|
@ -42,19 +42,13 @@ static const std::string DICT_FILE_USER = "user_dictionaries.xml";
|
|||
LLSpellChecker::settings_change_signal_t LLSpellChecker::sSettingsChangeSignal;
|
||||
|
||||
LLSpellChecker::LLSpellChecker()
|
||||
: mHunspell(NULL)
|
||||
{
|
||||
// Load initial dictionary information
|
||||
refreshDictionaryMap();
|
||||
}
|
||||
|
||||
LLSpellChecker::~LLSpellChecker()
|
||||
{
|
||||
delete mHunspell;
|
||||
}
|
||||
|
||||
void LLSpellChecker::initSingleton()
|
||||
{
|
||||
// Load initial dictionary information
|
||||
refreshDictionaryMap();
|
||||
}
|
||||
|
||||
bool LLSpellChecker::checkSpelling(const std::string& word) const
|
||||
|
|
@ -300,8 +294,7 @@ void LLSpellChecker::initHunspell(const std::string& dict_language)
|
|||
{
|
||||
if (mHunspell)
|
||||
{
|
||||
delete mHunspell;
|
||||
mHunspell = NULL;
|
||||
mHunspell.reset();
|
||||
mDictLanguage.clear();
|
||||
mDictFile.clear();
|
||||
mIgnoreList.clear();
|
||||
|
|
@ -322,11 +315,11 @@ void LLSpellChecker::initHunspell(const std::string& dict_language)
|
|||
const std::string filename_dic = dict_entry["name"].asString() + ".dic";
|
||||
if ( (gDirUtilp->fileExists(user_path + filename_aff)) && (gDirUtilp->fileExists(user_path + filename_dic)) )
|
||||
{
|
||||
mHunspell = new Hunspell((user_path + filename_aff).c_str(), (user_path + filename_dic).c_str());
|
||||
mHunspell = std::make_unique<Hunspell>((user_path + filename_aff).c_str(), (user_path + filename_dic).c_str());
|
||||
}
|
||||
else if ( (gDirUtilp->fileExists(app_path + filename_aff)) && (gDirUtilp->fileExists(app_path + filename_dic)) )
|
||||
{
|
||||
mHunspell = new Hunspell((app_path + filename_aff).c_str(), (app_path + filename_dic).c_str());
|
||||
mHunspell = std::make_unique<Hunspell>((app_path + filename_aff).c_str(), (app_path + filename_dic).c_str());
|
||||
}
|
||||
if (!mHunspell)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -34,12 +34,12 @@
|
|||
|
||||
class Hunspell;
|
||||
|
||||
class LLSpellChecker : public LLSingleton<LLSpellChecker>
|
||||
class LLSpellChecker : public LLSimpleton<LLSpellChecker>
|
||||
{
|
||||
LLSINGLETON(LLSpellChecker);
|
||||
public:
|
||||
LLSpellChecker();
|
||||
~LLSpellChecker();
|
||||
|
||||
public:
|
||||
void addToCustomDictionary(const std::string& word);
|
||||
void addToIgnoreList(const std::string& word);
|
||||
bool checkSpelling(const std::string& word) const;
|
||||
|
|
@ -47,7 +47,6 @@ public:
|
|||
protected:
|
||||
void addToDictFile(const std::string& dict_path, const std::string& word);
|
||||
void initHunspell(const std::string& dict_language);
|
||||
void initSingleton() override;
|
||||
|
||||
public:
|
||||
typedef std::list<std::string> dict_list_t;
|
||||
|
|
@ -77,7 +76,7 @@ public:
|
|||
static boost::signals2::connection setSettingsChangeCallback(const settings_change_signal_t::slot_type& cb);
|
||||
|
||||
protected:
|
||||
Hunspell* mHunspell;
|
||||
std::unique_ptr<Hunspell> mHunspell;
|
||||
std::string mDictLanguage;
|
||||
std::string mDictFile;
|
||||
dict_list_t mDictSecondary;
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@
|
|||
#include "llmenubutton.h"
|
||||
#include "llloadingindicator.h"
|
||||
#include "llwindow.h"
|
||||
#include "llspellcheck.h"
|
||||
|
||||
// for registration
|
||||
#include "llfiltereditor.h"
|
||||
|
|
@ -157,6 +158,7 @@ mRootView(NULL),
|
|||
mHelpImpl(NULL)
|
||||
{
|
||||
LLRender2D::createInstance(image_provider);
|
||||
LLSpellChecker::createInstance();
|
||||
|
||||
if ((get_ptr_in_map(mSettingGroups, std::string("config")) == NULL) ||
|
||||
(get_ptr_in_map(mSettingGroups, std::string("floater")) == NULL) ||
|
||||
|
|
@ -198,6 +200,7 @@ mHelpImpl(NULL)
|
|||
|
||||
LLUI::~LLUI()
|
||||
{
|
||||
LLSpellChecker::deleteSingleton();
|
||||
LLRender2D::deleteSingleton();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -806,6 +806,20 @@ bool LLAppViewer::init()
|
|||
LLUIImageList::getInstance(),
|
||||
ui_audio_callback,
|
||||
deferred_ui_audio_callback);
|
||||
|
||||
if (gSavedSettings.getBOOL("SpellCheck"))
|
||||
{
|
||||
std::list<std::string> dict_list;
|
||||
std::string dict_setting = gSavedSettings.getString("SpellCheckDictionary");
|
||||
boost::split(dict_list, dict_setting, boost::is_any_of(std::string(",")));
|
||||
if (!dict_list.empty())
|
||||
{
|
||||
LLSpellChecker::setUseSpellCheck(dict_list.front());
|
||||
dict_list.pop_front();
|
||||
LLSpellChecker::instance().setSecondaryDictionaries(dict_list);
|
||||
}
|
||||
}
|
||||
|
||||
LL_INFOS("InitInfo") << "UI initialized." << LL_ENDL ;
|
||||
|
||||
// NOW LLUI::getLanguage() should work. gDirUtilp must know the language
|
||||
|
|
@ -1611,7 +1625,7 @@ bool LLAppViewer::doFrame()
|
|||
|
||||
{
|
||||
LL_PROFILE_ZONE_NAMED_CATEGORY_APP("df gMeshRepo");
|
||||
gMeshRepo.update() ;
|
||||
gMeshRepo.update() ;
|
||||
}
|
||||
|
||||
if(!total_work_pending) //pause texture fetching threads if nothing to process.
|
||||
|
|
@ -2799,19 +2813,6 @@ bool LLAppViewer::initConfiguration()
|
|||
gSavedSettings.getString("Language"));
|
||||
}
|
||||
|
||||
if (gSavedSettings.getBOOL("SpellCheck"))
|
||||
{
|
||||
std::list<std::string> dict_list;
|
||||
std::string dict_setting = gSavedSettings.getString("SpellCheckDictionary");
|
||||
boost::split(dict_list, dict_setting, boost::is_any_of(std::string(",")));
|
||||
if (!dict_list.empty())
|
||||
{
|
||||
LLSpellChecker::setUseSpellCheck(dict_list.front());
|
||||
dict_list.pop_front();
|
||||
LLSpellChecker::instance().setSecondaryDictionaries(dict_list);
|
||||
}
|
||||
}
|
||||
|
||||
if (gNonInteractive)
|
||||
{
|
||||
tempSetControl("AllowMultipleViewers", "true");
|
||||
|
|
|
|||
Loading…
Reference in New Issue