1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
/*
SPDX-FileCopyrightText: 2025-2026 Laurent Montel <montel@kde.org>
SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "quicksearchbarwidget.h"
#include "quicksearchbar.h"
#include <QKeyEvent>
#include <QVBoxLayout>
#include <TextAddonsWidgets/SlideContainer>
using namespace Qt::Literals::StringLiterals;
using namespace TextAddonsWidgets;
QuickSearchBarWidget::QuickSearchBarWidget(QWidget *parent)
: QWidget{parent}
, mSliderContainer(new TextAddonsWidgets::SlideContainer(this))
, mQuickSearchBar(new QuickSearchBar(this))
{
auto mainLayout = new QVBoxLayout(this);
mainLayout->setObjectName(u"mainLayout"_s);
mainLayout->setContentsMargins(QMargins{});
mSliderContainer->setObjectName(u"mSliderContainer"_s);
mainLayout->addWidget(mSliderContainer);
mQuickSearchBar->setObjectName(u"mQuickSearchBar"_s);
mainLayout->addWidget(mQuickSearchBar);
mSliderContainer->setContent(mQuickSearchBar);
connect(mQuickSearchBar, &QuickSearchBar::searchTextRequested, this, &QuickSearchBarWidget::searchTextRequested);
connect(mQuickSearchBar, &QuickSearchBar::findNext, this, &QuickSearchBarWidget::findNext);
connect(mQuickSearchBar, &QuickSearchBar::findPrev, this, &QuickSearchBarWidget::findPrev);
}
QuickSearchBarWidget::~QuickSearchBarWidget() = default;
void QuickSearchBarWidget::slideIn()
{
mSliderContainer->slideIn();
mQuickSearchBar->forceFocus();
}
void QuickSearchBarWidget::slideOut()
{
mQuickSearchBar->setTearchText({});
mSliderContainer->slideOut();
}
void QuickSearchBarWidget::updateButtons(bool next, bool previous)
{
mQuickSearchBar->updateButtons(next, previous);
}
void QuickSearchBarWidget::closeBar()
{
// Make sure that all old searches are cleared
mQuickSearchBar->setTearchText({});
slideOut();
Q_EMIT closeSearchBarRequested();
}
bool QuickSearchBarWidget::event(QEvent *e)
{
// Close the bar when pressing Escape.
// Not using a QShortcut for this because it could conflict with
// window-global actions (e.g. Emil Sedgh binds Esc to "close tab").
// With a shortcut override we can catch this before it gets to kactions.
const bool shortCutOverride = (e->type() == QEvent::ShortcutOverride);
if (shortCutOverride || e->type() == QEvent::KeyPress) {
auto kev = static_cast<QKeyEvent *>(e);
if (kev->key() == Qt::Key_Escape) {
if (shortCutOverride) {
e->accept();
return true;
}
e->accept();
closeBar();
return true;
} else if (kev->key() == Qt::Key_Enter || kev->key() == Qt::Key_Return) {
e->accept();
if (shortCutOverride) {
return true;
}
if (mQuickSearchBar->searchText().isEmpty()) {
return true;
}
if (kev->modifiers() & Qt::ShiftModifier) {
mQuickSearchBar->slotFindPrev();
} else if (kev->modifiers() == Qt::NoModifier) {
mQuickSearchBar->slotFindNext();
}
return true;
}
}
return QWidget::event(e);
}
#include "moc_quicksearchbarwidget.cpp"
|