From d6c7ce3d7d52ee7aabf5c293ef0afbf485f23f9f Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 22 Apr 2012 22:08:43 +0530 Subject: [PATCH] Edit metadata dialog: If a permission denied error occurs when clicking the next or prev buttons, stay on the current book. Fixes #986903 (Changes lost when permission denied to edit metadata) --- src/calibre/gui2/metadata/single.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/calibre/gui2/metadata/single.py b/src/calibre/gui2/metadata/single.py index 23728b5901..4a36813c49 100644 --- a/src/calibre/gui2/metadata/single.py +++ b/src/calibre/gui2/metadata/single.py @@ -8,7 +8,6 @@ __copyright__ = '2011, Kovid Goyal ' __docformat__ = 'restructuredtext en' import os, errno -from functools import partial from datetime import datetime from PyQt4.Qt import (Qt, QVBoxLayout, QHBoxLayout, QWidget, QPushButton, @@ -66,14 +65,14 @@ class MetadataSingleDialogBase(ResizableDialog): self.next_button = QPushButton(QIcon(I('forward.png')), _('Next'), self) self.next_button.setShortcut(QKeySequence('Alt+Right')) - self.next_button.clicked.connect(partial(self.do_one, delta=1)) + self.next_button.clicked.connect(self.next_clicked) self.prev_button = QPushButton(QIcon(I('back.png')), _('Previous'), self) self.prev_button.setShortcut(QKeySequence('Alt+Left')) self.button_box.addButton(self.prev_button, self.button_box.ActionRole) self.button_box.addButton(self.next_button, self.button_box.ActionRole) - self.prev_button.clicked.connect(partial(self.do_one, delta=-1)) + self.prev_button.clicked.connect(self.prev_clicked) self.scroll_area = QScrollArea(self) self.scroll_area.setFrameShape(QScrollArea.NoFrame) @@ -479,6 +478,16 @@ class MetadataSingleDialogBase(ResizableDialog): self.break_cycles() return ret + def next_clicked(self): + if not self.apply_changes(): + return + self.do_one(delta=1, apply_changes=False) + + def prev_clicked(self): + if not self.apply_changes(): + return + self.do_one(delta=-1, apply_changes=False) + def do_one(self, delta=0, apply_changes=True): if apply_changes: self.apply_changes()