[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