X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/6072005ddce81b456fdcf2e77d5156a1d86f3686..e018ecafca79a73f1e9d76c577b9529fc3a7ae03:/src/filterbar/filterbar.cpp diff --git a/src/filterbar/filterbar.cpp b/src/filterbar/filterbar.cpp index 7eee08b2e..e4aea4b61 100644 --- a/src/filterbar/filterbar.cpp +++ b/src/filterbar/filterbar.cpp @@ -10,46 +10,49 @@ #include +#include #include #include -#include #include #include -FilterBar::FilterBar(QWidget* parent) : - QWidget(parent) +FilterBar::FilterBar(QWidget *parent) + : AnimatedHeightWidget{parent} { + QWidget *contentsContainer = prepareContentsContainer(); + // Create button to lock text when changing folders - m_lockButton = new QToolButton(this); + m_lockButton = new QToolButton(contentsContainer); m_lockButton->setAutoRaise(true); m_lockButton->setCheckable(true); m_lockButton->setIcon(QIcon::fromTheme(QStringLiteral("object-unlocked"))); m_lockButton->setToolTip(i18nc("@info:tooltip", "Keep Filter When Changing Folders")); connect(m_lockButton, &QToolButton::toggled, this, &FilterBar::slotToggleLockButton); - // Create filter editor - m_filterInput = new QLineEdit(this); + m_filterInput = new QLineEdit(contentsContainer); m_filterInput->setLayoutDirection(Qt::LeftToRight); m_filterInput->setClearButtonEnabled(true); - m_filterInput->setPlaceholderText(i18n("Filter...")); - connect(m_filterInput, &QLineEdit::textChanged, - this, &FilterBar::filterChanged); + m_filterInput->setPlaceholderText(i18n("Filter…")); + connect(m_filterInput, &QLineEdit::textChanged, this, &FilterBar::filterChanged); setFocusProxy(m_filterInput); // Create close button - QToolButton *closeButton = new QToolButton(this); + QToolButton *closeButton = new QToolButton(contentsContainer); closeButton->setAutoRaise(true); closeButton->setIcon(QIcon::fromTheme(QStringLiteral("dialog-close"))); closeButton->setToolTip(i18nc("@info:tooltip", "Hide Filter Bar")); connect(closeButton, &QToolButton::clicked, this, &FilterBar::closeRequest); // Apply layout - QHBoxLayout* hLayout = new QHBoxLayout(this); + QHBoxLayout *hLayout = new QHBoxLayout(contentsContainer); hLayout->setContentsMargins(0, 0, 0, 0); hLayout->addWidget(m_lockButton); hLayout->addWidget(m_filterInput); hLayout->addWidget(closeButton); + + setTabOrder(m_lockButton, closeButton); + setTabOrder(closeButton, m_filterInput); } FilterBar::~FilterBar() @@ -58,7 +61,7 @@ FilterBar::~FilterBar() void FilterBar::closeFilterBar() { - hide(); + setVisible(false, WithAnimation); clear(); if (m_lockButton) { m_lockButton->setChecked(false); @@ -75,7 +78,7 @@ void FilterBar::clear() m_filterInput->clear(); } -void FilterBar::slotUrlChanged() +void FilterBar::clearIfUnlocked() { if (!m_lockButton || !(m_lockButton->isChecked())) { clear(); @@ -92,33 +95,51 @@ void FilterBar::slotToggleLockButton(bool checked) } } -void FilterBar::showEvent(QShowEvent* event) +void FilterBar::showEvent(QShowEvent *event) { if (!event->spontaneous()) { m_filterInput->setFocus(); } } -void FilterBar::keyReleaseEvent(QKeyEvent* event) +void FilterBar::keyPressEvent(QKeyEvent *event) { - QWidget::keyReleaseEvent(event); - switch (event->key()) { case Qt::Key_Escape: if (m_filterInput->text().isEmpty()) { - emit closeRequest(); + Q_EMIT closeRequest(); } else { m_filterInput->clear(); } - break; + return; case Qt::Key_Enter: case Qt::Key_Return: - emit focusViewRequest(); - break; + Q_EMIT focusViewRequest(); + return; + + case Qt::Key_Down: + case Qt::Key_PageDown: + case Qt::Key_Up: + case Qt::Key_PageUp: { + Q_EMIT focusViewRequest(); + QWidget *focusWidget = QApplication::focusWidget(); + if (focusWidget && focusWidget != this) { + QApplication::sendEvent(focusWidget, event); + } + return; + } default: break; } + + QWidget::keyPressEvent(event); +} + +int FilterBar::preferredHeight() const +{ + return std::max(m_filterInput->sizeHint().height(), m_lockButton->sizeHint().height()); } +#include "moc_filterbar.cpp"