macosx: vlc object handling improvements (refs #6883)
authorFelix Paul Kühne <fkuehne@videolan.org>
Wed, 18 Jul 2012 11:19:26 +0000 (13:19 +0200)
committerFelix Paul Kühne <fkuehne@videolan.org>
Wed, 18 Jul 2012 11:19:26 +0000 (13:19 +0200)
This should solve a few problems on termination.

modules/gui/macosx/MainMenu.m
modules/gui/macosx/VideoView.m
modules/gui/macosx/bookmarks.m
modules/gui/macosx/controls.m

index d2eff79..f910708 100644 (file)
@@ -462,15 +462,13 @@ static VLCMainMenu *_o_sharedInstance = nil;
 
             [self setupVarMenuItem: o_mi_visual target: (vlc_object_t *)p_aout
                                      var: "visual" selector: @selector(toggleVar:)];
-            vlc_object_release( (vlc_object_t *)p_aout );
+            vlc_object_release( p_aout );
         }
 
         vout_thread_t * p_vout = input_GetVout( p_input );
 
         if( p_vout != NULL )
         {
-            vlc_object_t * p_dec_obj;
-
             [self setupVarMenuItem: o_mi_aspect_ratio target: (vlc_object_t *)p_vout
                                      var: "aspect-ratio" selector: @selector(toggleVar:)];
 
@@ -488,7 +486,7 @@ static VLCMainMenu *_o_sharedInstance = nil;
              (vlc_object_t *)p_vout var:"postprocess" selector:
              @selector(toggleVar:)];
 #endif
-            vlc_object_release( (vlc_object_t *)p_vout );
+            vlc_object_release( p_vout );
 
             [self refreshVoutDeviceMenu:nil];
             [self setSubmenusEnabled: YES];
@@ -1335,13 +1333,11 @@ static VLCMainMenu *_o_sharedInstance = nil;
             if( p_vout != NULL )
             {
                 if( [o_title isEqualToString: _NS("Float on Top")] )
-                {
                     [o_mi setState: var_GetBool( p_vout, "video-on-top" )];
-                }
 
                 bEnabled = TRUE;
 
-                vlc_object_release( (vlc_object_t *)p_vout );
+                vlc_object_release( p_vout );
             }
         }
         if( [o_title isEqualToString: _NS("Fullscreen")] )
@@ -1403,7 +1399,8 @@ bool b_telx = p_input && var_GetInteger( p_input, "teletext-es" ) >= 0;
 
 - (void)dealloc
 {
-    vlc_object_release( _vlc_object );
+    if( _vlc_object )
+        vlc_object_release( _vlc_object );
     if( (i_type & VLC_VAR_TYPE) == VLC_VAR_STRING )
         free( value.psz_string );
     free( psz_name );
index c20feb1..445f224 100644 (file)
@@ -111,7 +111,7 @@ int DeviceCallback( vlc_object_t *p_this, const char *psz_variable,
 - (void)closeVout
 {
     vout_thread_t * p_vout = getVout();
-    if( !p_vout )
+    if( p_vout )
     {
         var_DelCallback( p_vout, "video-device", DeviceCallback, NULL );
         vlc_object_release( p_vout );
@@ -168,10 +168,12 @@ int DeviceCallback( vlc_object_t *p_this, const char *psz_variable,
                 val.i_int |= (int)CocoaKeyToVLC( key );
                 var_Set( p_vout->p_libvlc, "key-pressed", val );
             }
-            vlc_object_release( p_vout );
         }
         else
             msg_Dbg( VLCIntf, "could not send keyevent to VLC core" );
+
+        if (p_vout)
+            vlc_object_release( p_vout );
     }
     else
         [super keyDown: o_event];
index 500375b..d07b8d1 100644 (file)
@@ -73,6 +73,9 @@ static VLCBookmarks *_o_sharedInstance = nil;
 
 - (void)dealloc
 {
+    if (p_old_input)
+        vlc_object_release( p_old_input );
+
     [super dealloc];
 }
 
@@ -155,9 +158,15 @@ static VLCBookmarks *_o_sharedInstance = nil;
     int row;
     row = [o_tbl_dataTable selectedRow];
 
-    if( !p_input && row < 0 )
+    if( !p_input )
         return;
 
+    if( row < 0 )
+    {
+        vlc_object_release( p_input );
+        return;
+    }
+
     if( input_Control( p_input, INPUT_GET_BOOKMARKS, &pp_bookmarks,
         &i_bookmarks ) != VLC_SUCCESS )
     {
index f03f557..f21da4f 100644 (file)
         if( p_vout != NULL )
         {
             var_SetInteger( VLCIntf->p_libvlc, "key-action", ACTIONID_POSITION );
-            vlc_object_release( (vlc_object_t *)p_vout );
+            vlc_object_release( p_vout );
         }
         vlc_object_release( p_input );
     }
                 /* Escape */
                 if( key == (unichar) 0x1b )
                 {
-                    vout_thread_t *p_vout = getVout();
-                    if (p_vout)
+                    if (var_GetBool( p_vout, "fullscreen" ))
                     {
-                        if (var_GetBool( p_vout, "fullscreen" ))
-                        {
-                            [[VLCCoreInteraction sharedInstance] toggleFullscreen];
-                            eventHandled = YES;
-                        }
+                        [[VLCCoreInteraction sharedInstance] toggleFullscreen];
+                        eventHandled = YES;
                     }
                 }
                 else if( key == ' ' )
                     [self play:self];
                     eventHandled = YES;
                 }
-                vlc_object_release( (vlc_object_t *)p_vout );
+                vlc_object_release( p_vout );
             }
             vlc_object_release( p_input );
         }