From fad59ba7c73d610f982be66459dba5e792e2ce37 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 19 Oct 2021 22:27:14 +0530 Subject: [PATCH] ToC Editor: Ignore in succession clicks on the OK and Cancel buttons to avoid accidentally closing the window when finishing creating a new entry --- src/calibre/gui2/toc/main.py | 8 ++++++++ src/calibre/gui2/tweak_book/toc.py | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/src/calibre/gui2/toc/main.py b/src/calibre/gui2/toc/main.py index 4d48640a0c..980f8ec635 100644 --- a/src/calibre/gui2/toc/main.py +++ b/src/calibre/gui2/toc/main.py @@ -16,6 +16,7 @@ from qt.core import ( QWidget, pyqtSignal ) from threading import Thread +from time import monotonic from calibre.constants import TOC_DIALOG_APP_UID, islinux, iswindows from calibre.ebooks.oeb.polish.container import AZW3Container, get_container @@ -988,6 +989,7 @@ class TOCEditor(QDialog): # {{{ def __init__(self, pathtobook, title=None, parent=None, prefs=None, write_result_to=None): QDialog.__init__(self, parent) + self.last_reject_at = self.last_accept_at = -1000 self.write_result_to = write_result_to self.prefs = prefs or te_prefs self.pathtobook = pathtobook @@ -1052,6 +1054,9 @@ class TOCEditor(QDialog): # {{{ self.stacks.setCurrentIndex(2) def accept(self): + if monotonic() - self.last_accept_at < 1: + return + self.last_accept_at = monotonic() if self.stacks.currentIndex() == 2: self.toc_view.update_item(*self.item_edit.result) self.prefs['toc_edit_splitter_state'] = bytearray(self.item_edit.splitter.saveState()) @@ -1079,6 +1084,9 @@ class TOCEditor(QDialog): # {{{ def reject(self): if not self.bb.isEnabled(): return + if monotonic() - self.last_reject_at < 1: + return + self.last_reject_at = monotonic() if self.stacks.currentIndex() == 2: self.prefs['toc_edit_splitter_state'] = bytearray(self.item_edit.splitter.saveState()) self.stacks.setCurrentIndex(1) diff --git a/src/calibre/gui2/tweak_book/toc.py b/src/calibre/gui2/tweak_book/toc.py index 3bd26086ed..e697e74d06 100644 --- a/src/calibre/gui2/tweak_book/toc.py +++ b/src/calibre/gui2/tweak_book/toc.py @@ -10,6 +10,7 @@ from qt.core import ( QSize, QStackedWidget, QStyledItemDelegate, Qt, QTimer, QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget, pyqtSignal ) +from time import monotonic from calibre.ebooks.oeb.polish.toc import commit_toc, get_toc from calibre.gui2 import error_dialog, make_view_use_window_background @@ -26,6 +27,7 @@ class TOCEditor(QDialog): def __init__(self, title=None, parent=None): QDialog.__init__(self, parent) + self.last_reject_at = self.last_accept_at = -1000 t = title or current_container().mi.title self.book_title = t @@ -64,6 +66,9 @@ class TOCEditor(QDialog): self.stacks.setCurrentIndex(1) def accept(self): + if monotonic() - self.last_accept_at < 1: + return + self.last_accept_at = monotonic() if self.stacks.currentIndex() == 1: self.toc_view.update_item(*self.item_edit.result) tprefs['toc_edit_splitter_state'] = bytearray(self.item_edit.splitter.saveState()) @@ -87,6 +92,9 @@ class TOCEditor(QDialog): def reject(self): if not self.bb.isEnabled(): return + if monotonic() - self.last_reject_at < 1: + return + self.last_reject_at = monotonic() if self.stacks.currentIndex() == 1: tprefs['toc_edit_splitter_state'] = bytearray(self.item_edit.splitter.saveState()) self.stacks.setCurrentIndex(0)