vlc | branch: master | Felix Paul Kühne <[email protected]> | Thu Jun 21 17:26:04 2012 +0200| [ce2b23f7e82e4571d59eb90428641e00df9560e0] | committer: Felix Paul Kühne
macosx: reimplemented the right-click Reveal-in-Finder feature on the window title when using the dark interface style > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=ce2b23f7e82e4571d59eb90428641e00df9560e0 --- configure.ac | 2 +- .../macosx/Resources/English.lproj/MainMenu.xib | 19 ++- modules/gui/macosx/CompatibilityFixes.h | 4 + modules/gui/macosx/MainWindowTitle.h | 7 ++ modules/gui/macosx/MainWindowTitle.m | 121 ++++++++++++++++++++ 5 files changed, 146 insertions(+), 7 deletions(-) diff --git a/configure.ac b/configure.ac index 3b66640..da7a386 100644 --- a/configure.ac +++ b/configure.ac @@ -3731,7 +3731,7 @@ then VLC_ADD_OBJCFLAGS([macosx minimal_macosx], [-fobjc-exceptions] ) VLC_ADD_PLUGIN([macosx minimal_macosx]) - VLC_ADD_LIBS([macosx], [-Wl,-framework,QTKit -Wl,-framework,IOKit -Wl,-framework,AddressBook -Wl,-framework,WebKit -Wl,-framework,CoreAudio]) + VLC_ADD_LIBS([macosx], [-Wl,-framework,QTKit -Wl,-framework,IOKit -Wl,-framework,AddressBook -Wl,-framework,WebKit -Wl,-framework,CoreAudio -Wl,-framework,SystemConfiguration]) if test ! -d ${CONTRIB_DIR}/Sparkle.framework then diff --git a/extras/package/macosx/Resources/English.lproj/MainMenu.xib b/extras/package/macosx/Resources/English.lproj/MainMenu.xib index f91e565..d13520c 100644 --- a/extras/package/macosx/Resources/English.lproj/MainMenu.xib +++ b/extras/package/macosx/Resources/English.lproj/MainMenu.xib @@ -2,7 +2,7 @@ <archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10"> <data> <int key="IBDocument.SystemTarget">1050</int> - <string key="IBDocument.SystemVersion">11E53</string> + <string key="IBDocument.SystemVersion">11G15</string> <string key="IBDocument.InterfaceBuilderVersion">851</string> <string key="IBDocument.AppKitVersion">1138.47</string> <string key="IBDocument.HIToolboxVersion">569.00</string> @@ -21,16 +21,16 @@ </object> <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="915"/> - <integer value="2770"/> - <integer value="4722"/> + <integer value="4596"/> <integer value="4850"/> + <integer value="915"/> <integer value="5100"/> - <integer value="1617"/> - <integer value="4596"/> <integer value="4948"/> <integer value="2730"/> <integer value="4756"/> + <integer value="2770"/> + <integer value="1617"/> + <integer value="4722"/> </object> <object class="NSArray" key="IBDocument.PluginDependencies"> <bool key="EncodedWithXMLCoder">YES</bool> @@ -11859,6 +11859,7 @@ LCAuLi4</string> <string>4898.CustomClassName</string> <string>4898.IBPluginDependency</string> <string>4898.IBViewBoundsToFrameTransform</string> + <string>4899.CustomClassName</string> <string>4899.IBPluginDependency</string> <string>4899.IBViewBoundsToFrameTransform</string> <string>4900.IBPluginDependency</string> @@ -12773,6 +12774,7 @@ LCAuLi4</string> <object class="NSAffineTransform"> <bytes key="NSTransformStruct">P4AAAL+AAABDv4AAwYAAAA</bytes> </object> + <string>VLCWindowTitleTextField</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <object class="NSAffineTransform"> <bytes key="NSTransformStruct">P4AAAL+AAABCggAAwZAAAA</bytes> @@ -18054,6 +18056,11 @@ LCAuLi4</string> <string key="superclassName">NSButtonCell</string> <reference key="sourceIdentifier" ref="672431580"/> </object> + <object class="IBPartialClassDescription"> + <string key="className">VLCWindowTitleTextField</string> + <string key="superclassName">NSTextField</string> + <reference key="sourceIdentifier" ref="672431580"/> + </object> </object> <object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+"> <bool key="EncodedWithXMLCoder">YES</bool> diff --git a/modules/gui/macosx/CompatibilityFixes.h b/modules/gui/macosx/CompatibilityFixes.h index b4d85d9..cf27f38 100644 --- a/modules/gui/macosx/CompatibilityFixes.h +++ b/modules/gui/macosx/CompatibilityFixes.h @@ -75,6 +75,10 @@ extern OSErr UpdateSystemActivity(UInt8 activity); - (void)setPresentationOptions:(NSApplicationPresentationOptions)newOptions; - (NSApplicationPresentationOptions)currentSystemPresentationOptions; @end + +@interface NSURL (IntroducedInSnowLeopard) +- (NSArray *)pathComponents; +@end #endif #pragma mark - diff --git a/modules/gui/macosx/MainWindowTitle.h b/modules/gui/macosx/MainWindowTitle.h index fb85ff5..68e61c4 100644 --- a/modules/gui/macosx/MainWindowTitle.h +++ b/modules/gui/macosx/MainWindowTitle.h @@ -103,3 +103,10 @@ { } @end + +@interface VLCWindowTitleTextField : NSTextField +{ + NSMenu * contextMenu; +} + +@end diff --git a/modules/gui/macosx/MainWindowTitle.m b/modules/gui/macosx/MainWindowTitle.m index 55cb1f7..41e6381 100644 --- a/modules/gui/macosx/MainWindowTitle.m +++ b/modules/gui/macosx/MainWindowTitle.m @@ -26,6 +26,7 @@ #import "MainWindowTitle.h" #import "CoreInteraction.h" #import "CompatibilityFixes.h" +#import <SystemConfiguration/SystemConfiguration.h> // for the revealInFinder clone /***************************************************************************** * VLCMainWindowTitleView @@ -453,3 +454,123 @@ #endif @end + + +@implementation VLCWindowTitleTextField + +- (void)dealloc +{ + if (contextMenu) + [contextMenu release]; + + [super dealloc]; +} + +- (void)showRightClickMenuWithEvent:(NSEvent *)o_event +{ + if (contextMenu) + [contextMenu release]; + + NSURL * representedURL = [[self window] representedURL]; + if (! representedURL) + return; + + NSArray * pathComponents; + + if (OSX_SNOW_LEOPARD || OSX_LION) + pathComponents = [representedURL pathComponents]; + else + pathComponents = [[representedURL path] pathComponents]; + + if (!pathComponents) + return; + + contextMenu = [[NSMenu alloc] initWithTitle: [[NSFileManager defaultManager] displayNameAtPath: [representedURL path]]]; + + NSUInteger count = [pathComponents count]; + NSImage * icon; + NSMenuItem * currentItem; + NSMutableString * currentPath; + NSSize iconSize = NSMakeSize( 16., 16. ); + for (NSUInteger i = count - 1; i > 0; i--) { + currentPath = [NSMutableString stringWithCapacity:1024]; + for (NSUInteger y = 0; y < i; y++) + [currentPath appendFormat: @"/%@", [pathComponents objectAtIndex:y + 1]]; + + [contextMenu addItemWithTitle: [[NSFileManager defaultManager] displayNameAtPath: currentPath] action:@selector(revealInFinder:) keyEquivalent:@""]; + currentItem = [contextMenu itemAtIndex:[contextMenu numberOfItems] - 1]; + [currentItem setTarget: self]; + + icon = [[NSWorkspace sharedWorkspace] iconForFile:currentPath]; + [icon setSize: iconSize]; + [currentItem setImage: icon]; + } + + if ([[pathComponents objectAtIndex: 1] isEqualToString:@"Users"]) { + /* we're on the boot drive, so add it is since it isn't part of the components */ + [contextMenu addItemWithTitle: [[NSFileManager defaultManager] displayNameAtPath:@"/"] action:@selector(revealInFinder:) keyEquivalent:@""]; + currentItem = [contextMenu itemAtIndex: [contextMenu numberOfItems] - 1]; + icon = [[NSWorkspace sharedWorkspace] iconForFile:@"/"]; + [icon setSize: iconSize]; + [currentItem setImage: icon]; + [currentItem setTarget: self]; + } + + /* add the computer item */ + [contextMenu addItemWithTitle: [(NSString*)SCDynamicStoreCopyComputerName(NULL, NULL) autorelease] action:@selector(revealInFinder:) keyEquivalent:@""]; + currentItem = [contextMenu itemAtIndex: [contextMenu numberOfItems] - 1]; + icon = [NSImage imageNamed: NSImageNameComputer]; + [icon setSize: iconSize]; + [currentItem setImage: icon]; + [currentItem setTarget: self]; + + [NSMenu popUpContextMenu: contextMenu withEvent: o_event forView: [self superview]]; +} + +- (IBAction)revealInFinder:(id)sender +{ + NSUInteger count = [contextMenu numberOfItems]; + NSUInteger selectedItem = [contextMenu indexOfItem: sender]; + + if (selectedItem == count - 1) // the fake computer item + { + [[NSWorkspace sharedWorkspace] selectFile: @"/" inFileViewerRootedAtPath: @""]; + return; + } + + NSURL * representedURL = [[self window] representedURL]; + if (! representedURL) + return; + + if (selectedItem == 0) // the actual file, let's save time + { + [[NSWorkspace sharedWorkspace] selectFile: [representedURL path] inFileViewerRootedAtPath: [representedURL path]]; + return; + } + + NSArray * pathComponents; + if (OSX_SNOW_LEOPARD || OSX_LION) + pathComponents = [representedURL pathComponents]; + else + pathComponents = [[representedURL path] pathComponents]; + if (!pathComponents) + return; + + NSMutableString * currentPath; + currentPath = [NSMutableString stringWithCapacity:1024]; + selectedItem = count - selectedItem; + for (NSUInteger y = 1; y < selectedItem; y++) + [currentPath appendFormat: @"/%@", [pathComponents objectAtIndex:y]]; + + [[NSWorkspace sharedWorkspace] selectFile: currentPath inFileViewerRootedAtPath: currentPath]; +} + +- (void)rightMouseDown:(NSEvent *)o_event +{ + if( [o_event type] == NSRightMouseDown ) + [self showRightClickMenuWithEvent:o_event]; + + [super mouseDown: o_event]; +} + +@end _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
