Use esc to close search widget

This commit is contained in:
craig.p.drummond
2013-07-01 19:55:36 +00:00
parent 61640038a8
commit edab753eb9
3 changed files with 27 additions and 19 deletions

View File

@@ -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<QKeyEvent *>(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()));

View File

@@ -26,6 +26,29 @@
#include "toolbutton.h"
#include "localize.h"
#include <QBoxLayout>
#include <QKeyEvent>
#include <QKeySequence>
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<QKeyEvent *>(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()

View File

@@ -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 &);