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	Tue May 22 13:04:24 2012 +0200
+++ b/gui/src/backend/OctaveLink.cpp	Tue May 22 17:29:34 2012 +0200
@@ -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 *