Commit 8229bf31 authored by Olivier Teulière's avatar Olivier Teulière

* modules/gui/skins/win32/win32_run.cpp: clean exit of wxWindows thread

parent 772985d3
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* skin_common.h: Private Skin interface description * skin_common.h: Private Skin interface description
***************************************************************************** *****************************************************************************
* Copyright (C) 2003 VideoLAN * Copyright (C) 2003 VideoLAN
* $Id: skin_common.h,v 1.6 2003/04/28 14:12:33 asmax Exp $ * $Id: skin_common.h,v 1.7 2003/04/28 22:44:26 ipkiss Exp $
* *
* Authors: Olivier Teulire <ipkiss@via.ecp.fr> * Authors: Olivier Teulire <ipkiss@via.ecp.fr>
* Emmanuel Puig <karibu@via.ecp.fr> * Emmanuel Puig <karibu@via.ecp.fr>
...@@ -38,6 +38,9 @@ class Messages; ...@@ -38,6 +38,9 @@ class Messages;
class SoutDialog; class SoutDialog;
class PrefsDialog; class PrefsDialog;
class FileInfo; class FileInfo;
#ifdef WIN32
class ExitTimer;
#endif
#ifdef X11_SKINS #ifdef X11_SKINS
#include <X11/Xlib.h> #include <X11/Xlib.h>
...@@ -86,6 +89,11 @@ struct intf_sys_t ...@@ -86,6 +89,11 @@ struct intf_sys_t
Display *display; Display *display;
#endif #endif
#ifdef WIN32
bool b_wx_die;
ExitTimer *p_kludgy_timer;
#endif
}; };
#endif #endif
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* win32_run.cpp: * win32_run.cpp:
***************************************************************************** *****************************************************************************
* Copyright (C) 2003 VideoLAN * Copyright (C) 2003 VideoLAN
* $Id: win32_run.cpp,v 1.10 2003/04/28 00:18:27 ipkiss Exp $ * $Id: win32_run.cpp,v 1.11 2003/04/28 22:44:26 ipkiss Exp $
* *
* Authors: Olivier Teulire <ipkiss@via.ecp.fr> * Authors: Olivier Teulire <ipkiss@via.ecp.fr>
* Emmanuel Puig <karibu@via.ecp.fr> * Emmanuel Puig <karibu@via.ecp.fr>
...@@ -65,12 +65,24 @@ public: ...@@ -65,12 +65,24 @@ public:
Instance( intf_thread_t *_p_intf ); Instance( intf_thread_t *_p_intf );
bool OnInit(); bool OnInit();
int OnExit();
OpenDialog *open; OpenDialog *open;
private: private:
intf_thread_t *p_intf; intf_thread_t *p_intf;
}; };
class ExitTimer: public wxTimer
{
public:
ExitTimer( intf_thread_t *_p_intf );
void Notify();
private:
intf_thread_t *p_intf;
};
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// Implementation of Instance class // Implementation of Instance class
...@@ -90,12 +102,20 @@ IMPLEMENT_APP_NO_MAIN(Instance) ...@@ -90,12 +102,20 @@ IMPLEMENT_APP_NO_MAIN(Instance)
bool Instance::OnInit() bool Instance::OnInit()
{ {
p_intf->p_sys->p_icon = new wxIcon( vlc_xpm ); p_intf->p_sys->p_icon = new wxIcon( vlc_xpm );
// Create all the dialog boxes
p_intf->p_sys->OpenDlg = new OpenDialog( p_intf, NULL, FILE_ACCESS ); p_intf->p_sys->OpenDlg = new OpenDialog( p_intf, NULL, FILE_ACCESS );
p_intf->p_sys->MessagesDlg = new Messages( p_intf, NULL ); p_intf->p_sys->MessagesDlg = new Messages( p_intf, NULL );
p_intf->p_sys->SoutDlg = new SoutDialog( p_intf, NULL ); p_intf->p_sys->SoutDlg = new SoutDialog( p_intf, NULL );
p_intf->p_sys->PrefsDlg = new PrefsDialog( p_intf, NULL ); p_intf->p_sys->PrefsDlg = new PrefsDialog( p_intf, NULL );
p_intf->p_sys->InfoDlg = new FileInfo( p_intf, NULL ); p_intf->p_sys->InfoDlg = new FileInfo( p_intf, NULL );
// Start a timer checking if we must exit the main loop
p_intf->p_sys->b_wx_die = 0;
p_intf->p_sys->p_kludgy_timer = new ExitTimer( p_intf );
p_intf->p_sys->p_kludgy_timer->Start( 100 );
// OK, initialization is over, now the other thread can go on working...
vlc_mutex_lock( &p_intf->p_sys->init_lock ); vlc_mutex_lock( &p_intf->p_sys->init_lock );
vlc_cond_signal( &p_intf->p_sys->init_cond ); vlc_cond_signal( &p_intf->p_sys->init_cond );
vlc_mutex_unlock( &p_intf->p_sys->init_lock ); vlc_mutex_unlock( &p_intf->p_sys->init_lock );
...@@ -103,6 +123,37 @@ bool Instance::OnInit() ...@@ -103,6 +123,37 @@ bool Instance::OnInit()
return TRUE; return TRUE;
} }
int Instance::OnExit()
{
// Delete evertything
delete p_intf->p_sys->p_kludgy_timer;
delete p_intf->p_sys->InfoDlg;
delete p_intf->p_sys->PrefsDlg;
delete p_intf->p_sys->SoutDlg;
delete p_intf->p_sys->MessagesDlg;
delete p_intf->p_sys->OpenDlg;
delete p_intf->p_sys->p_icon;
return 0;
}
//---------------------------------------------------------------------------
// Implementation of ExitTimer class
// This timer is only there to call wxApp::ExitMainLoop() from the wxWindows
// thread (otherwise we never exit from the wxEntry call).
//---------------------------------------------------------------------------
ExitTimer::ExitTimer( intf_thread_t *_p_intf ) : wxTimer()
{
p_intf = _p_intf;
}
void ExitTimer::Notify()
{
if( p_intf->p_sys->b_wx_die )
wxTheApp->ExitMainLoop();
}
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
#if !defined(__BUILTIN__) && defined( WIN32 ) #if !defined(__BUILTIN__) && defined( WIN32 )
...@@ -171,9 +222,9 @@ void OSRun( intf_thread_t *p_intf ) ...@@ -171,9 +222,9 @@ void OSRun( intf_thread_t *p_intf )
// Don't even enter the main loop // Don't even enter the main loop
return; return;
} }
// vlc_mutex_lock( &p_intf->p_sys->init_lock ); vlc_mutex_lock( &p_intf->p_sys->init_lock );
// vlc_cond_wait( &p_intf->p_sys->init_cond, &p_intf->p_sys->init_lock ); vlc_cond_wait( &p_intf->p_sys->init_cond, &p_intf->p_sys->init_lock );
// vlc_mutex_unlock( &p_intf->p_sys->init_lock ); vlc_mutex_unlock( &p_intf->p_sys->init_lock );
// Create refresh timer // Create refresh timer
SetTimer( ((OSTheme *)p_intf->p_sys->p_theme)->GetParentWindow(), 42, 200, SetTimer( ((OSTheme *)p_intf->p_sys->p_theme)->GetParentWindow(), 42, 200,
...@@ -287,6 +338,9 @@ void OSRun( intf_thread_t *p_intf ) ...@@ -287,6 +338,9 @@ void OSRun( intf_thread_t *p_intf )
// Check if vlc is closing // Check if vlc is closing
Proc->IsClosing(); Proc->IsClosing();
} }
// Tell wxWindows it's time to exit
p_intf->p_sys->b_wx_die = 1;
} }
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
bool IsVLCEvent( unsigned int msg ) bool IsVLCEvent( unsigned int msg )
......
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