diff --git a/docs/Contributors.txt b/docs/Contributors.txt index 979adcc589..add2e7448d 100644 --- a/docs/Contributors.txt +++ b/docs/Contributors.txt @@ -41,6 +41,7 @@ Grzegorz Zakrzewski Hans-Joachim Ott Hwang Weng Sun Ido Kanner +James Chandler Jr. Jan Foster Jason King Jeffrey A. Wormsley diff --git a/lcl/interfaces/carbon/carbongdiobjects.pp b/lcl/interfaces/carbon/carbongdiobjects.pp index fcccf184be..fd4ec45c72 100644 --- a/lcl/interfaces/carbon/carbongdiobjects.pp +++ b/lcl/interfaces/carbon/carbongdiobjects.pp @@ -197,14 +197,14 @@ const kThemeUndefCursor = ThemeCursor(-1); // undefined mac theme cursor CursorToThemeCursor: array[crLow..crHigh] of ThemeCursor = - ({crSizeSE } kThemeResizeLeftCursor, {!!} + ({crSizeSE } kThemeResizeRightCursor, {!!} {crSizeS } kThemeResizeDownCursor, - {crSizeSW } kThemeResizeRightCursor, {!!} - {crSizeE } kThemeResizeLeftCursor, - {crSizeW } kThemeResizeRightCursor, - {crSizeNE } kThemeResizeLeftCursor, {!!} + {crSizeSW } kThemeResizeLeftCursor, {!!} + {crSizeE } kThemeResizeRightCursor, + {crSizeW } kThemeResizeLeftCursor, + {crSizeNE } kThemeResizeRightCursor, {!!} {crSizeN } kThemeResizeUpCursor, - {crSizeNW } kThemeResizeRightCursor, {!!} + {crSizeNW } kThemeResizeLeftCursor, {!!} {crSizeAll } kThemeUndefCursor, // will be loaded from resource {crHandPoint } kThemePointingHandCursor, {crHelp } kThemeUndefCursor, // will be loaded from resource @@ -220,7 +220,7 @@ const {crUpArrow } kThemeUndefCursor, // will be loaded from resource {crSizeWE } kThemeResizeLeftRightCursor, {crSizeNWSE } kThemeResizeLeftRightCursor, {!!} - {crSizeNS } kThemeResizeLeftRightCursor, {!!} + {crSizeNS } kThemeResizeUpDownCursor, {!!} {crSizeNESW } kThemeResizeLeftRightCursor, {!!} {undefined } kThemeArrowCursor, {!!} {crIBeam } kThemeIBeamCursor, diff --git a/lcl/interfaces/carbon/carbonint.pas b/lcl/interfaces/carbon/carbonint.pas index 2c670cfa01..658568e2b6 100644 --- a/lcl/interfaces/carbon/carbonint.pas +++ b/lcl/interfaces/carbon/carbonint.pas @@ -112,6 +112,7 @@ type public procedure SetMainMenuEnabled(AEnabled: Boolean); procedure SetRootMenu(const AMenu: TMainMenu); + property MainMenu: TMainMenu read FMainMenu; public procedure SetCaptureWidget(const AWidget: HWND); end; diff --git a/lcl/interfaces/carbon/carbonprivatewindow.inc b/lcl/interfaces/carbon/carbonprivatewindow.inc index e675562fd9..9e978905f2 100644 --- a/lcl/interfaces/carbon/carbonprivatewindow.inc +++ b/lcl/interfaces/carbon/carbonprivatewindow.inc @@ -1401,8 +1401,9 @@ begin SetWindowModality(WindowRef(Widget), kWindowModalityAppModal, nil), Self, 'ShowModal', SSetModality); - CarbonWidgetSet.SetMainMenuEnabled(False); SelectWindow(WindowRef(Widget)); + if CarbonWidgetSet.MainMenu <> (LCLObject as TCustomForm).Menu then + CarbonWidgetSet.SetMainMenuEnabled(False); end; {------------------------------------------------------------------------------ diff --git a/lcl/interfaces/carbon/carbonwsdialogs.pp b/lcl/interfaces/carbon/carbonwsdialogs.pp index 2fe8f132fd..35fa1d1b34 100644 --- a/lcl/interfaces/carbon/carbonwsdialogs.pp +++ b/lcl/interfaces/carbon/carbonwsdialogs.pp @@ -171,6 +171,46 @@ begin //DebugLn('FilterCallback ' + DbgS(FilterMask) + ' ' + ExtractFilename(FilePath) + ' ' + DbgS(Result)); end; {FilterCallback} +procedure NavDialogCallback(CallBackSelector: NavEventCallbackMessage; + CallBackParms: NavCBRecPtr; CallBackUD: UnivPtr); stdcall; +var + Dir: AEDesc; + DirRef: FSRef; + DirURL: CFURLRef; + DirCFStr: CFStringRef; +const + SName = 'NavDialogCallback'; +begin + //DebugLn('NavDialogCallback ' + DbgS(CallbackUD)); + if CallbackUD = nil then // No user data passed? + Exit; + + case CallBackSelector of + kNavCBStart: + begin + // Set InitialDir + if DirectoryExists(TFileDialog(CallbackUD).InitialDir) then + begin + //DebugLn('Set InitialDir ' + TFileDialog(CallbackUD).InitialDir); + CreateCFString(TFileDialog(CallbackUD).InitialDir, DirCFStr); + try + DirURL := CFURLCreateWithFileSystemPath(nil, DirCFStr, + kCFURLPOSIXPathStyle, True); + finally + FreeCFString(DirCFStr); + end; + + if DirURL <> nil then + if CFURLGetFSRef(DirURL, DirRef) then + if not OSError(AECreateDesc(typeFSRef, @DirRef, SizeOf(FSRef), Dir), + SName, 'AECreateDesc') then + OSError(NavCustomControl(CallBackParms^.context, kNavCtlSetLocation, @Dir), + SName, 'NavCustomControl'); + end; + end; + end; +end; + {------------------------------------------------------------------------------ Method: TCarbonWSFileDialog.ShowModal @@ -184,12 +224,12 @@ end; {FilterCallback} class procedure TCarbonWSFileDialog.ShowModal(const ACommonDialog: TCommonDialog); { Called by Execute method of TOpenDialog, TSaveDialog and TSelectDirectoryDialog. - TODO: Figure out how to use dialog's InitialDir property. } var FileDialog: TFileDialog; CreationOptions: NavDialogCreationOptions; FilterUPP: NavObjectFilterUPP; + NavDialogUPP: NavEventUPP; DialogRef: NavDialogRef; DialogReply: NavReplyRecord; FileCount: Integer; @@ -218,6 +258,7 @@ begin FileDialog.UserChoice := mrCancel; // Return this if user cancels or we need to exit FilterUPP := NewNavObjectFilterUPP(NavObjectFilterProcPtr(@FilterCallback)); + NavDialogUPP := NewNavEventUPP(NavEventProcPtr(@NavDialogCallback)); // user cannot pick individual filter -> use all Filters := TParseStringList.Create(FileDialog.Filter, '|'); @@ -249,14 +290,14 @@ begin // Create Save dialog if OSError( - NavCreatePutFileDialog(@CreationOptions, 0, 0, nil, nil, DialogRef), + NavCreatePutFileDialog(@CreationOptions, 0, 0, NavDialogUPP, nil, DialogRef), Self, SShowModal, 'NavCreatePutFileDialog') then Exit; end else if FileDialog is TSelectDirectoryDialog then // Create Choose folder dialog begin if OSError( - NavCreateChooseFolderDialog(@CreationOptions, nil, + NavCreateChooseFolderDialog(@CreationOptions, NavDialogUPP, FilterUPP, UnivPtr(FileDialog), DialogRef), Self, SShowModal, 'NavCreateChooseFolderDialog') then Exit; end @@ -272,7 +313,7 @@ begin // Create Open dialog if OSError( - NavCreateGetFileDialog(@CreationOptions, nil, nil, nil, + NavCreateGetFileDialog(@CreationOptions, nil, NavDialogUPP, nil, FilterUPP, UnivPtr(FileDialog), DialogRef), Self, SShowModal, 'NavCreateGetFileDialog') then Exit; end; @@ -338,6 +379,7 @@ begin finally FreeAndNil(FilterMask); DisposeNavObjectFilterUPP(FilterUPP); + DisposeNavEventUPP(NavDialogUPP); FreeCFString(CreationOptions.windowTitle); FreeCFString(CreationOptions.saveFileName); end;