mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Better implementation of setting current item on mouse motion in completion popups
Dont rely on the entered() signal since it is emitted even when the mouse does not move but the list scrolls.
This commit is contained in:
parent
ac758eb0cd
commit
55ca95bb34
@ -98,7 +98,6 @@ class Completer(QListView): # {{{
|
||||
self.setAlternatingRowColors(True)
|
||||
self.setModel(CompleteModel(self, sort_func=sort_func, strip_completion_entries=strip_completion_entries))
|
||||
self.setMouseTracking(True)
|
||||
self.entered.connect(self.item_entered, type=Qt.QueuedConnection)
|
||||
self.activated.connect(self.item_chosen)
|
||||
self.pressed.connect(self.item_chosen)
|
||||
self.installEventFilter(self)
|
||||
@ -125,16 +124,6 @@ class Completer(QListView): # {{{
|
||||
if self.isVisible():
|
||||
self.relayout_needed.emit()
|
||||
|
||||
def item_entered(self, idx):
|
||||
if self.visualRect(idx).top() < self.viewport().rect().bottom() - 5:
|
||||
# Prevent any bottom item in the list that is only partially
|
||||
# visible from triggering setCurrentIndex()
|
||||
self.entered.disconnect()
|
||||
try:
|
||||
self.setCurrentIndex(idx)
|
||||
finally:
|
||||
self.entered.connect(self.item_entered, type=Qt.QueuedConnection)
|
||||
|
||||
def next_match(self, previous=False):
|
||||
c = self.currentIndex()
|
||||
if c.isValid():
|
||||
@ -206,6 +195,14 @@ class Completer(QListView): # {{{
|
||||
if ev.type() in (ev.KeyPress, ev.ShortcutOverride, ev.KeyRelease):
|
||||
print('\tkey:', QKeySequence(ev.key()).toString())
|
||||
|
||||
def mouseMoveEvent(self, ev):
|
||||
idx = self.indexAt(ev.pos())
|
||||
if idx.isValid():
|
||||
ci = self.currentIndex()
|
||||
if idx.row() != ci.row():
|
||||
self.setCurrentIndex(idx)
|
||||
return QListView.mouseMoveEvent(self, ev)
|
||||
|
||||
def eventFilter(self, obj, e):
|
||||
'Redirect key presses from the popup to the widget'
|
||||
widget = self.completer_widget()
|
||||
|
Loading…
x
Reference in New Issue
Block a user