46QCocoaInputContext::QCocoaInputContext()
47 : QPlatformInputContext()
48 , m_focusWindow(QGuiApplication::focusWindow())
50 m_inputSourceObserver = QMacNotificationObserver(nil,
51 NSTextInputContextKeyboardSelectionDidChangeNotification, [&]() {
52 qCDebug(lcQpaInputMethods) <<
"Text input source changed";
68void QCocoaInputContext::commit()
70 qCDebug(lcQpaInputMethods) <<
"Committing composition";
75 auto *platformWindow = m_focusWindow->handle();
79 auto *cocoaWindow =
static_cast<QCocoaWindow *>(platformWindow);
80 QNSView *view = qnsview_cast(cocoaWindow->view());
86 [view.inputContext discardMarkedText];
87 if (view.inputContext != NSTextInputContext.currentInputContext) {
92 [NSTextInputContext.currentInputContext activate];
100void QCocoaInputContext::reset()
102 qCDebug(lcQpaInputMethods) <<
"Resetting input method";
107 QCocoaWindow *window =
static_cast<QCocoaWindow *>(m_focusWindow->handle());
108 QNSView *view = qnsview_cast(window->view());
112 if (NSTextInputContext *ctxt = [NSTextInputContext currentInputContext]) {
113 [ctxt discardMarkedText];
118void QCocoaInputContext::setFocusObject(QObject *focusObject)
120 qCDebug(lcQpaInputMethods) <<
"Focus object changed to" << focusObject;
122 if (m_focusWindow == QGuiApplication::focusWindow()) {
126 QCocoaWindow *window =
static_cast<QCocoaWindow *>(m_focusWindow->handle());
129 QNSView *view = qnsview_cast(window->view());
133 if (NSTextInputContext *ctxt = [NSTextInputContext currentInputContext]) {
134 [ctxt discardMarkedText];
135 [view cancelComposingText];
138 m_focusWindow = QGuiApplication::focusWindow();
142void QCocoaInputContext::updateLocale()
144 QCFType<TISInputSourceRef> source = TISCopyCurrentKeyboardInputSource();
145 NSArray *languages =
static_cast<NSArray*>(TISGetInputSourceProperty(source,
146 kTISPropertyInputSourceLanguages));
148 qCDebug(lcQpaInputMethods) <<
"Input source supports" << languages;
149 if (!languages.count)
152 QString language = QString::fromNSString(languages.firstObject);
153 QLocale locale(language);
155 bool localeUpdated = m_locale != locale;
156 static bool firstUpdate =
true;
160 if (localeUpdated && !firstUpdate) {
161 qCDebug(lcQpaInputMethods) <<
"Reporting new locale" << locale;