diff --git a/src/calibre/gui2/layout_menu.py b/src/calibre/gui2/layout_menu.py index 0658078a81..01c05720ba 100644 --- a/src/calibre/gui2/layout_menu.py +++ b/src/calibre/gui2/layout_menu.py @@ -4,7 +4,7 @@ from qt.core import ( QFontMetrics, QHBoxLayout, QIcon, QMenu, QStylePainter, QPushButton, QSize, - QSizePolicy, Qt, QWidget, QStyleOption, QStyle, QEvent) + QSizePolicy, Qt, QWidget, QStyleOption, QStyle) ICON_SZ = 64 @@ -12,9 +12,10 @@ ICON_SZ = 64 class LayoutItem(QWidget): + mouse_over = False + def __init__(self, button, parent=None): QWidget.__init__(self, parent) - self.mouse_over = False self.setSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed) self.button = button self.text = button.label @@ -22,6 +23,10 @@ class LayoutItem(QWidget): self.fm = QFontMetrics(self.font()) self._bi = self._di = None + def update_tips(self): + self.setToolTip(self.button.toolTip()) + self.setStatusTip(self.button.statusTip()) + @property def bright_icon(self): if self._bi is None: @@ -34,17 +39,17 @@ class LayoutItem(QWidget): self._di = self.button.icon().pixmap(ICON_SZ, ICON_SZ, mode=QIcon.Mode.Disabled) return self._di - def event(self, ev): - m = None - et = ev.type() - if et == QEvent.Type.Enter: - m = True - elif et == QEvent.Type.Leave: - m = False - if m is not None and m != self.mouse_over: - self.mouse_over = m + def enterEvent(self, ev): + super().enterEvent(ev) + if not self.mouse_over: + self.mouse_over = True + self.update() + + def leaveEvent(self, ev): + super().leaveEvent(ev) + if self.mouse_over: + self.mouse_over = False self.update() - return QWidget.event(self, ev) def sizeHint(self): br = self.fm.boundingRect(self.text) @@ -100,8 +105,13 @@ class LayoutMenu(QMenu): for b in buttons: self.items.append(LayoutItem(b, self)) l.addWidget(self.items[-1]) + self.aboutToShow.connect(self.about_to_show) self.current_item = None + def about_to_show(self): + for x in self.items: + x.update_tips() + def sizeHint(self): return QWidget.sizeHint(self)