summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/cocoa/qcocoainputcontext.mm
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@theqtcompany.com>2015-10-22 12:54:18 +0200
committerLiang Qi <liang.qi@theqtcompany.com>2015-10-24 05:51:20 +0000
commit7df107f0266892276c85d259afba335c2a77ba07 (patch)
tree4cc64b4e249b39b0712f83a68919dac7a738573b /src/plugins/platforms/cocoa/qcocoainputcontext.mm
parent129d268246bf4871cdac84fd4a40d20cece71b3c (diff)
Cocoa: Implement QPlatformInputContext::locale().
Listen to NSTextInputContextKeyboardSelectionDidChangeNotification. Task-number: QTBUG-48772 Change-Id: Icea4ef61fd184edbe65a7f195318832a22c312ab Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@theqtcompany.com>
Diffstat (limited to 'src/plugins/platforms/cocoa/qcocoainputcontext.mm')
-rw-r--r--src/plugins/platforms/cocoa/qcocoainputcontext.mm19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoainputcontext.mm b/src/plugins/platforms/cocoa/qcocoainputcontext.mm
index f072991bdd..7d01826ffe 100644
--- a/src/plugins/platforms/cocoa/qcocoainputcontext.mm
+++ b/src/plugins/platforms/cocoa/qcocoainputcontext.mm
@@ -36,6 +36,8 @@
#include "qcocoanativeinterface.h"
#include "qcocoawindow.h"
+#include <Carbon/Carbon.h>
+
#include <QtCore/QRect>
#include <QtGui/QGuiApplication>
#include <QtGui/QWindow>
@@ -76,6 +78,7 @@ QCocoaInputContext::QCocoaInputContext()
, mWindow(QGuiApplication::focusWindow())
{
QMetaObject::invokeMethod(this, "connectSignals", Qt::QueuedConnection);
+ updateLocale();
}
QCocoaInputContext::~QCocoaInputContext()
@@ -116,4 +119,20 @@ void QCocoaInputContext::focusObjectChanged(QObject *focusObject)
mWindow = QGuiApplication::focusWindow();
}
+void QCocoaInputContext::updateLocale()
+{
+ TISInputSourceRef source = TISCopyCurrentKeyboardInputSource();
+ CFArrayRef languages = (CFArrayRef) TISGetInputSourceProperty(source, kTISPropertyInputSourceLanguages);
+ if (CFArrayGetCount(languages) > 0) {
+ CFStringRef langRef = (CFStringRef)CFArrayGetValueAtIndex(languages, 0);
+ QString name = QCFString::toQString(langRef);
+ QLocale locale(name);
+ if (m_locale != locale) {
+ m_locale = locale;
+ emitLocaleChanged();
+ }
+ CFRelease(langRef);
+ }
+}
+
QT_END_NAMESPACE