[vlc-commits] [Git][videolan/vlc][master] 19 commits: macosx: Add PIP button in main video view XIB
Steve Lhomme (@robUx4)
gitlab at videolan.org
Thu Apr 11 08:00:49 UTC 2024
Steve Lhomme pushed to branch master at VideoLAN / VLC
Commits:
3e812ed7 by Claudio Cambra at 2024-04-11T07:40:56+00:00
macosx: Add PIP button in main video view XIB
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
9e52fbf4 by Claudio Cambra at 2024-04-11T07:40:56+00:00
macosx: Add pipModeEnabled property to VLCFullVideoViewWindow
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
078b03d5 by Claudio Cambra at 2024-04-11T07:40:56+00:00
macosx: Change window behaviour when enabling pipMode
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
dcac3997 by Claudio Cambra at 2024-04-11T07:40:56+00:00
macosx: Toggle window PIP mode when hitting pip mode in main video view
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
1580ba73 by Claudio Cambra at 2024-04-11T07:40:56+00:00
macosx: Create own method for setting window to float on top in vlcvideooutputprovider
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
f90c9340 by Claudio Cambra at 2024-04-11T07:40:56+00:00
macosx: Allow float on top windows to join full screen spaces
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
58650a2a by Claudio Cambra at 2024-04-11T07:40:56+00:00
macosx: Toggle app activation policy to allow window to join fullscreen spaces
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
46b3cf00 by Claudio Cambra at 2024-04-11T07:40:56+00:00
macosx: Enter collection behaviour and activation mode stuff into setting window level
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
57daae98 by Claudio Cambra at 2024-04-11T07:40:56+00:00
macosx: Remove all internal PIP handling in video windows, just toggle float on top config value when pressing button
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
49565a2e by Claudio Cambra at 2024-04-11T07:40:56+00:00
macosx: Fix 0 status level windows handling
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
ce308836 by Claudio Cambra at 2024-04-11T07:40:56+00:00
macosx: Adjust "float on top" icon in main video view
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
b7da44b9 by Claudio Cambra at 2024-04-11T07:40:56+00:00
macosx: Move float on top button handling to main video view controls bar
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
4e7cffa6 by Claudio Cambra at 2024-04-11T07:40:56+00:00
macosx: Make controls bar property in VLCMainVideoViewController in VLCMainVideoViewControlsBar
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
e9af45e1 by Claudio Cambra at 2024-04-11T07:40:56+00:00
macosx: Update float on top button state when pressed
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
bd6ad756 by Claudio Cambra at 2024-04-11T07:40:56+00:00
macosx: Add callback to emit notification in VLCVideoOutputProvider whenever a window's float on top changes
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
ef0149ad by Claudio Cambra at 2024-04-11T07:40:56+00:00
macosx: Constify notification window level names
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
24327104 by Claudio Cambra at 2024-04-11T07:40:56+00:00
macosx: Listen to float on top notification change in main video view controller
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
8fa7292a by Claudio Cambra at 2024-04-11T07:40:56+00:00
macosx: Rename "mainwindow" folder to more appropriate "controlsbar"
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
2190d9d2 by Claudio Cambra at 2024-04-11T07:40:56+00:00
macosx: Update potfiles to respond to controlsbar folder rename
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
18 changed files:
- extras/package/macosx/VLC.xcodeproj/project.pbxproj
- modules/gui/macosx/Makefile.am
- modules/gui/macosx/UI/VLCMainVideoView.xib
- modules/gui/macosx/library/VLCLibraryUIUnits.m
- modules/gui/macosx/library/VLCLibraryWindow.m
- modules/gui/macosx/menus/VLCMainMenu.m
- modules/gui/macosx/windows/VLCDetachedAudioWindow.m
- modules/gui/macosx/windows/mainwindow/VLCControlsBarCommon.h → modules/gui/macosx/windows/controlsbar/VLCControlsBarCommon.h
- modules/gui/macosx/windows/mainwindow/VLCControlsBarCommon.m → modules/gui/macosx/windows/controlsbar/VLCControlsBarCommon.m
- modules/gui/macosx/windows/mainwindow/VLCMainVideoViewControlsBar.h → modules/gui/macosx/windows/controlsbar/VLCMainVideoViewControlsBar.h
- modules/gui/macosx/windows/mainwindow/VLCMainVideoViewControlsBar.m → modules/gui/macosx/windows/controlsbar/VLCMainVideoViewControlsBar.m
- modules/gui/macosx/windows/mainwindow/VLCMainWindowControlsBar.h → modules/gui/macosx/windows/controlsbar/VLCMainWindowControlsBar.h
- modules/gui/macosx/windows/mainwindow/VLCMainWindowControlsBar.m → modules/gui/macosx/windows/controlsbar/VLCMainWindowControlsBar.m
- modules/gui/macosx/windows/video/VLCMainVideoViewController.h
- modules/gui/macosx/windows/video/VLCMainVideoViewController.m
- modules/gui/macosx/windows/video/VLCVideoOutputProvider.h
- modules/gui/macosx/windows/video/VLCVideoOutputProvider.m
- po/POTFILES.in
Changes:
=====================================
extras/package/macosx/VLC.xcodeproj/project.pbxproj
=====================================
@@ -1102,10 +1102,10 @@
isa = PBXGroup;
children = (
1C1ED5162205AA8200811EC0 /* addons */,
+ 1C1ED5092204ACC600811EC0 /* controlsbar */,
1C1ED51C2205AC0700811EC0 /* convertandsave */,
1C1ED5182205AABF00811EC0 /* extensions */,
1C1ED51F2205AC8000811EC0 /* logging */,
- 1C1ED5092204ACC600811EC0 /* mainwindow */,
1C1ED5052204AA5800811EC0 /* video */,
1C67C8A61D58C0A40079E1C1 /* VLCAboutWindowController.h */,
1C67C8A71D58C0A40079E1C1 /* VLCAboutWindowController.m */,
@@ -1123,7 +1123,7 @@
path = windows;
sourceTree = "<group>";
};
- 1C1ED5092204ACC600811EC0 /* mainwindow */ = {
+ 1C1ED5092204ACC600811EC0 /* controlsbar */ = {
isa = PBXGroup;
children = (
1C1ED51D2205AC6B00811EC0 /* VLCControlsBarCommon.h */,
@@ -1133,7 +1133,7 @@
7D5678EE1D5BA397002698F3 /* VLCMainWindowControlsBar.h */,
7D5678EF1D5BA397002698F3 /* VLCMainWindowControlsBar.m */,
);
- path = mainwindow;
+ path = controlsbar;
sourceTree = "<group>";
};
1C1ED50A2204AFA900811EC0 /* coreinteraction */ = {
=====================================
modules/gui/macosx/Makefile.am
=====================================
@@ -399,12 +399,12 @@ libmacosx_plugin_la_SOURCES = \
gui/macosx/windows/logging/VLCLogMessage.m \
gui/macosx/windows/logging/VLCLogWindowController.h \
gui/macosx/windows/logging/VLCLogWindowController.m \
- gui/macosx/windows/mainwindow/VLCControlsBarCommon.h \
- gui/macosx/windows/mainwindow/VLCControlsBarCommon.m \
- gui/macosx/windows/mainwindow/VLCMainVideoViewControlsBar.h \
- gui/macosx/windows/mainwindow/VLCMainVideoViewControlsBar.m \
- gui/macosx/windows/mainwindow/VLCMainWindowControlsBar.h \
- gui/macosx/windows/mainwindow/VLCMainWindowControlsBar.m \
+ gui/macosx/windows/controlsbar/VLCControlsBarCommon.h \
+ gui/macosx/windows/controlsbar/VLCControlsBarCommon.m \
+ gui/macosx/windows/controlsbar/VLCMainVideoViewControlsBar.h \
+ gui/macosx/windows/controlsbar/VLCMainVideoViewControlsBar.m \
+ gui/macosx/windows/controlsbar/VLCMainWindowControlsBar.h \
+ gui/macosx/windows/controlsbar/VLCMainWindowControlsBar.m \
gui/macosx/windows/video/VLCAspectRatioRetainingVideoWindow.h \
gui/macosx/windows/video/VLCAspectRatioRetainingVideoWindow.m \
gui/macosx/windows/video/VLCFullVideoViewWindow.h \
=====================================
modules/gui/macosx/UI/VLCMainVideoView.xib
=====================================
@@ -34,6 +34,7 @@
<outlet property="backwardButton" destination="V9d-hX-iyg" id="ZFn-jn-7OB"/>
<outlet property="bookmarksButton" destination="4tZ-52-1q9" id="dAN-YB-YZ5"/>
<outlet property="detailLabel" destination="5ii-yU-6Zp" id="ves-8e-T8E"/>
+ <outlet property="floatOnTopButton" destination="8jZ-hd-YVq" id="x53-4o-LsM"/>
<outlet property="forwardButton" destination="sF5-Z0-bef" id="H6w-Le-NAK"/>
<outlet property="fullscreenButton" destination="dYZ-ri-Kra" id="Cw2-BS-QG9"/>
<outlet property="fullscreenButtonWidthConstraint" destination="quS-fD-Od7" id="6hT-nR-yQI"/>
@@ -174,16 +175,30 @@
<action selector="openBookmarks:" target="3" id="o6m-9M-L4U"/>
</connections>
</button>
- <button wantsLayer="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="dYZ-ri-Kra" customClass="VLCImageButton">
+ <button wantsLayer="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8jZ-hd-YVq" customClass="VLCImageButton">
<rect key="frame" x="111" y="-1" width="32" height="33"/>
+ <buttonCell key="cell" type="recessed" bezelStyle="recessed" image="play.rectangle.on.rectangle.fill" catalog="system" imagePosition="only" alignment="center" controlSize="large" borderStyle="border" imageScaling="proportionallyUpOrDown" inset="2" id="fyV-F5-ogO">
+ <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
+ <font key="font" metaFont="system"/>
+ </buttonCell>
<constraints>
- <constraint firstAttribute="width" secondItem="dYZ-ri-Kra" secondAttribute="height" multiplier="1:1" id="cHQ-Fu-L8k"/>
- <constraint firstAttribute="width" constant="32" id="quS-fD-Od7"/>
+ <constraint firstAttribute="width" constant="32" id="QNF-zS-6Sz"/>
+ <constraint firstAttribute="width" secondItem="8jZ-hd-YVq" secondAttribute="height" multiplier="1:1" id="iNf-6g-2uS"/>
</constraints>
+ <connections>
+ <action selector="toggleFloatOnTop:" target="3" id="BvH-qi-jx1"/>
+ </connections>
+ </button>
+ <button wantsLayer="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="dYZ-ri-Kra" customClass="VLCImageButton">
+ <rect key="frame" x="148" y="-1" width="32" height="33"/>
<buttonCell key="cell" type="recessed" bezelStyle="recessed" image="arrow.up.left.and.arrow.down.right" catalog="system" imagePosition="only" alignment="center" controlSize="large" borderStyle="border" imageScaling="proportionallyUpOrDown" inset="2" id="Z8g-js-0W6">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
+ <constraints>
+ <constraint firstAttribute="width" secondItem="dYZ-ri-Kra" secondAttribute="height" multiplier="1:1" id="cHQ-Fu-L8k"/>
+ <constraint firstAttribute="width" constant="32" id="quS-fD-Od7"/>
+ </constraints>
<connections>
<action selector="fullscreen:" target="3" id="0Kk-UV-WtF"/>
</connections>
@@ -198,12 +213,14 @@
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
+ <integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
+ <real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
<stackView distribution="fill" orientation="horizontal" alignment="centerY" spacing="5" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="zyp-45-IgR">
@@ -433,6 +450,7 @@
<image name="forward.fill" catalog="system" width="19" height="12"/>
<image name="play.fill" catalog="system" width="12" height="13"/>
<image name="text.bubble" catalog="system" width="17" height="16"/>
+ <image name="play.rectangle.on.rectangle.fill" catalog="system" width="20" height="16"/>
<image name="volume.3.fill" catalog="system" width="22" height="15"/>
<image name="waveform.circle" catalog="system" width="15" height="15"/>
</resources>
=====================================
modules/gui/macosx/library/VLCLibraryUIUnits.m
=====================================
@@ -32,7 +32,7 @@
#import "views/VLCBottomBarView.h"
-#import "windows/mainwindow/VLCControlsBarCommon.h"
+#import "windows/controlsbar/VLCControlsBarCommon.h"
@implementation VLCLibraryUIUnits
=====================================
modules/gui/macosx/library/VLCLibraryWindow.m
=====================================
@@ -70,7 +70,7 @@
#import "views/VLCDragDropView.h"
#import "views/VLCRoundedCornerTextField.h"
-#import "windows/mainwindow/VLCControlsBarCommon.h"
+#import "windows/controlsbar/VLCControlsBarCommon.h"
#import "windows/video/VLCVoutView.h"
#import "windows/video/VLCVideoOutputProvider.h"
=====================================
modules/gui/macosx/menus/VLCMainMenu.m
=====================================
@@ -54,7 +54,7 @@
#import "windows/VLCOpenWindowController.h"
#import "windows/VLCErrorWindowController.h"
#import "windows/VLCHelpWindowController.h"
-#import "windows/mainwindow/VLCMainWindowControlsBar.h"
+#import "windows/controlsbar/VLCMainWindowControlsBar.h"
#import "windows/extensions/VLCExtensionsManager.h"
#import "windows/convertandsave/VLCConvertAndSaveWindowController.h"
#import "windows/logging/VLCLogWindowController.h"
=====================================
modules/gui/macosx/windows/VLCDetachedAudioWindow.m
=====================================
@@ -36,7 +36,7 @@
#import "views/VLCTrackingView.h"
#import "views/VLCBottomBarView.h"
-#import "windows/mainwindow/VLCControlsBarCommon.h"
+#import "windows/controlsbar/VLCControlsBarCommon.h"
@interface VLCDetachedAudioWindow()
{
=====================================
modules/gui/macosx/windows/mainwindow/VLCControlsBarCommon.h → modules/gui/macosx/windows/controlsbar/VLCControlsBarCommon.h
=====================================
=====================================
modules/gui/macosx/windows/mainwindow/VLCControlsBarCommon.m → modules/gui/macosx/windows/controlsbar/VLCControlsBarCommon.m
=====================================
=====================================
modules/gui/macosx/windows/mainwindow/VLCMainVideoViewControlsBar.h → modules/gui/macosx/windows/controlsbar/VLCMainVideoViewControlsBar.h
=====================================
@@ -30,10 +30,12 @@ NS_ASSUME_NONNULL_BEGIN
@property (readwrite, strong) IBOutlet NSButton *bookmarksButton;
@property (readwrite, strong) IBOutlet NSButton *subtitlesButton;
@property (readwrite, strong) IBOutlet NSButton *audioButton;
+ at property (readwrite, strong) IBOutlet NSButton *floatOnTopButton;
- (IBAction)openBookmarks:(id)sender;
- (IBAction)openSubtitlesMenu:(id)sender;
- (IBAction)openAudioMenu:(id)sender;
+- (IBAction)toggleFloatOnTop:(id)sender;
@end
=====================================
modules/gui/macosx/windows/mainwindow/VLCMainVideoViewControlsBar.m → modules/gui/macosx/windows/controlsbar/VLCMainVideoViewControlsBar.m
=====================================
@@ -37,6 +37,10 @@
#import "views/VLCWrappableTextField.h"
+#import "windows/video/VLCMainVideoViewController.h"
+#import "windows/video/VLCVideoOutputProvider.h"
+#import "windows/video/VLCVideoWindowCommon.h"
+
@interface VLCMainVideoViewControlsBar ()
{
VLCPlaylistController *_playlistController;
@@ -67,6 +71,10 @@
selector:@selector(updateDetailLabel:)
name:VLCPlayerCurrentMediaItemChanged
object:nil];
+ [notificationCenter addObserver:self
+ selector:@selector(updateFloatOnTopButton:)
+ name:VLCWindowFloatOnTopChangedNotificationName
+ object:nil];
}
- (void)updateDetailLabel:(NSNotification *)notification
@@ -103,4 +111,33 @@
inView:((NSView *)sender).superview];
}
+- (IBAction)toggleFloatOnTop:(id)sender
+{
+ VLCVideoWindowCommon * const window = (VLCVideoWindowCommon *)self.floatOnTopButton.window;
+ if (window == nil) {
+ return;
+ }
+ vout_thread_t * const p_vout = window.videoViewController.voutView.voutThread;
+ if (!p_vout) {
+ return;
+ }
+ var_ToggleBool(p_vout, "video-on-top");
+ vout_Release(p_vout);
+}
+
+- (void)updateFloatOnTopButton:(NSNotification *)notification
+{
+ VLCVideoWindowCommon * const videoWindow = (VLCVideoWindowCommon *)notification.object;
+ NSAssert(videoWindow != nil, @"Received video window should not be nil!");
+ NSDictionary<NSString *, NSNumber *> * const userInfo = notification.userInfo;
+ NSAssert(userInfo != nil, @"Received user info should not be nil!");
+ NSNumber * const enabledNumberWrapper = userInfo[VLCWindowFloatOnTopEnabledNotificationKey];
+ NSAssert(enabledNumberWrapper != nil, @"Received user info enabled wrapper should not be nil!");
+
+ if (@available(macOS 10.14, *)) {
+ self.floatOnTopButton.contentTintColor =
+ enabledNumberWrapper.boolValue ? NSColor.controlAccentColor : NSColor.controlTextColor;
+ }
+}
+
@end
=====================================
modules/gui/macosx/windows/mainwindow/VLCMainWindowControlsBar.h → modules/gui/macosx/windows/controlsbar/VLCMainWindowControlsBar.h
=====================================
@@ -23,7 +23,7 @@
#import <Cocoa/Cocoa.h>
-#import "windows/mainwindow/VLCControlsBarCommon.h"
+#import "windows/controlsbar/VLCControlsBarCommon.h"
@class VLCVolumeSlider;
@class VLCTrackingView;
=====================================
modules/gui/macosx/windows/mainwindow/VLCMainWindowControlsBar.m → modules/gui/macosx/windows/controlsbar/VLCMainWindowControlsBar.m
=====================================
=====================================
modules/gui/macosx/windows/video/VLCMainVideoViewController.h
=====================================
@@ -22,11 +22,11 @@
#import <Cocoa/Cocoa.h>
-#import <windows/mainwindow/VLCControlsBarCommon.h>
#import <windows/video/VLCVoutView.h>
@class VLCMainVideoViewOverlayView;
@class VLCMainVideoViewAudioMediaDecorativeView;
+ at class VLCMainVideoViewControlsBar;
NS_ASSUME_NONNULL_BEGIN
@@ -38,7 +38,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (readwrite, strong) IBOutlet VLCMainVideoViewAudioMediaDecorativeView *audioDecorativeView;
@property (readwrite, strong) IBOutlet NSView *bottomBarView;
@property (readwrite, strong) IBOutlet NSStackView *centralControlsStackView;
- at property (readwrite, strong) IBOutlet VLCControlsBarCommon *controlsBar;
+ at property (readwrite, strong) IBOutlet VLCMainVideoViewControlsBar *controlsBar;
@property (readwrite, strong) IBOutlet NSButton *returnButton;
@property (readwrite, strong) IBOutlet NSButton *playlistButton;
@property (readwrite, strong) IBOutlet NSLayoutConstraint *returnButtonTopConstraint;
=====================================
modules/gui/macosx/windows/video/VLCMainVideoViewController.m
=====================================
@@ -37,6 +37,8 @@
#import "views/VLCBottomBarView.h"
+#import "windows/controlsbar/VLCMainVideoViewControlsBar.h"
+
#import "windows/video/VLCMainVideoViewAudioMediaDecorativeView.h"
#import "windows/video/VLCMainVideoViewOverlayView.h"
#import "windows/video/VLCVideoWindowCommon.h"
=====================================
modules/gui/macosx/windows/video/VLCVideoOutputProvider.h
=====================================
@@ -29,8 +29,10 @@
@class VLCVideoWindowCommon;
@class VLCVoutView;
-extern NSString *VLCWindowShouldUpdateLevel;
-extern NSString *VLCWindowLevelKey;
+extern NSString * const VLCWindowShouldUpdateLevel;
+extern NSString * const VLCWindowLevelKey;
+extern NSString * const VLCWindowFloatOnTopChangedNotificationName;
+extern NSString * const VLCWindowFloatOnTopEnabledNotificationKey;
@interface VLCVideoOutputProvider : NSObject
=====================================
modules/gui/macosx/windows/video/VLCVideoOutputProvider.m
=====================================
@@ -47,8 +47,10 @@
#include <vlc_configuration.h>
#include <vlc_vout_display.h>
-NSString *VLCWindowShouldUpdateLevel = @"VLCWindowShouldUpdateLevel";
-NSString *VLCWindowLevelKey = @"VLCWindowLevelKey";
+NSString * const VLCWindowShouldUpdateLevel = @"VLCWindowShouldUpdateLevel";
+NSString * const VLCWindowLevelKey = @"VLCWindowLevelKey";
+NSString * const VLCWindowFloatOnTopChangedNotificationName = @"VLCWindowFloatOnTopChanged";
+NSString * const VLCWindowFloatOnTopEnabledNotificationKey = @"VLCWindowFloatOnTopEnabled";
static int WindowEnable(vlc_window_t *p_wnd, const vlc_window_cfg_t *cfg)
{
@@ -110,16 +112,16 @@ static void WindowSetState(vlc_window_t *p_wnd, unsigned i_state)
msg_Dbg(p_wnd, "Ignore change to VLC_WINDOW_STATE_BELOW");
@autoreleasepool {
- VLCVideoOutputProvider *voutProvider = VLCMain.sharedInstance.voutProvider;
+ VLCVideoOutputProvider * const voutProvider = VLCMain.sharedInstance.voutProvider;
NSInteger i_cocoa_level = NSNormalWindowLevel;
-
if (i_state & VLC_WINDOW_STATE_ABOVE)
i_cocoa_level = NSStatusWindowLevel;
dispatch_async(dispatch_get_main_queue(), ^{
[voutProvider setWindowLevel:i_cocoa_level forWindow:p_wnd];
});
+
}
}
@@ -175,6 +177,28 @@ int WindowOpen(vlc_window_t *p_wnd)
return VLC_SUCCESS;
}
+static int WindowFloatOnTop(vlc_object_t *obj,
+ char const *psz_var,
+ vlc_value_t oldval,
+ vlc_value_t newval,
+ void *p_data)
+{
+ VLC_UNUSED(obj); VLC_UNUSED(psz_var); VLC_UNUSED(oldval);
+ @autoreleasepool {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ VLCVideoWindowCommon * const videoWindow = (__bridge VLCVideoWindowCommon *)p_data;
+ NSNotificationCenter * const notificationCenter = NSNotificationCenter.defaultCenter;
+ NSDictionary<NSString *, NSNumber *> * const userInfo = @{
+ VLCWindowFloatOnTopEnabledNotificationKey: @(newval.b_bool)
+ };
+ [notificationCenter postNotificationName:VLCWindowFloatOnTopChangedNotificationName
+ object:videoWindow
+ userInfo:userInfo];
+ });
+ return VLC_SUCCESS;
+ }
+}
+
@interface VLCVideoOutputProvider ()
{
NSMutableDictionary *_voutWindows;
@@ -390,12 +414,14 @@ int WindowOpen(vlc_window_t *p_wnd)
- (void)setupVideoOutputForVideoWindow:(VLCVideoWindowCommon *)videoWindow
withVlcWindow:(vlc_window_t *)p_wnd
{
- VLCVoutView *voutView = videoWindow.videoViewController.voutView;
+ VLCVoutView * const voutView = videoWindow.videoViewController.voutView;
- [videoWindow setAlphaValue:config_GetFloat("macosx-opaqueness")];
+ videoWindow.alphaValue = config_GetFloat("macosx-opaqueness");
[_voutWindows setObject:videoWindow forKey:[NSValue valueWithPointer:p_wnd]];
- [voutView setVoutThread:(vout_thread_t *)vlc_object_parent(p_wnd)];
- [voutView setVoutWindow:p_wnd];
+ vout_thread_t * const p_vout = (vout_thread_t *)vlc_object_parent(p_wnd);
+ var_AddCallback(p_vout, "video-on-top", WindowFloatOnTop, (__bridge void *)videoWindow);
+ voutView.voutThread = p_vout;
+ voutView.voutWindow = p_wnd;
videoWindow.hasActiveVideo = YES;
_playerController.activeVideoPlayback = YES;
VLCMain.sharedInstance.libraryWindow.nonembedded = !b_mainWindowHasVideo;
@@ -511,7 +537,8 @@ int WindowOpen(vlc_window_t *p_wnd)
- (void)setWindowLevel:(NSInteger)i_level forWindow:(vlc_window_t *)p_wnd
{
- VLCVideoWindowCommon *o_window = [_voutWindows objectForKey:[NSValue valueWithPointer:p_wnd]];
+ NSValue * const windowKey = [NSValue valueWithPointer:p_wnd];
+ VLCVideoWindowCommon * const o_window = [_voutWindows objectForKey:windowKey];
if (!o_window) {
msg_Err(getIntf(), "Cannot set level for nonexisting window");
return;
@@ -521,18 +548,27 @@ int WindowOpen(vlc_window_t *p_wnd)
if(i_level == NSStatusWindowLevel) {
_statusLevelWindowCounter++;
// window level need to stay on normal in fullscreen mode
- if (![o_window fullscreen] && ![o_window inFullscreenTransition])
+ if (!o_window.fullscreen && !o_window.inFullscreenTransition) {
+ // make sure float on top can join all spaces, including full-screen ones
+ NSApp.activationPolicy = NSApplicationActivationPolicyAccessory;
[self updateWindowLevelForHelperWindows:i_level];
+ o_window.collectionBehavior = NSWindowCollectionBehaviorCanJoinAllSpaces |
+ NSWindowCollectionBehaviorIgnoresCycle |
+ NSWindowCollectionBehaviorTransient |
+ NSWindowCollectionBehaviorFullScreenAuxiliary;
+ }
} else {
- if (_statusLevelWindowCounter > 0)
+ if (_statusLevelWindowCounter > 0) {
_statusLevelWindowCounter--;
-
+ }
if (_statusLevelWindowCounter == 0) {
+ NSApp.activationPolicy = NSApplicationActivationPolicyRegular;
[self updateWindowLevelForHelperWindows:i_level];
}
+ o_window.collectionBehavior = NSWindowCollectionBehaviorDefault;
}
- [o_window setWindowLevel:i_level];
+ o_window.level = i_level;
}
- (void)setFullscreen:(int)i_full forWindow:(vlc_window_t *)p_wnd withAnimation:(BOOL)b_animation
=====================================
po/POTFILES.in
=====================================
@@ -644,10 +644,10 @@ modules/gui/macosx/windows/logging/VLCLogMessage.h
modules/gui/macosx/windows/logging/VLCLogMessage.m
modules/gui/macosx/windows/logging/VLCLogWindowController.h
modules/gui/macosx/windows/logging/VLCLogWindowController.m
-modules/gui/macosx/windows/mainwindow/VLCControlsBarCommon.h
-modules/gui/macosx/windows/mainwindow/VLCControlsBarCommon.m
-modules/gui/macosx/windows/mainwindow/VLCMainWindowControlsBar.h
-modules/gui/macosx/windows/mainwindow/VLCMainWindowControlsBar.m
+modules/gui/macosx/windows/controlsbar/VLCControlsBarCommon.h
+modules/gui/macosx/windows/controlsbar/VLCControlsBarCommon.m
+modules/gui/macosx/windows/controlsbar/VLCMainWindowControlsBar.h
+modules/gui/macosx/windows/controlsbar/VLCMainWindowControlsBar.m
modules/gui/macosx/windows/video/VLCVideoOutputProvider.h
modules/gui/macosx/windows/video/VLCVideoOutputProvider.m
modules/gui/macosx/windows/video/VLCVideoWindowCommon.h
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/73830db98d9be44538473ee728e118a163444956...2190d9d2f78e246d9045a0250c67a683c3846de5
--
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/73830db98d9be44538473ee728e118a163444956...2190d9d2f78e246d9045a0250c67a683c3846de5
You're receiving this email because of your account on code.videolan.org.
VideoLAN code repository instance
More information about the vlc-commits
mailing list