[vlc-commits] [Git][videolan/vlc][master] macosx: Remember last opened library view

Jean-Baptiste Kempf (@jbk) gitlab at videolan.org
Thu Aug 4 06:58:32 UTC 2022



Jean-Baptiste Kempf pushed to branch master at VideoLAN / VLC


Commits:
cd371307 by Claudio Cambra at 2022-08-04T06:43:51+00:00
macosx: Remember last opened library view

Signed-off-by: Claudio Cambra <claudio.cambra at gmail.com>

- - - - -


6 changed files:

- modules/gui/macosx/UI/VLCLibraryWindow.xib
- modules/gui/macosx/library/VLCLibraryAudioDataSource.m
- modules/gui/macosx/library/VLCLibraryWindow.h
- modules/gui/macosx/library/VLCLibraryWindow.m
- modules/gui/macosx/main/VLCMain.h
- modules/gui/macosx/main/VLCMain.m


Changes:

=====================================
modules/gui/macosx/UI/VLCLibraryWindow.xib
=====================================
@@ -14,7 +14,7 @@
         </customObject>
         <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
         <customObject id="-3" userLabel="Application" customClass="NSObject"/>
-        <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" frameAutosaveName="librarywindow" animationBehavior="default" titlebarAppearsTransparent="YES" toolbarStyle="unified" titleVisibility="hidden" id="QvC-M9-y7g" customClass="VLCLibraryWindow">
+        <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" frameAutosaveName="librarywindow" animationBehavior="default" tabbingIdentifier="VLCLibraryWindow" titlebarAppearsTransparent="YES" toolbarStyle="unified" titleVisibility="hidden" id="QvC-M9-y7g" customClass="VLCLibraryWindow">
             <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
             <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
             <rect key="contentRect" x="196" y="240" width="896" height="456"/>
@@ -598,8 +598,8 @@
                             <segmentedCell key="cell" borderStyle="border" alignment="left" style="rounded" trackingMode="selectOne" id="jcw-1T-HPS">
                                 <font key="font" metaFont="system"/>
                                 <segments>
-                                    <segment image="NSIconViewTemplate"/>
-                                    <segment image="NSListViewTemplate" selected="YES" tag="1"/>
+                                    <segment image="NSIconViewTemplate" selected="YES"/>
+                                    <segment image="NSListViewTemplate" tag="1"/>
                                 </segments>
                             </segmentedCell>
                         </segmentedControl>


=====================================
modules/gui/macosx/library/VLCLibraryAudioDataSource.m
=====================================
@@ -143,6 +143,8 @@
     _collectionSelectionTableView.doubleAction = @selector(collectionSelectionDoubleClickAction:);
     
     _currentSelectedSegment = -1; // Force segmentedControlAction to do what it must
+    _segmentedControl.selectedSegment = 0;
+
     _placeholderImageNames = @[@"placeholder-group2", @"placeholder-music", @"placeholder-music", @"placeholder-music"];
     _placeholderLabelStrings = @[
         _NS("Your favorite artists will appear here.\nGo to the Browse section to add artists you love."),


=====================================
modules/gui/macosx/library/VLCLibraryWindow.h
=====================================
@@ -37,13 +37,13 @@ NS_ASSUME_NONNULL_BEGIN
 @class VLCPlaylistSortingMenuController;
 @class VLCFSPanelController;
 
- at interface VLCLibraryWindowController : NSWindowController
+ at interface VLCLibraryWindowController : NSWindowController<NSWindowRestoration>
 
 - (instancetype)initWithLibraryWindow;
 
 @end
 
- at interface VLCLibraryWindow : VLCVideoWindowCommon
+ at interface VLCLibraryWindow : VLCVideoWindowCommon<NSUserInterfaceItemIdentification>
 
 @property (readwrite, weak) IBOutlet NSSegmentedControl *segmentedTitleControl;
 @property (readwrite, weak) IBOutlet NSToolbarItem *segmentedTitleControlToolbarItem;


=====================================
modules/gui/macosx/library/VLCLibraryWindow.m
=====================================
@@ -249,7 +249,7 @@ static void addShadow(NSImageView *__unsafe_unretained imageView)
     _fspanel = [[VLCFSPanelController alloc] init];
     [_fspanel showWindow:self];
 
-    _currentSelectedSegment = 5; // To enforce action on the selected segment
+    _currentSelectedSegment = -1; // To enforce action on the selected segment
     _segmentedTitleControl.segmentCount = 4;
     [_segmentedTitleControl setTarget:self];
     [_segmentedTitleControl setLabel:_NS("Video") forSegment:0];
@@ -257,7 +257,6 @@ static void addShadow(NSImageView *__unsafe_unretained imageView)
     [_segmentedTitleControl setLabel:_NS("Browse") forSegment:2];
     [_segmentedTitleControl setLabel:_NS("Streams") forSegment:3];
     [_segmentedTitleControl sizeToFit];
-    [_segmentedTitleControl setSelectedSegment:0];
 
     _playlistDragDropView.dropTarget = self;
     _playlistCounterTextField.useStrongRounding = YES;
@@ -403,6 +402,14 @@ static void addShadow(NSImageView *__unsafe_unretained imageView)
     var_DelCallback(libvlc, "intf-show", ShowController, (__bridge void *)self);
 }
 
