From 88ef28b4c669ffc4cf5132cd1d7e4b53d1063d29 Mon Sep 17 00:00:00 2001 From: Harald Hvaal Date: Thu, 22 Aug 2013 21:47:26 +0200 Subject: [PATCH] Pgup/pgdown/up/down from searchbar scrolls terminal (cherry picked from commit 21f65230cf223de0b04fde60101411111e6b29c5) --- src/IncrementalSearchBar.cpp | 16 ++++++++++++++++ src/IncrementalSearchBar.h | 3 +++ src/SessionController.cpp | 7 +++++++ src/SessionController.h | 1 + 4 files changed, 27 insertions(+) diff --git a/src/IncrementalSearchBar.cpp b/src/IncrementalSearchBar.cpp index 627b03af2..1d95fa315 100644 --- a/src/IncrementalSearchBar.cpp +++ b/src/IncrementalSearchBar.cpp @@ -215,6 +215,22 @@ bool IncrementalSearchBar::eventFilter(QObject* watched , QEvent* aEvent) return QWidget::eventFilter(watched, aEvent); } +void IncrementalSearchBar::keyPressEvent(QKeyEvent* event) +{ + static QSet movementKeysToPassAlong = QSet() + << Qt::Key_PageUp + << Qt::Key_PageDown + << Qt::Key_Up + << Qt::Key_Down; + + if (movementKeysToPassAlong.contains(event->key()) && + (event->modifiers() == Qt::ShiftModifier)) { + emit unhandledMovementKeyPressed(event); + } else { + QWidget::keyPressEvent(event); + } +} + void IncrementalSearchBar::setVisible(bool visible) { QWidget::setVisible(visible); diff --git a/src/IncrementalSearchBar.h b/src/IncrementalSearchBar.h index 44be26c07..1050e2ee6 100644 --- a/src/IncrementalSearchBar.h +++ b/src/IncrementalSearchBar.h @@ -132,9 +132,12 @@ signals: void searchReturnPressed(const QString& text); /** Emitted when shift+return buttons are pressed in the search box */ void searchShiftPlusReturnPressed(); + /** A movement key not handled is forwarded to the terminal display */ + void unhandledMovementKeyPressed(QKeyEvent *event); protected: virtual bool eventFilter(QObject* watched , QEvent* event); + virtual void keyPressEvent(QKeyEvent* event); public slots: void clearLineEdit(); diff --git a/src/SessionController.cpp b/src/SessionController.cpp index 6bfc9e54c..2a8ac46db 100644 --- a/src/SessionController.cpp +++ b/src/SessionController.cpp @@ -530,6 +530,7 @@ void SessionController::setSearchBar(IncrementalSearchBar* searchBar) // connect new search bar _searchBar = searchBar; if (_searchBar) { + connect(_searchBar, SIGNAL(unhandledMovementKeyPressed(QKeyEvent*)), this, SLOT(movementKeyFromSearchBarReceived(QKeyEvent*))); connect(_searchBar, SIGNAL(closeClicked()), this, SLOT(searchClosed())); connect(_searchBar, SIGNAL(searchFromClicked()), this, SLOT(searchFrom())); connect(_searchBar, SIGNAL(findNextClicked()), this, SLOT(findNextInHistory())); @@ -1554,6 +1555,12 @@ void SessionController::showDisplayContextMenu(const QPoint& position) } } +void SessionController::movementKeyFromSearchBarReceived(QKeyEvent *event) +{ + QCoreApplication::sendEvent(_view, event); + setSearchStartToWindowCurrentLine(); +} + void SessionController::sessionStateChanged(int state) { if (state == _previousState) diff --git a/src/SessionController.h b/src/SessionController.h index 2d19c849d..a6de868a5 100644 --- a/src/SessionController.h +++ b/src/SessionController.h @@ -256,6 +256,7 @@ private slots: void prepareSwitchProfileMenu(); void updateCodecAction(); void showDisplayContextMenu(const QPoint& position); + void movementKeyFromSearchBarReceived(QKeyEvent *event); void sessionStateChanged(int state); void sessionTitleChanged(); void searchTextChanged(const QString& text);