diff --git a/src/main/java/com/sparrowwallet/sparrow/AppController.java b/src/main/java/com/sparrowwallet/sparrow/AppController.java index 8cd268fd..1be9b7c5 100644 --- a/src/main/java/com/sparrowwallet/sparrow/AppController.java +++ b/src/main/java/com/sparrowwallet/sparrow/AppController.java @@ -219,6 +219,8 @@ public class AppController implements Initializable { private Timeline statusTimeline; + private SearchWalletDialog searchWalletDialog; + private SendToManyDialog sendToManyDialog; private DownloadVerifierDialog downloadVerifierDialog; @@ -280,6 +282,15 @@ public class AppController implements Initializable { void initializeView() { setPlatformApplicationMenu(); + rootStack.getScene().getWindow().setOnHiding(windowEvent -> { + if(searchWalletDialog != null && searchWalletDialog.isShowing()) { + searchWalletDialog.close(); + } + if(sendToManyDialog != null && sendToManyDialog.isShowing()) { + sendToManyDialog.close(); + } + }); + rootStack.setOnDragOver(event -> { if(event.getGestureSource() != rootStack && event.getDragboard().hasFiles()) { event.acceptTransferModes(TransferMode.LINK); @@ -1419,7 +1430,6 @@ public class AppController implements Initializable { } sendToManyDialog = new SendToManyDialog(bitcoinUnit); - sendToManyDialog.initOwner(rootStack.getScene().getWindow()); sendToManyDialog.initModality(Modality.NONE); Optional> optPayments = sendToManyDialog.showAndWait(); sendToManyDialog = null; @@ -1605,14 +1615,28 @@ public class AppController implements Initializable { } private void searchWallets(List walletForms) { - SearchWalletDialog searchWalletDialog = new SearchWalletDialog(walletForms); - searchWalletDialog.initOwner(rootStack.getScene().getWindow()); - Optional optEntry = searchWalletDialog.showAndWait(); - if(optEntry.isPresent()) { - Entry entry = optEntry.get(); - EventManager.get().post(new FunctionActionEvent(entry.getWalletFunction(), entry.getWallet())); - Platform.runLater(() -> EventManager.get().post(new SelectEntryEvent(entry))); + if(searchWalletDialog != null) { + if(!searchWalletDialog.getWalletForms().equals(walletForms)) { + searchWalletDialog.close(); + } else { + Stage stage = (Stage)searchWalletDialog.getDialogPane().getScene().getWindow(); + stage.setAlwaysOnTop(true); + stage.setAlwaysOnTop(false); + return; + } } + + Platform.runLater(() -> { + searchWalletDialog = new SearchWalletDialog(walletForms); + searchWalletDialog.initModality(Modality.NONE); + Optional optEntry = searchWalletDialog.showAndWait(); + if(optEntry.isPresent()) { + Entry entry = optEntry.get(); + EventManager.get().post(new FunctionActionEvent(entry.getWalletFunction(), entry.getWallet())); + Platform.runLater(() -> EventManager.get().post(new SelectEntryEvent(entry))); + } + searchWalletDialog = null; + }); } public void showAllWalletsSummary(ActionEvent event) { diff --git a/src/main/java/com/sparrowwallet/sparrow/control/SearchWalletDialog.java b/src/main/java/com/sparrowwallet/sparrow/control/SearchWalletDialog.java index a98d1778..b01cc42e 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/SearchWalletDialog.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/SearchWalletDialog.java @@ -156,6 +156,10 @@ public class SearchWalletDialog extends Dialog { Platform.runLater(search::requestFocus); } + public List getWalletForms() { + return walletForms; + } + private void searchWallets(String searchPhrase) { Set matchingEntries = new LinkedHashSet<>(); @@ -276,7 +280,7 @@ public class SearchWalletDialog extends Dialog { return false; } - public String removeOccurrences(String inputString, Collection stringsToRemove) { + private String removeOccurrences(String inputString, Collection stringsToRemove) { for(String str : stringsToRemove) { inputString = inputString.replaceAll("(?i)" + str, ""); }