diff --git a/src/preferences/screen/ScreenWindow.cpp b/src/preferences/screen/ScreenWindow.cpp index c0f7b45dd1..4acde46450 100644 --- a/src/preferences/screen/ScreenWindow.cpp +++ b/src/preferences/screen/ScreenWindow.cpp @@ -802,16 +802,25 @@ ScreenWindow::_UpdateControls() /*! Reflect active mode in chosen settings */ void ScreenWindow::_UpdateActiveMode() +{ + _UpdateActiveMode(current_workspace()); +} + + +void +ScreenWindow::_UpdateActiveMode(int32 workspace) { // Usually, this function gets called after a mode // has been set manually; still, as the graphics driver // is free to fiddle with mode passed, we better ask // what kind of mode we actually got - fScreenMode.Get(fActive); - fSelected = fActive; + if (fScreenMode.Get(fActive, workspace) == B_OK) { + fSelected = fActive; - _UpdateMonitor(); - _UpdateControls(); + _UpdateMonitor(); + _BuildSupportedColorSpaces(); + _UpdateControls(); + } } @@ -851,11 +860,12 @@ ScreenWindow::ScreenChanged(BRect frame, color_space mode) void ScreenWindow::WorkspaceActivated(int32 workspace, bool state) { - fScreenMode.GetOriginalMode(fOriginal, workspace); - _UpdateActiveMode(); + if (fScreenMode.GetOriginalMode(fOriginal, workspace) == B_OK) { + _UpdateActiveMode(workspace); - BMessage message(UPDATE_DESKTOP_COLOR_MSG); - PostMessage(&message, fMonitorView); + BMessage message(UPDATE_DESKTOP_COLOR_MSG); + PostMessage(&message, fMonitorView); + } } diff --git a/src/preferences/screen/ScreenWindow.h b/src/preferences/screen/ScreenWindow.h index b5bedd8469..aa905425ba 100644 --- a/src/preferences/screen/ScreenWindow.h +++ b/src/preferences/screen/ScreenWindow.h @@ -50,6 +50,7 @@ private: void _CheckRefreshMenu(); void _UpdateActiveMode(); + void _UpdateActiveMode(int32 workspace); void _UpdateWorkspaceButtons(); void _UpdateRefreshControl(); void _UpdateMonitorView();