diff options
-rw-r--r-- | src/plugins/texteditor/codeassist/genericproposalwidget.cpp | 17 | ||||
-rw-r--r-- | src/plugins/texteditor/codeassist/genericproposalwidget.h | 4 |
2 files changed, 15 insertions, 6 deletions
diff --git a/src/plugins/texteditor/codeassist/genericproposalwidget.cpp b/src/plugins/texteditor/codeassist/genericproposalwidget.cpp index 439efaf5a0..7d5b63b35e 100644 --- a/src/plugins/texteditor/codeassist/genericproposalwidget.cpp +++ b/src/plugins/texteditor/codeassist/genericproposalwidget.cpp @@ -179,7 +179,7 @@ private: class GenericProposalListView : public QListView { public: - GenericProposalListView(QWidget *parent) : QListView(parent) {} + GenericProposalListView(QWidget *parent); QSize calculateSize() const; QPoint infoFramePos() const; @@ -192,19 +192,24 @@ public: void selectLastRow() { selectRow(model()->rowCount() - 1); } }; +GenericProposalListView::GenericProposalListView(QWidget *parent) + : QListView(parent) +{ + setVerticalScrollMode(QAbstractItemView::ScrollPerItem); +} + QSize GenericProposalListView::calculateSize() const { static const int maxVisibleItems = 10; // Determine size by calculating the space of the visible items - int visibleItems = model()->rowCount(); - if (visibleItems > maxVisibleItems) - visibleItems = maxVisibleItems; + const int visibleItems = qMin(model()->rowCount(), maxVisibleItems); + const int firstVisibleRow = verticalScrollBar()->value(); const QStyleOptionViewItem &option = viewOptions(); QSize shint; for (int i = 0; i < visibleItems; ++i) { - QSize tmp = itemDelegate()->sizeHint(option, model()->index(i, 0)); + QSize tmp = itemDelegate()->sizeHint(option, model()->index(i + firstVisibleRow, 0)); if (shint.width() < tmp.width()) shint = tmp; } @@ -321,6 +326,8 @@ GenericProposalWidget::GenericProposalWidget() d->m_completionListView->setSelectionMode(QAbstractItemView::SingleSelection); d->m_completionListView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); d->m_completionListView->setMinimumSize(1, 1); + connect(d->m_completionListView->verticalScrollBar(), SIGNAL(valueChanged(int)), + this, SLOT(updatePositionAndSize())); QVBoxLayout *layout = new QVBoxLayout(this); layout->setMargin(0); diff --git a/src/plugins/texteditor/codeassist/genericproposalwidget.h b/src/plugins/texteditor/codeassist/genericproposalwidget.h index 6fdcfb6079..745f7d51bc 100644 --- a/src/plugins/texteditor/codeassist/genericproposalwidget.h +++ b/src/plugins/texteditor/codeassist/genericproposalwidget.h @@ -60,10 +60,12 @@ public: private: bool updateAndCheck(const QString &prefix); - void updatePositionAndSize(); void notifyActivation(int index); void abort(); +private slots: + void updatePositionAndSize(); + protected: virtual bool eventFilter(QObject *o, QEvent *e); |