void ScreenWindow::WorkspaceActivated(int32 workspace, bool state) { fScreenMode.GetOriginalMode(fOriginal, workspace); _UpdateActiveMode(); BMessage message(UPDATE_DESKTOP_COLOR_MSG); PostMessage(&message, fMonitorView); }
void ScreenWindow::MessageReceived(BMessage* message) { switch (message->what) { case WORKSPACE_CHECK_MSG: _CheckApplyEnabled(); break; case kMsgWorkspaceLayoutChanged: { int32 deltaX = 0; int32 deltaY = 0; message->FindInt32("delta_x", &deltaX); message->FindInt32("delta_y", &deltaY); if (deltaX == 0 && deltaY == 0) break; uint32 newColumns; uint32 newRows; BPrivate::get_workspaces_layout(&newColumns, &newRows); newColumns += deltaX; newRows += deltaY; BPrivate::set_workspaces_layout(newColumns, newRows); _UpdateWorkspaceButtons(); _CheckApplyEnabled(); break; } case kMsgWorkspaceColumnsChanged: { uint32 newColumns = strtoul(fColumnsControl->Text(), NULL, 10); uint32 rows; BPrivate::get_workspaces_layout(NULL, &rows); BPrivate::set_workspaces_layout(newColumns, rows); _UpdateWorkspaceButtons(); _CheckApplyEnabled(); break; } case kMsgWorkspaceRowsChanged: { uint32 newRows = strtoul(fRowsControl->Text(), NULL, 10); uint32 columns; BPrivate::get_workspaces_layout(&columns, NULL); BPrivate::set_workspaces_layout(columns, newRows); _UpdateWorkspaceButtons(); _CheckApplyEnabled(); break; } case POP_RESOLUTION_MSG: { message->FindInt32("width", &fSelected.width); message->FindInt32("height", &fSelected.height); _CheckColorMenu(); _CheckRefreshMenu(); _UpdateMonitorView(); _UpdateRefreshControl(); _CheckApplyEnabled(); break; } case POP_COLORS_MSG: { int32 space; if (message->FindInt32("space", &space) != B_OK) break; int32 index; if (message->FindInt32("index", &index) == B_OK && fColorsMenu->ItemAt(index) != NULL) fUserSelectedColorSpace = fColorsMenu->ItemAt(index); fSelected.space = (color_space)space; _UpdateColorLabel(); _CheckApplyEnabled(); break; } case POP_REFRESH_MSG: { message->FindFloat("refresh", &fSelected.refresh); fOtherRefresh->SetLabel(B_TRANSLATE("Other" B_UTF8_ELLIPSIS)); // revert "Other…" label - it might have a refresh rate prefix _CheckApplyEnabled(); break; } case POP_OTHER_REFRESH_MSG: { // make sure menu shows something useful _UpdateRefreshControl(); float min = 0, max = 999; fScreenMode.GetRefreshLimits(fSelected, min, max); if (min < gMinRefresh) min = gMinRefresh; if (max > gMaxRefresh) max = gMaxRefresh; monitor_info info; if (fScreenMode.GetMonitorInfo(info) == B_OK) { min = max_c(info.min_vertical_frequency, min); max = min_c(info.max_vertical_frequency, max); } RefreshWindow *fRefreshWindow = new RefreshWindow( fRefreshField->ConvertToScreen(B_ORIGIN), fSelected.refresh, min, max); fRefreshWindow->Show(); break; } case SET_CUSTOM_REFRESH_MSG: { // user pressed "done" in "Other…" refresh dialog; // select the refresh rate chosen message->FindFloat("refresh", &fSelected.refresh); _UpdateRefreshControl(); _CheckApplyEnabled(); break; } case POP_COMBINE_DISPLAYS_MSG: { // new combine mode has bee chosen int32 mode; if (message->FindInt32("mode", &mode) == B_OK) fSelected.combine = (combine_mode)mode; _CheckResolutionMenu(); _CheckApplyEnabled(); break; } case POP_SWAP_DISPLAYS_MSG: message->FindBool("swap", &fSelected.swap_displays); _CheckApplyEnabled(); break; case POP_USE_LAPTOP_PANEL_MSG: message->FindBool("use", &fSelected.use_laptop_panel); _CheckApplyEnabled(); break; case POP_TV_STANDARD_MSG: message->FindInt32("tv_standard", (int32 *)&fSelected.tv_standard); _CheckApplyEnabled(); break; case BUTTON_LAUNCH_BACKGROUNDS_MSG: if (be_roster->Launch(kBackgroundsSignature) == B_ALREADY_RUNNING) { app_info info; be_roster->GetAppInfo(kBackgroundsSignature, &info); be_roster->ActivateApp(info.team); } break; case BUTTON_DEFAULTS_MSG: { // TODO: get preferred settings of screen fSelected.width = 640; fSelected.height = 480; fSelected.space = B_CMAP8; fSelected.refresh = 60.0; fSelected.combine = kCombineDisable; fSelected.swap_displays = false; fSelected.use_laptop_panel = false; fSelected.tv_standard = 0; // TODO: workspace defaults _UpdateControls(); break; } case BUTTON_UNDO_MSG: fUndoScreenMode.Revert(); _UpdateActiveMode(); break; case BUTTON_REVERT_MSG: { fModified = false; fBootWorkspaceApplied = false; // ScreenMode::Revert() assumes that we first set the correct // number of workspaces BPrivate::set_workspaces_layout(fOriginalWorkspacesColumns, fOriginalWorkspacesRows); _UpdateWorkspaceButtons(); fScreenMode.Revert(); _UpdateActiveMode(); break; } case BUTTON_APPLY_MSG: _Apply(); break; case MAKE_INITIAL_MSG: // user pressed "keep" in confirmation dialog fModified = true; _UpdateActiveMode(); break; default: BWindow::MessageReceived(message); break; } }
/*! Reflect active mode in chosen settings */ void ScreenWindow::_UpdateActiveMode() { _UpdateActiveMode(current_workspace()); }