[haiku-development] [PATCH 1/2] Remove special handling of vesa driver from screen preflet.
- From: Jan Klötzke <jan.kloetzke@xxxxxxxxxx>
- To: haiku-development@xxxxxxxxxxxxx
- Date: Sat, 31 May 2008 15:38:15 +0200
* The vesa driver/accelerant supports mode switching now. No special handling
is needed anymore.
* Always write the vesa settings file to directly start with the right
resolution regardless of the used graphics driver. Should save an additional
mode switch while booting.
---
src/preferences/screen/ScreenWindow.cpp | 106 +++----------------------------
src/preferences/screen/ScreenWindow.h | 2 -
2 files changed, 9 insertions(+), 99 deletions(-)
diff --git a/src/preferences/screen/ScreenWindow.cpp
b/src/preferences/screen/ScreenWindow.cpp
index 8f17db7..41e6ecd 100644
--- a/src/preferences/screen/ScreenWindow.cpp
+++ b/src/preferences/screen/ScreenWindow.cpp
@@ -217,7 +217,6 @@ ScreenWindow::ScreenWindow(ScreenSettings *settings)
: BWindow(settings->WindowFrame(), "Screen", B_TITLED_WINDOW,
B_NOT_RESIZABLE | B_NOT_ZOOMABLE, B_ALL_WORKSPACES),
fIsVesa(false),
- fVesaApplied(false),
fScreenMode(this),
fTempScreenMode(this),
fModified(false)
@@ -530,8 +529,11 @@ bool
ScreenWindow::QuitRequested()
{
fSettings->SetWindowFrame(Frame());
- if (fVesaApplied) {
- status_t status = _WriteVesaModeFile(fSelected);
+
+ /* Write mode of workspace 0 to vesa settings file */
+ screen_mode vesaMode;
+ if (fScreenMode.Get(vesaMode, 0) == B_OK) {
+ status_t status = _WriteVesaModeFile(vesaMode);
if (status < B_OK) {
BString warning = "Could not write VESA mode settings
file:\n\t";
warning << strerror(status);
@@ -766,8 +768,7 @@ ScreenWindow::_UpdateActiveMode()
// 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
- if (!fVesaApplied)
- fScreenMode.Get(fActive);
+ fScreenMode.Get(fActive);
fSelected = fActive;
_UpdateControls();
@@ -948,7 +949,6 @@ ScreenWindow::MessageReceived(BMessage* message)
case BUTTON_REVERT_MSG:
{
fModified = false;
- fVesaApplied = false;
BMenuItem *item;
item =
fWorkspaceCountField->Menu()->ItemAt(fOriginalWorkspaceCount - 1);
if (item != NULL)
@@ -956,17 +956,9 @@ ScreenWindow::MessageReceived(BMessage* message)
// ScreenMode::Revert() assumes that we first set the
correct number
// of workspaces
-
- if (_IsVesa()) {
- set_workspace_count(fOriginalWorkspaceCount);
- fActive = fOriginal;
- fSelected = fOriginal;
- _UpdateControls();
- } else {
- set_workspace_count(fOriginalWorkspaceCount);
- fScreenMode.Revert();
- _UpdateActiveMode();
- }
+ set_workspace_count(fOriginalWorkspaceCount);
+ fScreenMode.Revert();
+ _UpdateActiveMode();
break;
}
@@ -1018,68 +1010,6 @@ ScreenWindow::_WriteVesaModeFile(const screen_mode&
mode) const
}
-status_t
-ScreenWindow::_ReadVesaModeFile(screen_mode& mode) const
-{
- BPath path;
- status_t status = find_directory(B_USER_SETTINGS_DIRECTORY, &path,
true);
- if (status < B_OK)
- return status;
-
- path.Append("kernel/drivers/vesa");
- BFile file;
- status = file.SetTo(path.Path(), B_READ_ONLY);
- if (status < B_OK)
- return status;
-
- char buffer[256];
-
- ssize_t bytesRead = file.Read(buffer, sizeof(buffer) - 1);
- if (bytesRead < B_OK) {
- return bytesRead;
- } else {
- buffer[bytesRead] = '\0';
- }
-
- char ignore[256];
- // if the file is malformed, sscanf shouldn't crash
- // on reading a big string since we don't even read
- // as much from the file
- uint32 bitDepth = 0;
-
- if (sscanf(buffer, "%s %ld %ld %ld", ignore, &mode.width, &mode.height,
- &bitDepth) != 4) {
- return B_ERROR;
- }
-
- // TODO: check for valid width and height values
-
- switch (bitDepth) {
- case 32:
- mode.space = B_RGB32;
- break;
- case 24:
- mode.space = B_RGB24;
- break;
- case 16:
- mode.space = B_RGB16;
- break;
- case 15:
- mode.space = B_RGB15;
- break;
- case 8:
- mode.space = B_CMAP8;
- break;
- default:
- // invalid value, we force it to B_RGB16 just in case
- mode.space = B_RGB16;
- return B_ERROR;
- }
-
- return B_OK;
-}
-
-
void
ScreenWindow::_CheckApplyEnabled()
{
@@ -1094,12 +1024,6 @@ ScreenWindow::_UpdateOriginal()
{
fOriginalWorkspaceCount = count_workspaces();
fScreenMode.Get(fOriginal);
-
- // If we are in vesa we overwrite fOriginal's resolution and bitdepth
- // with those found the vesa settings file. (if the file exists)
- if (_IsVesa())
- _ReadVesaModeFile(fOriginal);
-
fScreenMode.UpdateOriginalModes();
}
@@ -1107,18 +1031,6 @@ ScreenWindow::_UpdateOriginal()
void
ScreenWindow::_Apply()
{
- if (_IsVesa()) {
- (new BAlert("VesaAlert",
- "Haiku is using your video card in compatibility mode
(VESA)."
- " Your settings will be applied on next startup.\n",
"Okay", NULL, NULL, B_WIDTH_AS_USUAL,
- B_INFO_ALERT))->Go(NULL);
-
- fVesaApplied = true;
- fActive = fSelected;
- _UpdateControls();
- return;
- }
-
// make checkpoint, so we can undo these changes
fTempScreenMode.UpdateOriginalModes();
status_t status = fScreenMode.Set(fSelected);
diff --git a/src/preferences/screen/ScreenWindow.h
b/src/preferences/screen/ScreenWindow.h
index a54578c..b8680ee 100644
--- a/src/preferences/screen/ScreenWindow.h
+++ b/src/preferences/screen/ScreenWindow.h
@@ -51,7 +51,6 @@ class ScreenWindow : public BWindow {
void _Apply();
status_t _WriteVesaModeFile(const screen_mode& mode) const;
- status_t _ReadVesaModeFile(screen_mode& mode) const;
bool _IsVesa() const { return fIsVesa; }
void _LayoutControls(uint32 flags);
@@ -59,7 +58,6 @@ class ScreenWindow : public BWindow {
ScreenSettings* fSettings;
bool fIsVesa;
- bool fVesaApplied;
BBox* fScreenBox;
BBox* fControlsBox;
--
1.5.4.2
- References:
- [haiku-development] [PATCH] Updated: VESA driver handling
- From: Jan Klötzke
Other related posts:
- » [haiku-development] [PATCH 1/2] Remove special handling of vesa driver from screen preflet.
- » [haiku-development] Re: [PATCH 1/2] Remove special handling of vesa driver from screen preflet.
- [haiku-development] [PATCH] Updated: VESA driver handling
- From: Jan Klötzke