* 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.13 2003/04/30 19:22:27 ipkiss Exp $
*
* Authors: Olivier Teulière <ipkiss@via.ecp.fr>
* Emmanuel Puig <karibu@via.ecp.fr>
#ifdef WIN32
//--- GENERAL ---------------------------------------------------------------
+#ifndef BASIC_SKINS
#include <wx/wx.h>
+#endif
#include <windows.h>
//--- VLC -------------------------------------------------------------------
#include "../os_theme.h"
#include "../src/skin_common.h"
#include "../src/vlcproc.h"
-#include "../src/wxdialogs.h"
-// include the icon graphic
-#include "share/vlc32x32.xpm"
+#ifndef BASIC_SKINS
+#include "../src/wxdialogs.h"
+#include "share/vlc32x32.xpm" // include the graphic icon
+#endif
//---------------------------------------------------------------------------
// Specific method
int SkinManage( intf_thread_t *p_intf );
+#ifndef BASIC_SKINS
//---------------------------------------------------------------------------
// Local classes declarations.
//---------------------------------------------------------------------------
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
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 );
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 )
return;
}
+#endif // WX_SKINS
//---------------------------------------------------------------------------
// Refresh Timer Callback
Event *ProcessEvent;
int KeyModifier = 0;
+#ifndef BASIC_SKINS
// Create a new thread for wxWindows
if( vlc_thread_create( p_intf, "Skins Dialogs Thread", SkinsDialogsThread,
- 0, 0 ) ) {
+ 0, 0 ) )
+ {
msg_Err( p_intf, "cannot create SkinsDialogsThread" );
// 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 );
+#endif
// Create refresh timer
SetTimer( ((OSTheme *)p_intf->p_sys->p_theme)->GetParentWindow(), 42, 200,
// Check if vlc is closing
Proc->IsClosing();
}
+
+#ifndef BASIC_SKINS
+ // Tell wxWindows it's time to exit
+ p_intf->p_sys->b_wx_die = 1;
+#endif
}
//---------------------------------------------------------------------------
bool IsVLCEvent( unsigned int msg )