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)
|
self.add_savepoint(_('Before: Rename %s') % oldname)
|
||||||
name_map = {oldname:newname}
|
name_map = {oldname:newname}
|
||||||
self.gui.blocking_job(
|
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)
|
rename_files, current_container(), name_map)
|
||||||
|
|
||||||
def bulk_rename_requested(self, name_map):
|
def bulk_rename_requested(self, name_map):
|
||||||
self.add_savepoint(_('Before: Bulk rename'))
|
self.add_savepoint(_('Before: Bulk rename'))
|
||||||
self.gui.blocking_job(
|
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)
|
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:
|
if job.traceback is not None:
|
||||||
return error_dialog(self.gui, _('Failed to rename files'),
|
return error_dialog(self.gui, _('Failed to rename files'),
|
||||||
_('Failed to rename files, click Show details for more information.'),
|
_('Failed to rename files, click Show details for more information.'),
|
||||||
@ -684,6 +684,11 @@ class Boss(QObject):
|
|||||||
if self.gui.preview.current_name == oldname:
|
if self.gui.preview.current_name == oldname:
|
||||||
self.gui.preview.current_name = newname
|
self.gui.preview.current_name = newname
|
||||||
self.apply_container_update_to_gui()
|
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 {{{
|
# Global history {{{
|
||||||
|
@ -210,6 +210,13 @@ class FileList(QTreeWidget):
|
|||||||
}.iteritems()}
|
}.iteritems()}
|
||||||
self.itemActivated.connect(self.item_double_clicked)
|
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):
|
def get_state(self):
|
||||||
s = {'pos':self.verticalScrollBar().value()}
|
s = {'pos':self.verticalScrollBar().value()}
|
||||||
s['expanded'] = {c for c, item in self.categories.iteritems() if item.isExpanded()}
|
s['expanded'] = {c for c, item in self.categories.iteritems() if item.isExpanded()}
|
||||||
@ -233,13 +240,15 @@ class FileList(QTreeWidget):
|
|||||||
if q == name:
|
if q == name:
|
||||||
return c
|
return c
|
||||||
|
|
||||||
def select_name(self, name):
|
def select_name(self, name, set_as_current_index=False):
|
||||||
for parent in self.categories.itervalues():
|
for parent in self.categories.itervalues():
|
||||||
for c in (parent.child(i) for i in xrange(parent.childCount())):
|
for c in (parent.child(i) for i in xrange(parent.childCount())):
|
||||||
q = unicode(c.data(0, NAME_ROLE) or '')
|
q = unicode(c.data(0, NAME_ROLE) or '')
|
||||||
c.setSelected(q == name)
|
c.setSelected(q == name)
|
||||||
if q == name:
|
if q == name:
|
||||||
self.scrollToItem(c)
|
self.scrollToItem(c)
|
||||||
|
if set_as_current_index:
|
||||||
|
self.setCurrentItem(c)
|
||||||
|
|
||||||
def mark_name_as_current(self, name):
|
def mark_name_as_current(self, name):
|
||||||
current = self.item_from_name(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)}
|
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'):
|
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))
|
setattr(self, x, getattr(self.file_list, x))
|
||||||
|
self.setFocusProxy(self.file_list)
|
||||||
|
|
||||||
def build(self, container, preserve_state=True):
|
def build(self, container, preserve_state=True):
|
||||||
self.file_list.build(container, preserve_state=preserve_state)
|
self.file_list.build(container, preserve_state=preserve_state)
|
||||||
@ -901,6 +911,10 @@ class FileListWidget(QWidget):
|
|||||||
def searchable_names(self):
|
def searchable_names(self):
|
||||||
return self.file_list.searchable_names
|
return self.file_list.searchable_names
|
||||||
|
|
||||||
|
@property
|
||||||
|
def current_name(self):
|
||||||
|
return self.file_list.current_name
|
||||||
|
|
||||||
def __getattr__(self, name):
|
def __getattr__(self, name):
|
||||||
if name in self.forwarded_signals:
|
if name in self.forwarded_signals:
|
||||||
return getattr(self.file_list, name)
|
return getattr(self.file_list, name)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user