]> git.sesse.net Git - vlc/blobdiff - modules/gui/beos/InterfaceWindow.cpp
ALL: fixed i18n under BeOS
[vlc] / modules / gui / beos / InterfaceWindow.cpp
index 81e52c43968428f4a6b950f4802c787042bcb3a3..b60c059c2245289e457f3ebb07561c5828992598 100644 (file)
@@ -2,7 +2,7 @@
  * InterfaceWindow.cpp: beos interface
  *****************************************************************************
  * Copyright (C) 1999, 2000, 2001 VideoLAN
- * $Id: InterfaceWindow.cpp,v 1.28 2003/02/09 11:51:36 titer Exp $
+ * $Id: InterfaceWindow.cpp,v 1.32 2003/04/18 15:25:50 titer Exp $
  *
  * Authors: Jean-Marc Dressler <polux@via.ecp.fr>
  *          Samuel Hocevar <sam@zoy.org>
@@ -53,6 +53,7 @@
 
 #define INTERFACE_UPDATE_TIMEOUT 80000 // 2 frames if at 25 fps
 #define INTERFACE_LOCKING_TIMEOUT 5000
+#define USE_VLC_CONFIG_FILE 0
 
 // make_sure_frame_is_on_screen
 bool
@@ -201,7 +202,7 @@ InterfaceWindow::InterfaceWindow( BRect frame, const char* name,
                      ( screen_rect.bottom - PREFS_WINDOW_HEIGHT ) / 2,
                      ( screen_rect.right + PREFS_WINDOW_WIDTH ) / 2,
                      ( screen_rect.bottom + PREFS_WINDOW_HEIGHT ) / 2 );
