[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


Other related posts: