No functional change.
</object>
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
<bool key="EncodedWithXMLCoder">YES</bool>
+ <integer value="4756"/>
+ <integer value="4722"/>
<integer value="4850"/>
<integer value="5260"/>
- <integer value="21"/>
- <integer value="4722"/>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<int key="connectionID">4666</int>
</object>
- <object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">togglePlaylist:</string>
- <reference key="source" ref="498338108"/>
- <reference key="destination" ref="955174811"/>
- </object>
- <int key="connectionID">4674</int>
- </object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">o_split_view</string>
</object>
<int key="connectionID">5603</int>
</object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">togglePlaylist:</string>
+ <reference key="source" ref="878580547"/>
+ <reference key="destination" ref="955174811"/>
+ </object>
+ <int key="connectionID">5604</int>
+ </object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
</object>
</object>
<nil key="sourceID"/>
- <int key="maxID">5603</int>
+ <int key="maxID">5604</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
<string>dropzoneButtonAction:</string>
<string>removePodcast:</string>
<string>removePodcastWindowAction:</string>
- <string>togglePlaylist:</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>id</string>
<string>id</string>
<string>id</string>
- <string>id</string>
</object>
</object>
<object class="NSMutableDictionary" key="actionInfosByName">
<string>dropzoneButtonAction:</string>
<string>removePodcast:</string>
<string>removePodcastWindowAction:</string>
- <string>togglePlaylist:</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string key="name">removePodcastWindowAction:</string>
<string key="candidateClassName">id</string>
</object>
- <object class="IBActionInfo">
- <string key="name">togglePlaylist:</string>
- <string key="candidateClassName">id</string>
- </object>
</object>
</object>
<object class="NSMutableDictionary" key="outlets">
<string>repeat:</string>
<string>shuffle:</string>
<string>stop:</string>
+ <string>togglePlaylist:</string>
<string>volumeAction:</string>
</object>
<object class="NSMutableArray" key="dict.values">
<string>id</string>
<string>id</string>
<string>id</string>
+ <string>id</string>
</object>
</object>
<object class="NSMutableDictionary" key="actionInfosByName">
<string>repeat:</string>
<string>shuffle:</string>
<string>stop:</string>
+ <string>togglePlaylist:</string>
<string>volumeAction:</string>
</object>
<object class="NSMutableArray" key="dict.values">
<string key="name">stop:</string>
<string key="candidateClassName">id</string>
</object>
+ <object class="IBActionInfo">
+ <string key="name">togglePlaylist:</string>
+ <string key="candidateClassName">id</string>
+ </object>
<object class="IBActionInfo">
<string key="name">volumeAction:</string>
<string key="candidateClassName">id</string>
- (void)setShuffle;
- (IBAction)shuffle:(id)sender;
+- (IBAction)togglePlaylist:(id)sender;
+
- (void)toggleEffectsButton;
- (void)toggleJumpButtons;
- (void)togglePlaymodeButtons;
[self setShuffle];
}
+- (IBAction)togglePlaylist:(id)sender
+{
+ [[[VLCMain sharedInstance] mainWindow] changePlaylistState: psUserEvent];
+}
+
- (IBAction)volumeAction:(id)sender
{
if (sender == o_volume_sld)
- (IBAction)showPlaylist:(id)sender
{
- [[VLCMainWindow sharedInstance] togglePlaylist:sender];
+ [[VLCMainWindow sharedInstance] changePlaylistState: psUserMenuEvent];
}
#pragma mark -
@class VLCMainWindowControlsBar;
@class VLCVoutView;
+typedef enum {
+ psUserEvent,
+ psUserMenuEvent,
+ psVideoStartedOrStoppedEvent,
+ psPlaylistItemChangedEvent
+} VLCPlaylistStateEvent;
+
@interface VLCMainWindow : VLCVideoWindowCommon <PXSourceListDataSource, PXSourceListDelegate, NSWindowDelegate, NSAnimationDelegate, NSSplitViewDelegate> {
IBOutlet id o_search_fld;
- (VLCMainWindowControlsBar *)controlsBar;
-- (IBAction)togglePlaylist:(id)sender;
+- (void)changePlaylistState:(VLCPlaylistStateEvent)event;
- (IBAction)dropzoneButtonAction:(id)sender;
[self makeFirstResponder: [[o_video_view subviews] objectAtIndex:0]];
}
-// only exception for an controls bar button action
-- (IBAction)togglePlaylist:(id)sender
+
+- (void)changePlaylistState:(VLCPlaylistStateEvent)event
{
// Beware, this code is really ugly
- /*
- * sender can be:
- * - nil if video playback is started or stopped
- * - NSNumber with 1 if playlist item changes --> show video view
- * - sender object if triggered through menu item or button
- */
- BOOL b_unhide_videoview = NO;
- if([sender isKindOfClass: [NSNumber class]] && [sender intValue] == 1) {
- b_unhide_videoview = YES;
- sender = nil;
- }
-
- msg_Dbg(VLCIntf, "toggle playlist from state: removed splitview %i, minimized view %i. Sender is %p, unhide video view %i", b_splitview_removed, b_minimized_view, sender, b_unhide_videoview);
- if (![self isVisible] && sender != nil) {
- [self makeKeyAndOrderFront: sender];
+ msg_Dbg(VLCIntf, "toggle playlist from state: removed splitview %i, minimized view %i. Event %i", b_splitview_removed, b_minimized_view, event);
+ if (![self isVisible] && event == psUserMenuEvent) {
+ [self makeKeyAndOrderFront: nil];
return;
}
BOOL b_activeVideo = [[VLCMain sharedInstance] activeVideoPlayback];
BOOL b_restored = NO;
+ // ignore alt if triggered through main menu shortcut
BOOL b_have_alt_key = ([[NSApp currentEvent] modifierFlags] & NSAlternateKeyMask) != 0;
- if (sender && [sender isKindOfClass: [NSMenuItem class]])
+ if (event == psUserMenuEvent)
b_have_alt_key = NO;
+ // eUserMenuEvent is now handled same as eUserEvent
+ if(event == psUserMenuEvent)
+ event = psUserEvent;
+
if (b_dropzone_active && b_have_alt_key) {
[self hideDropZone];
return;
}
if (!(b_nativeFullscreenMode && b_fullscreen) && !b_splitview_removed && ((b_have_alt_key && b_activeVideo)
- || (b_nonembedded && sender != nil)
- || (!b_activeVideo && sender != nil)
- || (b_minimized_view && sender == nil && b_unhide_videoview == NO))) {
+ || (b_nonembedded && event == psUserEvent)
+ || (!b_activeVideo && event == psUserEvent)
+ || (b_minimized_view && event == psVideoStartedOrStoppedEvent))) {
// for starting playback, window is resized through resized events
// for stopping playback, resize through reset to previous frame
- [self hideSplitView: sender != nil];
+ [self hideSplitView: event != psVideoStartedOrStoppedEvent];
b_minimized_view = NO;
} else {
if (b_splitview_removed) {
- if (!b_nonembedded || (sender != nil && b_nonembedded))
- [self showSplitView: sender != nil || b_unhide_videoview];
+ if (!b_nonembedded || (event == psUserEvent && b_nonembedded))
+ [self showSplitView: event != psVideoStartedOrStoppedEvent];
- if (sender == nil)
+ if (event != psUserEvent)
b_minimized_view = YES;
else
b_minimized_view = NO;
}
if (!b_nonembedded) {
- if (([o_video_view isHidden] && b_activeVideo) || b_restored || (b_activeVideo && sender == nil))
+ if (([o_video_view isHidden] && b_activeVideo) || b_restored || (b_activeVideo && event != psUserEvent))
[self makeSplitViewHidden];
else
[self makeSplitViewVisible];
[o_fspanel setNonActive: nil];
}
}
+
+ [self changePlaylistState: psVideoStartedOrStoppedEvent];
}
#pragma mark -
#pragma mark -
#pragma mark Interface updaters
-
+// This must be called on main thread
- (void)PlaylistItemChanged
{
if (p_current_input && (p_current_input->b_dead || !vlc_object_alive(p_current_input))) {
[o_mainmenu setRateControlsEnabled: YES];
if ([self activeVideoPlayback] && [[o_mainwindow videoView] isHidden]) {
- [o_mainwindow performSelectorOnMainThread:@selector(togglePlaylist:) withObject: [NSNumber numberWithInt:1] waitUntilDone:NO];
+ [o_mainwindow changePlaylistState: psPlaylistItemChangedEvent];
}
p_input_changed = vlc_object_hold(p_current_input);
b_active_videoplayback = b_value;
if (o_mainwindow) {
[o_mainwindow performSelectorOnMainThread:@selector(setVideoplayEnabled) withObject:nil waitUntilDone:YES];
- [o_mainwindow performSelectorOnMainThread:@selector(togglePlaylist:) withObject:nil waitUntilDone:NO];
}
// update sleep blockers