From f1d59de3d51cf292623474d204dd5060f873d79c Mon Sep 17 00:00:00 2001 From: Thierry Crozat Date: Sun, 17 Mar 2013 18:14:21 +0000 Subject: OSX: Allow user to display hidden files in the browser dialog --- gui/browser.h | 1 + gui/browser_osx.mm | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) (limited to 'gui') diff --git a/gui/browser.h b/gui/browser.h index 7c098617bb..b82fe516f9 100644 --- a/gui/browser.h +++ b/gui/browser.h @@ -51,6 +51,7 @@ protected: #ifdef MACOSX const void *_titleRef; const void *_chooseRef; + const void *_hiddenFilesRef; #else ListWidget *_fileList; StaticTextWidget *_currentPath; diff --git a/gui/browser_osx.mm b/gui/browser_osx.mm index ecd60915f8..d0bbfd546d 100644 --- a/gui/browser_osx.mm +++ b/gui/browser_osx.mm @@ -31,9 +31,53 @@ #include "common/translation.h" #include +#include #include #include +@interface ShowHiddenFilesControler : NSObject { + NSOpenPanel* _panel; +} + +- (id) init; +- (void) dealloc; +- (void) setOpenPanel : (NSOpenPanel*) panel; +- (IBAction) showHiddenFiles : (id) sender; + +@end + +@implementation ShowHiddenFilesControler + +- (id) init { + self = [super init]; + _panel = 0; + + return self; +} + +- (void) dealloc { + [_panel release]; + [super dealloc]; +} + +- (void) setOpenPanel : (NSOpenPanel*) panel { + _panel = panel; + [_panel retain]; +} + + +- (IBAction) showHiddenFiles : (id) sender { + if ([sender state] == NSOnState) { + [_panel setShowsHiddenFiles: YES]; + ConfMan.setBool("gui_browser_show_hidden", true, Common::ConfigManager::kApplicationDomain); + } else { + [_panel setShowsHiddenFiles: NO]; + ConfMan.setBool("gui_browser_show_hidden", false, Common::ConfigManager::kApplicationDomain); + } +} + +@end + namespace GUI { BrowserDialog::BrowserDialog(const char *title, bool dirBrowser) @@ -56,11 +100,13 @@ BrowserDialog::BrowserDialog(const char *title, bool dirBrowser) // Convert button text to NSString _chooseRef = CFStringCreateWithCString(0, _("Choose"), stringEncoding); + _hiddenFilesRef = CFStringCreateWithCString(0, _("Show hidden files"), stringEncoding); } BrowserDialog::~BrowserDialog() { CFRelease(_titleRef); CFRelease(_chooseRef); + CFRelease(_hiddenFilesRef); } int BrowserDialog::runModal() { @@ -82,6 +128,31 @@ int BrowserDialog::runModal() { [panel setCanChooseDirectories:_isDirBrowser]; [panel setTitle:(NSString *)_titleRef]; [panel setPrompt:(NSString *)_chooseRef]; + + NSButton *shoHiddenFilesButton = 0; + ShowHiddenFilesControler *shoHiddenFilesControler = 0; + if ([panel respondsToSelector:@selector(setShowsHiddenFiles:)]) { + shoHiddenFilesButton = [[NSButton alloc] init]; + [shoHiddenFilesButton retain]; + [shoHiddenFilesButton setButtonType:NSSwitchButton]; + [shoHiddenFilesButton setTitle:(NSString *)_hiddenFilesRef]; + [shoHiddenFilesButton sizeToFit]; + if (ConfMan.getBool("gui_browser_show_hidden", Common::ConfigManager::kApplicationDomain)) { + [shoHiddenFilesButton setState:NSOnState]; + [panel setShowsHiddenFiles: YES]; + } else { + [shoHiddenFilesButton setState:NSOffState]; + [panel setShowsHiddenFiles: NO]; + } + [panel setAccessoryView:shoHiddenFilesButton]; + + shoHiddenFilesControler = [[ShowHiddenFilesControler alloc] init]; + [shoHiddenFilesControler retain]; + [shoHiddenFilesControler setOpenPanel:panel]; + [shoHiddenFilesButton setTarget:shoHiddenFilesControler]; + [shoHiddenFilesButton setAction:@selector(showHiddenFiles:)]; + } + if ([panel runModal] == NSOKButton) { NSURL *url = [panel URL]; if ([url isFileURL]) { @@ -91,6 +162,11 @@ int BrowserDialog::runModal() { } } + if (shoHiddenFilesButton != 0) + [shoHiddenFilesButton release]; + if (shoHiddenFilesControler != 0) + [shoHiddenFilesControler release]; + // If we were in fullscreen mode, switch back if (wasFullscreen) { g_system->beginGFXTransaction(); -- cgit v1.2.3 From fa7f1adf03cfea062a96976e6a1dfc25ab151278 Mon Sep 17 00:00:00 2001 From: Thierry Crozat Date: Tue, 9 Apr 2013 22:52:14 +0100 Subject: OSX: Fix memory leaks --- gui/browser_osx.mm | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) (limited to 'gui') diff --git a/gui/browser_osx.mm b/gui/browser_osx.mm index d0bbfd546d..97521862fe 100644 --- a/gui/browser_osx.mm +++ b/gui/browser_osx.mm @@ -133,7 +133,6 @@ int BrowserDialog::runModal() { ShowHiddenFilesControler *shoHiddenFilesControler = 0; if ([panel respondsToSelector:@selector(setShowsHiddenFiles:)]) { shoHiddenFilesButton = [[NSButton alloc] init]; - [shoHiddenFilesButton retain]; [shoHiddenFilesButton setButtonType:NSSwitchButton]; [shoHiddenFilesButton setTitle:(NSString *)_hiddenFilesRef]; [shoHiddenFilesButton sizeToFit]; @@ -147,7 +146,6 @@ int BrowserDialog::runModal() { [panel setAccessoryView:shoHiddenFilesButton]; shoHiddenFilesControler = [[ShowHiddenFilesControler alloc] init]; - [shoHiddenFilesControler retain]; [shoHiddenFilesControler setOpenPanel:panel]; [shoHiddenFilesButton setTarget:shoHiddenFilesControler]; [shoHiddenFilesButton setAction:@selector(showHiddenFiles:)]; @@ -162,10 +160,8 @@ int BrowserDialog::runModal() { } } - if (shoHiddenFilesButton != 0) - [shoHiddenFilesButton release]; - if (shoHiddenFilesControler != 0) - [shoHiddenFilesControler release]; + [shoHiddenFilesButton release]; + [shoHiddenFilesControler release]; // If we were in fullscreen mode, switch back if (wasFullscreen) { -- cgit v1.2.3