diff --git a/mozilla/camino/PreferencePanes/Navigation/English.lproj/Navigation.nib/classes.nib b/mozilla/camino/PreferencePanes/Navigation/English.lproj/Navigation.nib/classes.nib index 6edde0c73f8..58772eb36a2 100644 --- a/mozilla/camino/PreferencePanes/Navigation/English.lproj/Navigation.nib/classes.nib +++ b/mozilla/camino/PreferencePanes/Navigation/English.lproj/Navigation.nib/classes.nib @@ -17,10 +17,10 @@ checkboxClicked = id; checkboxStartPageClicked = id; checkboxUseSystemHomePageClicked = id; + chooseDownloadFolder = id; clearDiskCache = id; clearGlobalHistory = id; historyDaysModified = id; - openSystemInternetPanel = id; }; CLASS = OrgMozillaChimeraPreferenceNavigation; LANGUAGE = ObjC; @@ -29,13 +29,12 @@ checkboxNewTabBlank = NSButton; checkboxNewWindowBlank = NSButton; checkboxUseSystemHomePage = NSButton; - mDownloadFolder = NSTextField; + mDownloadFolder = NSPopUpButton; mEnableHelperApps = NSButton; radioOpenForAE = id; radioOpenTabsForCommand = id; textFieldHistoryDays = NSTextField; textFieldHomePage = NSTextField; - textFieldSearchPage = NSTextField; }; SUPERCLASS = PreferencePaneBase; }, diff --git a/mozilla/camino/PreferencePanes/Navigation/English.lproj/Navigation.nib/info.nib b/mozilla/camino/PreferencePanes/Navigation/English.lproj/Navigation.nib/info.nib index be395de9096..9fe796d82fe 100644 --- a/mozilla/camino/PreferencePanes/Navigation/English.lproj/Navigation.nib/info.nib +++ b/mozilla/camino/PreferencePanes/Navigation/English.lproj/Navigation.nib/info.nib @@ -5,7 +5,7 @@ IBDocumentLocation 140 56 522 320 0 0 1280 1002 IBFramework Version - 291.0 + 349.0 IBGroupedObjects 5 @@ -22,6 +22,6 @@ 5 IBSystem Version - 6I32 + 7D24 diff --git a/mozilla/camino/PreferencePanes/Navigation/English.lproj/Navigation.nib/objects.nib b/mozilla/camino/PreferencePanes/Navigation/English.lproj/Navigation.nib/objects.nib index a4ba1802454..140396ae58f 100644 Binary files a/mozilla/camino/PreferencePanes/Navigation/English.lproj/Navigation.nib/objects.nib and b/mozilla/camino/PreferencePanes/Navigation/English.lproj/Navigation.nib/objects.nib differ diff --git a/mozilla/camino/PreferencePanes/Navigation/Navigation.h b/mozilla/camino/PreferencePanes/Navigation/Navigation.h index 4d8d66417ec..b1d365e05b6 100644 --- a/mozilla/camino/PreferencePanes/Navigation/Navigation.h +++ b/mozilla/camino/PreferencePanes/Navigation/Navigation.h @@ -25,9 +25,7 @@ @interface OrgMozillaChimeraPreferenceNavigation : PreferencePaneBase { - // IBOutlet NSButton *buttonSystemPreferences; IBOutlet NSTextField *textFieldHomePage; - IBOutlet NSTextField *textFieldSearchPage; IBOutlet NSButton *checkboxUseSystemHomePage; IBOutlet NSButton *checkboxNewTabBlank; @@ -39,23 +37,16 @@ IBOutlet NSTextField *textFieldHistoryDays; - IBOutlet NSTextField* mDownloadFolder; + IBOutlet NSPopUpButton* mDownloadFolder; IBOutlet NSButton* mEnableHelperApps; } -- (IBAction)openSystemInternetPanel:(id)sender; - (IBAction)checkboxClicked:(id)sender; - (IBAction)checkboxUseSystemHomePageClicked:(id)sender; - (IBAction)checkboxStartPageClicked:(id)sender; - (IBAction)historyDaysModified:(id)sender; - (IBAction)clearGlobalHistory:(id)sender; - -- (NSString*)getSystemHomePage; -- (NSString*)getCurrentHomePage; - -- (NSString*)getSystemSearchPage; -- (NSString*)getCurrentSearchPage; - --(IBAction) clearDiskCache:(id)aSender; +- (IBAction)chooseDownloadFolder:(id)sender; +- (IBAction)clearDiskCache:(id)aSender; @end diff --git a/mozilla/camino/PreferencePanes/Navigation/Navigation.mm b/mozilla/camino/PreferencePanes/Navigation/Navigation.mm index 81be38aa1fb..c07624ad356 100644 --- a/mozilla/camino/PreferencePanes/Navigation/Navigation.mm +++ b/mozilla/camino/PreferencePanes/Navigation/Navigation.mm @@ -22,6 +22,7 @@ */ #import +#import #import "Navigation.h" #import "NSString+Utils.h" @@ -39,6 +40,10 @@ const int kDefaultExpireDays = 9; - (NSString*)getInternetConfigString:(ConstStr255Param)icPref; - (NSString*)getDownloadFolderDescription; +- (void)setupDownloadMenuWithPath:(NSString*)inDLPath; +- (NSString*)getSystemHomePage; +- (NSString*)getCurrentHomePage; +- (void)setDownloadFolder:(NSString*)inNewFolder; @end @@ -80,29 +85,24 @@ const int kDefaultExpireDays = 9; [radioOpenTabsForCommand selectCellWithTag:[self getBooleanPref:"browser.tabs.opentabfor.middleclick" withSuccess:&gotPref]]; [radioOpenForAE selectCellWithTag:[self getIntPref:"browser.reuse_window" withSuccess:&gotPref]]; -// [checkboxOpenTabs setState:[self getBooleanPref:"browser.tabs.opentabfor.middleclick" withSuccess:&gotPref]]; -// [checkboxOpenTabsForAEs setState:[self getBooleanPref:"browser.always_reuse_window" withSuccess:&gotPref]]; - [checkboxLoadTabsInBackground setState:[self getBooleanPref:"browser.tabs.loadInBackground" withSuccess:&gotPref]]; BOOL useSystemHomePage = [self getBooleanPref:"chimera.use_system_home_page" withSuccess:&gotPref] && gotPref; if (useSystemHomePage) - { [textFieldHomePage setEnabled:NO]; - [textFieldSearchPage setEnabled:NO]; - } [checkboxUseSystemHomePage setState:useSystemHomePage]; [textFieldHomePage setStringValue: [self getCurrentHomePage]]; - [textFieldSearchPage setStringValue: [self getCurrentSearchPage]]; [mEnableHelperApps setState:[self getBooleanPref:"browser.download.autoDispatch" withSuccess:&gotPref]]; NSString* downloadFolderDesc = [self getDownloadFolderDescription]; if ([downloadFolderDesc length] == 0) downloadFolderDesc = [self getLocalizedString:@"MissingDlFolder"]; - - [mDownloadFolder setStringValue:[self getDownloadFolderDescription]]; + + [self setupDownloadMenuWithPath:downloadFolderDesc]; + +// [mDownloadFolder setStringValue:[self getDownloadFolderDescription]]; } - (void) didUnselect @@ -112,24 +112,13 @@ const int kDefaultExpireDays = 9; // only save the home page pref if it's not the system one if (![checkboxUseSystemHomePage state]) - { [self setPref: "browser.startup.homepage" toString: [textFieldHomePage stringValue]]; - [self setPref: "chimera.search_page" toString: [textFieldSearchPage stringValue]]; - } // ensure that the prefs exist [self setPref:"browser.startup.page" toInt: [checkboxNewWindowBlank state] ? 1 : 0]; [self setPref:"browser.tabs.startPage" toInt: [checkboxNewTabBlank state] ? 1 : 0]; } -- (IBAction)openSystemInternetPanel:(id)sender -{ - if ([[NSWorkspace sharedWorkspace] openFile:@"/System/Library/PreferencePanes/Internet.prefPane"] == NO) { - // XXXw. pop up a dialog warning that System Preferences couldn't be launched? - NSLog(@"Failed to launch System Preferences."); - } -} - - (IBAction)checkboxClicked:(id)sender { if (!mPrefService) @@ -159,17 +148,12 @@ const int kDefaultExpireDays = 9; // save the mozilla pref if (useSystemHomePage) - { [self setPref: "browser.startup.homepage" toString: [textFieldHomePage stringValue]]; - [self setPref: "chimera.search_page" toString: [textFieldSearchPage stringValue]]; - } [self setPref:"chimera.use_system_home_page" toBoolean: useSystemHomePage]; [textFieldHomePage setStringValue: [self getCurrentHomePage]]; - [textFieldSearchPage setStringValue: [self getCurrentSearchPage]]; [textFieldHomePage setEnabled:!useSystemHomePage]; - [textFieldSearchPage setEnabled:!useSystemHomePage]; } - (IBAction)checkboxStartPageClicked:(id)sender @@ -237,34 +221,69 @@ const int kDefaultExpireDays = 9; nsresult rv = macDir->GetFSRef(&folderRef); if (NS_FAILED(rv)) return downloadStr; - - FSCatalogInfo catInfo; - HFSUniStr255 fileName; - OSErr err = FSGetCatalogInfo(&folderRef, kFSCatInfoVolume, &catInfo, &fileName, NULL, NULL); - if (err != noErr) - return downloadStr; - - HFSUniStr255 volName; - err = FSGetVolumeInfo(catInfo.volume, 0, NULL, kFSVolInfoNone, NULL, &volName, NULL); - if (err != noErr) - return downloadStr; - - NSString* fileNameStr = [NSString stringWithCharacters:fileName.unicode length:fileName.length]; - NSString* volumeNameStr = [NSString stringWithCharacters:volName.unicode length:volName.length]; - - return [NSString stringWithFormat:[self getLocalizedString:@"DownloadFolderDesc"], fileNameStr, volumeNameStr]; + UInt8 utf8path[MAXPATHLEN+1]; + ::FSRefMakePath(&folderRef, utf8path, MAXPATHLEN); + return [NSString stringWithUTF8String:(const char*)utf8path]; } +// +// -setDownloadFolder: +// +// Sets the IC download pref to the given path +// NOTE: THIS DOES NOT WORK. +// +- (void)setDownloadFolder:(NSString*)inNewFolder +{ + if (!inNewFolder) + return; + + // it would be nice to use PreferenceManager, but I don't want to drag + // all that code into the plugin + ICInstance icInstance = nil; + OSStatus error = ::ICStart(&icInstance, 'CHIM'); + if (error != noErr) + return; + + // make a ICFileSpec out of our path and shove it into IC + NSMutableString* carbonPath = [NSMutableString stringWithString:inNewFolder]; + [carbonPath replaceOccurrencesOfString:@"/" withString:@":" options:0 range:NSMakeRange(0, [carbonPath length])]; +NSLog(@"carbon path is %@", carbonPath); +// const char* utf8str = [inNewFolder UTF8String]; + const char* utf8str = "Vespa:Users:pink:Desktop:"; + unsigned len = strlen(utf8str); + if (len > 255) + len = 255; + + char buff[256]; + strncpy(&buff[1], utf8str, len); + buff[0] = len; + FSSpec downloadSpec; + FSMakeFSSpec(0, 0, (unsigned char*)buff, &downloadSpec); + + long prefSize = sizeof(ICFileSpec); + AliasHandle alias = nil; + error = ::NewAlias(nil, &downloadSpec, &alias); + NSLog(@"alias is %ld error is %d", alias, error); + + long aliasSize = ::GetHandleSize((Handle)alias); + ICFileSpec* realbuffer = (ICFileSpec*) new char[sizeof(ICFileSpec) + aliasSize]; + realbuffer->fss = downloadSpec; + memcpy(&realbuffer->alias, *alias, aliasSize); + + error = ::ICSetPref(icInstance, kICDownloadFolder, kICAttrNoChange, (const void*)realbuffer, prefSize); + NSLog(@"error is %d", error); + + ::ICStop(icInstance); +} - (NSString*)getInternetConfigString:(ConstStr255Param)icPref { NSString* resultString = @""; ICInstance icInstance = NULL; - OSStatus error; // it would be nice to use PreferenceManager, but I don't want to drag // all that code into the plugin - error = ICStart(&icInstance, 'CHIM'); + OSStatus error = ICStart(&icInstance, 'CHIM'); if (error != noErr) { NSLog(@"Error from ICStart"); return resultString; @@ -299,21 +318,6 @@ const int kDefaultExpireDays = 9; return [self getStringPref: "browser.startup.homepage" withSuccess:&gotPref]; } -- (NSString*)getSystemSearchPage -{ - return [self getInternetConfigString:kICWebSearchPagePrefs]; -} - -- (NSString*)getCurrentSearchPage -{ - BOOL gotPref; - - if ([self getBooleanPref:"chimera.use_system_home_page" withSuccess:&gotPref] && gotPref) - return [self getSystemSearchPage]; - - return [self getStringPref: "chimera.search_page" withSuccess:&gotPref]; -} - // // clearDiskCache: @@ -327,9 +331,67 @@ const int kDefaultExpireDays = 9; cacheServ->EvictEntries(nsICache::STORE_ON_DISK); } - -- (IBAction)checkboxEnableHelperApps:(id)sender +// +// -setupDownloadMenuWithPath: +// +// Given a full path to the d/l dir, display the leaf name and the finder icon associated +// with that folder in the first item of the download folder popup. +// +- (void)setupDownloadMenuWithPath:(NSString*)inDLPath { + NSMenuItem* placeholder = [mDownloadFolder itemAtIndex:0]; + if (!placeholder) + return; + + // get the finder icon and scale it down to 16x16 + NSImage* icon = [[NSWorkspace sharedWorkspace] iconForFile:inDLPath]; + [icon setScalesWhenResized:YES]; + [icon setSize:NSMakeSize(16.0, 16.0)]; + // set the title to the leaf name and the icon to what we gathered above + [placeholder setTitle:[inDLPath lastPathComponent]]; + [placeholder setImage:icon]; + + // ensure first item is selected + [mDownloadFolder selectItemAtIndex:0]; +} + +// +// -chooseDownloadFolder: +// +// display a file picker sheet allowing the user to set their new download folder +// +- (IBAction)chooseDownloadFolder:(id)sender +{ + NSString* oldDLFolder = [self getDownloadFolderDescription]; + NSOpenPanel* panel = [NSOpenPanel openPanel]; + [panel setCanChooseFiles:NO]; + [panel setCanChooseDirectories:YES]; + [panel setAllowsMultipleSelection:NO]; + + [panel beginSheetForDirectory:oldDLFolder file:nil types:nil modalForWindow:[mDownloadFolder window] + modalDelegate:self didEndSelector:@selector(openPanelDidEnd:returnCode:contextInfo:) + contextInfo:nil]; +} + +// +// -openPanelDidEnd:returnCode:contextInfo: +// +// called when the user closes the open panel sheet for selecting a new d/l folder. +// if they clicked ok, change the IC pref and re-display the new choice in the +// popup menu +// +- (void)openPanelDidEnd:(NSOpenPanel*)sheet returnCode:(int)returnCode contextInfo:(void*)contextInfo +{ + if (returnCode == NSOKButton) { + // stuff path into pref + NSString* newPath = [[sheet filenames] objectAtIndex:0]; + [self setDownloadFolder:newPath]; + + // update the menu + [self setupDownloadMenuWithPath:newPath]; + } + else + [mDownloadFolder selectItemAtIndex:0]; } @end