diff --git a/part.cpp b/part.cpp index cf0edfaba..e98329f5a 100644 --- a/part.cpp +++ b/part.cpp @@ -382,6 +382,9 @@ m_cliPresentation(false), m_embedMode(detectEmbedMode(parentWidget, parent, args bottomBarLayout->addWidget( m_pageSizeLabel ); rightLayout->addWidget( m_bottomBar ); + connect( m_findBar, SIGNAL( forwardKeyPressEvent( QKeyEvent* )), m_pageView, SLOT( externalKeyPressEvent( QKeyEvent* ) )); + connect( m_miniBar, SIGNAL( forwardKeyPressEvent( QKeyEvent* )), m_pageView, SLOT( externalKeyPressEvent( QKeyEvent* ) )); + connect( m_reviewsWidget, SIGNAL( setAnnotationWindow( Okular::Annotation* ) ), m_pageView, SLOT( setAnnotationWindow( Okular::Annotation* ) ) ); connect( m_reviewsWidget, SIGNAL( removeAnnotationWindow( Okular::Annotation* ) ), diff --git a/ui/findbar.cpp b/ui/findbar.cpp index ab6d8e250..5b7ad24fb 100644 --- a/ui/findbar.cpp +++ b/ui/findbar.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -47,6 +48,7 @@ FindBar::FindBar( Okular::Document * document, QWidget * parent ) m_search->lineEdit()->setSearchColor( qRgb( 255, 255, 64 ) ); m_search->lineEdit()->setSearchMoveViewport( true ); m_search->lineEdit()->setToolTip( i18n( "Text to search for" ) ); + m_search->installEventFilter( this ); label->setBuddy( m_search ); lay->addWidget( m_search ); @@ -88,6 +90,22 @@ FindBar::~FindBar() { } +bool FindBar::eventFilter( QObject *target, QEvent *event ) { + if ( target == m_search ) + { + if ( event->type() == QEvent::KeyPress ) + { + QKeyEvent *keyEvent = static_cast( event ); + if ( keyEvent->key() == Qt::Key_PageUp || keyEvent->key() == Qt::Key_PageDown ) + { + emit forwardKeyPressEvent( keyEvent ); + return true; + } + } + } + return false; +} + QString FindBar::text() const { return m_search->lineEdit()->text(); diff --git a/ui/findbar.h b/ui/findbar.h index f42e623e7..2ee712f25 100644 --- a/ui/findbar.h +++ b/ui/findbar.h @@ -34,6 +34,9 @@ class FindBar void focusAndSetCursor(); bool maybeHide(); + signals: + void forwardKeyPressEvent( QKeyEvent* ); + public slots: void findNext(); void findPrev(); @@ -47,6 +50,7 @@ class FindBar SearchLineWidget * m_search; QAction * m_caseSensitiveAct; QAction * m_fromCurrentPageAct; + bool eventFilter( QObject *target, QEvent *event ); bool m_active; }; diff --git a/ui/minibar.cpp b/ui/minibar.cpp index 6e453cc26..235ef90cc 100644 --- a/ui/minibar.cpp +++ b/ui/minibar.cpp @@ -81,6 +81,7 @@ MiniBar::MiniBar( QWidget * parent, Okular::Document * document ) // bottom: left lineEdit (current page box) m_pagesEdit = new PagesEdit( this ); horLayout->addWidget( m_pagesEdit ); + m_pagesEdit->installEventFilter( this ); // bottom: central 'of' label horLayout->addSpacing(5); horLayout->addWidget( new QLabel( i18nc( "Layouted like: '5 [pages] of 10'", "of" ), this ) ); @@ -118,6 +119,23 @@ MiniBar::~MiniBar() m_document->removeObserver( this ); } +bool MiniBar::eventFilter( QObject *target, QEvent *event ) +{ + if ( target == m_pagesEdit ) + { + if ( event->type() == QEvent::KeyPress ) + { + QKeyEvent *keyEvent = static_cast( event ); + if ( keyEvent->key() == Qt::Key_PageUp || keyEvent->key() == Qt::Key_PageDown ) + { + emit forwardKeyPressEvent( keyEvent ); + return true; + } + } + } + return false; +} + void MiniBar::notifySetup( const QVector< Okular::Page * > & pageVector, int setupFlags ) { // only process data when document changes diff --git a/ui/minibar.h b/ui/minibar.h index 62733b3fc..6ec7d9cf4 100644 --- a/ui/minibar.h +++ b/ui/minibar.h @@ -40,6 +40,7 @@ class MiniBar : public QWidget, public Okular::DocumentObserver void gotoPage(); void prevPage(); void nextPage(); + void forwardKeyPressEvent( QKeyEvent *e ); public slots: void slotChangePage(); @@ -48,6 +49,7 @@ class MiniBar : public QWidget, public Okular::DocumentObserver private: void resizeForPage( int pages ); + bool eventFilter( QObject *target, QEvent *event ); Okular::Document * m_document; PagesEdit * m_pagesEdit; diff --git a/ui/pageview.cpp b/ui/pageview.cpp index 65f430bfa..25da571f3 100644 --- a/ui/pageview.cpp +++ b/ui/pageview.cpp @@ -3696,6 +3696,12 @@ void PageView::slotAction( Okular::Action *action ) { d->document->processAction( action ); } + +void PageView::externalKeyPressEvent( QKeyEvent *e ) +{ + keyPressEvent( e ); +} + //END private SLOTS #include "pageview.moc" diff --git a/ui/pageview.h b/ui/pageview.h index 696a66006..cd88b99ba 100644 --- a/ui/pageview.h +++ b/ui/pageview.h @@ -229,6 +229,7 @@ Q_OBJECT void slotSpeakCurrentPage(); void slotStopSpeaks(); void slotAction( Okular::Action *action ); + void externalKeyPressEvent( QKeyEvent *e ); }; #endif