Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/keepassxreboot/keepassxc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/widgets/PopupHelpWidget.cpp')
-rw-r--r--src/gui/widgets/PopupHelpWidget.cpp32
1 files changed, 14 insertions, 18 deletions
diff --git a/src/gui/widgets/PopupHelpWidget.cpp b/src/gui/widgets/PopupHelpWidget.cpp
index 269c31c5b..2a604dce9 100644
--- a/src/gui/widgets/PopupHelpWidget.cpp
+++ b/src/gui/widgets/PopupHelpWidget.cpp
@@ -23,27 +23,22 @@
PopupHelpWidget::PopupHelpWidget(QWidget* parent)
: QFrame(parent)
- , m_parentWindow(parent->window())
, m_appWindow(getMainWindow())
, m_offset({0, 0})
, m_corner(Qt::BottomLeftCorner)
{
Q_ASSERT(parent);
-#ifdef Q_OS_MACOS
- setWindowFlags(Qt::FramelessWindowHint | Qt::Drawer);
-#else
setWindowFlags(Qt::FramelessWindowHint | Qt::Tool);
-#endif
hide();
m_appWindow->installEventFilter(this);
- parent->installEventFilter(this);
+ parentWidget()->installEventFilter(this);
}
PopupHelpWidget::~PopupHelpWidget()
{
- m_parentWindow->removeEventFilter(this);
+ m_appWindow->removeEventFilter(this);
parentWidget()->removeEventFilter(this);
}
@@ -65,10 +60,10 @@ void PopupHelpWidget::setPosition(Qt::Corner corner)
bool PopupHelpWidget::eventFilter(QObject* obj, QEvent* event)
{
- if (obj == parentWidget() && event->type() == QEvent::FocusOut) {
- hide();
- } else if (obj == m_appWindow && (event->type() == QEvent::Move || event->type() == QEvent::Resize)) {
- if (isVisible()) {
+ if (isVisible()) {
+ if (obj == parentWidget() && event->type() == QEvent::FocusOut && qApp->focusWindow() != windowHandle()) {
+ hide();
+ } else if (obj == m_appWindow && (event->type() == QEvent::Move || event->type() == QEvent::Resize)) {
alignWithParent();
}
}
@@ -83,21 +78,22 @@ void PopupHelpWidget::showEvent(QShowEvent* event)
void PopupHelpWidget::alignWithParent()
{
- QPoint pos;
+ QPoint pos = m_offset;
switch (m_corner) {
case Qt::TopLeftCorner:
- pos = parentWidget()->geometry().topLeft() + m_offset - QPoint(0, height());
+ pos += QPoint(0, -height());
break;
case Qt::TopRightCorner:
- pos = parentWidget()->geometry().topRight() + m_offset - QPoint(width(), height());
+ pos += QPoint(parentWidget()->width(), -height());
break;
case Qt::BottomRightCorner:
- pos = parentWidget()->geometry().bottomRight() + m_offset - QPoint(width(), 0);
+ pos += QPoint(parentWidget()->width(), parentWidget()->height());
break;
+ case Qt::BottomLeftCorner:
default:
- pos = parentWidget()->geometry().bottomLeft() + m_offset;
+ pos += QPoint(0, parentWidget()->height());
break;
}
- move(m_parentWindow->mapToGlobal(pos));
-} \ No newline at end of file
+ move(parentWidget()->mapToGlobal(pos));
+}