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)

This commit is contained in:
Kovid Goyal 2012-04-22 22:08:43 +05:30
parent fad11b46ee
commit d6c7ce3d7d

View File

@ -8,7 +8,6 @@ __copyright__ = '2011, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import os, errno import os, errno
from functools import partial
from datetime import datetime from datetime import datetime
from PyQt4.Qt import (Qt, QVBoxLayout, QHBoxLayout, QWidget, QPushButton, 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.next_button = QPushButton(QIcon(I('forward.png')), _('Next'),
self) self)
self.next_button.setShortcut(QKeySequence('Alt+Right')) 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.prev_button = QPushButton(QIcon(I('back.png')), _('Previous'),
self) self)
self.prev_button.setShortcut(QKeySequence('Alt+Left')) self.prev_button.setShortcut(QKeySequence('Alt+Left'))
self.button_box.addButton(self.prev_button, self.button_box.ActionRole) self.button_box.addButton(self.prev_button, self.button_box.ActionRole)
self.button_box.addButton(self.next_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 = QScrollArea(self)
self.scroll_area.setFrameShape(QScrollArea.NoFrame) self.scroll_area.setFrameShape(QScrollArea.NoFrame)
@ -479,6 +478,16 @@ class MetadataSingleDialogBase(ResizableDialog):
self.break_cycles() self.break_cycles()
return ret 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): def do_one(self, delta=0, apply_changes=True):
if apply_changes: if apply_changes:
self.apply_changes() self.apply_changes()