diff options
3 files changed, 34 insertions, 17 deletions
diff --git a/main/src/addins/MacPlatform/Dialogs/MacAddFileDialogHandler.cs b/main/src/addins/MacPlatform/Dialogs/MacAddFileDialogHandler.cs index 8430aef2c6..6d5506a553 100644 --- a/main/src/addins/MacPlatform/Dialogs/MacAddFileDialogHandler.cs +++ b/main/src/addins/MacPlatform/Dialogs/MacAddFileDialogHandler.cs @@ -77,8 +77,8 @@ namespace MonoDevelop.Platform.Mac popup.AddItem (b); } - var action = panel.RunModal (); - if (action == 0) { + var action = MacSelectFileDialogHandler.RunPanel (data, panel); + if (!action) { GtkQuartz.FocusWindow (data.TransientFor ?? MessageService.RootWindow); return false; } diff --git a/main/src/addins/MacPlatform/Dialogs/MacOpenFileDialogHandler.cs b/main/src/addins/MacPlatform/Dialogs/MacOpenFileDialogHandler.cs index a7bc98391e..b170b8aa92 100644 --- a/main/src/addins/MacPlatform/Dialogs/MacOpenFileDialogHandler.cs +++ b/main/src/addins/MacPlatform/Dialogs/MacOpenFileDialogHandler.cs @@ -48,7 +48,8 @@ namespace MonoDevelop.Platform.Mac NSSavePanel panel = null; try { - bool directoryMode = data.Action != Gtk.FileChooserAction.Open; + bool directoryMode = data.Action != Gtk.FileChooserAction.Open + && data.Action != Gtk.FileChooserAction.Save; if (data.Action == Gtk.FileChooserAction.Save) { panel = new NSSavePanel (); @@ -76,7 +77,7 @@ namespace MonoDevelop.Platform.Mac var filterLabel = new MDAlignment (new MDLabel (GettextCatalog.GetString ("Show files:")), true); var filterBox = new MDBox (LayoutDirection.Horizontal, 2, 0) { { filterLabel }, - { new MDAlignment (filterPopup, true) { MinWidth = 200 } } + { new MDAlignment (filterPopup, true) { MinWidth = 200 } } }; labels.Add (filterLabel); box.Add (filterBox); @@ -165,8 +166,8 @@ namespace MonoDevelop.Platform.Mac }; try { - var action = panel.RunModal (); - if (action == 0) { + var action = MacSelectFileDialogHandler.RunPanel (data, panel); + if (!action) { GtkQuartz.FocusWindow (data.TransientFor ?? MessageService.RootWindow); return false; } diff --git a/main/src/addins/MacPlatform/Dialogs/MacSelectFileDialogHandler.cs b/main/src/addins/MacPlatform/Dialogs/MacSelectFileDialogHandler.cs index 569d56443a..003e8ab626 100644 --- a/main/src/addins/MacPlatform/Dialogs/MacSelectFileDialogHandler.cs +++ b/main/src/addins/MacPlatform/Dialogs/MacSelectFileDialogHandler.cs @@ -65,16 +65,15 @@ namespace MonoDevelop.Platform.Mac } } - var action = panel.RunModal (); - if (action == 0) { + var action = RunPanel (data, panel); + + if (action) { + data.SelectedFiles = GetSelectedFiles (panel); + GtkQuartz.FocusWindow (data.TransientFor ?? MessageService.RootWindow); + } else { GtkQuartz.FocusWindow (data.TransientFor ?? MessageService.RootWindow); - return false; } - - data.SelectedFiles = GetSelectedFiles (panel); - - GtkQuartz.FocusWindow (data.TransientFor ?? MessageService.RootWindow); - return true; + return action; } finally { if (panel != null) panel.Dispose (); @@ -97,14 +96,19 @@ namespace MonoDevelop.Platform.Mac internal static void SetCommonPanelProperties (SelectFileDialogData data, NSSavePanel panel) { + panel.TreatsFilePackagesAsDirectories = true; + if (!string.IsNullOrEmpty (data.Title)) panel.Title = data.Title; - if (!string.IsNullOrEmpty (data.InitialFileName)) - panel.NameFieldStringValue = data.InitialFileName; + //FIXME: 10.6 only + //if (!string.IsNullOrEmpty (data.InitialFileName)) + // panel.NameFieldStringValue = data.InitialFileName; if (!string.IsNullOrEmpty (data.CurrentFolder)) - panel.DirectoryUrl = new MonoMac.Foundation.NSUrl (data.CurrentFolder, true); + panel.Directory = data.CurrentFolder; + //FIXME: 10.6 only + // panel.DirectoryUrl = new NSUrl (data.CurrentFolder, true); var openPanel = panel as NSOpenPanel; if (openPanel != null) { @@ -112,6 +116,18 @@ namespace MonoDevelop.Platform.Mac } } + internal static bool RunPanel (SelectFileDialogData data, NSSavePanel panel) + { + var dir = string.IsNullOrEmpty (data.CurrentFolder)? null : data.CurrentFolder; + var file = string.IsNullOrEmpty (data.InitialFileName)? null : data.InitialFileName; + if (panel is NSOpenPanel) { + return ((NSOpenPanel)panel).RunModal (dir, file, null) != 0; + } else { + //FIXME: deprecated on 10.6, alternatives only on 10.6 + return panel.RunModal (dir, file) != 0; + } + } + static NSOpenSavePanelUrl GetFileFilter (SelectFileDialogFilter filter) { var globRegex = filter.Patterns == null || filter.Patterns.Count == 0? |