From 0d3dc639ad30e248a8f1038942c3b55586bc2265 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 13 Dec 2022 17:52:43 +0530 Subject: [PATCH] Fix #1998936 [Slight oddity in window focus](https://bugs.launchpad.net/calibre/+bug/1998936) --- src/calibre/gui2/actions/edit_metadata.py | 13 ++++++++++++- src/calibre/gui2/dialogs/book_info.py | 4 +++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/calibre/gui2/actions/edit_metadata.py b/src/calibre/gui2/actions/edit_metadata.py index c487d15ef5..11a36c497e 100644 --- a/src/calibre/gui2/actions/edit_metadata.py +++ b/src/calibre/gui2/actions/edit_metadata.py @@ -9,6 +9,7 @@ import copy import os import shutil from functools import partial +from contextlib import contextmanager from io import BytesIO from qt.core import ( QAction, QApplication, QDialog, QIcon, QMenu, QMimeData, QModelIndex, QTimer, @@ -486,12 +487,22 @@ class EditMetadataAction(InterfaceAction): def do_edit_metadata(self, row_list, current_row, editing_multiple): from calibre.gui2.metadata.single import edit_metadata db = self.gui.library_view.model().db + parent = getattr(self, 'override_parent', None) or self.gui changed, rows_to_refresh = edit_metadata(db, row_list, current_row, - parent=self.gui, view_slot=self.view_format_callback, + parent=parent, view_slot=self.view_format_callback, edit_slot=self.edit_format_callback, set_current_callback=self.set_current_callback, editing_multiple=editing_multiple) return changed, rows_to_refresh + @contextmanager + def different_parent(self, parent): + orig = getattr(self, 'override_parent', None) + self.override_parent = parent + try: + yield + finally: + self.override_parent = orig + def set_current_callback(self, id_): db = self.gui.library_view.model().db current_row = db.row(id_) diff --git a/src/calibre/gui2/dialogs/book_info.py b/src/calibre/gui2/dialogs/book_info.py index 696651a308..f6e31e6455 100644 --- a/src/calibre/gui2/dialogs/book_info.py +++ b/src/calibre/gui2/dialogs/book_info.py @@ -231,7 +231,9 @@ class BookInfo(QDialog): def edit_metadata(self): if self.current_row is not None: book_id = self.view.model().id(self.current_row) - get_gui().iactions['Edit Metadata'].edit_metadata_for([self.current_row], [book_id], bulk=False) + em = get_gui().iactions['Edit Metadata'] + with em.different_parent(self): + em.edit_metadata_for([self.current_row], [book_id], bulk=False) def configure(self): d = Configure(get_gui().current_db, self)