Fixes for preventing multiple playlist windows
authorTony Castley <tcastley@videolan.org>
Sat, 1 Jun 2002 09:21:59 +0000 (09:21 +0000)
committerTony Castley <tcastley@videolan.org>
Sat, 1 Jun 2002 09:21:59 +0000 (09:21 +0000)
and improvements and corrections in videoout.

plugins/beos/InterfaceWindow.cpp
plugins/beos/vout_beos.cpp

index ef81529..572bd59 100644 (file)
@@ -2,7 +2,7 @@
  * InterfaceWindow.cpp: beos interface
  *****************************************************************************
  * Copyright (C) 1999, 2000, 2001 VideoLAN
- * $Id: InterfaceWindow.cpp,v 1.16 2002/05/16 11:38:42 tcastley Exp $
+ * $Id: InterfaceWindow.cpp,v 1.17 2002/06/01 09:21:59 tcastley Exp $
  *
  * Authors: Jean-Marc Dressler <polux@via.ecp.fr>
  *          Samuel Hocevar <sam@zoy.org>
@@ -53,8 +53,9 @@ extern "C"
 /* BeOS interface headers */
 #include "MsgVals.h"
 #include "MediaControlView.h"
-#include "InterfaceWindow.h"
 #include "PlayListWindow.h"
+#include "InterfaceWindow.h"
+
 
 /*****************************************************************************
  * InterfaceWindow
@@ -67,6 +68,7 @@ InterfaceWindow::InterfaceWindow( BRect frame, const char *name,
                 | B_ASYNCHRONOUS_CONTROLS )
 {
     file_panel = NULL;
+    playlist_window = NULL;
     p_intf = p_interface;
     BRect controlRect(0,0,0,0);
     b_empty_playlist = (p_main->p_playlist->i_size < 0);
@@ -149,6 +151,7 @@ InterfaceWindow::InterfaceWindow( BRect frame, const char *name,
 
 InterfaceWindow::~InterfaceWindow()
 {
+    if (playlist_window) playlist_window->ReallyQuit();
 }
 
 /*****************************************************************************
@@ -208,9 +211,9 @@ void InterfaceWindow::MessageReceived( BMessage * p_message )
        case OPEN_PLAYLIST:
                {
                    BRect rect(20,20,320,420);
-            PlayListWindow* playlist_window = new PlayListWindow(rect,
-                         "Playlist", (playlist_t *)p_main->p_playlist);
-            playlist_window->Show();
+            playlist_window = PlayListWindow::getPlayList(rect,
+                                "Playlist", (playlist_t *)p_main->p_playlist);
+            playlist_window->Show();                    
         }
                break;
     case OPEN_DVD:
index 709f851..c1c3c87 100644 (file)
@@ -2,7 +2,7 @@
  * vout_beos.cpp: beos video output display method
  *****************************************************************************
  * Copyright (C) 2000, 2001 VideoLAN
- * $Id: vout_beos.cpp,v 1.58 2002/05/30 08:17:04 gbazin Exp $
+ * $Id: vout_beos.cpp,v 1.59 2002/06/01 09:21:59 tcastley Exp $
  *
  * Authors: Jean-Marc Dressler <polux@via.ecp.fr>
  *          Samuel Hocevar <sam@zoy.org>
@@ -153,6 +153,11 @@ VideoWindow::~VideoWindow()
     delete bitmap[2];
 }
 
+bool VideoWindow::QuitRequested()
+{
+    return true;
+}
+
 void VideoWindow::drawBuffer(int bufferIndex)
 {
     status_t status;
@@ -178,7 +183,7 @@ void VideoWindow::drawBuffer(int bufferIndex)
                             &key, B_FOLLOW_ALL,
                                    B_OVERLAY_FILTER_HORIZONTAL|B_OVERLAY_FILTER_VERTICAL|
                                    B_OVERLAY_TRANSFER_CHANNEL);
-                  view->SetViewColor(key);
+                  //view->SetViewColor(key);
           }
        else
        {
@@ -284,7 +289,7 @@ int VideoWindow::SelectDrawingMode(int width, int height)
     {
         if (noOverlay) break;
         bitmap[0] = new BBitmap ( BRect( 0, 0, width, height ), 
-                                  B_BITMAP_WILL_OVERLAY|B_BITMAP_RESERVE_OVERLAY_CHANNEL,
+                                  B_BITMAP_WILL_OVERLAY,
                                   colspace[i].colspace);
 
         if(bitmap[0] && bitmap[0]->InitCheck() == B_OK) 
@@ -573,8 +578,8 @@ static int BeosOpenDisplay( vout_thread_t *p_vout )
     p_vout->p_sys->p_window = new VideoWindow( p_vout->p_sys->i_width - 1,
                                                p_vout->p_sys->i_height - 1,
                                                BRect( 20, 50,
-                                                      20 + p_vout->i_window_width -1, 
-                                                      50 + p_vout->i_window_height ));
+                                                      20 + p_vout->i_window_width - 1, 
+                                                      50 + p_vout->i_window_height - 1 ));
 
     if( p_vout->p_sys->p_window == NULL )
     {
@@ -602,6 +607,7 @@ static void BeosCloseDisplay( vout_thread_t *p_vout )
         p_win->Hide();
         p_win->Quit();
     }
+    p_win = NULL;
 }