Use esc to close search widget
This commit is contained in:
@@ -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()));
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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 &);
|
||||
|
||||
Reference in New Issue
Block a user