]> git.sesse.net Git - vlc/blobdiff - modules/gui/macosx/intf.m
Remove PLAYLIST_AUTOPLAY and use PLAYLIST_PLAY instead. Fix #1477
[vlc] / modules / gui / macosx / intf.m
index 029a4d6715a0d7467facf4b8f5702aea6ce938aa..9d87106c8d9b9b008988e7e04c6227c889c4b076 100644 (file)
 #include <string.h>
 #include <vlc_keys.h>
 
+#ifdef HAVE_CONFIG_H
+#   include "config.h"
+#endif
+
 #import "intf.h"
 #import "fspanel.h"
 #import "vout.h"
@@ -49,6 +53,7 @@
 #import "update.h"
 #import "AppleRemote.h"
 #import "eyetv.h"
+#import "simple_prefs.h"
 
 #import <vlc_input.h>
 
@@ -123,6 +128,27 @@ void E_(CloseIntf) ( vlc_object_t *p_this )
     free( p_intf->p_sys );
 }
 
+/*****************************************************************************
+ * KillerThread: Thread that kill the application
+ *****************************************************************************/
+static void * KillerThread( void *user_data )
+{
+    NSAutoreleasePool * o_pool = [[NSAutoreleasePool alloc] init];
+
+    intf_thread_t *p_intf = user_data;
+    
+    vlc_object_lock ( p_intf );
+    while( vlc_object_alive( p_intf ) )
+        vlc_object_wait( p_intf );
+    vlc_object_unlock( p_intf );
+
+    msg_Dbg( p_intf, "Killing the Mac OS X module\n" );
+
+    /* We are dead, terminate */
+    [NSApp terminate: nil];
+    [o_pool release];
+    return NULL;
+}
 /*****************************************************************************
  * Run: main loop
  *****************************************************************************/
@@ -156,6 +182,10 @@ static void Run( intf_thread_t *p_intf )
     [[VLCMain sharedInstance] setIntf: p_intf];
     [NSBundle loadNibNamed: @"MainMenu" owner: NSApp];
 
+    /* Setup a thread that will monitor the module killing */
+    pthread_t killer_thread;
+    pthread_create( &killer_thread, NULL, KillerThread, p_intf );
+
     /* Install a jmpbuffer to where we can go back before the NSApp exit
      * see applicationWillTerminate: */
     if(setjmp(jmpbuffer) == 0)
@@ -385,7 +415,7 @@ static VLCMain *_o_sharedMainInstance = nil;
     }
 
     o_about = [[VLAboutBox alloc] init];
-    o_prefs = nil;
+    o_prefs = [[VLCPrefs alloc] init];
     o_open = [[VLCOpen alloc] init];
     o_wizard = [[VLCWizard alloc] init];
     o_extended = nil;
@@ -394,7 +424,7 @@ static VLCMain *_o_sharedMainInstance = nil;
     o_interaction_list = [[VLCInteractionList alloc] init];
     o_sfilters = nil;
 #ifdef UPDATE_CHECK
-    //FIXME o_update = [[VLCUpdate alloc] init];
+    o_update = [[VLCUpdate alloc] init];
 #endif
 
     i_lastShownVolume = -1;
@@ -523,7 +553,7 @@ static VLCMain *_o_sharedMainInstance = nil;
     /* Check if we need to start playing */
     if( p_intf->b_play )
     {
-        playlist_Control( p_playlist, PLAYLIST_AUTOPLAY, VLC_FALSE );
+        playlist_Control( p_playlist, PLAYLIST_PLAY, VLC_FALSE );
     }
     var_Create( p_playlist, "fullscreen", VLC_VAR_BOOL | VLC_VAR_DOINHERIT);
     val.b_bool = VLC_FALSE;
