ui: Refresh UI state only after every style refresh in each view finished (#917)

Separated UI refresh into 'style' and 'state' refresh to avoid race condition between task scheduler thread and UI thread that affected code view state.
fixes #916
This commit is contained in:
Eberhard Gräther
2020-02-11 01:19:44 +01:00
committed by GitHub
parent 9fc0a05c3b
commit 08f43173c0
11 changed files with 36 additions and 20 deletions
+1
View File
@@ -520,6 +520,7 @@ add_files(
utility/messaging/type/MessageQuitApplication.h
utility/messaging/type/MessageRefresh.h
utility/messaging/type/MessageRefreshUI.h
utility/messaging/type/MessageRefreshUIState.h
utility/messaging/type/MessageResetZoom.h
utility/messaging/type/MessageShowStatus.h
utility/messaging/type/MessageStatus.cpp
+2
View File
@@ -351,6 +351,8 @@ void Application::handleMessage(MessageRefreshUI* message)
}
m_mainView->refreshViews();
m_mainView->refreshUIState(message->isAfterIndexing);
}
}
@@ -350,7 +350,7 @@ void UndoRedoController::handleMessage(MessageIndexingFinished* message)
m_iterator = m_list.end();
}
void UndoRedoController::handleMessage(MessageRefreshUI* message)
void UndoRedoController::handleMessage(MessageRefreshUIState* message)
{
std::list<Command>::iterator startIterator = m_iterator;
do
@@ -24,7 +24,7 @@
#include "MessageHistoryUndo.h"
#include "MessageIndexingFinished.h"
#include "MessageListener.h"
#include "MessageRefreshUI.h"
#include "MessageRefreshUIState.h"
#include "MessageScrollCode.h"
#include "MessageScrollGraph.h"
#include "MessageShowError.h"
@@ -57,7 +57,7 @@ class UndoRedoController
, public MessageListener<MessageHistoryToPosition>
, public MessageListener<MessageHistoryUndo>
, public MessageListener<MessageIndexingFinished>
, public MessageListener<MessageRefreshUI>
, public MessageListener<MessageRefreshUIState>
, public MessageListener<MessageScrollCode>
, public MessageListener<MessageScrollGraph>
, public MessageListener<MessageShowError>
@@ -110,7 +110,7 @@ private:
void handleMessage(MessageHistoryToPosition* message) override;
void handleMessage(MessageHistoryUndo* message) override;
void handleMessage(MessageIndexingFinished* message) override;
void handleMessage(MessageRefreshUI* message) override;
void handleMessage(MessageRefreshUIState* message) override;
void handleMessage(MessageScrollCode* message) override;
void handleMessage(MessageScrollGraph* message) override;
void handleMessage(MessageShowError* message) override;
+1
View File
@@ -30,6 +30,7 @@ public:
virtual void saveLayout() = 0;
virtual void refreshView() = 0;
virtual void refreshUIState(bool isAfterIndexing) = 0;
virtual void loadWindow(bool showStartWindow) = 0;
@@ -0,0 +1,19 @@
#ifndef MESSAGE_REFRESH_UI_STATE_H
#define MESSAGE_REFRESH_UI_STATE_H
#include "Message.h"
class MessageRefreshUIState: public Message<MessageRefreshUIState>
{
public:
static const std::string getStaticType()
{
return "MessageRefreshUIState";
}
MessageRefreshUIState(bool isAfterIndexing) : isAfterIndexing(isAfterIndexing) {}
bool isAfterIndexing = false;
};
#endif // MESSAGE_REFRESH_UI_STATE_H