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:
@@ -632,16 +632,6 @@ void QtCodeNavigator::setModeSingle()
|
||||
}
|
||||
}
|
||||
|
||||
void QtCodeNavigator::handleMessage(MessageIndexingFinished* message)
|
||||
{
|
||||
m_onQtThread([=]() { clearCache(); });
|
||||
}
|
||||
|
||||
void QtCodeNavigator::handleMessage(MessageSwitchColorScheme* message)
|
||||
{
|
||||
m_onQtThread([=]() { clearCache(); });
|
||||
}
|
||||
|
||||
void QtCodeNavigator::handleMessage(MessageWindowFocus* message)
|
||||
{
|
||||
if (message->focusIn)
|
||||
|
||||
@@ -5,9 +5,7 @@
|
||||
|
||||
#include "ErrorInfo.h"
|
||||
#include "LocationType.h"
|
||||
#include "MessageIndexingFinished.h"
|
||||
#include "MessageListener.h"
|
||||
#include "MessageSwitchColorScheme.h"
|
||||
#include "MessageWindowFocus.h"
|
||||
#include "QtCodeFileList.h"
|
||||
#include "QtCodeFileSingle.h"
|
||||
@@ -21,8 +19,6 @@ class SourceLocationFile;
|
||||
|
||||
class QtCodeNavigator
|
||||
: public QWidget
|
||||
, public MessageListener<MessageIndexingFinished>
|
||||
, public MessageListener<MessageSwitchColorScheme>
|
||||
, public MessageListener<MessageWindowFocus>
|
||||
{
|
||||
Q_OBJECT
|
||||
@@ -117,8 +113,6 @@ private slots:
|
||||
void setModeSingle();
|
||||
|
||||
private:
|
||||
void handleMessage(MessageIndexingFinished* message) override;
|
||||
void handleMessage(MessageSwitchColorScheme* message) override;
|
||||
void handleMessage(MessageWindowFocus* message) override;
|
||||
|
||||
QtThreadedLambdaFunctor m_onQtThread;
|
||||
|
||||
@@ -35,6 +35,8 @@ void QtCodeView::refreshView()
|
||||
|
||||
QtCodeArea::clearAnnotationColors();
|
||||
QtHighlighter::clearHighlightingRules();
|
||||
|
||||
m_widget->clearCache();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#include "QtMainView.h"
|
||||
|
||||
#include "MessageRefreshUIState.h"
|
||||
#include "QtMainWindow.h"
|
||||
#include "QtViewWidgetWrapper.h"
|
||||
|
||||
@@ -95,6 +96,11 @@ void QtMainView::refreshView()
|
||||
m_onQtThread([=]() { m_window->refreshStyle(); });
|
||||
}
|
||||
|
||||
void QtMainView::refreshUIState(bool isAfterIndexing)
|
||||
{
|
||||
m_onQtThread([=]() { MessageRefreshUIState(isAfterIndexing).dispatch(); });
|
||||
}
|
||||
|
||||
QStatusBar* QtMainView::getStatusBar()
|
||||
{
|
||||
return m_window->statusBar();
|
||||
|
||||
@@ -51,6 +51,7 @@ public:
|
||||
void loadWindow(bool showStartWindow) override;
|
||||
|
||||
void refreshView() override;
|
||||
void refreshUIState(bool isAfterIndexing) override;
|
||||
|
||||
void hideStartScreen() override;
|
||||
void setTitle(const std::wstring& title) override;
|
||||
|
||||
Reference in New Issue
Block a user