From 95ef50445f4c79fdbc2aad175287975ec214d6f1 Mon Sep 17 00:00:00 2001 From: Janus Date: Mon, 19 Jan 2015 10:07:46 +0000 Subject: [PATCH] Screen: disable Apply button when no changes would be made. * Previously this would work only in "current workspace" mode. * Also avoid calling count_workspaces in a loop since its result is not cached and it needs to ask app_server each time. * Fixes #4231. Signed-off-by: Adrien Destugues --- src/preferences/screen/ScreenWindow.cpp | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/preferences/screen/ScreenWindow.cpp b/src/preferences/screen/ScreenWindow.cpp index 511ed9ac26..c3bfb28696 100644 --- a/src/preferences/screen/ScreenWindow.cpp +++ b/src/preferences/screen/ScreenWindow.cpp @@ -1215,8 +1215,24 @@ ScreenWindow::_BuildSupportedColorSpaces() void ScreenWindow::_CheckApplyEnabled() { - fApplyButton->SetEnabled(fSelected != fActive - || fAllWorkspacesItem->IsMarked()); + bool applyEnabled = true; + + if (fSelected == fActive) { + applyEnabled = false; + if (fAllWorkspacesItem->IsMarked()) { + screen_mode screenMode; + const int32 workspaceCount = count_workspaces(); + for (int32 i = 0; i < workspaceCount; i++) { + fScreenMode.Get(screenMode, i); + if (screenMode != fSelected) { + applyEnabled = true; + break; + } + } + } + } + + fApplyButton->SetEnabled(applyEnabled); uint32 columns; uint32 rows; @@ -1337,7 +1353,8 @@ ScreenWindow::_Apply() if (fAllWorkspacesItem->IsMarked()) { int32 originatingWorkspace = current_workspace(); - for (int32 i = 0; i < count_workspaces(); i++) { + const int32 workspaceCount = count_workspaces(); + for (int32 i = 0; i < workspaceCount; i++) { if (i != originatingWorkspace) screen.SetMode(i, &newMode, true); }