summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/widgets/widgets/qwidgettextcontrol.cpp23
-rw-r--r--src/widgets/widgets/qwidgettextcontrol_p_p.h3
2 files changed, 19 insertions, 7 deletions
diff --git a/src/widgets/widgets/qwidgettextcontrol.cpp b/src/widgets/widgets/qwidgettextcontrol.cpp
index 346499c26f..68dad9fe7a 100644
--- a/src/widgets/widgets/qwidgettextcontrol.cpp
+++ b/src/widgets/widgets/qwidgettextcontrol.cpp
@@ -119,7 +119,8 @@ QWidgetTextControlPrivate::QWidgetTextControlPrivate()
#ifndef QT_NO_DRAGANDDROP
mousePressed(false), mightStartDrag(false),
#endif
- lastSelectionState(false), ignoreAutomaticScrollbarAdjustement(false),
+ lastSelectionPosition(0), lastSelectionAnchor(0),
+ ignoreAutomaticScrollbarAdjustement(false),
overwriteMode(false),
acceptRichText(true),
preeditCursor(0), hideCursor(false),
@@ -577,15 +578,25 @@ void QWidgetTextControlPrivate::selectionChanged(bool forceEmitSelectionChanged
if (forceEmitSelectionChanged)
emit q->selectionChanged();
- bool current = cursor.hasSelection();
- if (current == lastSelectionState)
+ if (cursor.position() == lastSelectionPosition
+ && cursor.anchor() == lastSelectionAnchor)
return;
- lastSelectionState = current;
- emit q->copyAvailable(current);
- if (!forceEmitSelectionChanged)
+ bool selectionStateChange = (cursor.hasSelection()
+ != (lastSelectionPosition != lastSelectionAnchor));
+ if (selectionStateChange)
+ emit q->copyAvailable(cursor.hasSelection());
+
+ if (!forceEmitSelectionChanged
+ && (selectionStateChange
+ || (cursor.hasSelection()
+ && (cursor.position() != lastSelectionPosition
+ || cursor.anchor() != lastSelectionAnchor))))
emit q->selectionChanged();
+
emit q->microFocusChanged();
+ lastSelectionPosition = cursor.position();
+ lastSelectionAnchor = cursor.anchor();
}
void QWidgetTextControlPrivate::_q_updateCurrentCharFormatAndSelection()
diff --git a/src/widgets/widgets/qwidgettextcontrol_p_p.h b/src/widgets/widgets/qwidgettextcontrol_p_p.h
index 8943bb70cf..0f163d7e04 100644
--- a/src/widgets/widgets/qwidgettextcontrol_p_p.h
+++ b/src/widgets/widgets/qwidgettextcontrol_p_p.h
@@ -193,7 +193,8 @@ public:
QPoint dragStartPos;
QPointer<QWidget> contextWidget;
- bool lastSelectionState;
+ int lastSelectionPosition;
+ int lastSelectionAnchor;
bool ignoreAutomaticScrollbarAdjustement;