TextEditor: Emit markTooltipRequested only once per line

...otherwise the same tooltip will be created over and over again,
leading to a "moving tooltip widget".

Change-Id: I1704bc34c458ebe1aec664d5295418ab1d2b5082
Reviewed-by: Alessandro Portale <alessandro.portale@theqtcompany.com>
This commit is contained in:
Nikolai Kosjar
2016-04-14 14:46:05 +02:00
parent 2e38eec002
commit 441d8d29a5

View File

@@ -370,6 +370,7 @@ public:
int extraAreaSelectionAnchorBlockNumber; int extraAreaSelectionAnchorBlockNumber;
int extraAreaToggleMarkBlockNumber; int extraAreaToggleMarkBlockNumber;
int extraAreaHighlightFoldedBlockNumber; int extraAreaHighlightFoldedBlockNumber;
int extraAreaPreviousMarkTooltipRequestedLine;
TextEditorOverlay *m_overlay; TextEditorOverlay *m_overlay;
TextEditorOverlay *m_snippetOverlay; TextEditorOverlay *m_snippetOverlay;
@@ -489,6 +490,7 @@ TextEditorWidgetPrivate::TextEditorWidgetPrivate(TextEditorWidget *parent)
extraAreaSelectionAnchorBlockNumber(-1), extraAreaSelectionAnchorBlockNumber(-1),
extraAreaToggleMarkBlockNumber(-1), extraAreaToggleMarkBlockNumber(-1),
extraAreaHighlightFoldedBlockNumber(-1), extraAreaHighlightFoldedBlockNumber(-1),
extraAreaPreviousMarkTooltipRequestedLine(-1),
m_overlay(0), m_overlay(0),
m_snippetOverlay(0), m_snippetOverlay(0),
m_searchResultOverlay(0), m_searchResultOverlay(0),
@@ -5078,6 +5080,8 @@ void TextEditorWidget::showDefaultContextMenu(QContextMenuEvent *e, Id menuConte
void TextEditorWidget::extraAreaLeaveEvent(QEvent *) void TextEditorWidget::extraAreaLeaveEvent(QEvent *)
{ {
d->extraAreaPreviousMarkTooltipRequestedLine = -1;
// fake missing mouse move event from Qt // fake missing mouse move event from Qt
QMouseEvent me(QEvent::MouseMove, QPoint(-1, -1), Qt::NoButton, 0, 0); QMouseEvent me(QEvent::MouseMove, QPoint(-1, -1), Qt::NoButton, 0, 0);
extraAreaMouseEvent(&me); extraAreaMouseEvent(&me);
@@ -5136,7 +5140,9 @@ void TextEditorWidget::extraAreaMouseEvent(QMouseEvent *e)
if (inMarkArea) { if (inMarkArea) {
//Find line by cursor position //Find line by cursor position
int line = cursor.blockNumber() + 1; int line = cursor.blockNumber() + 1;
emit markTooltipRequested(this, mapToGlobal(e->pos()), line); if (d->extraAreaPreviousMarkTooltipRequestedLine != line)
emit markTooltipRequested(this, mapToGlobal(e->pos()), line);
d->extraAreaPreviousMarkTooltipRequestedLine = line;
} }
if (e->buttons() & Qt::LeftButton && !d->m_markDragStart.isNull()) { if (e->buttons() & Qt::LeftButton && !d->m_markDragStart.isNull()) {