# HG changeset patch # User Torsten # Date 1361132266 -3600 # Node ID 0486a29d780fd79e3e3cccd197d4efb5a18f08b9 # Parent b309a5da17f54b5c61fe80b88b55c08a5cff2bd2 gui: fix updating history and workspace widget for mxe-octave * history-dock-widget.h: new flag _update_event_enabled for disabling and enabling the update event * histroy-dock-widget.cc(construct): change update timer to periodic and to an interval of 500 ms, enable update * history-dock-widget.cc(request_history_model_update): if update is enabled post update event and disable update in order to prevent further events * history-dock-widget.cc(update_history_callback): reenalbe update when update is complete * workspace-model.h: new flag _update_event_enabled for disabling and enabling the update event * workspace-model.cc(workspace_model): change update timer to periodic, enable update * workspace-model.cc(request_update_workspace): if update is enabled post update event and disable update in order to prevent further events * workspace-model.cc(update_workspace_callback): reenalbe update when update is complete diff -r b309a5da17f5 -r 0486a29d780f libgui/src/history-dockwidget.cc --- a/libgui/src/history-dockwidget.cc Sat Feb 16 22:21:13 2013 -0500 +++ b/libgui/src/history-dockwidget.cc Sun Feb 17 21:17:46 2013 +0100 @@ -77,8 +77,9 @@ connect (_history_list_view, SIGNAL (doubleClicked (QModelIndex)), this, SLOT (handle_double_click (QModelIndex))); - _update_history_model_timer.setInterval (200); - _update_history_model_timer.setSingleShot (true); + _update_event_enabled = true; + _update_history_model_timer.setInterval (500); + _update_history_model_timer.setSingleShot (false); connect (&_update_history_model_timer, SIGNAL (timeout ()), @@ -132,7 +133,11 @@ void history_dock_widget::request_history_model_update () { - octave_link::post_event (this, &history_dock_widget::update_history_callback); + if (_update_event_enabled) + { + _update_event_enabled = false; // no more update until this one is processed + octave_link::post_event (this, &history_dock_widget::update_history_callback); + } } void @@ -181,7 +186,7 @@ _history_list_view->scrollToBottom (); } - // Post a new update event in a given time. This prevents flooding the - // event queue. - _update_history_model_timer.start (); + // update is processed, re-enable further updates events triggered by timer + _update_event_enabled = true; + } diff -r b309a5da17f5 -r 0486a29d780f libgui/src/history-dockwidget.h --- a/libgui/src/history-dockwidget.h Sat Feb 16 22:21:13 2013 -0500 +++ b/libgui/src/history-dockwidget.h Sun Feb 17 21:17:46 2013 +0100 @@ -66,6 +66,7 @@ QTimer _update_history_model_timer; void update_history_callback (void); + bool _update_event_enabled; }; #endif // HISTORYDOCKWIDGET_H diff -r b309a5da17f5 -r 0486a29d780f libgui/src/workspace-model.cc --- a/libgui/src/workspace-model.cc Sat Feb 16 22:21:13 2013 -0500 +++ b/libgui/src/workspace-model.cc Sun Feb 17 21:17:46 2013 +0100 @@ -1,3 +1,4 @@ + /* Copyright (C) 2011-2012 Jacob Dawid @@ -51,8 +52,9 @@ this, SLOT (request_update_workspace())); + _update_event_enabled = true; _update_workspace_model_timer.setInterval (500); - _update_workspace_model_timer.setSingleShot (true); + _update_workspace_model_timer.setSingleShot (false); _update_workspace_model_timer.start (); } @@ -64,7 +66,11 @@ void workspace_model::request_update_workspace () { - octave_link::post_event (this, &workspace_model::update_workspace_callback); + if (_update_event_enabled) + { + _update_event_enabled = false; // no more update until this one is processed + octave_link::post_event (this, &workspace_model::update_workspace_callback); + } } QModelIndex @@ -222,8 +228,7 @@ endResetModel(); emit model_changed(); - // Post a new event in a given time. - // This prevents flooding the event queue when no events are being processed. - _update_workspace_model_timer.start (); + // update is processed, re-enable further updates events triggered by timer + _update_event_enabled = true; + } - diff -r b309a5da17f5 -r 0486a29d780f libgui/src/workspace-model.h --- a/libgui/src/workspace-model.h Sat Feb 16 22:21:13 2013 -0500 +++ b/libgui/src/workspace-model.h Sun Feb 17 21:17:46 2013 +0100 @@ -140,6 +140,8 @@ private: + bool _update_event_enabled; + void update_workspace_callback (void); /** Timer for periodically updating the workspace model from the current