зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1746104 - part 5-2: Add some utility methods to `IMENotification::SelectionChangeDataBase` r=m_kato
Differential Revision: https://phabricator.services.mozilla.com/D137423
This commit is contained in:
Родитель
fd30eaf365
Коммит
5d27912b61
|
@ -1286,13 +1286,10 @@ bool IMEContentObserver::UpdateSelectionCache(bool aRequireFlush /* = true */) {
|
|||
MOZ_ASSERT(querySelectedTextEvent.mReply->mOffsetAndData.isSome());
|
||||
|
||||
mFocusedWidget = querySelectedTextEvent.mReply->mFocusedWidget;
|
||||
mSelectionData.mOffset = querySelectedTextEvent.mReply->StartOffset();
|
||||
*mSelectionData.mString = querySelectedTextEvent.mReply->DataRef();
|
||||
mSelectionData.SetWritingMode(
|
||||
querySelectedTextEvent.mReply->WritingModeRef());
|
||||
mSelectionData.mReversed = querySelectedTextEvent.mReply->mReversed;
|
||||
mSelectionData.Assign(querySelectedTextEvent);
|
||||
|
||||
// WARNING: Don't modify the reason of selection change here.
|
||||
// WARNING: Don't set the reason of selection change here because it should be
|
||||
// set the reason at sending the notification.
|
||||
|
||||
MOZ_LOG(sIMECOLog, LogLevel::Debug,
|
||||
("0x%p IMEContentObserver::UpdateSelectionCache(), "
|
||||
|
@ -1788,10 +1785,8 @@ void IMEContentObserver::IMENotificationSender::SendSelectionChange() {
|
|||
// selection change.
|
||||
SelectionChangeData& newSelChangeData = observer->mSelectionData;
|
||||
if (lastSelChangeData.IsValid() &&
|
||||
lastSelChangeData.mOffset == newSelChangeData.mOffset &&
|
||||
lastSelChangeData.String() == newSelChangeData.String() &&
|
||||
lastSelChangeData.GetWritingMode() == newSelChangeData.GetWritingMode() &&
|
||||
lastSelChangeData.mReversed == newSelChangeData.mReversed) {
|
||||
lastSelChangeData.EqualsRangeAndDirectionAndWritingMode(
|
||||
newSelChangeData)) {
|
||||
MOZ_LOG(sIMECOLog, LogLevel::Debug,
|
||||
("0x%p IMEContentObserver::IMENotificationSender::"
|
||||
"SendSelectionChange(), not notifying IME of "
|
||||
|
|
|
@ -4,9 +4,11 @@
|
|||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "IMEData.h"
|
||||
|
||||
#include <sstream>
|
||||
|
||||
#include "gfxFontUtils.h"
|
||||
#include "TextEvents.h"
|
||||
|
||||
#include "mozilla/WritingModes.h"
|
||||
|
||||
|
@ -343,6 +345,17 @@ std::ostream& operator<<(std::ostream& aStream,
|
|||
* IMENotification::SelectionChangeDataBase
|
||||
******************************************************************************/
|
||||
|
||||
void IMENotification::SelectionChangeDataBase::Assign(
|
||||
const WidgetQueryContentEvent& aQuerySelectedTextEvent) {
|
||||
MOZ_ASSERT(aQuerySelectedTextEvent.mMessage == eQuerySelectedText);
|
||||
MOZ_ASSERT(aQuerySelectedTextEvent.Succeeded());
|
||||
|
||||
mOffset = aQuerySelectedTextEvent.mReply->StartOffset();
|
||||
*mString = aQuerySelectedTextEvent.mReply->DataRef();
|
||||
SetWritingMode(aQuerySelectedTextEvent.mReply->WritingModeRef());
|
||||
mReversed = aQuerySelectedTextEvent.mReply->mReversed;
|
||||
}
|
||||
|
||||
void IMENotification::SelectionChangeDataBase::SetWritingMode(
|
||||
const WritingMode& aWritingMode) {
|
||||
mWritingModeBits = aWritingMode.GetBits();
|
||||
|
|
|
@ -793,6 +793,7 @@ struct IMENotification final {
|
|||
AssignReason(aOther.mCausedByComposition, aOther.mCausedBySelectionEvent,
|
||||
aOther.mOccurredDuringComposition);
|
||||
}
|
||||
void Assign(const WidgetQueryContentEvent& aQuerySelectedTextEvent);
|
||||
void AssignReason(bool aCausedByComposition, bool aCausedBySelectionEvent,
|
||||
bool aOccurredDuringComposition) {
|
||||
mCausedByComposition = aCausedByComposition;
|
||||
|
@ -800,6 +801,19 @@ struct IMENotification final {
|
|||
mOccurredDuringComposition = aOccurredDuringComposition;
|
||||
}
|
||||
|
||||
bool EqualsRange(const SelectionChangeDataBase& aOther) const {
|
||||
MOZ_ASSERT(IsValid());
|
||||
return mOffset == aOther.mOffset && mString->Equals(*aOther.mString);
|
||||
}
|
||||
bool EqualsRangeAndDirection(const SelectionChangeDataBase& aOther) const {
|
||||
return EqualsRange(aOther) && mReversed == aOther.mReversed;
|
||||
}
|
||||
bool EqualsRangeAndDirectionAndWritingMode(
|
||||
const SelectionChangeDataBase& aOther) const {
|
||||
return EqualsRangeAndDirection(aOther) &&
|
||||
mWritingModeBits == aOther.mWritingModeBits;
|
||||
}
|
||||
|
||||
OffsetAndData<uint32_t> ToUint32OffsetAndData() const {
|
||||
return OffsetAndData<uint32_t>(mOffset, *mString,
|
||||
OffsetAndDataFor::SelectedString);
|
||||
|
|
Загрузка…
Ссылка в новой задаче