From 9b7ea2b9d4d6e7767a5cdc7e835d64494604cf20 Mon Sep 17 00:00:00 2001 From: Christian Schulz Date: Wed, 13 Aug 2025 20:56:34 +0200 Subject: [PATCH] Added a feature to close all open editors. This references FEATURE-333 and FEATURE-880 --- src/Greenshot.Editor/Forms/ImageEditorForm.cs | 87 ++++++++++++++++++- src/Greenshot/Languages/language-cs-CZ.xml | 1 + src/Greenshot/Languages/language-da-DK.xml | 3 + src/Greenshot/Languages/language-de-DE.xml | 1 + src/Greenshot/Languages/language-en-US.xml | 1 + src/Greenshot/Languages/language-es-ES.xml | 1 + src/Greenshot/Languages/language-fr-FR.xml | 1 + src/Greenshot/Languages/language-it-IT.xml | 1 + src/Greenshot/Languages/language-nl-NL.xml | 1 + src/Greenshot/Languages/language-nn-NO.xml | 1 + src/Greenshot/Languages/language-pl-PL.xml | 1 + src/Greenshot/Languages/language-pt-BR.xml | 1 + src/Greenshot/Languages/language-pt-PT.xml | 1 + src/Greenshot/Languages/language-ru-RU.xml | 1 + src/Greenshot/Languages/language-sv-SE.xml | 1 + 15 files changed, 102 insertions(+), 1 deletion(-) diff --git a/src/Greenshot.Editor/Forms/ImageEditorForm.cs b/src/Greenshot.Editor/Forms/ImageEditorForm.cs index 97263d8c2..9e78c2ce9 100644 --- a/src/Greenshot.Editor/Forms/ImageEditorForm.cs +++ b/src/Greenshot.Editor/Forms/ImageEditorForm.cs @@ -450,6 +450,10 @@ namespace Greenshot.Editor.Forms { ClearItems(fileStripMenuItem.DropDownItems); + // check if CTRL is pressed and toggle CloseMenu + bool ctrlActive = (ModifierKeys & Keys.Control) == Keys.Control; + ToggleCloseMenuItemAction(ctrlActive); + // Add the destinations foreach (IDestination destination in DestinationHelper.GetAllDestinations()) { @@ -474,6 +478,64 @@ namespace Greenshot.Editor.Forms // add the elements after the destinations fileStripMenuItem.DropDownItems.Add(toolStripSeparator9); fileStripMenuItem.DropDownItems.Add(closeToolStripMenuItem); + + // register events to handle CTRL in DropDown + var dropDown = fileStripMenuItem.DropDown; + + // remove event handler if already exists + dropDown.PreviewKeyDown -= FileMenuDropDown_PreviewKeyDown; + dropDown.KeyUp -= FileMenuDropDown_KeyUp; + + // add event handler + dropDown.PreviewKeyDown += FileMenuDropDown_PreviewKeyDown; + dropDown.KeyUp += FileMenuDropDown_KeyUp; + + } + + /// + /// calls if CRTL is pressed + /// + private void FileMenuDropDown_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) + { + if (e.Control) + { + ToggleCloseMenuItemAction(useCloseAllAction: true); + } + } + + /// + /// calls if CRTL is released + /// + private void FileMenuDropDown_KeyUp(object sender, KeyEventArgs e) + { + if (!e.Control) + { + ToggleCloseMenuItemAction(useCloseAllAction: false); + } + } + + /// + /// toggle closing action. "close current editor" -- "close all open editors" + /// + /// if true the menu action is "close all open editors" + private void ToggleCloseMenuItemAction(bool useCloseAllAction) + { + if (useCloseAllAction) + { + closeToolStripMenuItem.LanguageKey = "editor_close_all"; + closeToolStripMenuItem.ShortcutKeys = Keys.None; + closeToolStripMenuItem.Click -= CloseToolStripMenuItemClick; + closeToolStripMenuItem.Click += CloseAllToolStripMenuItemClick; + } + else + { + closeToolStripMenuItem.LanguageKey = "editor_close"; + closeToolStripMenuItem.ShortcutKeys = Keys.Alt | Keys.F4; + closeToolStripMenuItem.Click -= CloseAllToolStripMenuItemClick; + closeToolStripMenuItem.Click += CloseToolStripMenuItemClick; + } + + ApplyLanguage(closeToolStripMenuItem); } private delegate void SurfaceMessageReceivedThreadSafeDelegate(object sender, SurfaceMessageEventArgs eventArgs); @@ -668,7 +730,30 @@ namespace Greenshot.Editor.Forms private void CloseToolStripMenuItemClick(object sender, EventArgs e) { - Close(); + CloseEditor(closeAllOpenEditors: false); + } + + private void CloseAllToolStripMenuItemClick(object sender, EventArgs e) + { + CloseEditor(closeAllOpenEditors: true); + } + + /// + /// Closes the current editor or all open editors in . + /// + /// + private void CloseEditor(bool closeAllOpenEditors) + { + if (closeAllOpenEditors) + { + // we have to copy the list because closing the editor will remove it from the list + List closinglist = Editors.OfType().ToList(); + closinglist.ForEach(e => e.Close()); + } + else + { + Close(); + } } private void BtnEllipseClick(object sender, EventArgs e) diff --git a/src/Greenshot/Languages/language-cs-CZ.xml b/src/Greenshot/Languages/language-cs-CZ.xml index cc409c66f..5c9705ec9 100644 --- a/src/Greenshot/Languages/language-cs-CZ.xml +++ b/src/Greenshot/Languages/language-cs-CZ.xml @@ -86,6 +86,7 @@ Také bychom velmi ocenili, kdybyste zkontrolovali, zda tato chyba již není ev Zrušit Chyba při přístupu do schránky. Zkuste to prosím znovu. Zavřít + Zavřít vše Chcete uložit snímek? Uložit snímek? Potvrdit diff --git a/src/Greenshot/Languages/language-da-DK.xml b/src/Greenshot/Languages/language-da-DK.xml index b032e8aff..624a498e0 100644 --- a/src/Greenshot/Languages/language-da-DK.xml +++ b/src/Greenshot/Languages/language-da-DK.xml @@ -240,6 +240,9 @@ Detaljer om GNU General Public License: Luk + + Luk alle + Advarsel diff --git a/src/Greenshot/Languages/language-de-DE.xml b/src/Greenshot/Languages/language-de-DE.xml index b636da112..de519f680 100644 --- a/src/Greenshot/Languages/language-de-DE.xml +++ b/src/Greenshot/Languages/language-de-DE.xml @@ -86,6 +86,7 @@ schnell zu finden. Vielen Dank :) Abbrechen Fehler beim Zugriff auf die Zwischenablage. Bitte wiederholen Sie den Vorgang. Schließen + Alles schließen Möchten Sie den Screenshot speichern? Bild speichern? Bestätigen diff --git a/src/Greenshot/Languages/language-en-US.xml b/src/Greenshot/Languages/language-en-US.xml index 1403d3e9c..bf536f169 100644 --- a/src/Greenshot/Languages/language-en-US.xml +++ b/src/Greenshot/Languages/language-en-US.xml @@ -87,6 +87,7 @@ Also, we would highly appreciate if you checked whether a tracker item already e Cancel Error while accessing the clipboard. Please try again. Close + Close all Do you want to save the screenshot? Save image? Confirm diff --git a/src/Greenshot/Languages/language-es-ES.xml b/src/Greenshot/Languages/language-es-ES.xml index 0badf64a4..5dcd7e75f 100644 --- a/src/Greenshot/Languages/language-es-ES.xml +++ b/src/Greenshot/Languages/language-es-ES.xml @@ -73,6 +73,7 @@ Antes de crear un nuevo informe de error, te agradeceríamos que comprobaras que Cancelar Error accdeiendo al portapapeles. Por favor, inténtalo otra vez. Cerrar + Cerrar todo ¿Guardar la captura? ¿Guardar imagen? Confirmar diff --git a/src/Greenshot/Languages/language-fr-FR.xml b/src/Greenshot/Languages/language-fr-FR.xml index 4ef502438..d029bba02 100644 --- a/src/Greenshot/Languages/language-fr-FR.xml +++ b/src/Greenshot/Languages/language-fr-FR.xml @@ -85,6 +85,7 @@ De plus, nous apprécierions beaucoup que vous preniez la peine de vérifier si Annuler Une erreur s'est produite lors de l'accès au presse-papier. Veuillez réessayer. Fermer + Fermer tout Voulez-vous enregistrer la capture d'écran ? Enregistrer l'image ? Confirmer diff --git a/src/Greenshot/Languages/language-it-IT.xml b/src/Greenshot/Languages/language-it-IT.xml index 89d68c988..6f895fd49 100644 --- a/src/Greenshot/Languages/language-it-IT.xml +++ b/src/Greenshot/Languages/language-it-IT.xml @@ -91,6 +91,7 @@ Controlla i permessi di accesso per '{0}'. Annulla Errore durante l'accesso agli Appunti. Ritenta nuovamente. Chiudi + Chiudi tutto Vuoi salvare l'immagine? Vuoi salvare l'immagine? Conferma diff --git a/src/Greenshot/Languages/language-nl-NL.xml b/src/Greenshot/Languages/language-nl-NL.xml index d640b0a42..bd38ea3da 100644 --- a/src/Greenshot/Languages/language-nl-NL.xml +++ b/src/Greenshot/Languages/language-nl-NL.xml @@ -86,6 +86,7 @@ Controleer ook even of dit probleem mogelijk al gemeld is! Gebruik de zoekfuncti Afbreken Fout bij de toegang tot het klembord. Probeer het opnieuw. Sluiten + Alles sluiten Wilt u de schermopname opslaan? Afbeelding opslaan? Bevestigen diff --git a/src/Greenshot/Languages/language-nn-NO.xml b/src/Greenshot/Languages/language-nn-NO.xml index edd8f31e7..819ce4080 100644 --- a/src/Greenshot/Languages/language-nn-NO.xml +++ b/src/Greenshot/Languages/language-nn-NO.xml @@ -73,6 +73,7 @@ Me sett òg pris på om du ved hjelp av søkefunksjonen på sida kan sjekke om d Avbryt Kunne ikkje bruke utklyppstavla! Ver venleg og prøv att. Lukk + Lukk alle Vil du lagre skjermbildet? Vil du lagre bildet? Stadfest diff --git a/src/Greenshot/Languages/language-pl-PL.xml b/src/Greenshot/Languages/language-pl-PL.xml index 7f908dba8..39621d21f 100644 --- a/src/Greenshot/Languages/language-pl-PL.xml +++ b/src/Greenshot/Languages/language-pl-PL.xml @@ -86,6 +86,7 @@ Będziemy wdzięczni, jeśli najpierw sprawdzisz, czy takie zdarzenie nie zosta Anuluj Błąd przy próbie dostępu do schowka. Spróbuj ponownie. Zamknij + Zamknij wszystkie Czy chcesz zapisać zrzut ekranu? Zapisać obraz? Zatwierdź diff --git a/src/Greenshot/Languages/language-pt-BR.xml b/src/Greenshot/Languages/language-pt-BR.xml index e53603ccc..95a372e2d 100644 --- a/src/Greenshot/Languages/language-pt-BR.xml +++ b/src/Greenshot/Languages/language-pt-BR.xml @@ -82,6 +82,7 @@ Cancelar Erro ao accesar a área de transferência. Por favor tente novamente. Fechar + Fechar tudo Deseja salvar a imagem capturada? Salvar imagem? Confirmar diff --git a/src/Greenshot/Languages/language-pt-PT.xml b/src/Greenshot/Languages/language-pt-PT.xml index 4da21743d..18514d151 100644 --- a/src/Greenshot/Languages/language-pt-PT.xml +++ b/src/Greenshot/Languages/language-pt-PT.xml @@ -85,6 +85,7 @@ Também apreciaremos muito se puder verificar se não existe já um relatório d Cancelar Erro ao aceder à área de transferência. Por favor tente novamente. Fechar + Fechar tudo Deseja guardar a imagem capturada? Guardar imagem? Confirmar diff --git a/src/Greenshot/Languages/language-ru-RU.xml b/src/Greenshot/Languages/language-ru-RU.xml index f9973f349..d158878fa 100644 --- a/src/Greenshot/Languages/language-ru-RU.xml +++ b/src/Greenshot/Languages/language-ru-RU.xml @@ -86,6 +86,7 @@ Greenshot поставляется БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ. Отмена Ошибка при попытке доступа в буфер обмена. Пожалуйста, попробуйте снова. Закрыть + Закрыть все Сохранить снимок экрана? Сохранить изображение? Подтвердить diff --git a/src/Greenshot/Languages/language-sv-SE.xml b/src/Greenshot/Languages/language-sv-SE.xml index c5b1517e2..c47888370 100644 --- a/src/Greenshot/Languages/language-sv-SE.xml +++ b/src/Greenshot/Languages/language-sv-SE.xml @@ -86,6 +86,7 @@ Innan du skickar uppskattar vi verkligen om du kontrollerar om felet redan blivi Avbryt Ett fel uppstod vid åtkomst av urklipp. Försök igen. Stäng + Stäng alla Vill du spara skärmdumpen? Spara bild? Godkänn