Commit 71ea4eb9 authored by Eric Petit's avatar Eric Petit

Move the messages update function to another thread. It prevents it from

 freezing the main window (cannot seek anymore, etc).
parent 2d68f9c1
......@@ -2,7 +2,7 @@
* InterfaceWindow.cpp: beos interface
*****************************************************************************
* Copyright (C) 1999, 2000, 2001 VideoLAN
* $Id: InterfaceWindow.cpp,v 1.29 2003/02/09 17:10:52 stippi Exp $
* $Id: InterfaceWindow.cpp,v 1.30 2003/02/10 15:23:46 titer Exp $
*
* Authors: Jean-Marc Dressler <polux@via.ecp.fr>
* Samuel Hocevar <sam@zoy.org>
......@@ -791,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();
}
......
......@@ -2,7 +2,7 @@
* InterfaceWindow.h: BeOS interface window class prototype
*****************************************************************************
* Copyright (C) 1999, 2000, 2001 VideoLAN
* $Id: InterfaceWindow.h,v 1.12 2003/02/09 17:10:52 stippi Exp $
* $Id: InterfaceWindow.h,v 1.13 2003/02/10 15:23:46 titer Exp $
*
* Authors: Jean-Marc Dressler <polux@via.ecp.fr>
* Tony Castley <tcastley@mail.powerup.com.au>
......@@ -106,6 +106,7 @@ class InterfaceWindow : public BWindow
bool IsStopped() const;
MediaControlView* p_mediaControl;
MessagesWindow* fMessagesWindow;
private:
void _UpdatePlaylist();
......@@ -126,7 +127,6 @@ class InterfaceWindow : public BWindow
BFilePanel* fFilePanel;
PlayListWindow* fPlaylistWindow;
PreferencesWindow* fPreferencesWindow;
MessagesWindow* fMessagesWindow;
BMenuBar* fMenuBar;
BMenuItem* fGotoMenuMI;
BMenuItem* fNextTitleMI;
......
......@@ -2,7 +2,7 @@
* MessagesWindow.cpp: beos interface
*****************************************************************************
* Copyright (C) 1999, 2000, 2001 VideoLAN
* $Id: MessagesWindow.cpp,v 1.6 2003/02/01 12:01:11 stippi Exp $
* $Id: MessagesWindow.cpp,v 1.7 2003/02/10 15:23:46 titer Exp $
*
* Authors: Eric Petit <titer@videolan.org>
*
......@@ -31,8 +31,11 @@
/* BeOS module headers */
#include "VlcWrapper.h"
#include "InterfaceWindow.h"
#include "MessagesWindow.h"
static int UpdateMessages( intf_thread_t * p_intf );
/*****************************************************************************
* MessagesWindow::MessagesWindow
*****************************************************************************/
......@@ -42,7 +45,6 @@ MessagesWindow::MessagesWindow( intf_thread_t * p_intf,
B_NOT_ZOOMABLE )
{
this->p_intf = p_intf;
p_sub = p_intf->p_sys->p_sub;
BRect rect, textRect;
......@@ -62,6 +64,13 @@ MessagesWindow::MessagesWindow( intf_thread_t * p_intf,
/* start window thread in hidden state */
Hide();
Show();
/* update it */
if( vlc_thread_create( p_intf, "update messages", UpdateMessages,
VLC_THREAD_PRIORITY_LOW, VLC_FALSE ) )
{
msg_Err( p_intf, "cannot create update messages thread" );
}
}
/*****************************************************************************
......@@ -69,6 +78,7 @@ MessagesWindow::MessagesWindow( intf_thread_t * p_intf,
*****************************************************************************/
MessagesWindow::~MessagesWindow()
{
vlc_thread_join( p_intf );
}
/*****************************************************************************
......@@ -101,10 +111,21 @@ void MessagesWindow::ReallyQuit()
}
/*****************************************************************************
* MessagesWindow::UpdateMessages
* UpdateMessages
*****************************************************************************/
void MessagesWindow::UpdateMessages()
static int UpdateMessages( intf_thread_t * p_intf )
{
/* workaround: wait a bit or it'll crash */
msleep( 500000 );
intf_sys_t * p_sys = (intf_sys_t*)p_intf->p_sys;
msg_subscription_t * p_sub = p_sys->p_sub;
MessagesWindow * messagesWindow = p_sys->p_window->fMessagesWindow;
BTextView * messagesView = messagesWindow->fMessagesView;
BScrollBar * scrollBar = messagesWindow->fScrollBar;
while( !p_intf->b_die )
{
int i_start, oldLength;
char * psz_module_type = NULL;
rgb_color red = { 200, 0, 0 };
......@@ -147,27 +168,27 @@ void MessagesWindow::UpdateMessages()
case VLC_OBJECT_SOUT: psz_module_type = "stream output"; break;
}
if ( fMessagesView->LockLooper() )
if ( messagesView->LockLooper() )
{
oldLength = fMessagesView->TextLength();
oldLength = messagesView->TextLength();
BString string;
string << p_sub->p_msg[i_start].psz_module << " " << psz_module_type << " : " <<
p_sub->p_msg[i_start].psz_msg << "\n";
fMessagesView->Insert( string.String() );
fMessagesView->SetFontAndColor( oldLength,
fMessagesView->TextLength(),
messagesView->Insert( string.String() );
messagesView->SetFontAndColor( oldLength,
messagesView->TextLength(),
NULL, 0, &color );
fMessagesView->Draw( fMessagesView->Bounds() );
fMessagesView->UnlockLooper();
messagesView->Draw( messagesView->Bounds() );
messagesView->UnlockLooper();
}
/* Scroll at the end */
if( fScrollBar->LockLooper() )
if( scrollBar->LockLooper() )
{
float min, max;
fScrollBar->GetRange( &min, &max );
fScrollBar->SetValue( max );
fScrollBar->UnlockLooper();
scrollBar->GetRange( &min, &max );
scrollBar->SetValue( max );
scrollBar->UnlockLooper();
}
}
......@@ -175,4 +196,8 @@ void MessagesWindow::UpdateMessages()
p_sub->i_start = i_start;
vlc_mutex_unlock( p_sub->p_lock );
}
/* Wait a bit */
msleep( INTF_IDLE_SLEEP );
}
return 0;
}
......@@ -2,7 +2,7 @@
* MessagesWindow.h
*****************************************************************************
* Copyright (C) 1999, 2000, 2001 VideoLAN
* $Id: MessagesWindow.h,v 1.2 2003/01/26 08:28:20 titer Exp $
* $Id: MessagesWindow.h,v 1.3 2003/02/10 15:23:46 titer Exp $
*
* Authors: Eric Petit <titer@videolan.org>
*
......@@ -36,11 +36,8 @@ class MessagesWindow : public BWindow
virtual bool QuitRequested();
void ReallyQuit();
void UpdateMessages();
private:
intf_thread_t * p_intf;
msg_subscription_t * p_sub;
BView * fBackgroundView;
BTextView * fMessagesView;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment