diff --git a/widgets/itemview.cpp b/widgets/itemview.cpp index 94ba1a6ff..50c531106 100644 --- a/widgets/itemview.cpp +++ b/widgets/itemview.cpp @@ -83,23 +83,6 @@ bool ViewEventHandler::eventFilter(QObject *obj, QEvent *event) return QObject::eventFilter(obj, event); } -ListViewEventHandler::ListViewEventHandler(ActionItemDelegate *d, QAbstractItemView *v, QAction *a) - : ViewEventHandler(d, v) - , act(a) -{ -} - -bool ListViewEventHandler::eventFilter(QObject *obj, QEvent *event) -{ - if (view->hasFocus() && QEvent::KeyRelease==event->type() && static_cast(event)->key()==Qt::Key_Escape) { - if (act->isEnabled()) { - act->trigger(); - } - return true; - } - return ViewEventHandler::eventFilter(obj, event); -} - static const int constImageSize=22; static const int constDevImageSize=32; @@ -487,7 +470,7 @@ ItemView::ItemView(QWidget *p) backAction = new QAction(i18n("Back"), this); backAction->setIcon(Icon("go-previous")); backButton->setDefaultAction(backAction); - backAction->setShortcut(Qt::Key_Escape); + backAction->setShortcut(Qt::AltModifier+(Qt::LeftToRight==layoutDirection() ? Qt::Key_Left : Qt::Key_Right)); listView->addAction(backAction); listView->addDefaultAction(backAction); QAction *sep=new QAction(this); @@ -502,7 +485,7 @@ ItemView::ItemView(QWidget *p) TreeDelegate *td=new TreeDelegate(treeView); listView->setItemDelegate(ld); treeView->setItemDelegate(td); - listView->installEventFilter(new ListViewEventHandler(ld, listView, backAction)); + listView->installEventFilter(new ViewEventHandler(ld, listView)); treeView->installEventFilter(new ViewEventHandler(td, treeView)); connect(searchWidget, SIGNAL(returnPressed()), this, SLOT(delaySearchItems())); connect(searchWidget, SIGNAL(textChanged(const QString)), this, SLOT(delaySearchItems())); diff --git a/widgets/searchwidget.cpp b/widgets/searchwidget.cpp index bc09850ff..98d6153f7 100644 --- a/widgets/searchwidget.cpp +++ b/widgets/searchwidget.cpp @@ -26,6 +26,29 @@ #include "toolbutton.h" #include "localize.h" #include +#include +#include + +class EscKeyEventHandler : public QObject +{ +public: + EscKeyEventHandler(SearchWidget *v) : QObject(v), view(v) { } +protected: + bool eventFilter(QObject *obj, QEvent *event) + { + if (view->hasFocus() && QEvent::KeyRelease==event->type()) { + QKeyEvent *keyEvent=static_cast(event); + if (Qt::Key_Escape==keyEvent->key() && Qt::NoModifier==keyEvent->modifiers()) { + view->close(); + return true; + } + } + return QObject::eventFilter(obj, event); + } + +private: + SearchWidget *view; +}; SearchWidget::SearchWidget(QWidget *p) : QWidget(p) @@ -47,6 +70,7 @@ SearchWidget::SearchWidget(QWidget *p) connect(closeButton, SIGNAL(clicked()), this, SLOT(close())); connect(edit, SIGNAL(textChanged(QString)), SIGNAL(textChanged(QString))); connect(edit, SIGNAL(returnPressed()), SIGNAL(returnPressed())); + edit->installEventFilter(new EscKeyEventHandler(this)); } void SearchWidget::toggle() diff --git a/widgets/searchwidget.h b/widgets/searchwidget.h index 1fafee40d..c9b9177b1 100644 --- a/widgets/searchwidget.h +++ b/widgets/searchwidget.h @@ -37,6 +37,7 @@ public: void setText(const QString &t) { edit->setText(t); } QString text() const { return edit->text(); } void setFocus() { edit->setFocus(); } + bool hasFocus() const { return edit->hasFocus(); } Q_SIGNALS: void textChanged(const QString &);