From a40498e2b2d2bdbe296823c96407f6ed67759a9e Mon Sep 17 00:00:00 2001 From: Waldemar Kornewald Date: Thu, 1 Feb 2007 21:36:50 +0000 Subject: [PATCH] * Fixed a little bug that caused unnecessary mode changes when pressing Revert. * Fixed compilation under R5. * Made Revert more user-friendly by also allowing to revert settings to the previously active state after having pressed Apply. This only works if you didn't make new changes in the meantime. In that case, only the new changes will be reverted. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20031 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/preferences/screen/MonitorView.cpp | 8 ++++++ src/preferences/screen/ScreenMode.cpp | 2 +- src/preferences/screen/ScreenWindow.cpp | 38 +++++++++++++++++++------ 3 files changed, 38 insertions(+), 10 deletions(-) diff --git a/src/preferences/screen/MonitorView.cpp b/src/preferences/screen/MonitorView.cpp index 154cd657a5..416f7eb209 100644 --- a/src/preferences/screen/MonitorView.cpp +++ b/src/preferences/screen/MonitorView.cpp @@ -17,6 +17,14 @@ #include +#ifndef __HAIKU__ +inline bool operator!=(const rgb_color& x, const rgb_color& y) +{ + return (x.red!=y.red || x.blue!=y.blue || x.green!=y.green); +} +#endif + + MonitorView::MonitorView(BRect rect, char *name, int32 width, int32 height) : BView(rect, name, B_FOLLOW_ALL, B_WILL_DRAW), fWidth(width), diff --git a/src/preferences/screen/ScreenMode.cpp b/src/preferences/screen/ScreenMode.cpp index 66c3335b6d..af53d85592 100644 --- a/src/preferences/screen/ScreenMode.cpp +++ b/src/preferences/screen/ScreenMode.cpp @@ -219,7 +219,7 @@ ScreenMode::Revert() return B_OK; screen_mode current; - if (Get(current) && fOriginal == current) + if (Get(current) == B_OK && fOriginal == current) return B_OK; BScreen screen(fWindow); diff --git a/src/preferences/screen/ScreenWindow.cpp b/src/preferences/screen/ScreenWindow.cpp index b12495e3cb..a02aa2094b 100644 --- a/src/preferences/screen/ScreenWindow.cpp +++ b/src/preferences/screen/ScreenWindow.cpp @@ -801,8 +801,11 @@ ScreenWindow::MessageReceived(BMessage* message) case POP_RESOLUTION_MSG: { + int32 oldWidth = fSelected.width, oldHeight = fSelected.height; message->FindInt32("width", &fSelected.width); message->FindInt32("height", &fSelected.height); + if (fSelected.width == oldWidth && fSelected.height == oldHeight) + break; CheckColorMenu(); CheckRefreshMenu(); @@ -810,29 +813,44 @@ ScreenWindow::MessageReceived(BMessage* message) UpdateMonitorView(); UpdateRefreshControl(); + fScreenMode.Get(fOriginal); + fScreenMode.UpdateOriginalMode(); CheckApplyEnabled(); break; } case POP_COLORS_MSG: { + color_space old = fSelected.space; message->FindInt32("space", (int32 *)&fSelected.space); + if (fSelected.space == old) + break; BString string; string << fSelected.BitsPerPixel() << " Bits/Pixel"; fColorsMenu->Superitem()->SetLabel(string.String()); + fScreenMode.Get(fOriginal); + fScreenMode.UpdateOriginalMode(); CheckApplyEnabled(); break; } case POP_REFRESH_MSG: + { + float old = fSelected.refresh; message->FindFloat("refresh", &fSelected.refresh); fOtherRefresh->SetLabel("Other" B_UTF8_ELLIPSIS); // revert "Other…" label - it might have had a refresh rate prefix + if (fSelected.refresh == old) + break; + + fScreenMode.Get(fOriginal); + fScreenMode.UpdateOriginalMode(); CheckApplyEnabled(); break; + } case POP_OTHER_REFRESH_MSG: { @@ -856,8 +874,13 @@ ScreenWindow::MessageReceived(BMessage* message) { // user pressed "done" in "Other…" refresh dialog; // select the refresh rate chosen + float old = fSelected.refresh; message->FindFloat("refresh", &fSelected.refresh); + if (fSelected.refresh != old) + break; + fScreenMode.Get(fOriginal); + fScreenMode.UpdateOriginalMode(); UpdateRefreshControl(); CheckApplyEnabled(); break; @@ -909,6 +932,8 @@ ScreenWindow::MessageReceived(BMessage* message) fSelected.use_laptop_panel = false; fSelected.tv_standard = 0; + fScreenMode.Get(fOriginal); + fScreenMode.UpdateOriginalMode(); UpdateControls(); break; } @@ -959,7 +984,6 @@ ScreenWindow::MessageReceived(BMessage* message) fChangingAllWorkspaces = false; } - fScreenMode.UpdateOriginalMode(); UpdateActiveMode(); break; } @@ -1005,20 +1029,16 @@ ScreenWindow::_WriteVesaModeFile(const screen_mode& mode) const bool ScreenWindow::CanApply() const { - if (fAllWorkspacesItem->IsMarked()) - return true; - - return fSelected != fActive; + return fAllWorkspacesItem->IsMarked() || fSelected != fOriginal + || fSelected != fActive; } bool ScreenWindow::CanRevert() const { - if (fActive != fOriginal) - return true; - - return CanApply(); + return (fActive != fOriginal && !fAllWorkspacesItem->IsMarked()) + || fSelected != fActive; }