-    fPreferencesWindow = new PreferencesWindow( p_intf, window_rect, "Preferences" );
+    fPreferencesWindow = new PreferencesWindow( p_intf, window_rect, "Settings" );
     window_rect.Set( screen_rect.right - 500,
                      screen_rect.top + 50,
                      screen_rect.right - 150,
@@ -215,7 +216,6 @@ InterfaceWindow::InterfaceWindow( BRect frame, const char* name,
 
     // set the title bar
     SetName( "interface" );
-    SetTitle( VOUT_TITLE );
 
     // the media control view
     p_mediaControl = new MediaControlView( BRect( 0.0, 0.0, 250.0, 50.0 ),
@@ -242,7 +242,7 @@ InterfaceWindow::InterfaceWindow( BRect frame, const char* name,
     AddChild( p_mediaControl );
 
     // Add the file Menu
-    BMenu* fileMenu = new BMenu( "File" );
+    BMenu* fileMenu = new BMenu( _("File") );
     fMenuBar->AddItem( fileMenu );
     fileMenu->AddItem( new BMenuItem( "Open File" B_UTF8_ELLIPSIS,
                                       new BMessage( OPEN_FILE ), 'O') );
@@ -263,7 +263,7 @@ InterfaceWindow::InterfaceWindow( BRect frame, const char* name,
     fSubtitlesMenu = new LanguageMenu("Subtitles", SPU_ES, p_wrapper);
 
     /* Add the Audio menu */
-    fAudioMenu = new BMenu( "Audio" );
+    fAudioMenu = new BMenu( _("Audio") );
     fMenuBar->AddItem ( fAudioMenu );
     fAudioMenu->AddItem( fLanguageMenu );
     fAudioMenu->AddItem( fSubtitlesMenu );
@@ -272,10 +272,13 @@ InterfaceWindow::InterfaceWindow( BRect frame, const char* name,
     fNextTitleMI = new BMenuItem( "Next Title", new BMessage( NEXT_TITLE ) );
     fPrevChapterMI = new BMenuItem( "Prev Chapter", new BMessage( PREV_CHAPTER ) );
     fNextChapterMI = new BMenuItem( "Next Chapter", new BMessage( NEXT_CHAPTER ) );
+    fGotoMenuMI = new BMenuItem( "Goto Menu", new BMessage( NAVIGATE_MENU ) );
 
     /* Add the Navigation menu */
-    fNavigationMenu = new BMenu( "Navigation" );
+    fNavigationMenu = new BMenu( _("Navigation") );
     fMenuBar->AddItem( fNavigationMenu );
+    fNavigationMenu->AddItem( fGotoMenuMI );
+    fNavigationMenu->AddSeparatorItem();
     fNavigationMenu->AddItem( fPrevTitleMI );
     fNavigationMenu->AddItem( fNextTitleMI );
     fNavigationMenu->AddItem( fTitleMenu = new TitleMenu( "Go to Title", p_intf ) );
@@ -285,7 +288,7 @@ InterfaceWindow::InterfaceWindow( BRect frame, const char* name,
     fNavigationMenu->AddItem( fChapterMenu = new ChapterMenu( "Go to Chapter", p_intf ) );
 
     /* Add the Speed menu */
-    fSpeedMenu = new BMenu( "Speed" );
+    fSpeedMenu = new BMenu( _("Speed") );
     fSpeedMenu->SetRadioMode( true );
     fSpeedMenu->AddItem( fSlowerMI = new BMenuItem( "Slower", new BMessage( SLOWER_PLAY ) ) );
     fNormalMI = new BMenuItem( "Normal", new BMessage( NORMAL_PLAY ) );
@@ -296,7 +299,7 @@ InterfaceWindow::InterfaceWindow( BRect frame, const char* name,
     fMenuBar->AddItem( fSpeedMenu );
 
     /* Add the Show menu */
-    fShowMenu = new BMenu( "Window" );
+    fShowMenu = new BMenu( _("Window") );
     fShowMenu->AddItem( new BMenuItem( "Play List" B_UTF8_ELLIPSIS,
                                        new BMessage( OPEN_PLAYLIST ), 'P') );
     fShowMenu->AddItem( new BMenuItem( "Messages" B_UTF8_ELLIPSIS,
@@ -309,106 +312,8 @@ InterfaceWindow::InterfaceWindow( BRect frame, const char* name,
     _SetMenusEnabled( false );
     p_mediaControl->SetEnabled( false );
 
-       _RestoreSettings();
-    
-/*    // Restore interface settings
-       // main window size and position
-    int i_width = config_GetInt( p_intf, "beos-intf-width" ),
-        i_height = config_GetInt( p_intf, "beos-intf-height" ),
-        i_xpos = config_GetInt( p_intf, "beos-intf-xpos" ),
-        i_ypos = config_GetInt( p_intf, "beos-intf-ypos" );
-    if( i_width > 20 && i_height > 20 && i_xpos >= 0 && i_ypos >= 0 )
-    {
-       BRect r( i_xpos, i_ypos, i_xpos + i_width, i_ypos + i_height );
-
-               float minWidth, maxWidth, minHeight, maxHeight;
-               GetSizeLimits( &minWidth, &maxWidth, &minHeight, &maxHeight );
-
-               make_sure_frame_is_within_limits( r, minWidth, minHeight, maxWidth, maxHeight );
-               if ( make_sure_frame_is_on_screen( r ) )
-               {
-               ResizeTo( r.Width(), r.Height() );
-               MoveTo( r.LeftTop() );
-               }
-    }
-       // playlist window size and position
-    i_width = config_GetInt( p_intf, "beos-playlist-width" ),
-    i_height = config_GetInt( p_intf, "beos-playlist-height" ),
-    i_xpos = config_GetInt( p_intf, "beos-playlist-xpos" ),
-    i_ypos = config_GetInt( p_intf, "beos-playlist-ypos" );
-    if( i_width > 20 && i_height > 20 && i_xpos >= 0 && i_ypos >= 0 )
-    {
-       BRect r( i_xpos, i_ypos, i_xpos + i_width, i_ypos + i_height );
-
-               float minWidth, maxWidth, minHeight, maxHeight;
-               fPlaylistWindow->GetSizeLimits( &minWidth, &maxWidth, &minHeight, &maxHeight );
-
-               make_sure_frame_is_within_limits( r, minWidth, minHeight, maxWidth, maxHeight );
-               if ( make_sure_frame_is_on_screen( r ) )
-               {
-               fPlaylistWindow->ResizeTo( r.Width(), r.Height() );
-               fPlaylistWindow->MoveTo( r.LeftTop() );
-               }
-    }
-    // child windows are not running yet, that's why we aint locking them
-    // playlist showing
-    // messages window size and position
-    i_width = config_GetInt( p_intf, "beos-messages-width" ),
-    i_height = config_GetInt( p_intf, "beos-messages-height" ),
-    i_xpos = config_GetInt( p_intf, "beos-messages-xpos" ),
-    i_ypos = config_GetInt( p_intf, "beos-messages-ypos" );
-    if( i_width && i_height && i_xpos && i_ypos )
-    {
-       BRect r( i_xpos, i_ypos, i_xpos + i_width, i_ypos + i_height );
+       _RestoreSettings();    
 
-               float minWidth, maxWidth, minHeight, maxHeight;
-               fMessagesWindow->GetSizeLimits( &minWidth, &maxWidth, &minHeight, &maxHeight );
-
-               make_sure_frame_is_within_limits( r, minWidth, minHeight, maxWidth, maxHeight );
-               if ( make_sure_frame_is_on_screen( r ) )
-               {
-               fMessagesWindow->ResizeTo( r.Width(), r.Height() );
-               fMessagesWindow->MoveTo( r.LeftTop() );
-               }
-    }
-    if( config_GetInt( p_intf, "beos-playlist-show" ) )
-    {
-               fPlaylistWindow->Show();
-    }
-    else
-    {
-               fPlaylistWindow->Hide();
-               fPlaylistWindow->Show();
-    }
-       // messages window size and position
-    i_width = config_GetInt( p_intf, "beos-messages-width" ),
-    i_height = config_GetInt( p_intf, "beos-messages-height" ),
-    i_xpos = config_GetInt( p_intf, "beos-messages-xpos" ),
-    i_ypos = config_GetInt( p_intf, "beos-messages-ypos" );
-    if( i_width > 20 && i_height > 20 && i_xpos >= 0 && i_ypos >= 0 )
-    {
-       BRect r( i_xpos, i_ypos, i_xpos + i_width, i_ypos + i_height );
-               float minWidth, maxWidth, minHeight, maxHeight;
-               fMessagesWindow->GetSizeLimits( &minWidth, &maxWidth, &minHeight, &maxHeight );
-
-               make_sure_frame_is_within_limits( r, minWidth, minHeight, maxWidth, maxHeight );
-               if ( make_sure_frame_is_on_screen( r ) )
-               {
-               fMessagesWindow->ResizeTo( r.Width(), r.Height() );
-               fMessagesWindow->MoveTo( r.LeftTop() );
-               }
-    }
-    // messages showing
-    if( config_GetInt( p_intf, "beos-messages-show" ) )
-    {
-               fMessagesWindow->Show();
-    }
-    else
-    {
-               fMessagesWindow->Hide();
-               fMessagesWindow->Show();
-    }*/
-    
     Show();
 }
 
@@ -420,6 +325,9 @@ InterfaceWindow::~InterfaceWindow()
     if( fMessagesWindow )
         fMessagesWindow->ReallyQuit();
     fMessagesWindow = NULL;
+    if( fPreferencesWindow )
+        fPreferencesWindow->ReallyQuit();
+    fPreferencesWindow = NULL;
        delete fFilePanel;
        delete fSettings;
 }
@@ -450,8 +358,9 @@ void InterfaceWindow::MessageReceived( BMessage * p_message )
     {
         case B_ABOUT_REQUESTED:
         {
-            BAlert* alert = new BAlert( VOUT_TITLE,
-                                        "BeOS " VOUT_TITLE "\n\n<www.videolan.org>", "Ok");
+            BAlert* alert = new BAlert( "VLC " PACKAGE_VERSION,
+                                        "VLC " PACKAGE_VERSION " for BeOS\n\n"
+                                        "<www.videolan.org>", "OK");
             alert->Go();
             break;
         }
@@ -611,6 +520,9 @@ void InterfaceWindow::MessageReceived( BMessage * p_message )
             p_wrapper->NextTitle();
             break;
         }
+        case NAVIGATE_MENU:
+               p_wrapper->ToggleTitle( 0 );
+               break;
         case TOGGLE_TITLE:
             if ( playback_status > UNDEF_S )
             {
@@ -807,33 +719,6 @@ bool InterfaceWindow::QuitRequested()
     p_wrapper->PlaylistStop();
     p_mediaControl->SetStatus(NOT_STARTED_S, DEFAULT_RATE);
 
-    /* Save interface settings */
-/*    BRect frame = Frame();
-    config_PutInt( p_intf, "beos-intf-width", (int)frame.Width() );
-    config_PutInt( p_intf, "beos-intf-height", (int)frame.Height() );
-    config_PutInt( p_intf, "beos-intf-xpos", (int)frame.left );
-    config_PutInt( p_intf, "beos-intf-ypos", (int)frame.top );
-    if( fPlaylistWindow->Lock() )
-    {
-        frame = fPlaylistWindow->Frame();
-        config_PutInt( p_intf, "beos-playlist-width", (int)frame.Width() );
-        config_PutInt( p_intf, "beos-playlist-height", (int)frame.Height() );
-        config_PutInt( p_intf, "beos-playlist-xpos", (int)frame.left );
-        config_PutInt( p_intf, "beos-playlist-ypos", (int)frame.top );
-        config_PutInt( p_intf, "beos-playlist-show", !fPlaylistWindow->IsHidden() );
-        fPlaylistWindow->Unlock();
-    }
-    if( fMessagesWindow->Lock() )
-    {
-        frame = fMessagesWindow->Frame();
-        config_PutInt( p_intf, "beos-messages-width", (int)frame.Width() );
-        config_PutInt( p_intf, "beos-messages-height", (int)frame.Height() );
-        config_PutInt( p_intf, "beos-messages-xpos", (int)frame.left );
-        config_PutInt( p_intf, "beos-messages-ypos", (int)frame.top );
-        config_PutInt( p_intf, "beos-messages-show", !fMessagesWindow->IsHidden() );
-        fMessagesWindow->Unlock();
-    }*/
-    config_SaveConfigFile( p_intf, "beos" );
        _StoreSettings();
    
     p_intf->b_die = 1;
@@ -906,11 +791,6 @@ void InterfaceWindow::UpdateInterface()
         }
     }
 
-       // strangly, someone is calling this function even after the object has been destructed!
-       // even more strangly, this workarround seems to work
-       if (fMessagesWindow)
-           fMessagesWindow->UpdateMessages();
-
     fLastUpdateTime = system_time();
 }
 
@@ -972,6 +852,10 @@ InterfaceWindow::_SetMenusEnabled(bool hasFile, bool hasChapters, bool hasTitles
              fSubtitlesMenu->SetEnabled( hasFile );
         if ( fSpeedMenu->IsEnabled() != hasFile )
              fSpeedMenu->SetEnabled( hasFile );
+        // "goto menu" menu item
+        bool hasMenu = p_intf->p_sys->b_dvdmenus ? hasTitles : false;
+        if ( fGotoMenuMI->IsEnabled() != hasMenu )
+             fGotoMenuMI->SetEnabled( hasMenu );
         Unlock();
     }
 }
@@ -1076,29 +960,82 @@ launch_window( BWindow* window, bool showing )
 void
 InterfaceWindow::_RestoreSettings()
 {
-       if ( load_settings( fSettings, "interface_settings", "VideoLAN Client" ) == B_OK )
+       if ( USE_VLC_CONFIG_FILE )
        {
-               BRect frame;
-               if ( fSettings->FindRect( "main frame", &frame ) == B_OK )
-                       set_window_pos( this, frame );
-               if (fSettings->FindRect( "playlist frame", &frame ) == B_OK )
-                       set_window_pos( fPlaylistWindow, frame );
-               if (fSettings->FindRect( "messages frame", &frame ) == B_OK )
-                       set_window_pos( fMessagesWindow, frame );
-               if (fSettings->FindRect( "settings frame", &frame ) == B_OK )
-                       set_window_pos( fPreferencesWindow, frame );
-               
-               bool showing;
-               if ( fSettings->FindBool( "playlist showing", &showing ) == B_OK )
-                       launch_window( fPlaylistWindow, showing );
-               if ( fSettings->FindBool( "messages showing", &showing ) == B_OK )
-                       launch_window( fMessagesWindow, showing );
-               if ( fSettings->FindBool( "settings showing", &showing ) == B_OK )
-                       launch_window( fPreferencesWindow, showing );
-
-               uint32 displayMode;
-               if ( fSettings->FindInt32( "playlist display mode", (int32*)&displayMode ) == B_OK )
-                       fPlaylistWindow->SetDisplayMode( displayMode );
+               // main window size and position
+           int i_width = config_GetInt( p_intf, "beos-intf-width" ),
+               i_height = config_GetInt( p_intf, "beos-intf-height" ),
+               i_xpos = config_GetInt( p_intf, "beos-intf-xpos" ),
+               i_ypos = config_GetInt( p_intf, "beos-intf-ypos" );
+           if( i_width > 20 && i_height > 20 && i_xpos >= 0 && i_ypos >= 0 )
+           {
+               BRect r( i_xpos, i_ypos, i_xpos + i_width, i_ypos + i_height );
+               set_window_pos( this, r );
+           }
+               // playlist window size and position
+           i_width = config_GetInt( p_intf, "beos-playlist-width" ),
+           i_height = config_GetInt( p_intf, "beos-playlist-height" ),
+           i_xpos = config_GetInt( p_intf, "beos-playlist-xpos" ),
+           i_ypos = config_GetInt( p_intf, "beos-playlist-ypos" );
+           if( i_width > 20 && i_height > 20 && i_xpos >= 0 && i_ypos >= 0 )
+           {
+               BRect r( i_xpos, i_ypos, i_xpos + i_width, i_ypos + i_height );
+               set_window_pos( fPlaylistWindow, r );
+           }
+           // playlist showing
+           launch_window( fPlaylistWindow, config_GetInt( p_intf, "beos-playlist-show" ) );
+           // messages window size and position
+           i_width = config_GetInt( p_intf, "beos-messages-width" ),
+           i_height = config_GetInt( p_intf, "beos-messages-height" ),
+           i_xpos = config_GetInt( p_intf, "beos-messages-xpos" ),
+           i_ypos = config_GetInt( p_intf, "beos-messages-ypos" );
+           if( i_width > 20 && i_height > 20 && i_xpos >= 0 && i_ypos >= 0 )
+           {
+               BRect r( i_xpos, i_ypos, i_xpos + i_width, i_ypos + i_height );
+               set_window_pos( fMessagesWindow, r );
+           }
+           // messages showing
+           launch_window( fMessagesWindow, config_GetInt( p_intf, "beos-messages-show" ) );
+
+               // messages window size and position
+           i_width = config_GetInt( p_intf, "beos-settings-width" ),
+           i_height = config_GetInt( p_intf, "beos-settings-height" ),
+           i_xpos = config_GetInt( p_intf, "beos-settings-xpos" ),
+           i_ypos = config_GetInt( p_intf, "beos-settings-ypos" );
+           if( i_width > 20 && i_height > 20 && i_xpos >= 0 && i_ypos >= 0 )
+           {
+               BRect r( i_xpos, i_ypos, i_xpos + i_width, i_ypos + i_height );
+               set_window_pos( fPreferencesWindow, r );
+           }
+           // settings showing
+           launch_window( fPreferencesWindow, config_GetInt( p_intf, "beos-settings-show" ) );
+       }
+       else
+       {
+               if ( load_settings( fSettings, "interface_settings", "VideoLAN Client" ) == B_OK )
+               {
+                       BRect frame;
+                       if ( fSettings->FindRect( "main frame", &frame ) == B_OK )
+                               set_window_pos( this, frame );
+                       if (fSettings->FindRect( "playlist frame", &frame ) == B_OK )
+                               set_window_pos( fPlaylistWindow, frame );
+                       if (fSettings->FindRect( "messages frame", &frame ) == B_OK )
+                               set_window_pos( fMessagesWindow, frame );
+                       if (fSettings->FindRect( "settings frame", &frame ) == B_OK )
+                               set_window_pos( fPreferencesWindow, frame );
+                       
+                       bool showing;
+                       if ( fSettings->FindBool( "playlist showing", &showing ) == B_OK )
+                               launch_window( fPlaylistWindow, showing );
+                       if ( fSettings->FindBool( "messages showing", &showing ) == B_OK )
+                               launch_window( fMessagesWindow, showing );
+                       if ( fSettings->FindBool( "settings showing", &showing ) == B_OK )
+                               launch_window( fPreferencesWindow, showing );
+       
+                       uint32 displayMode;
+                       if ( fSettings->FindInt32( "playlist display mode", (int32*)&displayMode ) == B_OK )
+                               fPlaylistWindow->SetDisplayMode( displayMode );
+               }
        }
 }
 
@@ -1108,38 +1045,85 @@ InterfaceWindow::_RestoreSettings()
 void
 InterfaceWindow::_StoreSettings()
 {
-       if ( fSettings->ReplaceRect( "main frame", Frame() ) != B_OK )
-               fSettings->AddRect( "main frame", Frame() );
-       if ( fPlaylistWindow->Lock() )
+       if ( USE_VLC_CONFIG_FILE )
        {
-               if (fSettings->ReplaceRect( "playlist frame", fPlaylistWindow->Frame() ) != B_OK)
-                       fSettings->AddRect( "playlist frame", fPlaylistWindow->Frame() );
-               if (fSettings->ReplaceBool( "playlist showing", !fPlaylistWindow->IsHidden() ) != B_OK)
-                       fSettings->AddBool( "playlist showing", !fPlaylistWindow->IsHidden() );
-               fPlaylistWindow->Unlock();
+           // save interface settings in vlc config file
+           BRect frame = Frame();
+           config_PutInt( p_intf, "beos-intf-width", (int)frame.Width() );
+           config_PutInt( p_intf, "beos-intf-height", (int)frame.Height() );
+           config_PutInt( p_intf, "beos-intf-xpos", (int)frame.left );
+           config_PutInt( p_intf, "beos-intf-ypos", (int)frame.top );
+           if( fPlaylistWindow->Lock() )
+           {
+               frame = fPlaylistWindow->Frame();
+               config_PutInt( p_intf, "beos-playlist-width", (int)frame.Width() );
+               config_PutInt( p_intf, "beos-playlist-height", (int)frame.Height() );
+               config_PutInt( p_intf, "beos-playlist-xpos", (int)frame.left );
+               config_PutInt( p_intf, "beos-playlist-ypos", (int)frame.top );
+               config_PutInt( p_intf, "beos-playlist-show", !fPlaylistWindow->IsHidden() );
+               fPlaylistWindow->Unlock();
+           }
+           if( fMessagesWindow->Lock() )
+           {
+               frame = fMessagesWindow->Frame();
+               config_PutInt( p_intf, "beos-messages-width", (int)frame.Width() );
+               config_PutInt( p_intf, "beos-messages-height", (int)frame.Height() );
+               config_PutInt( p_intf, "beos-messages-xpos", (int)frame.left );
+               config_PutInt( p_intf, "beos-messages-ypos", (int)frame.top );
+               config_PutInt( p_intf, "beos-messages-show", !fMessagesWindow->IsHidden() );
+               fMessagesWindow->Unlock();
+           }
+           if( fPreferencesWindow->Lock() )
+           {
+               frame = fPreferencesWindow->Frame();
+               config_PutInt( p_intf, "beos-messages-width", (int)frame.Width() );
+               config_PutInt( p_intf, "beos-messages-height", (int)frame.Height() );
+               config_PutInt( p_intf, "beos-messages-xpos", (int)frame.left );
+               config_PutInt( p_intf, "beos-messages-ypos", (int)frame.top );
+               config_PutInt( p_intf, "beos-messages-show", !fPreferencesWindow->IsHidden() );
+               fPreferencesWindow->Unlock();
+           }
        }
-       if ( fMessagesWindow->Lock() )
-       {
-               if (fSettings->ReplaceRect( "messages frame", fMessagesWindow->Frame() ) != B_OK)
-                       fSettings->AddRect( "messages frame", fMessagesWindow->Frame() );
-               if (fSettings->ReplaceBool( "messages showing", !fMessagesWindow->IsHidden() ) != B_OK)
-                       fSettings->AddBool( "messages showing", !fMessagesWindow->IsHidden() );
-               fMessagesWindow->Unlock();
-       }
-       if ( fPreferencesWindow->Lock() )
-       {
-               if (fSettings->ReplaceRect( "settings frame", fPreferencesWindow->Frame() ) != B_OK)
-                       fSettings->AddRect( "settings frame", fPreferencesWindow->Frame() );
-               if (fSettings->ReplaceBool( "settings showing", !fPreferencesWindow->IsHidden() ) != B_OK)
-                       fSettings->AddBool( "settings showing", !fPreferencesWindow->IsHidden() );
-               fPreferencesWindow->Unlock();
-       }
-
-       uint32 displayMode = fPlaylistWindow->DisplayMode();
-       if (fSettings->ReplaceInt32( "playlist display mode", displayMode ) != B_OK )
-               fSettings->AddInt32( "playlist display mode", displayMode );
+    else
+    {
+               if ( fSettings->ReplaceRect( "main frame", Frame() ) != B_OK )
+                       fSettings->AddRect( "main frame", Frame() );
+               if ( fPlaylistWindow->Lock() )
+               {
+                       if (fSettings->ReplaceRect( "playlist frame", fPlaylistWindow->Frame() ) != B_OK)
+                               fSettings->AddRect( "playlist frame", fPlaylistWindow->Frame() );
+                       if (fSettings->ReplaceBool( "playlist showing", !fPlaylistWindow->IsHidden() ) != B_OK)
+                               fSettings->AddBool( "playlist showing", !fPlaylistWindow->IsHidden() );
+                       fPlaylistWindow->Unlock();
+               }
+               if ( fMessagesWindow->Lock() )
+               {
+                       if (fSettings->ReplaceRect( "messages frame", fMessagesWindow->Frame() ) != B_OK)
+                               fSettings->AddRect( "messages frame", fMessagesWindow->Frame() );
+                       if (fSettings->ReplaceBool( "messages showing", !fMessagesWindow->IsHidden() ) != B_OK)
+                               fSettings->AddBool( "messages showing", !fMessagesWindow->IsHidden() );
+                       fMessagesWindow->Unlock();
+               }
+               if ( fPreferencesWindow->Lock() )
+               {
+                       if (fSettings->ReplaceRect( "settings frame", fPreferencesWindow->Frame() ) != B_OK)
+                               fSettings->AddRect( "settings frame", fPreferencesWindow->Frame() );
+                       if (fSettings->ReplaceBool( "settings showing", !fPreferencesWindow->IsHidden() ) != B_OK)
+                               fSettings->AddBool( "settings showing", !fPreferencesWindow->IsHidden() );
+                       fPreferencesWindow->Unlock();
+               }
+               uint32 displayMode = fPlaylistWindow->DisplayMode();
+               if (fSettings->ReplaceInt32( "playlist display mode", displayMode ) != B_OK )
+                       fSettings->AddInt32( "playlist display mode", displayMode );
+       
+               save_settings( fSettings, "interface_settings", "VideoLAN Client" );
+    }
 
-       save_settings( fSettings, "interface_settings", "VideoLAN Client" );
+       // save VLC internal settings
+       config_SaveConfigFile( p_intf, "beos" );
+       config_SaveConfigFile( p_intf, "main" );
+       config_SaveConfigFile( p_intf, "adjust" );
+       config_SaveConfigFile( p_intf, "ffmpeg" );
 }