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 @@
* skin_common.h: Private Skin interface description
*****************************************************************************
* 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>
* Emmanuel Puig <karibu@via.ecp.fr>
......@@ -38,6 +38,9 @@ class Messages;
class SoutDialog;
class PrefsDialog;
class FileInfo;
#ifdef WIN32
class ExitTimer;
#endif
#ifdef X11_SKINS
#include <X11/Xlib.h>
......@@ -86,6 +89,11 @@ struct intf_sys_t
Display *display;
#endif
#ifdef WIN32
bool b_wx_die;
ExitTimer *p_kludgy_timer;
#endif
};
#endif
......
......@@ -2,7 +2,7 @@
* win32_run.cpp:
*****************************************************************************
* 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>
* Emmanuel Puig <karibu@via.ecp.fr>
......@@ -65,12 +65,24 @@ public:
Instance( intf_thread_t *_p_intf );
bool OnInit();
int OnExit();
OpenDialog *open;
private:
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
......@@ -90,12 +102,20 @@ IMPLEMENT_APP_NO_MAIN(Instance)
bool Instance::OnInit()
{
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->MessagesDlg = new Messages( 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->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_cond_signal( &p_intf->p_sys->init_cond );
vlc_mutex_unlock( &p_intf->p_sys->init_lock );
......@@ -103,6 +123,37 @@ bool Instance::OnInit()
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 )
......@@ -171,9 +222,9 @@ void OSRun( intf_thread_t *p_intf )
// Don't even enter the main loop
return;
}
// 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_mutex_unlock( &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_mutex_unlock( &p_intf->p_sys->init_lock );
// Create refresh timer
SetTimer( ((OSTheme *)p_intf->p_sys->p_theme)->GetParentWindow(), 42, 200,
......@@ -287,6 +338,9 @@ void OSRun( intf_thread_t *p_intf )
// Check if vlc is closing
Proc->IsClosing();
}
// Tell wxWindows it's time to exit
p_intf->p_sys->b_wx_die = 1;
}
//---------------------------------------------------------------------------
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