aboutsummaryrefslogtreecommitdiff
path: root/gui/GuiManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gui/GuiManager.cpp')
-rw-r--r--gui/GuiManager.cpp39
1 files changed, 26 insertions, 13 deletions
diff --git a/gui/GuiManager.cpp b/gui/GuiManager.cpp
index 6fa34aa04a..ebab4b1b2b 100644
--- a/gui/GuiManager.cpp
+++ b/gui/GuiManager.cpp
@@ -139,20 +139,29 @@ void GuiManager::redraw() {
if (_dialogStack.empty())
return;
- if (_dialogStack.size() > 1) {
- _theme->clearAll();
- _theme->openDialog(true);
+ switch (_redrawStatus) {
+ case kRedrawCloseDialog:
+ case kRedrawFull:
+ case kRedrawTopDialog:
+ _theme->clearAll();
+ _theme->openDialog(true);
+
+ for (i = 0; i < _dialogStack.size() - 1; i++) {
+ _dialogStack[i]->drawDialog();
+ }
- for (i = 0; i < _dialogStack.size() - 1; i++)
- _dialogStack[i]->drawDialog();
+ _theme->finishBuffering();
- _theme->finishBuffering();
- _theme->updateScreen();
- }
+ case kRedrawOpenDialog:
+ _theme->updateScreen();
+ _theme->openDialog(true, (ThemeEngine::ShadingStyle)xmlEval()->getVar("Dialog." + _dialogStack.top()->_name + ".Shading", 0));
+ _dialogStack.top()->drawDialog();
+ _theme->finishBuffering();
+ break;
- _theme->openDialog(true, (ThemeEngine::ShadingStyle)xmlEval()->getVar("Dialog." + _dialogStack.top()->_name + ".Shading", 0));
- _dialogStack.top()->drawDialog();
- _theme->finishBuffering();
+ default:
+ return;
+ }
_theme->updateScreen();
_redrawStatus = kRedrawDisabled;
@@ -238,6 +247,8 @@ void GuiManager::runLoop() {
if (_useStdCursor)
setupCursor();
+// _theme->refresh();
+
_themeChange = false;
_redrawStatus = kRedrawFull;
redraw();
@@ -336,7 +347,8 @@ void GuiManager::restoreState() {
void GuiManager::openDialog(Dialog *dialog) {
_dialogStack.push(dialog);
- _redrawStatus = kRedrawFull;
+ if (_redrawStatus != kRedrawFull)
+ _redrawStatus = kRedrawOpenDialog;
// We reflow the dialog just before opening it. If the screen changed
// since the last time we looked, also refresh the loaded theme,
@@ -352,7 +364,8 @@ void GuiManager::closeTopDialog() {
// Remove the dialog from the stack
_dialogStack.pop();
- _redrawStatus = kRedrawFull;
+ if (_redrawStatus != kRedrawFull)
+ _redrawStatus = kRedrawCloseDialog;
}
void GuiManager::setupCursor() {