diff --git a/Greenshot/Destinations/PrinterDestination.cs b/Greenshot/Destinations/PrinterDestination.cs index c98fafce7..acd35e543 100644 --- a/Greenshot/Destinations/PrinterDestination.cs +++ b/Greenshot/Destinations/PrinterDestination.cs @@ -91,7 +91,23 @@ namespace Greenshot.Destinations { /// /// IEnumerable public override IEnumerable DynamicDestinations() { + PrinterSettings settings = new PrinterSettings(); + string defaultPrinter = settings.PrinterName; + List printers = new List(); + foreach (string printer in PrinterSettings.InstalledPrinters) { + printers.Add(printer); + } + printers.Sort(delegate(string p1, string p2) { + if(defaultPrinter.Equals(p1)) { + return -1; + } + if(defaultPrinter.Equals(p2)) { + return 1; + } + return p1.CompareTo(p2); + }); + foreach(string printer in printers) { yield return new PrinterDestination(printer); } } diff --git a/Greenshot/Forms/ImageEditorForm.cs b/Greenshot/Forms/ImageEditorForm.cs index f5394bbbf..a39be467d 100644 --- a/Greenshot/Forms/ImageEditorForm.cs +++ b/Greenshot/Forms/ImageEditorForm.cs @@ -73,6 +73,13 @@ namespace Greenshot { public static List Editors { get { + try { + editorList.Sort(delegate(IImageEditor e1, IImageEditor e2) { + return e1.Surface.CaptureDetails.Title.CompareTo(e2.Surface.CaptureDetails.Title); + }); + } catch(Exception ex) { + LOG.Warn("Sorting of editors failed.", ex); + } return editorList; } } diff --git a/Greenshot/releases/additional_files/readme.txt.template b/Greenshot/releases/additional_files/readme.txt.template index 5fda45f00..e6dbd6eca 100644 --- a/Greenshot/releases/additional_files/readme.txt.template +++ b/Greenshot/releases/additional_files/readme.txt.template @@ -24,8 +24,8 @@ Bugs resolved: * BUG-1653: Accessibility issues: Editor "File" menu entry can't be activated and missing translations Changes: -* We cleaned up the dynamic destination context-menu: if an entry (e.g export to the editor) has child items (export to open editors) the parent is still selectable, we also no longer repeat the parent in the children. - +* Dynamic destination context-menu: If a destination has child items the parent is still selectable and executes the default export, we now no longer repeat the parent in the children. +* Dynamic destination context-menu: We are now leaving the sorting to the destination code, this allows us to e.g. show the default printer on top of the list. 1.1.9.13-g01ce82d Windows 8.1 & Box bug-fix Release diff --git a/GreenshotOfficePlugin/Destinations/OutlookDestination.cs b/GreenshotOfficePlugin/Destinations/OutlookDestination.cs index e129b2e96..982b7e403 100644 --- a/GreenshotOfficePlugin/Destinations/OutlookDestination.cs +++ b/GreenshotOfficePlugin/Destinations/OutlookDestination.cs @@ -133,7 +133,7 @@ namespace GreenshotOfficePlugin { } public override IEnumerable DynamicDestinations() { - Dictionary inspectorCaptions = OutlookEmailExporter.RetrievePossibleTargets(); + IDictionary inspectorCaptions = OutlookEmailExporter.RetrievePossibleTargets(); if (inspectorCaptions != null) { foreach (string inspectorCaption in inspectorCaptions.Keys) { yield return new OutlookDestination(inspectorCaption, inspectorCaptions[inspectorCaption]); diff --git a/GreenshotOfficePlugin/OfficeExport/ExcelExporter.cs b/GreenshotOfficePlugin/OfficeExport/ExcelExporter.cs index 88915a9e9..cfc00964d 100644 --- a/GreenshotOfficePlugin/OfficeExport/ExcelExporter.cs +++ b/GreenshotOfficePlugin/OfficeExport/ExcelExporter.cs @@ -54,6 +54,7 @@ namespace Greenshot.Interop.Office { } } } + currentWorkbooks.Sort(); return currentWorkbooks; } diff --git a/GreenshotOfficePlugin/OfficeExport/OutlookEmailExporter.cs b/GreenshotOfficePlugin/OfficeExport/OutlookEmailExporter.cs index ef8fed2e9..b3911fc99 100644 --- a/GreenshotOfficePlugin/OfficeExport/OutlookEmailExporter.cs +++ b/GreenshotOfficePlugin/OfficeExport/OutlookEmailExporter.cs @@ -56,8 +56,8 @@ namespace Greenshot.Interop.Office { /// A method to retrieve all inspectors which can act as an export target /// /// List with inspector captions (window title) - public static Dictionary RetrievePossibleTargets() { - Dictionary inspectorCaptions = new Dictionary(); + public static IDictionary RetrievePossibleTargets() { + IDictionary inspectorCaptions = new SortedDictionary(); try { using (IOutlookApplication outlookApplication = GetOutlookApplication()) { if (outlookApplication == null) { diff --git a/GreenshotOfficePlugin/OfficeExport/PowerpointExporter.cs b/GreenshotOfficePlugin/OfficeExport/PowerpointExporter.cs index d60499b64..3f51ce132 100644 --- a/GreenshotOfficePlugin/OfficeExport/PowerpointExporter.cs +++ b/GreenshotOfficePlugin/OfficeExport/PowerpointExporter.cs @@ -69,7 +69,7 @@ namespace Greenshot.Interop.Office { } catch (Exception ex) { LOG.Warn("Problem retrieving word destinations, ignoring: ", ex); } - + foundPresentations.Sort(); return foundPresentations; } diff --git a/GreenshotOfficePlugin/OfficeExport/WordExporter.cs b/GreenshotOfficePlugin/OfficeExport/WordExporter.cs index 17d681cb1..16556a630 100644 --- a/GreenshotOfficePlugin/OfficeExport/WordExporter.cs +++ b/GreenshotOfficePlugin/OfficeExport/WordExporter.cs @@ -227,6 +227,7 @@ namespace Greenshot.Interop.Office { } catch (Exception ex) { LOG.Warn("Problem retrieving word destinations, ignoring: ", ex); } + openDocuments.Sort(); return openDocuments; } diff --git a/GreenshotPlugin/Core/AbstractDestination.cs b/GreenshotPlugin/Core/AbstractDestination.cs index f518689d7..136d5c700 100644 --- a/GreenshotPlugin/Core/AbstractDestination.cs +++ b/GreenshotPlugin/Core/AbstractDestination.cs @@ -321,8 +321,6 @@ namespace GreenshotPlugin.Core { LOG.ErrorFormat("Skipping {0}, due to the following error: {1}", Description, ex.Message); } if (subDestinations.Count > 0) { - subDestinations.Sort(); - ToolStripMenuItem destinationMenuItem = null; if (useDynamicsOnly && subDestinations.Count == 1) {