mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2025-07-30 18:18:35 -04:00
Fix issues with PopupHelpWidget on Linux and macOS
* Clean up parent alignment code * Don't hide widget if it currently has focus * Use Qt::Tool window type on macOS as well. This prevents the popup help from hiding to the background if the main window has focus. * Fixes #2814
This commit is contained in:
parent
e26063a872
commit
50e52df04b
4 changed files with 18 additions and 84 deletions
|
@ -6,8 +6,8 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>487</width>
|
<width>397</width>
|
||||||
<height>326</height>
|
<height>264</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
|
@ -20,28 +20,10 @@
|
||||||
<enum>QFrame::StyledPanel</enum>
|
<enum>QFrame::StyledPanel</enum>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
<property name="spacing">
|
|
||||||
<number>6</number>
|
|
||||||
</property>
|
|
||||||
<property name="sizeConstraint">
|
|
||||||
<enum>QLayout::SetDefaultConstraint</enum>
|
|
||||||
</property>
|
|
||||||
<property name="leftMargin">
|
|
||||||
<number>5</number>
|
|
||||||
</property>
|
|
||||||
<property name="topMargin">
|
|
||||||
<number>5</number>
|
|
||||||
</property>
|
|
||||||
<property name="rightMargin">
|
|
||||||
<number>5</number>
|
|
||||||
</property>
|
|
||||||
<property name="bottomMargin">
|
|
||||||
<number>5</number>
|
|
||||||
</property>
|
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label_2">
|
<widget class="QLabel" name="label_2">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
<verstretch>0</verstretch>
|
<verstretch>0</verstretch>
|
||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
|
@ -63,7 +45,7 @@
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label_24">
|
<widget class="QLabel" name="label_24">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
<verstretch>0</verstretch>
|
<verstretch>0</verstretch>
|
||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
|
@ -96,24 +78,6 @@
|
||||||
<string>Modifiers</string>
|
<string>Modifiers</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QFormLayout" name="formLayout">
|
<layout class="QFormLayout" name="formLayout">
|
||||||
<property name="horizontalSpacing">
|
|
||||||
<number>8</number>
|
|
||||||
</property>
|
|
||||||
<property name="verticalSpacing">
|
|
||||||
<number>8</number>
|
|
||||||
</property>
|
|
||||||
<property name="leftMargin">
|
|
||||||
<number>9</number>
|
|
||||||
</property>
|
|
||||||
<property name="topMargin">
|
|
||||||
<number>10</number>
|
|
||||||
</property>
|
|
||||||
<property name="rightMargin">
|
|
||||||
<number>9</number>
|
|
||||||
</property>
|
|
||||||
<property name="bottomMargin">
|
|
||||||
<number>9</number>
|
|
||||||
</property>
|
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="label_4">
|
<widget class="QLabel" name="label_4">
|
||||||
<property name="minimumSize">
|
<property name="minimumSize">
|
||||||
|
@ -222,21 +186,6 @@
|
||||||
<bool>false</bool>
|
<bool>false</bool>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<property name="leftMargin">
|
|
||||||
<number>15</number>
|
|
||||||
</property>
|
|
||||||
<property name="topMargin">
|
|
||||||
<number>10</number>
|
|
||||||
</property>
|
|
||||||
<property name="rightMargin">
|
|
||||||
<number>15</number>
|
|
||||||
</property>
|
|
||||||
<property name="horizontalSpacing">
|
|
||||||
<number>8</number>
|
|
||||||
</property>
|
|
||||||
<property name="verticalSpacing">
|
|
||||||
<number>5</number>
|
|
||||||
</property>
|
|
||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="label_3">
|
<widget class="QLabel" name="label_3">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
@ -299,12 +248,6 @@
|
||||||
<string>Term Wildcards</string>
|
<string>Term Wildcards</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QFormLayout" name="formLayout_2">
|
<layout class="QFormLayout" name="formLayout_2">
|
||||||
<property name="horizontalSpacing">
|
|
||||||
<number>8</number>
|
|
||||||
</property>
|
|
||||||
<property name="verticalSpacing">
|
|
||||||
<number>8</number>
|
|
||||||
</property>
|
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="label_18">
|
<widget class="QLabel" name="label_18">
|
||||||
<property name="minimumSize">
|
<property name="minimumSize">
|
||||||
|
@ -404,9 +347,6 @@
|
||||||
<string>Examples</string>
|
<string>Examples</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
<property name="spacing">
|
|
||||||
<number>8</number>
|
|
||||||
</property>
|
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label_9">
|
<widget class="QLabel" name="label_9">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
|
|
|
@ -38,7 +38,6 @@ SearchWidget::SearchWidget(QWidget* parent)
|
||||||
setFocusProxy(m_ui->searchEdit);
|
setFocusProxy(m_ui->searchEdit);
|
||||||
|
|
||||||
m_helpWidget = new PopupHelpWidget(m_ui->searchEdit);
|
m_helpWidget = new PopupHelpWidget(m_ui->searchEdit);
|
||||||
m_helpWidget->setOffset(QPoint(0, 1));
|
|
||||||
Ui::SearchHelpWidget helpUi;
|
Ui::SearchHelpWidget helpUi;
|
||||||
helpUi.setupUi(m_helpWidget);
|
helpUi.setupUi(m_helpWidget);
|
||||||
|
|
||||||
|
|
|
@ -23,27 +23,22 @@
|
||||||
|
|
||||||
PopupHelpWidget::PopupHelpWidget(QWidget* parent)
|
PopupHelpWidget::PopupHelpWidget(QWidget* parent)
|
||||||
: QFrame(parent)
|
: QFrame(parent)
|
||||||
, m_parentWindow(parent->window())
|
|
||||||
, m_appWindow(getMainWindow())
|
, m_appWindow(getMainWindow())
|
||||||
, m_offset({0, 0})
|
, m_offset({0, 0})
|
||||||
, m_corner(Qt::BottomLeftCorner)
|
, m_corner(Qt::BottomLeftCorner)
|
||||||
{
|
{
|
||||||
Q_ASSERT(parent);
|
Q_ASSERT(parent);
|
||||||
|
|
||||||
#ifdef Q_OS_MACOS
|
|
||||||
setWindowFlags(Qt::FramelessWindowHint | Qt::Drawer);
|
|
||||||
#else
|
|
||||||
setWindowFlags(Qt::FramelessWindowHint | Qt::Tool);
|
setWindowFlags(Qt::FramelessWindowHint | Qt::Tool);
|
||||||
#endif
|
|
||||||
hide();
|
hide();
|
||||||
|
|
||||||
m_appWindow->installEventFilter(this);
|
m_appWindow->installEventFilter(this);
|
||||||
parent->installEventFilter(this);
|
parentWidget()->installEventFilter(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
PopupHelpWidget::~PopupHelpWidget()
|
PopupHelpWidget::~PopupHelpWidget()
|
||||||
{
|
{
|
||||||
m_parentWindow->removeEventFilter(this);
|
m_appWindow->removeEventFilter(this);
|
||||||
parentWidget()->removeEventFilter(this);
|
parentWidget()->removeEventFilter(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,10 +60,10 @@ void PopupHelpWidget::setPosition(Qt::Corner corner)
|
||||||
|
|
||||||
bool PopupHelpWidget::eventFilter(QObject* obj, QEvent* event)
|
bool PopupHelpWidget::eventFilter(QObject* obj, QEvent* event)
|
||||||
{
|
{
|
||||||
if (obj == parentWidget() && event->type() == QEvent::FocusOut) {
|
if (isVisible()) {
|
||||||
|
if (obj == parentWidget() && event->type() == QEvent::FocusOut && qApp->focusWindow() != windowHandle()) {
|
||||||
hide();
|
hide();
|
||||||
} else if (obj == m_appWindow && (event->type() == QEvent::Move || event->type() == QEvent::Resize)) {
|
} else if (obj == m_appWindow && (event->type() == QEvent::Move || event->type() == QEvent::Resize)) {
|
||||||
if (isVisible()) {
|
|
||||||
alignWithParent();
|
alignWithParent();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -83,21 +78,22 @@ void PopupHelpWidget::showEvent(QShowEvent* event)
|
||||||
|
|
||||||
void PopupHelpWidget::alignWithParent()
|
void PopupHelpWidget::alignWithParent()
|
||||||
{
|
{
|
||||||
QPoint pos;
|
QPoint pos = m_offset;
|
||||||
switch (m_corner) {
|
switch (m_corner) {
|
||||||
case Qt::TopLeftCorner:
|
case Qt::TopLeftCorner:
|
||||||
pos = parentWidget()->geometry().topLeft() + m_offset - QPoint(0, height());
|
pos += QPoint(0, -height());
|
||||||
break;
|
break;
|
||||||
case Qt::TopRightCorner:
|
case Qt::TopRightCorner:
|
||||||
pos = parentWidget()->geometry().topRight() + m_offset - QPoint(width(), height());
|
pos += QPoint(parentWidget()->width(), -height());
|
||||||
break;
|
break;
|
||||||
case Qt::BottomRightCorner:
|
case Qt::BottomRightCorner:
|
||||||
pos = parentWidget()->geometry().bottomRight() + m_offset - QPoint(width(), 0);
|
pos += QPoint(parentWidget()->width(), parentWidget()->height());
|
||||||
break;
|
break;
|
||||||
|
case Qt::BottomLeftCorner:
|
||||||
default:
|
default:
|
||||||
pos = parentWidget()->geometry().bottomLeft() + m_offset;
|
pos += QPoint(0, parentWidget()->height());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
move(m_parentWindow->mapToGlobal(pos));
|
move(parentWidget()->mapToGlobal(pos));
|
||||||
}
|
}
|
|
@ -37,7 +37,6 @@ protected:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void alignWithParent();
|
void alignWithParent();
|
||||||
QPointer<QWidget> m_parentWindow;
|
|
||||||
QPointer<QWidget> m_appWindow;
|
QPointer<QWidget> m_appWindow;
|
||||||
|
|
||||||
QPoint m_offset;
|
QPoint m_offset;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue