diff --git a/conf/okular.kcfg b/conf/okular.kcfg
index e06dd91ba..69ea8cf62 100644
--- a/conf/okular.kcfg
+++ b/conf/okular.kcfg
@@ -298,6 +298,9 @@
true
+
+ true
+
diff --git a/ui/findbar.cpp b/ui/findbar.cpp
index 09201e78c..e720a5b82 100644
--- a/ui/findbar.cpp
+++ b/ui/findbar.cpp
@@ -47,6 +47,7 @@ FindBar::FindBar( Okular::Document * document, QWidget * parent )
m_search->lineEdit()->setSearchId( PART_SEARCH_ID );
m_search->lineEdit()->setSearchColor( qRgb( 255, 255, 64 ) );
m_search->lineEdit()->setSearchMoveViewport( true );
+ m_search->lineEdit()->setFindAsYouType( false );
m_search->lineEdit()->setToolTip( i18n( "Text to search for" ) );
m_search->installEventFilter( this );
label->setBuddy( m_search->lineEdit() );
@@ -68,6 +69,8 @@ FindBar::FindBar( Okular::Document * document, QWidget * parent )
m_caseSensitiveAct->setCheckable( true );
m_fromCurrentPageAct = optionsMenu->addAction( i18n( "From current page" ) );
m_fromCurrentPageAct->setCheckable( true );
+ m_findAsYouTypeAct = optionsMenu->addAction( i18n( "Find as you type" ) );
+ m_findAsYouTypeAct->setCheckable( true );
optionsBtn->setMenu( optionsMenu );
lay->addWidget( optionsBtn );
@@ -76,9 +79,11 @@ FindBar::FindBar( Okular::Document * document, QWidget * parent )
connect( findPrevBtn, &QAbstractButton::clicked, this, &FindBar::findPrev );
connect( m_caseSensitiveAct, &QAction::toggled, this, &FindBar::caseSensitivityChanged );
connect( m_fromCurrentPageAct, &QAction::toggled, this, &FindBar::fromCurrentPageChanged );
+ connect( m_findAsYouTypeAct, &QAction::toggled, this, &FindBar::findAsYouTypeChanged );
m_caseSensitiveAct->setChecked( Okular::Settings::searchCaseSensitive() );
m_fromCurrentPageAct->setChecked( Okular::Settings::searchFromCurrentPage() );
+ m_findAsYouTypeAct->setChecked( Okular::Settings::findAsYouType() );
hide();
@@ -173,6 +178,15 @@ void FindBar::fromCurrentPageChanged()
Okular::Settings::self()->save();
}
+void FindBar::findAsYouTypeChanged()
+{
+ m_search->lineEdit()->setFindAsYouType( m_findAsYouTypeAct->isChecked() );
+ if ( !m_active )
+ return;
+ Okular::Settings::setFindAsYouType( m_findAsYouTypeAct->isChecked() );
+ Okular::Settings::self()->save();
+}
+
void FindBar::closeAndStopSearch()
{
if ( m_search->lineEdit()->isSearchRunning() )
diff --git a/ui/findbar.h b/ui/findbar.h
index 479f83487..4d9d4e8dc 100644
--- a/ui/findbar.h
+++ b/ui/findbar.h
@@ -46,12 +46,14 @@ class FindBar
private Q_SLOTS:
void caseSensitivityChanged();
void fromCurrentPageChanged();
+ void findAsYouTypeChanged();
void closeAndStopSearch();
private:
SearchLineWidget * m_search;
QAction * m_caseSensitiveAct;
QAction * m_fromCurrentPageAct;
+ QAction * m_findAsYouTypeAct;
bool eventFilter( QObject *target, QEvent *event ) override;
bool m_active;
};
diff --git a/ui/searchlineedit.cpp b/ui/searchlineedit.cpp
index baac8be03..74e6ef60c 100644
--- a/ui/searchlineedit.cpp
+++ b/ui/searchlineedit.cpp
@@ -28,7 +28,7 @@ SearchLineEdit::SearchLineEdit( QWidget * parent, Okular::Document * document )
m_caseSensitivity( Qt::CaseInsensitive ),
m_searchType( Okular::Document::AllDocument ), m_id( -1 ),
m_moveViewport( false ), m_changed( false ), m_fromStart( true ),
- m_searchRunning( false )
+ m_findAsYouType( true ), m_searchRunning( false )
{
setObjectName( QStringLiteral( "SearchLineEdit" ) );
setClearButtonShown( true );
@@ -100,6 +100,11 @@ void SearchLineEdit::setSearchFromStart( bool fromStart )
m_fromStart = fromStart;
}
+void SearchLineEdit::setFindAsYouType( bool findAsYouType )
+{
+ m_findAsYouType = findAsYouType;
+}
+
void SearchLineEdit::resetSearch()
{
// Stop the currently running search, if any
@@ -175,7 +180,11 @@ void SearchLineEdit::slotTextChanged( const QString & text )
Q_UNUSED(text);
prepareLineEditForSearch();
- restartSearch();
+
+ if ( m_findAsYouType )
+ restartSearch();
+ else
+ m_changed = true;
}
void SearchLineEdit::prepareLineEditForSearch()
diff --git a/ui/searchlineedit.h b/ui/searchlineedit.h
index b8230e654..8daf04442 100644
--- a/ui/searchlineedit.h
+++ b/ui/searchlineedit.h
@@ -36,6 +36,7 @@ class SearchLineEdit : public KLineEdit
void setSearchColor( const QColor &color );
void setSearchMoveViewport( bool move );
void setSearchFromStart( bool fromStart );
+ void setFindAsYouType( bool findAsYouType );
void resetSearch();
bool isSearchRunning() const;
@@ -63,6 +64,7 @@ class SearchLineEdit : public KLineEdit
bool m_moveViewport;
bool m_changed;
bool m_fromStart;
+ bool m_findAsYouType;
bool m_searchRunning;
private Q_SLOTS: