diff options
author | Maximilian Güntner <maximilian.guentner@gmail.com> | 2013-11-02 17:04:18 +0100 |
---|---|---|
committer | Maximilian Güntner <maximilian.guentner@gmail.com> | 2013-11-02 17:10:34 +0100 |
commit | c4d8b6a4d5907def9538b024030dc0980cc4182b (patch) | |
tree | 5056491e7f73cbb7c5bcf63d2da06ac35ad90f25 /qt-ui/tagwidget.cpp | |
parent | 2967391ffe29970862d7baa0ac8396b102716b16 (diff) | |
download | subsurface-c4d8b6a4d5907def9538b024030dc0980cc4182b.tar.gz |
Fix the inconsistent behaviour of QCompleter
The TagWidget behaves now similiar to a QLineEdit.
Pressing Enter/Return will now close the completion widget.
Signed-off-by: Maximilian Güntner <maximilian.guentner@gmail.com>
Diffstat (limited to 'qt-ui/tagwidget.cpp')
-rw-r--r-- | qt-ui/tagwidget.cpp | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/qt-ui/tagwidget.cpp b/qt-ui/tagwidget.cpp index bcefe5704..673242cfa 100644 --- a/qt-ui/tagwidget.cpp +++ b/qt-ui/tagwidget.cpp @@ -1,10 +1,12 @@ #include "tagwidget.h" #include <QPair> #include <QDebug> +#include <QAbstractItemView> TagWidget::TagWidget(QWidget *parent) : GroupedLineEdit(parent), m_completer(NULL) { connect(this, SIGNAL(cursorPositionChanged()), this, SLOT(reparse())); + connect(this, SIGNAL(textChanged()), this, SLOT(reparse())); addColor(QColor(0x00, 0xAE, 0xFF)); addColor(QColor(0x00, 0x78, 0xB0)); @@ -15,6 +17,7 @@ void TagWidget::setCompleter(QCompleter *completer) m_completer = completer; m_completer->setWidget(this); connect(m_completer, SIGNAL(activated(QString)), this, SLOT(completionSelected(QString))); + connect(m_completer, SIGNAL(highlighted(QString)), this, SLOT(completionSelected(QString))); } QPair<int,int> TagWidget::getCursorTagPosition() { @@ -98,7 +101,18 @@ void TagWidget::reparse() currentText = ""; if (m_completer) { m_completer->setCompletionPrefix(currentText); - m_completer->complete(); + if (m_completer->completionCount() == 1) { + if (m_completer->currentCompletion() == currentText) { + QAbstractItemView *popup = m_completer->popup(); + if (popup) + popup->hide(); + } + else + m_completer->complete(); + + } else { + m_completer->complete(); + } } } @@ -133,3 +147,21 @@ void TagWidget::clear() { GroupedLineEdit::clear(); blockSignals(false); } + +void TagWidget::keyPressEvent(QKeyEvent *e) { + switch (e->key()) { + case Qt::Key_Return: + case Qt::Key_Enter: + /* + * Fake the QLineEdit behaviour by simply + * closing the QAbstractViewitem + */ + if (m_completer) { + QAbstractItemView *popup = m_completer->popup(); + if (popup) + popup->hide(); + } + } + GroupedLineEdit::keyPressEvent(e); +} + |