forked from keepassxreboot/keepassxc
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Show search bar when toolbar is hidden or overflow
* Fix keepassxreboot#505 - always show the search bar when the search keyboard shortcut is pressed. If the toolbar is in overflow, the toolbar will be expanded automatically and search focused. If the toolbar is hidden it will be shown and expanded if necessary. When searching is canceled or the down arrow is pressed (to select the first entry) the toolbar will be set back to it's previous configuration.
- Loading branch information
1 parent
e1c8304
commit 8c61a73
Showing
9 changed files
with
180 additions
and
17 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
/* | ||
* Copyright (C) 2021 KeePassXC Team <[email protected]> | ||
* | ||
* This program is free software: you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation, either version 2 or (at your option) | ||
* version 3 of the License. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
*/ | ||
|
||
#include "KPToolBar.h" | ||
|
||
#include <QAbstractButton> | ||
#include <QEvent> | ||
#include <QLayout> | ||
|
||
KPToolBar::KPToolBar(const QString& title, QWidget* parent) | ||
: QToolBar(title, parent) | ||
{ | ||
init(); | ||
} | ||
|
||
KPToolBar::KPToolBar(QWidget* parent) | ||
: QToolBar(parent) | ||
{ | ||
init(); | ||
} | ||
|
||
void KPToolBar::init() | ||
{ | ||
m_expandButton = findChild<QAbstractButton*>("qt_toolbar_ext_button"); | ||
m_expandTimer.setSingleShot(true); | ||
connect(&m_expandTimer, &QTimer::timeout, this, [this] { setExpanded(false); }); | ||
} | ||
|
||
bool KPToolBar::isExpanded() | ||
{ | ||
return !canExpand() || (canExpand() && m_expandButton->isChecked()); | ||
} | ||
|
||
bool KPToolBar::canExpand() | ||
{ | ||
return m_expandButton && m_expandButton->isVisible(); | ||
} | ||
|
||
void KPToolBar::setExpanded(bool state) | ||
{ | ||
if (canExpand() && !QMetaObject::invokeMethod(layout(), "setExpanded", Q_ARG(bool, state))) { | ||
qWarning("Toolbar: Cannot invoke setExpanded!"); | ||
} | ||
} | ||
|
||
bool KPToolBar::event(QEvent* event) | ||
{ | ||
// Override events handled by the base class for better UX when using an expandable toolbar. | ||
switch (event->type()) { | ||
case QEvent::Leave: | ||
// Hide the toolbar after 2 seconds of mouse exit | ||
m_expandTimer.start(2000); | ||
return true; | ||
case QEvent::Enter: | ||
// Mouse came back in, stop hiding timer | ||
m_expandTimer.stop(); | ||
return true; | ||
default: | ||
return QToolBar::event(event); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
/* | ||
* Copyright (C) 2021 KeePassXC Team <[email protected]> | ||
* | ||
* This program is free software: you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation, either version 2 or (at your option) | ||
* version 3 of the License. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
*/ | ||
|
||
#ifndef KEEPASSXC_KPTOOLBAR_H | ||
#define KEEPASSXC_KPTOOLBAR_H | ||
|
||
#include <QPointer> | ||
#include <QTimer> | ||
#include <QToolBar> | ||
|
||
class QAbstractButton; | ||
|
||
class KPToolBar : public QToolBar | ||
{ | ||
Q_OBJECT | ||
|
||
public: | ||
explicit KPToolBar(const QString& title, QWidget* parent = nullptr); | ||
explicit KPToolBar(QWidget* parent = nullptr); | ||
~KPToolBar() override = default; | ||
|
||
bool isExpanded(); | ||
bool canExpand(); | ||
|
||
public slots: | ||
void setExpanded(bool state); | ||
|
||
protected: | ||
bool event(QEvent* event) override; | ||
|
||
private: | ||
void init(); | ||
|
||
QTimer m_expandTimer; | ||
QPointer<QAbstractButton> m_expandButton; | ||
}; | ||
|
||
#endif // KEEPASSXC_KPTOOLBAR_H |