[vlc-commits] macosx/library window: don't block access to the playlist when using the detached vout window mode
Felix Paul Kühne
git at videolan.org
Mon Apr 15 20:15:15 CEST 2019
vlc | branch: master | Felix Paul Kühne <felix at feepk.net> | Mon Apr 15 20:10:59 2019 +0200| [13e36ea0a1a2962da81e6bcb4ca8647e56a5a910] | committer: Felix Paul Kühne
macosx/library window: don't block access to the playlist when using the detached vout window mode
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=13e36ea0a1a2962da81e6bcb4ca8647e56a5a910
---
modules/gui/macosx/library/VLCLibraryWindow.h | 3 +-
modules/gui/macosx/library/VLCLibraryWindow.m | 60 ++++++++++++----------
modules/gui/macosx/main/VLCMain.m | 2 +-
.../macosx/windows/video/VLCVideoOutputProvider.m | 29 ++++++-----
4 files changed, 51 insertions(+), 43 deletions(-)
diff --git a/modules/gui/macosx/library/VLCLibraryWindow.h b/modules/gui/macosx/library/VLCLibraryWindow.h
index 52e30edbb3..c81f371a03 100644
--- a/modules/gui/macosx/library/VLCLibraryWindow.h
+++ b/modules/gui/macosx/library/VLCLibraryWindow.h
@@ -40,7 +40,8 @@ NS_ASSUME_NONNULL_BEGIN
@property (readwrite) BOOL nonembedded;
- (void)videoPlaybackWillBeStarted;
-- (void)toggleVideoPlaybackAppearance;
+- (void)enableVideoPlaybackAppearance;
+- (void)disableVideoPlaybackAppearance;
- (IBAction)playlistDoubleClickAction:(id)sender;
diff --git a/modules/gui/macosx/library/VLCLibraryWindow.m b/modules/gui/macosx/library/VLCLibraryWindow.m
index 3fadea55a3..c0b050d072 100644
--- a/modules/gui/macosx/library/VLCLibraryWindow.m
+++ b/modules/gui/macosx/library/VLCLibraryWindow.m
@@ -113,44 +113,48 @@ static NSString *VLCLibraryCellIdentifier = @"VLCLibraryCellIdentifier";
_windowFrameBeforePlayback = [self frame];
}
-- (void)toggleVideoPlaybackAppearance
+- (void)enableVideoPlaybackAppearance
{
- BOOL b_videoPlayback = [[VLCMain sharedInstance] activeVideoPlayback];
+ [self.videoView setHidden:NO];
- if (!b_videoPlayback) {
- if (!self.nonembedded && (!self.nativeFullscreenMode || (self.nativeFullscreenMode && !self.fullscreen)) && _windowFrameBeforePlayback.size.width > 0 && _windowFrameBeforePlayback.size.height > 0) {
-
- // only resize back to minimum view of this is still desired final state
- CGFloat f_threshold_height = f_min_video_height + [self.controlsBar height];
- if (_windowFrameBeforePlayback.size.height > f_threshold_height) {
- if ([[VLCMain sharedInstance] isTerminating])
- [self setFrame:_windowFrameBeforePlayback display:YES];
- else
- [[self animator] setFrame:_windowFrameBeforePlayback display:YES];
+ if (self.nativeFullscreenMode) {
+ if ([self hasActiveVideo] && [self fullscreen]) {
+ [self hideControlsBar];
+ [_fspanel shouldBecomeActive:nil];
+ }
+ }
+}
+- (void)disableVideoPlaybackAppearance
+{
+ if (!self.nonembedded
+ && (!self.nativeFullscreenMode || (self.nativeFullscreenMode && !self.fullscreen))
+ && _windowFrameBeforePlayback.size.width > 0
+ && _windowFrameBeforePlayback.size.height > 0) {
+
+ // only resize back to minimum view of this is still desired final state
+ CGFloat f_threshold_height = f_min_video_height + [self.controlsBar height];
+ if (_windowFrameBeforePlayback.size.height > f_threshold_height) {
+ if ([[VLCMain sharedInstance] isTerminating]) {
+ [self setFrame:_windowFrameBeforePlayback display:YES];
+ } else {
+ [[self animator] setFrame:_windowFrameBeforePlayback display:YES];
}
}
+ }
- _windowFrameBeforePlayback = NSMakeRect(0, 0, 0, 0);
+ _windowFrameBeforePlayback = NSMakeRect(0, 0, 0, 0);
- [self makeFirstResponder: _playlistTableView];
- [[[VLCMain sharedInstance] voutProvider] updateWindowLevelForHelperWindows: NSNormalWindowLevel];
+ [self makeFirstResponder: _playlistTableView];
+ [[[VLCMain sharedInstance] voutProvider] updateWindowLevelForHelperWindows: NSNormalWindowLevel];
- // restore alpha value to 1 for the case that macosx-opaqueness is set to < 1
- [self setAlphaValue:1.0];
- [self.videoView setHidden:YES];
- } else {
- [self.videoView setHidden:NO];
- }
+ // restore alpha value to 1 for the case that macosx-opaqueness is set to < 1
+ [self setAlphaValue:1.0];
+ [self.videoView setHidden:YES];
if (self.nativeFullscreenMode) {
- if ([self hasActiveVideo] && [self fullscreen] && b_videoPlayback) {
- [self hideControlsBar];
- [_fspanel shouldBecomeActive:nil];
- } else {
- [self showControlsBar];
- [_fspanel shouldBecomeInactive:nil];
- }
+ [self showControlsBar];
+ [_fspanel shouldBecomeInactive:nil];
}
}
diff --git a/modules/gui/macosx/main/VLCMain.m b/modules/gui/macosx/main/VLCMain.m
index 5191baf799..5bd4cb418b 100644
--- a/modules/gui/macosx/main/VLCMain.m
+++ b/modules/gui/macosx/main/VLCMain.m
@@ -451,7 +451,7 @@ static VLCMain *sharedInstance = nil;
b_active_videoplayback = b_value;
if ([self libraryWindow]) {
- [[self libraryWindow] toggleVideoPlaybackAppearance];
+// [[self libraryWindow] toggleVideoPlaybackAppearance];
}
}
diff --git a/modules/gui/macosx/windows/video/VLCVideoOutputProvider.m b/modules/gui/macosx/windows/video/VLCVideoOutputProvider.m
index 64df32e579..5261f219dc 100644
--- a/modules/gui/macosx/windows/video/VLCVideoOutputProvider.m
+++ b/modules/gui/macosx/windows/video/VLCVideoOutputProvider.m
@@ -291,6 +291,7 @@ int WindowOpen(vout_window_t *p_wnd)
voutView = [newVideoWindow videoView];
b_mainWindowHasVideo = YES;
isEmbedded = YES;
+ [(VLCLibraryWindow *)newVideoWindow enableVideoPlaybackAppearance];
} else {
// setup detached window with controls
NSWindowController *o_controller = [[NSWindowController alloc] initWithWindowNibName:@"DetachedVideoWindow"];
@@ -375,47 +376,49 @@ int WindowOpen(vout_window_t *p_wnd)
return voutView;
}
-- (void)removeVoutForDisplay:(NSValue *)o_key
+- (void)removeVoutForDisplay:(NSValue *)key
{
VLCMain *mainInstance = [VLCMain sharedInstance];
- VLCVideoWindowCommon *o_window = [_voutWindows objectForKey:o_key];
- if (!o_window) {
+ VLCVideoWindowCommon *videoWindow = [_voutWindows objectForKey:key];
+ if (!videoWindow) {
msg_Err(getIntf(), "Cannot close nonexisting window");
return;
}
- [[o_window videoView] releaseVoutThread];
+ [[videoWindow videoView] releaseVoutThread];
// set active video to no BEFORE closing the window and exiting fullscreen
// (avoid stopping playback due to NSWindowWillCloseNotification, preserving fullscreen state)
- [o_window setHasActiveVideo: NO];
+ [videoWindow setHasActiveVideo: NO];
// prevent visible extra window if in fullscreen
NSDisableScreenUpdates();
BOOL b_native = [[mainInstance libraryWindow] nativeFullscreenMode];
// close fullscreen, without changing fullscreen vars
- if (!b_native && ([o_window fullscreen] || [o_window inFullscreenTransition]))
- [o_window leaveFullscreenWithAnimation:NO];
+ if (!b_native && ([videoWindow fullscreen] || [videoWindow inFullscreenTransition]))
+ [videoWindow leaveFullscreenWithAnimation:NO];
// native fullscreen window will not be closed if
// fullscreen was triggered without video
- if ((b_native && [o_window class] == [VLCLibraryWindow class] && [o_window fullscreen] && [o_window windowShouldExitFullscreenWhenFinished])) {
- [o_window toggleFullScreen:self];
+ if ((b_native && [videoWindow class] == [VLCLibraryWindow class] && [videoWindow fullscreen] && [videoWindow windowShouldExitFullscreenWhenFinished])) {
+ [videoWindow toggleFullScreen:self];
}
- if ([o_window class] != [VLCLibraryWindow class]) {
- [o_window close];
+ if ([videoWindow class] != [VLCLibraryWindow class]) {
+ [videoWindow close];
+ } else {
+ [(VLCLibraryWindow *)videoWindow disableVideoPlaybackAppearance];
}
NSEnableScreenUpdates();
- [_voutWindows removeObjectForKey:o_key];
+ [_voutWindows removeObjectForKey:key];
if ([_voutWindows count] == 0) {
[mainInstance setActiveVideoPlayback:NO];
_statusLevelWindowCounter = 0;
}
- if ([o_window class] == [VLCLibraryWindow class]) {
+ if ([videoWindow class] == [VLCLibraryWindow class]) {
b_mainWindowHasVideo = NO;
// video in main window might get stopped while another vout is open
More information about the vlc-commits
mailing list