From 6c1b1a427436b641d9f71269b0ba35af66e464b8 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 17 Feb 2011 12:02:08 -0700 Subject: [PATCH] Workaround for bug in Qt that causes the completion popup to be too high and cover the bottom of the text in the edit metadata dialog on windows 7. Fixes #9021 (Drop down completion box is partially obscuring text entry field) --- src/calibre/gui2/complete.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/calibre/gui2/complete.py b/src/calibre/gui2/complete.py index 1da0042bdd..a3912f6ad1 100644 --- a/src/calibre/gui2/complete.py +++ b/src/calibre/gui2/complete.py @@ -7,11 +7,12 @@ __docformat__ = 'restructuredtext en' from PyQt4.Qt import QLineEdit, QAbstractListModel, Qt, \ - QApplication, QCompleter + QApplication, QCompleter, QPoint from calibre.utils.icu import sort_key, lower from calibre.gui2 import NONE from calibre.gui2.widgets import EnComboBox, LineEditECM +from calibre.constants import iswindows class CompleteModel(QAbstractListModel): @@ -93,7 +94,17 @@ class MultiCompleteLineEdit(QLineEdit, LineEditECM): def text_edited(self, *args): self.update_completions() - self._completer.complete() + # Calculating a manual rect is necessary as in windows 7 + # in the edit metadata dialog, the completion window is + # too high and covers the bottom of the text in the edit field + rect = self.geometry() + ld = self.layoutDirection() + pos = QPoint(0, self.height() + (3 if iswindows else 0)) + if ld == Qt.RightToLeft: + rect.moveBottomRight(pos) + else: + rect.moveBottomLeft(pos) + self._completer.complete(rect) def update_completions(self): ' Update the list of completions '