Mercurial > hg > octave-lyh
diff gui/src/backend/OctaveLink.cpp @ 14671:f346343654a4 gui
Settings readline event hook and fixed race condition.
* WorkspaceModel: Decoupled writing and reading the symbol table.
* OctaveLink: Added timer to periodically query for symbol table changes.
author | Jacob Dawid <jacob.dawid@googlemail.com> |
---|---|
date | Tue, 22 May 2012 17:29:34 +0200 |
parents | 7fbea449737d |
children | adad007cd018 |
line wrap: on
line diff
--- a/gui/src/backend/OctaveLink.cpp +++ b/gui/src/backend/OctaveLink.cpp @@ -17,13 +17,13 @@ #include "OctaveLink.h" -void octave_loop_hook_impl() +int update_hook_impl() { OctaveLink::instance()->triggerUpdateHistoryModel(); - OctaveLink::instance()->triggerUpdateSymbolTable(); + OctaveLink::instance()->triggerCacheSymbolTable(); + return 0; } - OctaveLink OctaveLink::m_singleton; OctaveLink::OctaveLink ():QObject () @@ -35,6 +35,11 @@ m_workspaceModel->insertTopLevelItem(1, new TreeItem ("Global")); m_workspaceModel->insertTopLevelItem(2, new TreeItem ("Persistent")); m_workspaceModel->insertTopLevelItem(3, new TreeItem ("Hidden")); + + _updateWorkspaceModelTimer.setInterval (1000); + _updateWorkspaceModelTimer.setSingleShot (false); + connect(&_updateWorkspaceModelTimer, SIGNAL (timeout ()), + m_workspaceModel, SLOT (updateFromSymbolTable ())); } OctaveLink::~OctaveLink () @@ -46,9 +51,10 @@ { // Create both threads. m_octaveMainThread = new OctaveMainThread (this); - octave_loop_hook = octave_loop_hook_impl; + command_editor::add_event_hook(update_hook_impl); // Start the first one. m_octaveMainThread->start (); + _updateWorkspaceModelTimer.start (); } void @@ -78,9 +84,9 @@ } void -OctaveLink::triggerUpdateSymbolTable () +OctaveLink::triggerCacheSymbolTable () { - m_workspaceModel->updateFromSymbolTable(); + m_workspaceModel->cacheSymbolTable(); } QStringListModel *