From 4ee20e3a2f4a03f9bda9f43c4e6b41255364690d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Wed, 18 Aug 2021 11:31:51 +0200 Subject: [PATCH] macOS: Simplify string handling when handling complex text Pick-to: 6.2 Change-Id: Ib19dab99b836fdd5a5eda5cc54c81f1fea31ce65 Reviewed-by: Volker Hilsheimer --- .../platforms/cocoa/qnsview_complextext.mm | 26 ++++++------------- 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/src/plugins/platforms/cocoa/qnsview_complextext.mm b/src/plugins/platforms/cocoa/qnsview_complextext.mm index 1e5423ab0e..2c2ccc33c8 100644 --- a/src/plugins/platforms/cocoa/qnsview_complextext.mm +++ b/src/plugins/platforms/cocoa/qnsview_complextext.mm @@ -105,14 +105,8 @@ return; } - QString commitString; - if ([aString length]) { - if ([aString isKindOfClass:[NSAttributedString class]]) { - commitString = QString::fromCFString(reinterpret_cast([aString string])); - } else { - commitString = QString::fromCFString(reinterpret_cast(aString)); - }; - } + const bool isAttributedString = [aString isKindOfClass:NSAttributedString.class]; + QString commitString = QString::fromNSString(isAttributedString ? [aString string] : aString); QObject *focusObject = m_platformWindow->window()->focusObject(); if (queryInputMethod(focusObject)) { @@ -133,14 +127,13 @@ << " with selected range " << selectedRange << ", replacing range " << replacementRange; - QString preeditString; + const bool isAttributedString = [aString isKindOfClass:NSAttributedString.class]; + QString preeditString = QString::fromNSString(isAttributedString ? [aString string] : aString); QList attrs; attrs<([aString string])); + if (isAttributedString) { int composingLength = preeditString.length(); int index = 0; // Create attributes for individual sections of preedit text @@ -167,9 +160,6 @@ } index = effectiveRange.location + effectiveRange.length; } - } else { - // No attributes specified, take only the preedit text. - preeditString = QString::fromCFString(reinterpret_cast(aString)); } if (attrs.isEmpty()) { @@ -207,9 +197,9 @@ if (selectedText.isEmpty()) return nil; - QCFString string(selectedText.mid(aRange.location, aRange.length)); - const NSString *tmpString = reinterpret_cast((CFStringRef)string); - return [[[NSAttributedString alloc] initWithString:const_cast(tmpString)] autorelease]; + NSString *substring = QStringView(selectedText).mid(aRange.location, aRange.length).toNSString(); + return [[[NSAttributedString alloc] initWithString:substring] autorelease]; + } else { return nil; }