mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Edit Book: Ensure keyboard focus stays with Files Browser when renaming files. Fixes #1653311 [ebook editor / Files Browser loses focus after operation](https://bugs.launchpad.net/calibre/+bug/1653311)
This commit is contained in:
parent
9d37292fe5
commit
337f28f5bc
@ -660,16 +660,16 @@ class Boss(QObject):
|
||||
self.add_savepoint(_('Before: Rename %s') % oldname)
|
||||
name_map = {oldname:newname}
|
||||
self.gui.blocking_job(
|
||||
'rename_file', _('Renaming and updating links...'), partial(self.rename_done, name_map),
|
||||
'rename_file', _('Renaming and updating links...'), partial(self.rename_done, name_map, from_filelist=self.gui.file_list.current_name),
|
||||
rename_files, current_container(), name_map)
|
||||
|
||||
def bulk_rename_requested(self, name_map):
|
||||
self.add_savepoint(_('Before: Bulk rename'))
|
||||
self.gui.blocking_job(
|
||||
'bulk_rename_files', _('Renaming and updating links...'), partial(self.rename_done, name_map),
|
||||
'bulk_rename_files', _('Renaming and updating links...'), partial(self.rename_done, name_map, from_filelist=self.gui.file_list.current_name),
|
||||
rename_files, current_container(), name_map)
|
||||
|
||||
def rename_done(self, name_map, job):
|
||||
def rename_done(self, name_map, job, from_filelist=None):
|
||||
if job.traceback is not None:
|
||||
return error_dialog(self.gui, _('Failed to rename files'),
|
||||
_('Failed to rename files, click Show details for more information.'),
|
||||
@ -684,6 +684,11 @@ class Boss(QObject):
|
||||
if self.gui.preview.current_name == oldname:
|
||||
self.gui.preview.current_name = newname
|
||||
self.apply_container_update_to_gui()
|
||||
if from_filelist:
|
||||
if from_filelist in name_map:
|
||||
self.gui.file_list.select_name(name_map[from_filelist], set_as_current_index=True)
|
||||
self.gui.file_list.file_list.setFocus(Qt.PopupFocusReason)
|
||||
|
||||
# }}}
|
||||
|
||||
# Global history {{{
|
||||
|
@ -210,6 +210,13 @@ class FileList(QTreeWidget):
|
||||
}.iteritems()}
|
||||
self.itemActivated.connect(self.item_double_clicked)
|
||||
|
||||
@property
|
||||
def current_name(self):
|
||||
ci = self.currentItem()
|
||||
if ci is not None:
|
||||
return unicode(ci.data(0, NAME_ROLE) or '')
|
||||
return ''
|
||||
|
||||
def get_state(self):
|
||||
s = {'pos':self.verticalScrollBar().value()}
|
||||
s['expanded'] = {c for c, item in self.categories.iteritems() if item.isExpanded()}
|
||||
@ -233,13 +240,15 @@ class FileList(QTreeWidget):
|
||||
if q == name:
|
||||
return c
|
||||
|
||||
def select_name(self, name):
|
||||
def select_name(self, name, set_as_current_index=False):
|
||||
for parent in self.categories.itervalues():
|
||||
for c in (parent.child(i) for i in xrange(parent.childCount())):
|
||||
q = unicode(c.data(0, NAME_ROLE) or '')
|
||||
c.setSelected(q == name)
|
||||
if q == name:
|
||||
self.scrollToItem(c)
|
||||
if set_as_current_index:
|
||||
self.setCurrentItem(c)
|
||||
|
||||
def mark_name_as_current(self, name):
|
||||
current = self.item_from_name(name)
|
||||
@ -893,6 +902,7 @@ class FileListWidget(QWidget):
|
||||
self.forwarded_signals = {k for k, o in vars(self.file_list.__class__).iteritems() if isinstance(o, pyqtSignal) and '_' in k and not hasattr(self, k)}
|
||||
for x in ('delete_done', 'select_name', 'request_edit', 'mark_name_as_current', 'clear_currently_edited_name'):
|
||||
setattr(self, x, getattr(self.file_list, x))
|
||||
self.setFocusProxy(self.file_list)
|
||||
|
||||
def build(self, container, preserve_state=True):
|
||||
self.file_list.build(container, preserve_state=preserve_state)
|
||||
@ -901,6 +911,10 @@ class FileListWidget(QWidget):
|
||||
def searchable_names(self):
|
||||
return self.file_list.searchable_names
|
||||
|
||||
@property
|
||||
def current_name(self):
|
||||
return self.file_list.current_name
|
||||
|
||||
def __getattr__(self, name):
|
||||
if name in self.forwarded_signals:
|
||||
return getattr(self.file_list, name)
|
||||
|
Loading…
x
Reference in New Issue
Block a user