X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Finterface%2Finterface.c;h=4e9a59169fae1b94bae2e4fa684e25080d25429b;hb=8ab353b1123d829cd0e335a36cc7dffb4ae83a19;hp=acf7640db9ca9dc48bbaa2b57b50d01b57a5fbba;hpb=e4ceccd32365e7199085f248fb09454d8e989054;p=vlc diff --git a/src/interface/interface.c b/src/interface/interface.c index acf7640db9..4e9a59169f 100644 --- a/src/interface/interface.c +++ b/src/interface/interface.c @@ -3,7 +3,7 @@ * This library provides basic functions for threads to interact with user * interface, such as command line. ***************************************************************************** - * Copyright (C) 1998-2004 VideoLAN + * Copyright (C) 1998-2004 the VideoLAN team * $Id$ * * Authors: Vincent Seguin @@ -20,7 +20,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ /** @@ -45,9 +45,9 @@ #include "vlc_video.h" #include "video_output.h" -#ifdef SYS_DARWIN -# include "Cocoa/Cocoa.h" -#endif /* SYS_DARWIN */ +#ifdef __APPLE__ +# include +#endif /***************************************************************************** * Local prototypes @@ -60,14 +60,17 @@ static int SwitchIntfCallback( vlc_object_t *, char const *, static int AddIntfCallback( vlc_object_t *, char const *, vlc_value_t , vlc_value_t , void * ); -#ifdef SYS_DARWIN +#ifdef __APPLE__ /***************************************************************************** * VLCApplication interface *****************************************************************************/ @interface VLCApplication : NSApplication { + vlc_t *o_vlc; } +- (void)setVLC: (vlc_t *)p_vlc; + @end #endif @@ -79,14 +82,19 @@ static int AddIntfCallback( vlc_object_t *, char const *, *****************************************************************************/ /** * Create the interface, and prepare it for main loop. + * You can give some additional options to be used for interface initialization * * \param p_this the calling vlc_object_t * \param psz_module a prefered interface module + * \param i_options number additional options + * \param ppsz_options additional option strings * \return a pointer to the created interface thread, NULL on error */ -intf_thread_t* __intf_Create( vlc_object_t *p_this, const char *psz_module ) +intf_thread_t* __intf_Create( vlc_object_t *p_this, const char *psz_module, + int i_options, char **ppsz_options ) { intf_thread_t * p_intf; + int i; /* Allocate structure */ p_intf = vlc_object_create( p_this, VLC_OBJECT_INTF ); @@ -99,13 +107,19 @@ intf_thread_t* __intf_Create( vlc_object_t *p_this, const char *psz_module ) p_intf->pf_release_window = NULL; p_intf->pf_control_window = NULL; p_intf->b_play = VLC_FALSE; + p_intf->b_interaction = VLC_FALSE; + + for( i = 0 ; i< i_options; i++ ) + { + var_OptionParse( p_intf, ppsz_options[i] ); + } /* Choose the best module */ p_intf->p_module = module_Need( p_intf, "interface", psz_module, 0 ); if( p_intf->p_module == NULL ) { - msg_Err( p_intf, "no suitable intf module" ); + msg_Err( p_intf, "no suitable interface module" ); vlc_object_destroy( p_intf ); return NULL; } @@ -117,8 +131,6 @@ intf_thread_t* __intf_Create( vlc_object_t *p_this, const char *psz_module ) /* Initialize mutexes */ vlc_mutex_init( p_intf, &p_intf->change_lock ); - msg_Dbg( p_intf, "interface initialized" ); - /* Attach interface to its parent object */ vlc_object_attach( p_intf, p_this ); @@ -141,14 +153,14 @@ intf_thread_t* __intf_Create( vlc_object_t *p_this, const char *psz_module ) */ int intf_RunThread( intf_thread_t *p_intf ) { -#ifdef SYS_DARWIN +#ifdef __APPLE__ NSAutoreleasePool * o_pool; if( p_intf->b_block ) { /* This is the primary intf */ /* Run a manager thread, launch the interface, kill the manager */ - if( vlc_thread_create( p_intf, "manager", Manager, + if( vlc_thread_create( p_intf, "manage", Manager, VLC_THREAD_PRIORITY_LOW, VLC_FALSE ) ) { msg_Err( p_intf, "cannot spawn manager thread" ); @@ -156,14 +168,17 @@ int intf_RunThread( intf_thread_t *p_intf ) } } - if( p_intf->b_block && strncmp( p_intf->p_module->psz_shortname, "clivlc", 6) ) + if( p_intf->b_block && strncmp( p_intf->p_vlc->psz_object_name, + "clivlc", 6) ) { o_pool = [[NSAutoreleasePool alloc] init]; - [VLCApplication sharedApplication]; + [VLCApplication sharedApplication]; + [NSApp setVLC: p_intf->p_vlc]; } - if( p_intf->b_block && ( !strncmp( p_intf->p_module->psz_shortname, "macosx" , 6 ) || - !strncmp( p_intf->p_vlc->psz_object_name, "clivlc", 6 ) ) ) + if( p_intf->b_block && + ( !strncmp( p_intf->p_module->psz_object_name, "macosx" , 6 ) || + !strncmp( p_intf->p_vlc->psz_object_name, "clivlc", 6 ) ) ) { /* VLC in normal primary interface mode */ RunInterface( p_intf ); @@ -172,6 +187,13 @@ int intf_RunThread( intf_thread_t *p_intf ) else { /* Run the interface in a separate thread */ + if( !strcmp( p_intf->p_module->psz_object_name, "macosx" ) ) + { + msg_Err( p_intf, "You cannot run the MacOS X module as an " + "extra interface. Please read the " + "README.MacOSX.rtf file."); + return VLC_EGENERIC; + } if( vlc_thread_create( p_intf, "interface", RunInterface, VLC_THREAD_PRIORITY_LOW, VLC_FALSE ) ) { @@ -288,7 +310,7 @@ static void Manager( intf_thread_t *p_intf ) if( p_intf->p_vlc->b_die ) { p_intf->b_die = VLC_TRUE; -#ifdef SYS_DARWIN +#ifdef __APPLE__ if( strncmp( p_intf->p_vlc->psz_object_name, "clivlc", 6 ) ) { [NSApp stop: NULL]; @@ -306,9 +328,8 @@ static void RunInterface( intf_thread_t *p_intf ) { static char *ppsz_interfaces[] = { - "skins", "Skins", "skins2", "Skins 2", - "wxwindows", "wxWindows", + "wxwidgets", "wxWidgets", NULL, NULL }; char **ppsz_parser; @@ -360,8 +381,6 @@ static void RunInterface( intf_thread_t *p_intf ) var_Change( p_intf, "intf-add", VLC_VAR_ADDCHOICE, &val, &text ); val.psz_string = "logger"; text.psz_string = "Debug logging"; var_Change( p_intf, "intf-add", VLC_VAR_ADDCHOICE, &val, &text ); - val.psz_string = "sap"; text.psz_string = "SAP Playlist"; - var_Change( p_intf, "intf-add", VLC_VAR_ADDCHOICE, &val, &text ); val.psz_string = "gestures"; text.psz_string = "Mouse Gestures"; var_Change( p_intf, "intf-add", VLC_VAR_ADDCHOICE, &val, &text ); @@ -419,7 +438,7 @@ static int AddIntfCallback( vlc_object_t *p_this, char const *psz_cmd, /* Try to create the interface */ sprintf( psz_intf, "%s,none", newval.psz_string ); - p_intf = intf_Create( p_this->p_vlc, psz_intf ); + p_intf = intf_Create( p_this->p_vlc, psz_intf, 0, NULL ); free( psz_intf ); if( p_intf == NULL ) { @@ -440,12 +459,17 @@ static int AddIntfCallback( vlc_object_t *p_this, char const *psz_cmd, return VLC_SUCCESS; } -#ifdef SYS_DARWIN +#ifdef __APPLE__ /***************************************************************************** * VLCApplication implementation *****************************************************************************/ @implementation VLCApplication +- (void)setVLC: (vlc_t *) p_vlc +{ + o_vlc = p_vlc; +} + - (void)stop: (id)sender { NSEvent *o_event; @@ -465,9 +489,7 @@ static int AddIntfCallback( vlc_object_t *p_this, char const *psz_cmd, - (void)terminate: (id)sender { - if( [NSApp isRunning] ) - [NSApp stop:sender]; - [super terminate: sender]; + o_vlc->b_die = VLC_TRUE; } @end