diff options
-rw-r--r-- | main/src/addins/WindowsPlatform/Dialogs/SelectFileDialogHandler.cs | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/main/src/addins/WindowsPlatform/Dialogs/SelectFileDialogHandler.cs b/main/src/addins/WindowsPlatform/Dialogs/SelectFileDialogHandler.cs index a3658a530d..7e8875f876 100644 --- a/main/src/addins/WindowsPlatform/Dialogs/SelectFileDialogHandler.cs +++ b/main/src/addins/WindowsPlatform/Dialogs/SelectFileDialogHandler.cs @@ -59,7 +59,7 @@ namespace MonoDevelop.Platform dialog.AddExtension = true;
dialog.Filter = GetFilterFromData (data.Filters);
- dialog.FilterIndex = data.DefaultFilter == null ? 1 : data.Filters.IndexOf (data.DefaultFilter) + 1;
+ dialog.FilterIndex = data.DefaultFilter == null ? 1 : GetDefaultFilterIndex (data);
dialog.InitialDirectory = data.CurrentFolder;
@@ -71,6 +71,28 @@ namespace MonoDevelop.Platform if (openDialog != null)
openDialog.Multiselect = data.SelectMultiple;
}
+
+ static int GetDefaultFilterIndex (SelectFileDialogData data)
+ {
+ var defFilter = data.DefaultFilter;
+ int idx = data.Filters.IndexOf (defFilter) + 1;
+
+ // FileDialog doesn't show the file extension when saving a file,
+ // so we try to look fo the precise filter if none was specified.
+ if (data.Action == Gtk.FileChooserAction.Save && defFilter.Patterns.Contains ("*")) {
+ string ext = Path.GetExtension (data.InitialFileName);
+
+ if (!String.IsNullOrEmpty (ext))
+ for (int i = 0; i < data.Filters.Count; i++) {
+ var filter = data.Filters [i];
+ foreach (string pattern in filter.Patterns)
+ if (pattern.EndsWith (ext))
+ return i + 1;
+ }
+ }
+
+ return idx;
+ }
static void SetFolderBrowserProperties (SelectFileDialogData data, FolderBrowserDialog dialog)
{
|