@@ -808,7 +838,7 @@ static VLCMain *_o_sharedMainInstance = nil;
     {
         o_str = [[[NSString alloc] initWithUTF8String: psz] autorelease];
 
-        if ( o_str == NULL )
+        if( o_str == NULL )
         {
             msg_Err( VLCIntf, "could not translate: %s", psz );
             return( @"" );
@@ -826,7 +856,7 @@ static VLCMain *_o_sharedMainInstance = nil;
 /* When user click in the Dock icon our double click in the finder */
 - (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)hasVisibleWindows
 {    
-    if (!hasVisibleWindows)
+    if(!hasVisibleWindows)
         [o_window makeKeyAndOrderFront:self];
 
     return YES;
@@ -836,12 +866,11 @@ static VLCMain *_o_sharedMainInstance = nil;
 {
 #ifdef UPDATE_CHECK
     /* Check for update silently on startup */
-    if ( !nib_update_loaded )
+    if( !nib_update_loaded )
         nib_update_loaded = [NSBundle loadNibNamed:@"Update" owner:self];
 
-    // FIXME
-    //if([o_update shouldCheckForUpdate])
-    //    [NSThread detachNewThreadSelector:@selector(checkForUpdate) toTarget:o_update withObject:NULL];
+    if([o_update shouldCheckForUpdate])
+        [NSThread detachNewThreadSelector:@selector(checkForUpdate) toTarget:o_update withObject:NULL];
 #endif
 
     /* Handle sleep notification */
@@ -864,7 +893,7 @@ static VLCMain *_o_sharedMainInstance = nil;
 - (void)computerWillSleep: (NSNotification *)notification
 {
     /* Pause */
-    if ( p_intf->p_sys->i_play_status == PLAYING_S )
+    if( p_intf->p_sys->i_play_status == PLAYING_S )
     {
         vlc_value_t val;
         val.i_int = config_GetInt( p_intf, "key-play-pause" );
@@ -876,7 +905,7 @@ static VLCMain *_o_sharedMainInstance = nil;
    increase/decrease as long as the user holds the left/right, plus/minus button */
 - (void) executeHoldActionForRemoteButton: (NSNumber*) buttonIdentifierNumber
 {
-    if (b_remote_button_hold)
+    if(b_remote_button_hold)
     {
         switch([buttonIdentifierNumber intValue])
         {
@@ -893,7 +922,7 @@ static VLCMain *_o_sharedMainInstance = nil;
                 [o_controls volumeDown: self];
             break;
         }
-        if (b_remote_button_hold)
+        if(b_remote_button_hold)
         {
             /* trigger event */
             [self performSelector:@selector(executeHoldActionForRemoteButton:)
@@ -911,7 +940,7 @@ static VLCMain *_o_sharedMainInstance = nil;
     switch( buttonIdentifier )
     {
         case kRemoteButtonPlay:
-            if (count >= 2) {
+            if(count >= 2) {
                 [o_controls toogleFullscreen:self];
             } else {
                 [o_controls play: self];
@@ -957,7 +986,7 @@ static VLCMain *_o_sharedMainInstance = nil;
                           allowLossyConversion: NO];
     char * psz_string;
 
-    if ( o_data == nil )
+    if( o_data == nil )
     {
         o_data = [id dataUsingEncoding: NSUTF8StringEncoding
                      allowLossyConversion: YES];
@@ -1007,7 +1036,7 @@ static VLCMain *_o_sharedMainInstance = nil;
                                             effectiveRange: &effectiveRange];
         charRange = [o_layout_manager characterRangeForGlyphRange: effectiveRange
                                     actualGlyphRange: &effectiveRange];
-        if ([o_wrapped lineRangeForRange:
+        if([o_wrapped lineRangeForRange:
                 NSMakeRange(charRange.location + breaksInserted, charRange.length)].length > charRange.length) {
             [o_wrapped insertString: @"\n" atIndex: NSMaxRange(charRange) + breaksInserted];
             breaksInserted++;
@@ -1081,62 +1110,79 @@ static VLCMain *_o_sharedMainInstance = nil;
 
 - (id)getControls
 {
-    if ( o_controls )
-    {
+    if( o_controls )
         return o_controls;
-    }
+
     return nil;
 }
 
+- (id)getSimplePreferences
+{
+    if( !o_sprefs )
+        return nil;
+
+    if( !nib_prefs_loaded )
+        nib_prefs_loaded = [NSBundle loadNibNamed:@"Preferences" owner: self];
+
+    return o_sprefs;
+}
+
+- (id)getPreferences
+{
+    if( !o_prefs )
+        return nil;
+
+    if( !nib_prefs_loaded )
+        nib_prefs_loaded = [NSBundle loadNibNamed:@"Preferences" owner: self];
+
+    return o_prefs;
+}
+
 - (id)getPlaylist
 {
     if( o_playlist )
         return o_playlist;
+
     return nil;
 }
 
 - (id)getInfo
 {
-    if ( o_info )
-    {
+    if( o_info )
         return o_info;
-    }
+
     return nil;
 }
 
 - (id)getWizard
 {
-    if ( o_wizard )
-    {
+    if( o_wizard )
         return o_wizard;
-    }
+
     return nil;
 }
 
 - (id)getBookmarks
 {
-    if ( o_bookmarks )
-    {
+    if( o_bookmarks )
         return o_bookmarks;
-    }
+
     return nil;
 }
 
 - (id)getEmbeddedList
 {
     if( o_embedded_list )
-    {
         return o_embedded_list;
-    }
+
     return nil;
 }
 
 - (id)getInteractionList
 {
     if( o_interaction_list )
-    {
         return o_interaction_list;
-    }
+
     return nil;
 }
 
@@ -1145,7 +1191,6 @@ static VLCMain *_o_sharedMainInstance = nil;
     if( o_main_pgbar )
         return o_main_pgbar;
 
-    msg_Err( p_intf, "main interface progress bar item wasn't found" );
     return nil;
 }
 
@@ -1165,6 +1210,7 @@ static VLCMain *_o_sharedMainInstance = nil;
 {
     if( o_eyetv )
         return o_eyetv;
+
     return nil;
 }
 
@@ -1328,8 +1374,12 @@ static VLCMain *_o_sharedMainInstance = nil;
                 vlc_object_release( p_playlist );
                 return;
             }
-            o_temp = [NSString stringWithUTF8String:
-                p_playlist->status.p_item->p_input->psz_name];
+            if( input_item_GetNowPlaying ( p_playlist->status.p_item->p_input ) )
+                o_temp = [NSString stringWithUTF8String: 
+                    input_item_GetNowPlaying ( p_playlist->status.p_item->p_input )];
+            else
+                o_temp = [NSString stringWithUTF8String:
+                    p_playlist->status.p_item->p_input->psz_name];
             [self setScrollField: o_temp stopAfter:-1];
             [[[self getControls] getFSPanel] setStreamTitle: o_temp];
 
@@ -1433,7 +1483,7 @@ static VLCMain *_o_sharedMainInstance = nil;
 
         aout_instance_t * p_aout = vlc_object_find( p_intf, VLC_OBJECT_AOUT,
                                                     FIND_ANYWHERE );
-        if ( p_aout != NULL )
+        if( p_aout != NULL )
         {
             [o_controls setupVarMenuItem: o_mi_channels target: (vlc_object_t *)p_aout
                 var: "audio-channels" selector: @selector(toggleVar:)];
@@ -1449,7 +1499,7 @@ static VLCMain *_o_sharedMainInstance = nil;
         vout_thread_t * p_vout = vlc_object_find( p_intf, VLC_OBJECT_VOUT,
                                                             FIND_ANYWHERE );
 
-        if ( p_vout != NULL )
+        if( p_vout != NULL )
         {
             vlc_object_t * p_dec_obj;
 
@@ -1469,7 +1519,7 @@ static VLCMain *_o_sharedMainInstance = nil;
                                                  (vlc_object_t *)p_vout,
                                                  VLC_OBJECT_DECODER,
                                                  FIND_PARENT );
-            if ( p_dec_obj != NULL )
+            if( p_dec_obj != NULL )
             {
                [o_controls setupVarMenuItem: o_mi_ffmpeg_pp target:
                     (vlc_object_t *)p_dec_obj var:"ffmpeg-pp-q" selector:
@@ -1530,8 +1580,12 @@ static VLCMain *_o_sharedMainInstance = nil;
     {
         NSString *o_temp;
         vlc_object_yield( p_input );
-        o_temp = [NSString stringWithUTF8String:
-                  p_playlist->status.p_item->p_input->psz_name];
+        if( input_item_GetNowPlaying ( p_playlist->status.p_item->p_input ) )
+            o_temp = [NSString stringWithUTF8String: 
+                input_item_GetNowPlaying ( p_playlist->status.p_item->p_input )];
+        else
+            o_temp = [NSString stringWithUTF8String:
+                p_playlist->status.p_item->p_input->psz_name];
         [self setScrollField: o_temp stopAfter:-1];
         vlc_object_release( p_input );
         vlc_object_release( p_playlist );
@@ -1721,7 +1775,7 @@ static VLCMain *_o_sharedMainInstance = nil;
                  returnedValue );
 
     /* save the prefs if they were changed in the extended panel */
-    if (o_extended && [o_extended getConfigChanged])
+    if(o_extended && [o_extended getConfigChanged])
     {
         [o_extended savePrefs];
     }
@@ -1737,7 +1791,10 @@ static VLCMain *_o_sharedMainInstance = nil;
     
     if( nib_about_loaded && o_about )
         [o_about release];
+    
+    if( nib_prefs_loaded && o_prefs )
+        [o_prefs release];
+    
     if( nib_open_loaded && o_open )
         [o_open release];
  
@@ -1823,7 +1880,7 @@ static VLCMain *_o_sharedMainInstance = nil;
 
 - (IBAction)intfOpenFile:(id)sender
 {
-    if ( !nib_open_loaded )
+    if( !nib_open_loaded )
     {
         nib_open_loaded = [NSBundle loadNibNamed:@"Open" owner:self];
         [o_open awakeFromNib];
@@ -1835,7 +1892,7 @@ static VLCMain *_o_sharedMainInstance = nil;
 
 - (IBAction)intfOpenFileGeneric:(id)sender
 {
-    if ( !nib_open_loaded )
+    if( !nib_open_loaded )
     {
         nib_open_loaded = [NSBundle loadNibNamed:@"Open" owner:self];
         [o_open awakeFromNib];
@@ -1847,7 +1904,7 @@ static VLCMain *_o_sharedMainInstance = nil;
 
 - (IBAction)intfOpenDisc:(id)sender
 {
-    if ( !nib_open_loaded )
+    if( !nib_open_loaded )
     {
         nib_open_loaded = [NSBundle loadNibNamed:@"Open" owner:self];
         [o_open awakeFromNib];
@@ -1859,7 +1916,7 @@ static VLCMain *_o_sharedMainInstance = nil;
 
 - (IBAction)intfOpenNet:(id)sender
 {
-    if ( !nib_open_loaded )
+    if( !nib_open_loaded )
     {
         nib_open_loaded = [NSBundle loadNibNamed:@"Open" owner:self];
         [o_open awakeFromNib];
@@ -1871,7 +1928,7 @@ static VLCMain *_o_sharedMainInstance = nil;
 
 - (IBAction)showWizard:(id)sender
 {
-    if ( !nib_wizard_loaded )
+    if( !nib_wizard_loaded )
     {
         nib_wizard_loaded = [NSBundle loadNibNamed:@"Wizard" owner:self];
         [o_wizard initStrings];
@@ -1885,11 +1942,11 @@ static VLCMain *_o_sharedMainInstance = nil;
 
 - (IBAction)showExtended:(id)sender
 {
-    if ( o_extended == nil )
+    if( o_extended == nil )
     {
         o_extended = [[VLCExtended alloc] init];
     }
-    if ( !nib_extended_loaded )
+    if( !nib_extended_loaded )
     {
         nib_extended_loaded = [NSBundle loadNibNamed:@"Extended" owner:self];
         [o_extended initStrings];
@@ -1901,11 +1958,11 @@ static VLCMain *_o_sharedMainInstance = nil;
 
 - (IBAction)showSFilters:(id)sender
 {
-    if ( o_sfilters == nil )
+    if( o_sfilters == nil )
     {
         o_sfilters = [[VLCsFilters alloc] init];
     }
-    if ( !nib_sfilters_loaded )
+    if( !nib_sfilters_loaded )
     {
         nib_sfilters_loaded = [NSBundle loadNibNamed:@"SFilters" owner:self];
         [o_sfilters initStrings];
@@ -1918,13 +1975,13 @@ static VLCMain *_o_sharedMainInstance = nil;
 - (IBAction)showBookmarks:(id)sender
 {
     /* we need the wizard-nib for the bookmarks's extract functionality */
-    if ( !nib_wizard_loaded )
+    if( !nib_wizard_loaded )
     {
         nib_wizard_loaded = [NSBundle loadNibNamed:@"Wizard" owner:self];
         [o_wizard initStrings];
     }
  
-    if ( !nib_bookmarks_loaded )
+    if( !nib_bookmarks_loaded )
         nib_bookmarks_loaded = [NSBundle loadNibNamed:@"Bookmarks" owner:self];
 
     [o_bookmarks showBookmarks];
@@ -1948,21 +2005,28 @@ static VLCMain *_o_sharedMainInstance = nil;
     
 - (IBAction)viewPreferences:(id)sender
 {
-/* GRUIIIIIIIK */
-    if( o_prefs == nil )
-        o_prefs = [[VLCPrefs alloc] init];
-    [o_prefs showPrefs];
+    if( !nib_prefs_loaded )
+        nib_prefs_loaded = [NSBundle loadNibNamed:@"Preferences" owner: self];
+
+    if( sender == o_mi_sprefs )
+    {
+        o_sprefs = [[VLCSimplePrefs alloc] init];
+        [o_sprefs showSimplePrefs];
+    }
+    else
+        [o_prefs showPrefs];
 }
 
-#ifdef UPDATE_CHECK
 - (IBAction)checkForUpdate:(id)sender
-{/* FIXME
+{
+#ifdef UPDATE_CHECK
     if( !nib_update_loaded )
         nib_update_loaded = [NSBundle loadNibNamed:@"Update" owner:self];
-
     [o_update showUpdateWindow];
-*/}
+#else
+    msg_Err( VLCIntf, "Updates checking was not enabled in this build" );
 #endif
+}
 
 - (IBAction)viewHelp:(id)sender
 {
@@ -2019,7 +2083,7 @@ static VLCMain *_o_sharedMainInstance = nil;
                                     stringByExpandingTildeInPath];
 
 
-    if ( [[NSFileManager defaultManager] fileExistsAtPath: o_path ] )
+    if( [[NSFileManager defaultManager] fileExistsAtPath: o_path ] )
     {
         [[NSWorkspace sharedWorkspace] openFile: o_path
                                     withApplication: @"Console"];
@@ -2073,14 +2137,14 @@ static VLCMain *_o_sharedMainInstance = nil;
         b_restore_size = true;
         b_small_window = YES; /* we know we are small, make sure this is actually set (see case below) */
         /* make large */
-        if ( o_size_with_playlist.height > 200 )
+        if( o_size_with_playlist.height > 200 )
         {
             o_rect.size.height = o_size_with_playlist.height;
         } else {
             o_rect.size.height = 500;
         }
  
-        if ( o_size_with_playlist.width > [o_window minSize].width )
+        if( o_size_with_playlist.width > [o_window minSize].width )
         {
             o_rect.size.width = o_size_with_playlist.width;
         } else {
@@ -2094,10 +2158,10 @@ static VLCMain *_o_sharedMainInstance = nil;
                                                 [o_window minSize].height;
 
         NSRect screenRect = [[o_window screen] visibleFrame];
-        if ( !NSContainsRect( screenRect, o_rect ) ) {
-            if ( NSMaxX(o_rect) > NSMaxX(screenRect) )
+        if( !NSContainsRect( screenRect, o_rect ) ) {
+            if( NSMaxX(o_rect) > NSMaxX(screenRect) )
                 o_rect.origin.x = ( NSMaxX(screenRect) - o_rect.size.width );
-            if ( NSMinY(o_rect) < NSMinY(screenRect) )
+            if( NSMinY(o_rect) < NSMinY(screenRect) )
                 o_rect.origin.y = ( NSMinY(screenRect) );
         }
 
@@ -2114,7 +2178,7 @@ static VLCMain *_o_sharedMainInstance = nil;
         o_rect.origin.y = [o_window frame].origin.y +
             [o_window frame].size.height - [o_window minSize].height;
 
-        if ( b_restore_size )
+        if( b_restore_size )
             o_rect = o_restore_rect;
 
         [o_playlist_view setAutoresizesSubviews: NO];