diff --git a/src/main/java/org/jabref/gui/JabRefFrame.java b/src/main/java/org/jabref/gui/JabRefFrame.java index 8456f8d80ce..73a2b08ce61 100644 --- a/src/main/java/org/jabref/gui/JabRefFrame.java +++ b/src/main/java/org/jabref/gui/JabRefFrame.java @@ -1058,6 +1058,7 @@ public void addTab(LibraryTab libraryTab, boolean raisePanel) { libraryTab.setOnCloseRequest(event -> { closeTab(libraryTab); libraryTab.getDataLoadingTask().cancel(); + event.consume(); }); libraryTab.setContextMenu(createTabContextMenuFor(libraryTab, Globals.getKeyPrefs())); @@ -1156,17 +1157,9 @@ private boolean confirmClose(LibraryTab libraryTab) { dialogService.showErrorDialogAndWait(Localization.lang("Save library"), Localization.lang("Could not save file."), ex); } // Save was cancelled or an error occurred. - LibraryTab newLibrary = addTab(libraryTab.getBibDatabaseContext(), true); - newLibrary.changedProperty().setValue(libraryTab.isModified()); - return true; + return false; } - - if (response.isPresent() && response.get().equals(cancel)) { - LibraryTab newLibrary = addTab(libraryTab.getBibDatabaseContext(), true); - newLibrary.changedProperty().setValue(libraryTab.isModified()); - return true; - } - return false; + return response.isEmpty() || !response.get().equals(cancel); } /** @@ -1206,6 +1199,11 @@ private void confirmEmptyEntry(LibraryTab libraryTab, BibDatabaseContext context } private void closeTab(LibraryTab libraryTab) { + // empty tab without database + if (libraryTab == null) { + return; + } + final BibDatabaseContext context = libraryTab.getBibDatabaseContext(); if (context.hasEmptyEntries()) { @@ -1215,6 +1213,7 @@ private void closeTab(LibraryTab libraryTab) { if (libraryTab.isModified() && (context.getLocation() == DatabaseLocation.LOCAL)) { if (confirmClose(libraryTab)) { removeTab(libraryTab); + } else { return; } } else if (context.getLocation() == DatabaseLocation.SHARED) { @@ -1222,12 +1221,11 @@ private void closeTab(LibraryTab libraryTab) { context.getDBMSSynchronizer().closeSharedDatabase(); context.clearDBMSSynchronizer(); removeTab(libraryTab); - return; } else { removeTab(libraryTab); } - AutosaveManager.shutdown(libraryTab.getBibDatabaseContext()); - BackupManager.shutdown(libraryTab.getBibDatabaseContext()); + AutosaveManager.shutdown(context); + BackupManager.shutdown(context); } private void removeTab(LibraryTab libraryTab) {