Author: axeld Date: 2010-03-02 19:44:28 +0100 (Tue, 02 Mar 2010) New Revision: 35727 Changeset: http://dev.haiku-os.org/changeset/35727/haiku Ticket: http://dev.haiku-os.org/ticket/4339 Modified: haiku/trunk/src/preferences/screensaver/ScreenSaverWindow.cpp Log: * Fixed #4339 - I did not use stimut's patch (but thanks a lot, I wouldn't even have started looking into it without it!), but solved it a bit differently by moving the state saving into the destructor, and removing the tab in question manually afterwards. * Automatic whitespace cleanup. Modified: haiku/trunk/src/preferences/screensaver/ScreenSaverWindow.cpp =================================================================== --- haiku/trunk/src/preferences/screensaver/ScreenSaverWindow.cpp 2010-03-02 18:13:06 UTC (rev 35726) +++ haiku/trunk/src/preferences/screensaver/ScreenSaverWindow.cpp 2010-03-02 18:44:28 UTC (rev 35727) @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007, Haiku. + * Copyright 2003-2010, Haiku. * Distributed under the terms of the MIT License. * * Authors: @@ -308,6 +308,7 @@ void ModulesView::DetachedFromWindow() { + SaveState(); _CloseSaver(); } @@ -441,10 +442,10 @@ path.Append(name); ScreenSaverItem* item = new ScreenSaverItem(name, path.Path()); - fListView->AddItem(item); - + fListView->AddItem(item); + if (!strcmp(fSettings.ModuleName(), item->Text()) - || (!strcmp(fSettings.ModuleName(), "") + || (!strcmp(fSettings.ModuleName(), "") && !strcmp(item->Text(), "Blackness"))) selectItem = item; } @@ -459,7 +460,7 @@ //! sorting function for ScreenSaverItems int -ModulesView::_CompareScreenSaverItems(const void* left, const void* right) +ModulesView::_CompareScreenSaverItems(const void* left, const void* right) { ScreenSaverItem* leftItem = *(ScreenSaverItem **)left; ScreenSaverItem* rightItem = *(ScreenSaverItem **)right; @@ -492,7 +493,7 @@ fSaverRunner->Quit(); if (saver != NULL) saver->StopConfig(); - + delete view; delete fSettingsView; delete fSaverRunner; @@ -586,7 +587,7 @@ // #pragma mark - -ScreenSaverWindow::ScreenSaverWindow() +ScreenSaverWindow::ScreenSaverWindow() : BWindow(BRect(50, 50, 496, 375), "ScreenSaver", B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS /*| B_NOT_ZOOMABLE | B_NOT_RESIZABLE*/) { @@ -639,6 +640,14 @@ ScreenSaverWindow::~ScreenSaverWindow() { + Hide(); + _UpdateStatus(); + + delete fTabView->RemoveTab(1); + // We delete this here in order to make sure the module view saves its + // state while the window is still intact. + + fSettings.Save(); } @@ -814,7 +823,7 @@ EnableUpdates(); // Update the saved preferences - fSettings.SetWindowFrame(Frame()); + fSettings.SetWindowFrame(Frame()); fSettings.SetWindowTab(fTabView->Selection()); fSettings.SetTimeFlags((enabled ? ENABLE_SAVER : 0) | (fTurnOffCheckBox->Value() ? fTurnOffScreenFlags : 0)); @@ -917,11 +926,7 @@ bool ScreenSaverWindow::QuitRequested() { - _UpdateStatus(); - fModulesView->SaveState(); - fSettings.Save(); - be_app->PostMessage(B_QUIT_REQUESTED); return true; -} +}