diff --git a/dom/base/TextInputProcessor.cpp b/dom/base/TextInputProcessor.cpp index 2a1a4ee12f60..23f6090db9f0 100644 --- a/dom/base/TextInputProcessor.cpp +++ b/dom/base/TextInputProcessor.cpp @@ -422,11 +422,13 @@ TextInputProcessor::AppendClauseToPendingComposition(uint32_t aLength, { MOZ_RELEASE_ASSERT(nsContentUtils::IsCallerChrome()); RefPtr kungfuDeathGrip(mDispatcher); + TextRangeType textRangeType; switch (aAttribute) { case ATTR_RAW_CLAUSE: case ATTR_SELECTED_RAW_CLAUSE: case ATTR_CONVERTED_CLAUSE: case ATTR_SELECTED_CLAUSE: + textRangeType = ToTextRangeType(aAttribute); break; default: return NS_ERROR_INVALID_ARG; @@ -435,7 +437,7 @@ TextInputProcessor::AppendClauseToPendingComposition(uint32_t aLength, if (NS_WARN_IF(NS_FAILED(rv))) { return rv; } - return mDispatcher->AppendClauseToPendingComposition(aLength, aAttribute); + return mDispatcher->AppendClauseToPendingComposition(aLength, textRangeType); } NS_IMETHODIMP diff --git a/dom/plugins/base/nsPluginInstanceOwner.cpp b/dom/plugins/base/nsPluginInstanceOwner.cpp index 4cd7f53ed394..a5745159b8dc 100644 --- a/dom/plugins/base/nsPluginInstanceOwner.cpp +++ b/dom/plugins/base/nsPluginInstanceOwner.cpp @@ -886,16 +886,16 @@ nsPluginInstanceOwner::GetCompositionString(uint32_t aType, for (TextRange& range : *ranges) { uint8_t type = ATTR_INPUT; switch(range.mRangeType) { - case NS_TEXTRANGE_RAWINPUT: + case TextRangeType::NS_TEXTRANGE_RAWINPUT: type = ATTR_INPUT; break; - case NS_TEXTRANGE_SELECTEDRAWTEXT: + case TextRangeType::NS_TEXTRANGE_SELECTEDRAWTEXT: type = ATTR_TARGET_NOTCONVERTED; break; - case NS_TEXTRANGE_CONVERTEDTEXT: + case TextRangeType::NS_TEXTRANGE_CONVERTEDTEXT: type = ATTR_CONVERTED; break; - case NS_TEXTRANGE_SELECTEDCONVERTEDTEXT: + case TextRangeType::NS_TEXTRANGE_SELECTEDCONVERTEDTEXT: type = ATTR_TARGET_CONVERTED; break; default: diff --git a/editor/libeditor/IMETextTxn.cpp b/editor/libeditor/IMETextTxn.cpp index ec3392868760..e0ceccb1c77a 100644 --- a/editor/libeditor/IMETextTxn.cpp +++ b/editor/libeditor/IMETextTxn.cpp @@ -135,16 +135,16 @@ IMETextTxn::GetTxnDescription(nsAString& aString) /* ============ private methods ================== */ static SelectionType -ToSelectionType(uint32_t aTextRangeType) +ToSelectionType(TextRangeType aTextRangeType) { - switch(aTextRangeType) { - case NS_TEXTRANGE_RAWINPUT: + switch (aTextRangeType) { + case TextRangeType::NS_TEXTRANGE_RAWINPUT: return nsISelectionController::SELECTION_IME_RAWINPUT; - case NS_TEXTRANGE_SELECTEDRAWTEXT: + case TextRangeType::NS_TEXTRANGE_SELECTEDRAWTEXT: return nsISelectionController::SELECTION_IME_SELECTEDRAWTEXT; - case NS_TEXTRANGE_CONVERTEDTEXT: + case TextRangeType::NS_TEXTRANGE_CONVERTEDTEXT: return nsISelectionController::SELECTION_IME_CONVERTEDTEXT; - case NS_TEXTRANGE_SELECTEDCONVERTEDTEXT: + case TextRangeType::NS_TEXTRANGE_SELECTEDCONVERTEDTEXT: return nsISelectionController::SELECTION_IME_SELECTEDCONVERTEDTEXT; default: MOZ_CRASH("Selection type is invalid"); @@ -213,7 +213,7 @@ IMETextTxn::SetIMESelection(nsEditor& aEditor, // Caret needs special handling since its length may be 0 and if it's not // specified explicitly, we need to handle it ourselves later. - if (textRange.mRangeType == NS_TEXTRANGE_CARETPOSITION) { + if (textRange.mRangeType == TextRangeType::NS_TEXTRANGE_CARETPOSITION) { NS_ASSERTION(!setCaret, "The ranges already has caret position"); NS_ASSERTION(!textRange.Length(), "nsEditor doesn't support wide caret"); int32_t caretOffset = static_cast( diff --git a/editor/libeditor/nsEditor.cpp b/editor/libeditor/nsEditor.cpp index 91a1e7f7f173..aba7ef4e846a 100644 --- a/editor/libeditor/nsEditor.cpp +++ b/editor/libeditor/nsEditor.cpp @@ -2422,7 +2422,7 @@ nsEditor::InsertTextIntoTextNodeImpl(const nsAString& aStringToInsert, for (uint32_t i = 0; i < (ranges ? ranges->Length() : 0); ++i) { const TextRange& textRange = ranges->ElementAt(i); if (!textRange.Length() || - textRange.mRangeType != NS_TEXTRANGE_RAWINPUT) { + textRange.mRangeType != TextRangeType::NS_TEXTRANGE_RAWINPUT) { continue; } if (!mPhonetic) { diff --git a/widget/EventForwards.h b/widget/EventForwards.h index 8ea6999932e6..bc35bb1f948d 100644 --- a/widget/EventForwards.h +++ b/widget/EventForwards.h @@ -151,6 +151,9 @@ typedef nsTArray ShortcutKeyCandidateArray; typedef AutoTArray AutoShortcutKeyCandidateArray; // TextRange.h +typedef uint8_t RawTextRangeType; +enum class TextRangeType : RawTextRangeType; + struct TextRangeStyle; struct TextRange; diff --git a/widget/TextEventDispatcher.cpp b/widget/TextEventDispatcher.cpp index e444b0a2041c..8a7903a69c4a 100644 --- a/widget/TextEventDispatcher.cpp +++ b/widget/TextEventDispatcher.cpp @@ -595,7 +595,7 @@ TextEventDispatcher::PendingComposition::Clear() { mString.Truncate(); mClauses = nullptr; - mCaret.mRangeType = 0; + mCaret.mRangeType = TextRangeType::NS_TEXTRANGE_UNDEFINED; } void @@ -615,24 +615,25 @@ TextEventDispatcher::PendingComposition::SetString(const nsAString& aString) } nsresult -TextEventDispatcher::PendingComposition::AppendClause(uint32_t aLength, - uint32_t aAttribute) +TextEventDispatcher::PendingComposition::AppendClause( + uint32_t aLength, + TextRangeType aTextRangeType) { if (NS_WARN_IF(!aLength)) { return NS_ERROR_INVALID_ARG; } - switch (aAttribute) { - case NS_TEXTRANGE_RAWINPUT: - case NS_TEXTRANGE_SELECTEDRAWTEXT: - case NS_TEXTRANGE_CONVERTEDTEXT: - case NS_TEXTRANGE_SELECTEDCONVERTEDTEXT: { + switch (aTextRangeType) { + case TextRangeType::NS_TEXTRANGE_RAWINPUT: + case TextRangeType::NS_TEXTRANGE_SELECTEDRAWTEXT: + case TextRangeType::NS_TEXTRANGE_CONVERTEDTEXT: + case TextRangeType::NS_TEXTRANGE_SELECTEDCONVERTEDTEXT: { EnsureClauseArray(); TextRange textRange; textRange.mStartOffset = mClauses->IsEmpty() ? 0 : mClauses->LastElement().mEndOffset; textRange.mEndOffset = textRange.mStartOffset + aLength; - textRange.mRangeType = aAttribute; + textRange.mRangeType = aTextRangeType; mClauses->AppendElement(textRange); return NS_OK; } @@ -647,7 +648,7 @@ TextEventDispatcher::PendingComposition::SetCaret(uint32_t aOffset, { mCaret.mStartOffset = aOffset; mCaret.mEndOffset = mCaret.mStartOffset + aLength; - mCaret.mRangeType = NS_TEXTRANGE_CARETPOSITION; + mCaret.mRangeType = TextRangeType::NS_TEXTRANGE_CARETPOSITION; return NS_OK; } @@ -668,7 +669,7 @@ TextEventDispatcher::PendingComposition::Set(const nsAString& aString, if (!aRanges || aRanges->IsEmpty()) { // Create dummy range if aString isn't empty. if (!aString.IsEmpty()) { - rv = AppendClause(str.Length(), NS_TEXTRANGE_RAWINPUT); + rv = AppendClause(str.Length(), TextRangeType::NS_TEXTRANGE_RAWINPUT); if (NS_WARN_IF(NS_FAILED(rv))) { return rv; } @@ -698,7 +699,7 @@ TextEventDispatcher::PendingComposition::Set(const nsAString& aString, NS_LITERAL_STRING("\n")); range.mEndOffset = range.mStartOffset + clause.Length(); } - if (range.mRangeType == NS_TEXTRANGE_CARETPOSITION) { + if (range.mRangeType == TextRangeType::NS_TEXTRANGE_CARETPOSITION) { mCaret = range; } else { EnsureClauseArray(); @@ -728,7 +729,7 @@ TextEventDispatcher::PendingComposition::Flush( Clear(); return NS_ERROR_ILLEGAL_VALUE; } - if (mCaret.mRangeType == NS_TEXTRANGE_CARETPOSITION) { + if (mCaret.mRangeType == TextRangeType::NS_TEXTRANGE_CARETPOSITION) { if (mCaret.mEndOffset > mString.Length()) { NS_WARNING("Caret position is out of the composition string"); Clear(); diff --git a/widget/TextEventDispatcher.h b/widget/TextEventDispatcher.h index e43618621259..d236d4621b96 100644 --- a/widget/TextEventDispatcher.h +++ b/widget/TextEventDispatcher.h @@ -152,15 +152,15 @@ public: * the pending composition string. * * @param aLength Length of the clause. - * @param aAttribute One of NS_TEXTRANGE_RAWINPUT, + * @param aTextRangeType One of NS_TEXTRANGE_RAWINPUT, * NS_TEXTRANGE_SELECTEDRAWTEXT, * NS_TEXTRANGE_CONVERTEDTEXT or * NS_TEXTRANGE_SELECTEDCONVERTEDTEXT. */ nsresult AppendClauseToPendingComposition(uint32_t aLength, - uint32_t aAttribute) + TextRangeType aTextRangeType) { - return mPendingComposition.AppendClause(aLength, aAttribute); + return mPendingComposition.AppendClause(aLength, aTextRangeType); } /** @@ -304,7 +304,7 @@ private: public: PendingComposition(); nsresult SetString(const nsAString& aString); - nsresult AppendClause(uint32_t aLength, uint32_t aAttribute); + nsresult AppendClause(uint32_t aLength, TextRangeType aTextRangeType); nsresult SetCaret(uint32_t aOffset, uint32_t aLength); nsresult Set(const nsAString& aString, const TextRangeArray* aRanges); nsresult Flush(TextEventDispatcher* aDispatcher, diff --git a/widget/TextRange.h b/widget/TextRange.h index 9ed864afcb2a..876a9c064a39 100644 --- a/widget/TextRange.h +++ b/widget/TextRange.h @@ -8,6 +8,8 @@ #include +#include "mozilla/EventForwards.h" + #include "nsColor.h" #include "nsITextInputProcessor.h" #include "nsStyleConsts.h" @@ -126,8 +128,7 @@ struct TextRangeStyle * mozilla::TextRange ******************************************************************************/ -// XXX NS_TEXTRANGE_* should be moved into TextRange as an typed enum. -enum +enum class TextRangeType : RawTextRangeType { NS_TEXTRANGE_UNDEFINED = 0x00, NS_TEXTRANGE_CARETPOSITION = 0x01, @@ -141,10 +142,17 @@ enum nsITextInputProcessor::ATTR_SELECTED_CLAUSE }; +bool IsValidRawTextRangeValue(RawTextRangeType aRawTextRangeValue); +RawTextRangeType ToRawTextRangeType(TextRangeType aTextRangeType); +TextRangeType ToTextRangeType(RawTextRangeType aRawTextRangeType); +const char* ToChar(TextRangeType aTextRangeType); + struct TextRange { - TextRange() : - mStartOffset(0), mEndOffset(0), mRangeType(NS_TEXTRANGE_UNDEFINED) + TextRange() + : mStartOffset(0) + , mEndOffset(0) + , mRangeType(TextRangeType::NS_TEXTRANGE_UNDEFINED) { } @@ -152,18 +160,16 @@ struct TextRange // XXX Storing end offset makes the initializing code very complicated. // We should replace it with mLength. uint32_t mEndOffset; - uint32_t mRangeType; TextRangeStyle mRangeStyle; + TextRangeType mRangeType; + uint32_t Length() const { return mEndOffset - mStartOffset; } bool IsClause() const { - MOZ_ASSERT(mRangeType >= NS_TEXTRANGE_CARETPOSITION && - mRangeType <= NS_TEXTRANGE_SELECTEDCONVERTEDTEXT, - "Invalid range type"); - return mRangeType != NS_TEXTRANGE_CARETPOSITION; + return mRangeType != TextRangeType::NS_TEXTRANGE_CARETPOSITION; } bool Equals(const TextRange& aOther) const @@ -200,8 +206,8 @@ class TextRangeArray final : public AutoTArray { for (uint32_t i = 0; i < Length(); ++i) { const TextRange& range = ElementAt(i); - if (range.mRangeType == NS_TEXTRANGE_SELECTEDRAWTEXT || - range.mRangeType == NS_TEXTRANGE_SELECTEDCONVERTEDTEXT) { + if (range.mRangeType == TextRangeType::NS_TEXTRANGE_SELECTEDRAWTEXT || + range.mRangeType == TextRangeType::NS_TEXTRANGE_SELECTEDCONVERTEDTEXT) { return ⦥ } } @@ -259,7 +265,7 @@ public: bool HasCaret() const { for (const TextRange& range : *this) { - if (range.mRangeType == NS_TEXTRANGE_CARETPOSITION) { + if (range.mRangeType == TextRangeType::NS_TEXTRANGE_CARETPOSITION) { return true; } } @@ -269,7 +275,7 @@ public: uint32_t GetCaretPosition() const { for (const TextRange& range : *this) { - if (range.mRangeType == NS_TEXTRANGE_CARETPOSITION) { + if (range.mRangeType == TextRangeType::NS_TEXTRANGE_CARETPOSITION) { return range.mStartOffset; } } diff --git a/widget/WidgetEventImpl.cpp b/widget/WidgetEventImpl.cpp index 08e9d7472691..1f3dbf54ce79 100644 --- a/widget/WidgetEventImpl.cpp +++ b/widget/WidgetEventImpl.cpp @@ -57,6 +57,56 @@ ToChar(EventClassID aEventClassID) } } +bool +IsValidRawTextRangeValue(RawTextRangeType aRawTextRangeType) +{ + switch (static_cast(aRawTextRangeType)) { + case TextRangeType::NS_TEXTRANGE_UNDEFINED: + case TextRangeType::NS_TEXTRANGE_CARETPOSITION: + case TextRangeType::NS_TEXTRANGE_RAWINPUT: + case TextRangeType::NS_TEXTRANGE_SELECTEDRAWTEXT: + case TextRangeType::NS_TEXTRANGE_CONVERTEDTEXT: + case TextRangeType::NS_TEXTRANGE_SELECTEDCONVERTEDTEXT: + return true; + default: + return false; + } +} + +RawTextRangeType +ToRawTextRangeType(TextRangeType aTextRangeType) +{ + return static_cast(aTextRangeType); +} + +TextRangeType +ToTextRangeType(RawTextRangeType aRawTextRangeType) +{ + MOZ_ASSERT(IsValidRawTextRangeValue(aRawTextRangeType)); + return static_cast(aRawTextRangeType); +} + +const char* +ToChar(TextRangeType aTextRangeType) +{ + switch (aTextRangeType) { + case TextRangeType::NS_TEXTRANGE_UNDEFINED: + return "NS_TEXTRANGE_UNDEFINED"; + case TextRangeType::NS_TEXTRANGE_CARETPOSITION: + return "NS_TEXTRANGE_CARETPOSITION"; + case TextRangeType::NS_TEXTRANGE_RAWINPUT: + return "NS_TEXTRANGE_RAWINPUT"; + case TextRangeType::NS_TEXTRANGE_SELECTEDRAWTEXT: + return "NS_TEXTRANGE_SELECTEDRAWTEXT"; + case TextRangeType::NS_TEXTRANGE_CONVERTEDTEXT: + return "NS_TEXTRANGE_CONVERTEDTEXT"; + case TextRangeType::NS_TEXTRANGE_SELECTEDCONVERTEDTEXT: + return "NS_TEXTRANGE_SELECTEDCONVERTEDTEXT"; + default: + return "Invalid TextRangeType"; + } +} + /****************************************************************************** * As*Event() implementation ******************************************************************************/ diff --git a/widget/android/nsWindow.cpp b/widget/android/nsWindow.cpp index d348702f3cc2..3c18d9bc14d6 100644 --- a/widget/android/nsWindow.cpp +++ b/widget/android/nsWindow.cpp @@ -3147,7 +3147,7 @@ nsWindow::GeckoViewSupport::OnImeReplaceText(int32_t aStart, int32_t aEnd, TextRange range; range.mStartOffset = 0; range.mEndOffset = event.mData.Length(); - range.mRangeType = NS_TEXTRANGE_RAWINPUT; + range.mRangeType = TextRangeType::NS_TEXTRANGE_RAWINPUT; event.mRanges = new TextRangeArray(); event.mRanges->AppendElement(range); } @@ -3183,7 +3183,7 @@ nsWindow::GeckoViewSupport::OnImeAddCompositionRange( TextRange range; range.mStartOffset = aStart; range.mEndOffset = aEnd; - range.mRangeType = aRangeType; + range.mRangeType = ToTextRangeType(aRangeType); range.mRangeStyle.mDefinedStyles = aRangeStyle; range.mRangeStyle.mLineStyle = aRangeLineStyle; range.mRangeStyle.mIsBoldLine = aRangeBoldLine; diff --git a/widget/cocoa/TextInputHandler.h b/widget/cocoa/TextInputHandler.h index 7c19ff5a5561..0b9cbab447df 100644 --- a/widget/cocoa/TextInputHandler.h +++ b/widget/cocoa/TextInputHandler.h @@ -966,8 +966,8 @@ private: * @param aSelectedRange Current selected range (or caret position). * @return NS_TEXTRANGE_*. */ - uint32_t ConvertToTextRangeType(uint32_t aUnderlineStyle, - NSRange& aSelectedRange); + TextRangeType ConvertToTextRangeType(uint32_t aUnderlineStyle, + NSRange& aSelectedRange); /** * GetRangeCount() computes the range count of aAttrString. diff --git a/widget/cocoa/TextInputHandler.mm b/widget/cocoa/TextInputHandler.mm index 6fe0706f712a..51e5882eef5b 100644 --- a/widget/cocoa/TextInputHandler.mm +++ b/widget/cocoa/TextInputHandler.mm @@ -232,25 +232,6 @@ GetGeckoKeyEventType(const WidgetEvent& aEvent) } } -static const char* -GetRangeTypeName(uint32_t aRangeType) -{ - switch (aRangeType) { - case NS_TEXTRANGE_RAWINPUT: - return "NS_TEXTRANGE_RAWINPUT"; - case NS_TEXTRANGE_CONVERTEDTEXT: - return "NS_TEXTRANGE_CONVERTEDTEXT"; - case NS_TEXTRANGE_SELECTEDRAWTEXT: - return "NS_TEXTRANGE_SELECTEDRAWTEXT"; - case NS_TEXTRANGE_SELECTEDCONVERTEDTEXT: - return "NS_TEXTRANGE_SELECTEDCONVERTEDTEXT"; - case NS_TEXTRANGE_CARETPOSITION: - return "NS_TEXTRANGE_CARETPOSITION"; - default: - return "invalid range type"; - } -} - static const char* GetWindowLevelName(NSInteger aWindowLevel) { @@ -2743,7 +2724,7 @@ IMEInputHandler::ExecutePendingMethods() * ******************************************************************************/ -uint32_t +TextRangeType IMEInputHandler::ConvertToTextRangeType(uint32_t aUnderlineStyle, NSRange& aSelectedRange) { @@ -2759,23 +2740,23 @@ IMEInputHandler::ConvertToTextRangeType(uint32_t aUnderlineStyle, if (aSelectedRange.length == 0) { switch (aUnderlineStyle) { case NSUnderlineStyleSingle: - return NS_TEXTRANGE_RAWINPUT; + return TextRangeType::NS_TEXTRANGE_RAWINPUT; case NSUnderlineStyleThick: - return NS_TEXTRANGE_SELECTEDRAWTEXT; + return TextRangeType::NS_TEXTRANGE_SELECTEDRAWTEXT; default: NS_WARNING("Unexpected line style"); - return NS_TEXTRANGE_SELECTEDRAWTEXT; + return TextRangeType::NS_TEXTRANGE_SELECTEDRAWTEXT; } } switch (aUnderlineStyle) { case NSUnderlineStyleSingle: - return NS_TEXTRANGE_CONVERTEDTEXT; + return TextRangeType::NS_TEXTRANGE_CONVERTEDTEXT; case NSUnderlineStyleThick: - return NS_TEXTRANGE_SELECTEDCONVERTEDTEXT; + return TextRangeType::NS_TEXTRANGE_SELECTEDCONVERTEDTEXT; default: NS_WARNING("Unexpected line style"); - return NS_TEXTRANGE_SELECTEDCONVERTEDTEXT; + return TextRangeType::NS_TEXTRANGE_SELECTEDCONVERTEDTEXT; } } @@ -2841,7 +2822,7 @@ IMEInputHandler::CreateTextRangeArray(NSAttributedString *aAttrString, ("%p IMEInputHandler::CreateTextRangeArray, " "range={ mStartOffset=%llu, mEndOffset=%llu, mRangeType=%s }", this, range.mStartOffset, range.mEndOffset, - GetRangeTypeName(range.mRangeType))); + ToChar(range.mRangeType))); limitRange = NSMakeRange(NSMaxRange(effectiveRange), @@ -2852,14 +2833,14 @@ IMEInputHandler::CreateTextRangeArray(NSAttributedString *aAttrString, TextRange range; range.mStartOffset = aSelectedRange.location + aSelectedRange.length; range.mEndOffset = range.mStartOffset; - range.mRangeType = NS_TEXTRANGE_CARETPOSITION; + range.mRangeType = TextRangeType::NS_TEXTRANGE_CARETPOSITION; textRangeArray->AppendElement(range); MOZ_LOG(gLog, LogLevel::Info, ("%p IMEInputHandler::CreateTextRangeArray, " "range={ mStartOffset=%llu, mEndOffset=%llu, mRangeType=%s }", this, range.mStartOffset, range.mEndOffset, - GetRangeTypeName(range.mRangeType))); + ToChar(range.mRangeType))); return textRangeArray.forget(); diff --git a/widget/gtk/IMContextWrapper.cpp b/widget/gtk/IMContextWrapper.cpp index abdf0ce74f9c..aaf7d79c13e3 100644 --- a/widget/gtk/IMContextWrapper.cpp +++ b/widget/gtk/IMContextWrapper.cpp @@ -29,25 +29,6 @@ ToChar(bool aBool) return aBool ? "true" : "false"; } -static const char* -GetRangeTypeName(uint32_t aRangeType) -{ - switch (aRangeType) { - case NS_TEXTRANGE_RAWINPUT: - return "NS_TEXTRANGE_RAWINPUT"; - case NS_TEXTRANGE_CONVERTEDTEXT: - return "NS_TEXTRANGE_CONVERTEDTEXT"; - case NS_TEXTRANGE_SELECTEDRAWTEXT: - return "NS_TEXTRANGE_SELECTEDRAWTEXT"; - case NS_TEXTRANGE_SELECTEDCONVERTEDTEXT: - return "NS_TEXTRANGE_SELECTEDCONVERTEDTEXT"; - case NS_TEXTRANGE_CARETPOSITION: - return "NS_TEXTRANGE_CARETPOSITION"; - default: - return "UNKNOWN SELECTION TYPE!!"; - } -} - static const char* GetEnabledStateName(uint32_t aState) { @@ -1691,13 +1672,13 @@ IMContextWrapper::CreateTextRangeArray(GtkIMContext* aContext, TextRange range; range.mStartOffset = range.mEndOffset = caretOffsetInUTF16; - range.mRangeType = NS_TEXTRANGE_CARETPOSITION; + range.mRangeType = TextRangeType::NS_TEXTRANGE_CARETPOSITION; textRangeArray->AppendElement(range); MOZ_LOG(gGtkIMLog, LogLevel::Debug, ("GTKIM: %p CreateTextRangeArray(), mStartOffset=%u, " "mEndOffset=%u, mRangeType=%s", this, range.mStartOffset, range.mEndOffset, - GetRangeTypeName(range.mRangeType))); + ToChar(range.mRangeType))); pango_attr_iterator_destroy(iter); pango_attr_list_unref(feedback_list); @@ -1871,26 +1852,26 @@ IMContextWrapper::SetTextRange(PangoAttrIterator* aPangoAttrIter, if (!utf8ClauseStart && utf8ClauseEnd == static_cast(strlen(aUTF8CompositionString)) && aTextRange.mEndOffset == aUTF16CaretOffset) { - aTextRange.mRangeType = NS_TEXTRANGE_RAWINPUT; + aTextRange.mRangeType = TextRangeType::NS_TEXTRANGE_RAWINPUT; } // Typically, the caret is set at the start of the selected clause. // So, if the caret is in the clause, we can assume that the clause is // selected. else if (aTextRange.mStartOffset <= aUTF16CaretOffset && aTextRange.mEndOffset > aUTF16CaretOffset) { - aTextRange.mRangeType = NS_TEXTRANGE_SELECTEDCONVERTEDTEXT; + aTextRange.mRangeType = TextRangeType::NS_TEXTRANGE_SELECTEDCONVERTEDTEXT; } // Otherwise, we should assume that the clause is converted but not // selected. else { - aTextRange.mRangeType = NS_TEXTRANGE_CONVERTEDTEXT; + aTextRange.mRangeType = TextRangeType::NS_TEXTRANGE_CONVERTEDTEXT; } MOZ_LOG(gGtkIMLog, LogLevel::Debug, ("GTKIM: %p SetTextRange(), succeeded, aTextRange= { " "mStartOffset=%u, mEndOffset=%u, mRangeType=%s, mRangeStyle=%s }", this, aTextRange.mStartOffset, aTextRange.mEndOffset, - GetRangeTypeName(aTextRange.mRangeType), + ToChar(aTextRange.mRangeType), GetTextRangeStyleText(aTextRange.mRangeStyle).get())); return true; diff --git a/widget/nsGUIEventIPC.h b/widget/nsGUIEventIPC.h index 6e3628b6a930..2f1d7eaf5cef 100644 --- a/widget/nsGUIEventIPC.h +++ b/widget/nsGUIEventIPC.h @@ -526,16 +526,21 @@ struct ParamTraits { WriteParam(aMsg, aParam.mStartOffset); WriteParam(aMsg, aParam.mEndOffset); - WriteParam(aMsg, aParam.mRangeType); + WriteParam(aMsg, mozilla::ToRawTextRangeType(aParam.mRangeType)); WriteParam(aMsg, aParam.mRangeStyle); } static bool Read(const Message* aMsg, PickleIterator* aIter, paramType* aResult) { - return ReadParam(aMsg, aIter, &aResult->mStartOffset) && - ReadParam(aMsg, aIter, &aResult->mEndOffset) && - ReadParam(aMsg, aIter, &aResult->mRangeType) && - ReadParam(aMsg, aIter, &aResult->mRangeStyle); + mozilla::RawTextRangeType rawTextRangeType; + if (ReadParam(aMsg, aIter, &aResult->mStartOffset) && + ReadParam(aMsg, aIter, &aResult->mEndOffset) && + ReadParam(aMsg, aIter, &rawTextRangeType) && + ReadParam(aMsg, aIter, &aResult->mRangeStyle)) { + aResult->mRangeType = mozilla::ToTextRangeType(rawTextRangeType); + return true; + } + return false; } }; diff --git a/widget/windows/IMMHandler.cpp b/widget/windows/IMMHandler.cpp index 9c23cc66fe2c..1613ce6dbb8f 100644 --- a/widget/windows/IMMHandler.cpp +++ b/widget/windows/IMMHandler.cpp @@ -1888,7 +1888,7 @@ IMMHandler::CommitCompositionOnPreviousWindow(nsWindow* aWindow) return false; } -static uint32_t +static TextRangeType PlatformToNSAttr(uint8_t aAttr) { switch (aAttr) @@ -1896,35 +1896,16 @@ PlatformToNSAttr(uint8_t aAttr) case ATTR_INPUT_ERROR: // case ATTR_FIXEDCONVERTED: case ATTR_INPUT: - return NS_TEXTRANGE_RAWINPUT; + return TextRangeType::NS_TEXTRANGE_RAWINPUT; case ATTR_CONVERTED: - return NS_TEXTRANGE_CONVERTEDTEXT; + return TextRangeType::NS_TEXTRANGE_CONVERTEDTEXT; case ATTR_TARGET_NOTCONVERTED: - return NS_TEXTRANGE_SELECTEDRAWTEXT; + return TextRangeType::NS_TEXTRANGE_SELECTEDRAWTEXT; case ATTR_TARGET_CONVERTED: - return NS_TEXTRANGE_SELECTEDCONVERTEDTEXT; + return TextRangeType::NS_TEXTRANGE_SELECTEDCONVERTEDTEXT; default: NS_ASSERTION(false, "unknown attribute"); - return NS_TEXTRANGE_CARETPOSITION; - } -} - -static const char* -GetRangeTypeName(uint32_t aRangeType) -{ - switch (aRangeType) { - case NS_TEXTRANGE_RAWINPUT: - return "NS_TEXTRANGE_RAWINPUT"; - case NS_TEXTRANGE_CONVERTEDTEXT: - return "NS_TEXTRANGE_CONVERTEDTEXT"; - case NS_TEXTRANGE_SELECTEDRAWTEXT: - return "NS_TEXTRANGE_SELECTEDRAWTEXT"; - case NS_TEXTRANGE_SELECTEDCONVERTEDTEXT: - return "NS_TEXTRANGE_SELECTEDCONVERTEDTEXT"; - case NS_TEXTRANGE_CARETPOSITION: - return "NS_TEXTRANGE_CARETPOSITION"; - default: - return "UNKNOWN SELECTION TYPE!!"; + return TextRangeType::NS_TEXTRANGE_CARETPOSITION; } } @@ -2014,8 +1995,9 @@ IMMHandler::DispatchCompositionChangeEvent(nsWindow* aWindow, } uint32_t length = current - lastOffset; - uint32_t attr = PlatformToNSAttr(mAttributeArray[lastOffset]); - rv = dispatcher->AppendClauseToPendingComposition(length, attr); + TextRangeType textRangeType = + PlatformToNSAttr(mAttributeArray[lastOffset]); + rv = dispatcher->AppendClauseToPendingComposition(length, textRangeType); if (NS_WARN_IF(NS_FAILED(rv))) { MOZ_LOG(gIMMLog, LogLevel::Error, ("IMM: DispatchCompositionChangeEvent, FAILED due to" @@ -2028,7 +2010,7 @@ IMMHandler::DispatchCompositionChangeEvent(nsWindow* aWindow, MOZ_LOG(gIMMLog, LogLevel::Info, ("IMM: DispatchCompositionChangeEvent, index=%ld, rangeType=%s, " "range length=%lu", - i, GetRangeTypeName(attr), length)); + i, ToChar(textRangeType), length)); } } diff --git a/widget/windows/TSFTextStore.cpp b/widget/windows/TSFTextStore.cpp index 251c1e6f9730..ec0cf76fed00 100644 --- a/widget/windows/TSFTextStore.cpp +++ b/widget/windows/TSFTextStore.cpp @@ -2045,25 +2045,19 @@ GetRangeExtent(ITfRange* aRange, LONG* aStart, LONG* aLength) return rangeACP->GetExtent(aStart, aLength); } -static uint32_t +static TextRangeType GetGeckoSelectionValue(TF_DISPLAYATTRIBUTE& aDisplayAttr) { - uint32_t result; switch (aDisplayAttr.bAttr) { case TF_ATTR_TARGET_CONVERTED: - result = NS_TEXTRANGE_SELECTEDCONVERTEDTEXT; - break; + return TextRangeType::NS_TEXTRANGE_SELECTEDCONVERTEDTEXT; case TF_ATTR_CONVERTED: - result = NS_TEXTRANGE_CONVERTEDTEXT; - break; + return TextRangeType::NS_TEXTRANGE_CONVERTEDTEXT; case TF_ATTR_TARGET_NOTCONVERTED: - result = NS_TEXTRANGE_SELECTEDRAWTEXT; - break; + return TextRangeType::NS_TEXTRANGE_SELECTEDRAWTEXT; default: - result = NS_TEXTRANGE_RAWINPUT; - break; + return TextRangeType::NS_TEXTRANGE_RAWINPUT; } - return result; } HRESULT @@ -2285,7 +2279,7 @@ TSFTextStore::RestartComposition(ITfCompositionView* aCompositionView, TextRange caretRange; caretRange.mStartOffset = caretRange.mEndOffset = uint32_t(oldComposition.mStart + commitString.Length()); - caretRange.mRangeType = NS_TEXTRANGE_CARETPOSITION; + caretRange.mRangeType = TextRangeType::NS_TEXTRANGE_CARETPOSITION; action->mRanges->AppendElement(caretRange); action->mIncomplete = false; @@ -2434,7 +2428,7 @@ TSFTextStore::RecordCompositionUpdateAction() // we always pass in at least one range to eCompositionChange newRange.mStartOffset = 0; newRange.mEndOffset = action->mData.Length(); - newRange.mRangeType = NS_TEXTRANGE_RAWINPUT; + newRange.mRangeType = TextRangeType::NS_TEXTRANGE_RAWINPUT; action->mRanges->AppendElement(newRange); RefPtr range; @@ -2479,7 +2473,7 @@ TSFTextStore::RecordCompositionUpdateAction() TF_DISPLAYATTRIBUTE attr; hr = GetDisplayAttribute(attrPropetry, range, &attr); if (FAILED(hr)) { - newRange.mRangeType = NS_TEXTRANGE_RAWINPUT; + newRange.mRangeType = TextRangeType::NS_TEXTRANGE_RAWINPUT; } else { newRange.mRangeType = GetGeckoSelectionValue(attr); if (GetColor(attr.crText, newRange.mRangeStyle.mForegroundColor)) { @@ -2529,7 +2523,7 @@ TSFTextStore::RecordCompositionUpdateAction() range.mRangeStyle.IsNoChangeStyle()) { range.mRangeStyle.Clear(); // The looks of selected type is better than others. - range.mRangeType = NS_TEXTRANGE_SELECTEDRAWTEXT; + range.mRangeType = TextRangeType::NS_TEXTRANGE_SELECTEDRAWTEXT; } } @@ -2547,7 +2541,7 @@ TSFTextStore::RecordCompositionUpdateAction() caretPosition > targetClause->mEndOffset) { TextRange caretRange; caretRange.mStartOffset = caretRange.mEndOffset = caretPosition; - caretRange.mRangeType = NS_TEXTRANGE_CARETPOSITION; + caretRange.mRangeType = TextRangeType::NS_TEXTRANGE_CARETPOSITION; action->mRanges->AppendElement(caretRange); }