+- (void)encodeRestorableStateWithCoder:(NSCoder *)coder
+{
+    [super encodeRestorableStateWithCoder:coder];
+    [coder encodeInteger:_segmentedTitleControl.selectedSegment forKey:@"macosx-library-selected-segment"];
+    [coder encodeInteger:_gridVsListSegmentedControl.selectedSegment forKey:@"macosx-library-view-mode-selected-segment"];
+    [coder encodeInteger:_libraryAudioDataSource.segmentedControl.selectedSegment forKey:@"macosx-library-audio-view-selected-segment"];
+}
+
 #pragma mark - appearance setters
 
 - (void)observeValueForKeyPath:(NSString *)keyPath
@@ -502,6 +509,8 @@ static void addShadow(NSImageView *__unsafe_unretained imageView)
     _currentSelectedSegment = _segmentedTitleControl.selectedSegment;
     _currentSelectedViewModeSegment = _gridVsListSegmentedControl.selectedSegment;
 
+    [self invalidateRestorableState];
+
     switch (_segmentedTitleControl.selectedSegment) {
         case 0:
             [self showVideoLibrary];
@@ -720,7 +729,7 @@ static void addShadow(NSImageView *__unsafe_unretained imageView)
 - (IBAction)goToBrowseSection:(id)sender
 {
     [_segmentedTitleControl setSelected:YES forSegment:2];
-    [self segmentedControlAction:nil];
+    [self segmentedControlAction:_segmentedTitleControl];
 }
 
 #pragma mark - split view delegation
@@ -907,7 +916,7 @@ static void addShadow(NSImageView *__unsafe_unretained imageView)
 - (void)windowDidLoad
 {
     VLCLibraryWindow *window = (VLCLibraryWindow *)self.window;
-    [window setRestorable:NO];
+    [window setRestorationClass:[self class]];
     [window setExcludedFromWindowsMenu:YES];
     [window setAcceptsMouseMovedEvents:YES];
     [window setContentMinSize:NSMakeSize(VLCLibraryWindowMinimalWidth, VLCLibraryWindowMinimalHeight)];
@@ -920,7 +929,32 @@ static void addShadow(NSImageView *__unsafe_unretained imageView)
     // Toggling the playlist is simplest.
     [window togglePlaylist];
     [window togglePlaylist];
+}
+
++ (void)restoreWindowWithIdentifier:(NSUserInterfaceItemIdentifier)identifier 
+                              state:(NSCoder *)state 
+                  completionHandler:(void (^)(NSWindow *, NSError *))completionHandler
+{
+    if([VLCMain sharedInstance].libraryWindowController == nil) {
+        [VLCMain sharedInstance].libraryWindowController = [[VLCLibraryWindowController alloc] initWithLibraryWindow];
+    }
+
+    VLCLibraryWindow *libraryWindow = [VLCMain sharedInstance].libraryWindow;
+
+    if([identifier isEqualToString:[libraryWindow identifier]]) {
+        NSInteger rememberedSelectedLibrarySegment = [state decodeIntegerForKey:@"macosx-library-selected-segment"];
+        NSInteger rememberedSelectedLibraryViewModeSegment = [state decodeIntegerForKey:@"macosx-library-view-mode-selected-segment"];
+        NSInteger rememberedSelectedLibraryViewAudioSegment = [state decodeIntegerForKey:@"macosx-library-audio-view-selected-segment"];
+
+        [libraryWindow.segmentedTitleControl setSelectedSegment:rememberedSelectedLibrarySegment];
+        [libraryWindow.gridVsListSegmentedControl setSelectedSegment:rememberedSelectedLibraryViewModeSegment];
+        [libraryWindow.libraryAudioDataSource.segmentedControl setSelectedSegment:rememberedSelectedLibraryViewAudioSegment];
+
+        [libraryWindow segmentedControlAction:libraryWindow.navigationStack]; // Prevent actions being added to the nav stack
+        [libraryWindow.libraryAudioDataSource segmentedControlAction:libraryWindow.navigationStack];
+    }
 
+    completionHandler(libraryWindow, nil);
 }
 
 @end


=====================================
modules/gui/macosx/main/VLCMain.h
=====================================
@@ -76,7 +76,7 @@ extern NSString *VLCConfigurationChangedNotification;
 @property (readonly) VLCLogWindowController *debugMsgPanel;
 @property (readonly) VLCLibraryController *libraryController;
 @property (readonly) VLCLibraryWindow *libraryWindow;
- at property (readonly) VLCLibraryWindowController *libraryWindowController;
+ at property (readwrite) VLCLibraryWindowController *libraryWindowController;
 @property (readonly) VLCMainMenu *mainMenu;
 @property (readonly) VLCOpenWindowController *open;
 @property (readonly) VLCPlaylistController *playlistController;


=====================================
modules/gui/macosx/main/VLCMain.m
=====================================
@@ -253,7 +253,11 @@ static VLCMain *sharedInstance = nil;
 - (void)applicationDidFinishLaunching:(NSNotification *)aNotification
 {
     _launched = YES;
-    _libraryWindowController = [[VLCLibraryWindowController alloc] initWithLibraryWindow];
+
+    if (_libraryWindowController == nil) {
+        _libraryWindowController = [[VLCLibraryWindowController alloc] initWithLibraryWindow];
+    }
+    
     [_libraryWindowController.window makeKeyAndOrderFront:nil];
 
     if (!_p_intf)



View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/cd3713079038be57d8f7226ea9b42c6a74351afd

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/cd3713079038be57d8f7226ea9b42c6a74351afd
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