mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 974318 part.6 Use WidgetTextEvent::mRanges on Mac r=smichaud
This commit is contained in:
parent
31ed7262ef
commit
98384f5ee4
@ -1067,21 +1067,18 @@ private:
|
||||
uint32_t GetRangeCount(NSAttributedString *aString);
|
||||
|
||||
/**
|
||||
* SetTextRangeList() appends text ranges to aTextRangeList.
|
||||
* CreateTextRangeArray() returns text ranges for clauses and/or caret.
|
||||
*
|
||||
* @param aTextRangeList When SetTextRangeList() returns, this will
|
||||
* be set to the NSUnderlineStyleAttributeName
|
||||
* ranges in aAttrString. Note that if you pass
|
||||
* in a large enough auto-range instance for most
|
||||
* cases (e.g., nsAutoTArray<TextRange, 4>),
|
||||
* it prevents memory fragmentation.
|
||||
* @param aAttrString An NSAttributedString instance which indicates
|
||||
* current composition string.
|
||||
* @param aSelectedRange Current selected range (or caret position).
|
||||
* @return The result is set to the
|
||||
* NSUnderlineStyleAttributeName ranges in
|
||||
* aAttrString.
|
||||
*/
|
||||
void SetTextRangeList(nsTArray<TextRange>& aTextRangeList,
|
||||
NSAttributedString *aAttrString,
|
||||
NSRange& aSelectedRange);
|
||||
already_AddRefed<mozilla::TextRangeArray>
|
||||
CreateTextRangeArray(NSAttributedString *aAttrString,
|
||||
NSRange& aSelectedRange);
|
||||
|
||||
/**
|
||||
* InitCompositionEvent() initializes aCompositionEvent.
|
||||
|
@ -2633,12 +2633,11 @@ IMEInputHandler::GetRangeCount(NSAttributedString *aAttrString)
|
||||
NS_OBJC_END_TRY_ABORT_BLOCK_RETURN(0);
|
||||
}
|
||||
|
||||
void
|
||||
IMEInputHandler::SetTextRangeList(nsTArray<TextRange>& aTextRangeList,
|
||||
NSAttributedString *aAttrString,
|
||||
NSRange& aSelectedRange)
|
||||
already_AddRefed<mozilla::TextRangeArray>
|
||||
IMEInputHandler::CreateTextRangeArray(NSAttributedString *aAttrString,
|
||||
NSRange& aSelectedRange)
|
||||
{
|
||||
NS_OBJC_BEGIN_TRY_ABORT_BLOCK;
|
||||
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL;
|
||||
|
||||
// Convert the Cocoa range into the TextRange Array used in Gecko.
|
||||
// Iterate through the attributed string and map the underline attribute to
|
||||
@ -2646,6 +2645,8 @@ IMEInputHandler::SetTextRangeList(nsTArray<TextRange>& aTextRangeList,
|
||||
// we change the implementation of validAttributesForMarkedText.
|
||||
NSRange limitRange = NSMakeRange(0, [aAttrString length]);
|
||||
uint32_t rangeCount = GetRangeCount(aAttrString);
|
||||
nsRefPtr<mozilla::TextRangeArray> textRangeArray =
|
||||
new mozilla::TextRangeArray();
|
||||
for (uint32_t i = 0; i < rangeCount && limitRange.length > 0; i++) {
|
||||
NSRange effectiveRange;
|
||||
id attributeValue = [aAttrString attribute:NSUnderlineStyleAttributeName
|
||||
@ -2658,10 +2659,10 @@ IMEInputHandler::SetTextRangeList(nsTArray<TextRange>& aTextRangeList,
|
||||
range.mEndOffset = NSMaxRange(effectiveRange);
|
||||
range.mRangeType =
|
||||
ConvertToTextRangeType([attributeValue intValue], aSelectedRange);
|
||||
aTextRangeList.AppendElement(range);
|
||||
textRangeArray->AppendElement(range);
|
||||
|
||||
PR_LOG(gLog, PR_LOG_ALWAYS,
|
||||
("%p IMEInputHandler::SetTextRangeList, "
|
||||
("%p IMEInputHandler::CreateTextRangeArray, "
|
||||
"range={ mStartOffset=%llu, mEndOffset=%llu, mRangeType=%s }",
|
||||
this, range.mStartOffset, range.mEndOffset,
|
||||
GetRangeTypeName(range.mRangeType)));
|
||||
@ -2676,15 +2677,17 @@ IMEInputHandler::SetTextRangeList(nsTArray<TextRange>& aTextRangeList,
|
||||
range.mStartOffset = aSelectedRange.location + aSelectedRange.length;
|
||||
range.mEndOffset = range.mStartOffset;
|
||||
range.mRangeType = NS_TEXTRANGE_CARETPOSITION;
|
||||
aTextRangeList.AppendElement(range);
|
||||
textRangeArray->AppendElement(range);
|
||||
|
||||
PR_LOG(gLog, PR_LOG_ALWAYS,
|
||||
("%p IMEInputHandler::SetTextRangeList, "
|
||||
("%p IMEInputHandler::CreateTextRangeArray, "
|
||||
"range={ mStartOffset=%llu, mEndOffset=%llu, mRangeType=%s }",
|
||||
this, range.mStartOffset, range.mEndOffset,
|
||||
GetRangeTypeName(range.mRangeType)));
|
||||
|
||||
NS_OBJC_END_TRY_ABORT_BLOCK;
|
||||
return textRangeArray.forget();
|
||||
|
||||
NS_OBJC_END_TRY_ABORT_BLOCK_NIL;
|
||||
}
|
||||
|
||||
bool
|
||||
@ -2710,12 +2713,9 @@ IMEInputHandler::DispatchTextEvent(const nsString& aText,
|
||||
WidgetTextEvent textEvent(true, NS_TEXT_TEXT, mWidget);
|
||||
textEvent.time = PR_IntervalNow();
|
||||
textEvent.theText = aText;
|
||||
nsAutoTArray<TextRange, 4> textRanges;
|
||||
if (!aDoCommit) {
|
||||
SetTextRangeList(textRanges, aAttrString, aSelectedRange);
|
||||
textEvent.mRanges = CreateTextRangeArray(aAttrString, aSelectedRange);
|
||||
}
|
||||
textEvent.rangeArray = textRanges.Elements();
|
||||
textEvent.rangeCount = textRanges.Length();
|
||||
|
||||
if (textEvent.theText != mLastDispatchedCompositionString) {
|
||||
WidgetCompositionEvent compositionUpdate(true, NS_COMPOSITION_UPDATE,
|
||||
|
Loading…
Reference in New Issue
Block a user