macosx: Move p_intf_thread getter out of VLCMain
authorDavid Fuhrmann <dfuhrmann@videolan.org>
Wed, 12 Aug 2015 09:22:25 +0000 (11:22 +0200)
committerDavid Fuhrmann <dfuhrmann@videolan.org>
Wed, 12 Aug 2015 09:25:48 +0000 (11:25 +0200)
VLCIntf now points to a static getter for the interface thread
pointer.

This fixes several problems: During initialization of
VLCMain, [VLCMain sharedInstance] is not ready yet when all other
objects are initialized inside VLCMains constructor. Due to the
way ARC works, the same applies to dealloc (the main shared instance
is nil already). But in both situations, we need VLCIntf for
callback (un)registration and potential logging.

The mac interface relies on static data in any case and does not
support multiple instantiations.

modules/gui/macosx/InputManager.m
modules/gui/macosx/intf.h
modules/gui/macosx/intf.m

index dac5788..261abee 100644 (file)
@@ -156,7 +156,7 @@ static int InputEvent(vlc_object_t *p_this, const char *psz_var,
     self = [super init];
     if(self) {
         o_main = o_mainObj;
     self = [super init];
     if(self) {
         o_main = o_mainObj;
-        var_AddCallback(pl_Get([o_mainObj intf]), "input-current", InputThreadChanged, (__bridge void *)self);
+        var_AddCallback(pl_Get(VLCIntf), "input-current", InputThreadChanged, (__bridge void *)self);
 
         informInputChangedQueue = dispatch_queue_create("org.videolan.vlc.inputChangedQueue", DISPATCH_QUEUE_SERIAL);
 
 
         informInputChangedQueue = dispatch_queue_create("org.videolan.vlc.inputChangedQueue", DISPATCH_QUEUE_SERIAL);
 
index db6938d..0a8b393 100644 (file)
 /*****************************************************************************
  * Local prototypes.
  *****************************************************************************/
 /*****************************************************************************
  * Local prototypes.
  *****************************************************************************/
-#define VLCIntf [[VLCMain sharedInstance] intf]
+
+// deprecated macro
+#define VLCIntf getIntf()
+
+intf_thread_t *getIntf();
 
 static NSString * VLCInputChangedNotification = @"VLCInputChangedNotification";
 
 
 static NSString * VLCInputChangedNotification = @"VLCInputChangedNotification";
 
@@ -76,14 +80,9 @@ static NSString * VLCInputChangedNotification = @"VLCInputChangedNotification";
 @property (readonly) BOOL nativeFullscreenMode;
 @property (nonatomic, readwrite) BOOL playlistUpdatedSelectorInQueue;
 
 @property (readonly) BOOL nativeFullscreenMode;
 @property (nonatomic, readwrite) BOOL playlistUpdatedSelectorInQueue;
 
-+ (VLCMain *)createInstanceWithIntf:(intf_thread_t *)intf;
 + (VLCMain *)sharedInstance;
 + (void)killInstance;
 
 + (VLCMain *)sharedInstance;
 + (void)killInstance;
 
-- (id)initWithIntf:(intf_thread_t *)intf;
-
-- (intf_thread_t *)intf;
-
 - (VLCMainMenu *)mainMenu;
 - (VLCMainWindow *)mainWindow;
 - (VLCBookmarks *)bookmarks;
 - (VLCMainMenu *)mainMenu;
 - (VLCMainWindow *)mainWindow;
 - (VLCBookmarks *)bookmarks;
index c4be345..fcbf27b 100644 (file)
 /*****************************************************************************
  * OpenIntf: initialize interface
  *****************************************************************************/
 /*****************************************************************************
  * OpenIntf: initialize interface
  *****************************************************************************/
+
+static intf_thread_t *p_interface_thread;
+
+intf_thread_t *getIntf()
+{
+    return p_interface_thread;
+}
+
 int OpenIntf (vlc_object_t *p_this)
 {
     @autoreleasepool {
         intf_thread_t *p_intf = (intf_thread_t*) p_this;
 int OpenIntf (vlc_object_t *p_this)
 {
     @autoreleasepool {
         intf_thread_t *p_intf = (intf_thread_t*) p_this;
+        p_interface_thread = p_intf;
         msg_Dbg(p_intf, "Starting macosx interface");
 
         [VLCApplication sharedApplication];
         msg_Dbg(p_intf, "Starting macosx interface");
 
         [VLCApplication sharedApplication];
-        [VLCMain createInstanceWithIntf: p_intf];
+        [VLCMain sharedInstance];
 
         [NSBundle loadNibNamed:@"MainMenu" owner:[[VLCMain sharedInstance] mainMenu]];
         [[[VLCMain sharedInstance] mainWindow] makeKeyAndOrderFront:nil];
 
         [NSBundle loadNibNamed:@"MainMenu" owner:[[VLCMain sharedInstance] mainMenu]];
         [[[VLCMain sharedInstance] mainWindow] makeKeyAndOrderFront:nil];
@@ -99,6 +108,8 @@ void CloseIntf (vlc_object_t *p_this)
         msg_Dbg(p_this, "Closing macosx interface");
         [[VLCMain sharedInstance] applicationWillTerminate:nil];
         [VLCMain killInstance];
         msg_Dbg(p_this, "Closing macosx interface");
         [[VLCMain sharedInstance] applicationWillTerminate:nil];
         [VLCMain killInstance];
+
+        p_interface_thread = nil;
     }
 }
 
     }
 }
 
@@ -179,17 +190,11 @@ static int ShowController(vlc_object_t *p_this, const char *psz_variable,
 
 static VLCMain *sharedInstance = nil;
 
 
 static VLCMain *sharedInstance = nil;
 
-+ (VLCMain *)sharedInstance
-{
-    return sharedInstance;
-}
-
-+ (VLCMain *)createInstanceWithIntf:(intf_thread_t *)intf;
++ (VLCMain *)sharedInstance;
 {
     static dispatch_once_t pred;
 {
     static dispatch_once_t pred;
-
     dispatch_once(&pred, ^{
     dispatch_once(&pred, ^{
-        sharedInstance = [[VLCMain alloc] initWithIntf:intf];
+        sharedInstance = [[VLCMain alloc] init];
     });
 
     return sharedInstance;
     });
 
     return sharedInstance;
@@ -200,11 +205,11 @@ static VLCMain *sharedInstance = nil;
     sharedInstance = nil;
 }
 
     sharedInstance = nil;
 }
 
-- (id)initWithIntf:(intf_thread_t *)intf;
+- (id)init
 {
     self = [super init];
     if (self) {
 {
     self = [super init];
     if (self) {
-        p_intf = intf;
+        p_intf = getIntf();
 
         [VLCApplication sharedApplication].delegate = self;
 
 
         [VLCApplication sharedApplication].delegate = self;
 
@@ -251,9 +256,9 @@ static VLCMain *sharedInstance = nil;
     return self;
 }
 
     return self;
 }
 
-- (intf_thread_t *)intf
+- (void)dealloc
 {
 {
-    return p_intf;
+    msg_Dbg(VLCIntf, "Deinitializing VLCMain object");
 }
 
 - (void)applicationWillFinishLaunching:(NSNotification *)aNotification
 }
 
 - (void)applicationWillFinishLaunching:(NSNotification *)aNotification
@@ -360,9 +365,6 @@ static VLCMain *sharedInstance = nil;
     _voutController = nil;
     [_voutController.lock unlock];
 
     _voutController = nil;
     [_voutController.lock unlock];
 
-    /* unsubscribe from libvlc's debug messages */
-    vlc_LogSet(p_intf->p_libvlc, NULL, NULL);
-
     /* write cached user defaults to disk */
     [[NSUserDefaults standardUserDefaults] synchronize];
 }
     /* write cached user defaults to disk */
     [[NSUserDefaults standardUserDefaults] synchronize];
 }