iOS: Return correct QLocale from QIOSInputContext
Ensure we return a correct QLocale on iOS by overriding QPlatformInputContext::locale(). A broader implementation involving subclassing QSystemLocale will be done in dev. Task-number: QTBUG-48772 Change-Id: I5250bdad320cbe66d63456926f6eab6fc2865424 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
This commit is contained in:
parent
2ceacd5372
commit
0e70d35f15
@ -36,6 +36,7 @@
|
||||
|
||||
#include <UIKit/UIKit.h>
|
||||
|
||||
#include <QtCore/qlocale.h>
|
||||
#include <QtGui/qevent.h>
|
||||
#include <QtGui/qtransform.h>
|
||||
#include <qpa/qplatforminputcontext.h>
|
||||
@ -46,6 +47,7 @@ const char kImePlatformDataReturnKeyType[] = "returnKeyType";
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
@class QIOSLocaleListener;
|
||||
@class QIOSKeyboardListener;
|
||||
@class QIOSTextInputResponder;
|
||||
@protocol KeyboardState;
|
||||
@ -92,6 +94,8 @@ public:
|
||||
void reset() Q_DECL_OVERRIDE;
|
||||
void commit() Q_DECL_OVERRIDE;
|
||||
|
||||
QLocale locale() const Q_DECL_OVERRIDE;
|
||||
|
||||
void clearCurrentFocusObject();
|
||||
|
||||
void setFocusObject(QObject *object) Q_DECL_OVERRIDE;
|
||||
@ -112,6 +116,7 @@ public:
|
||||
private:
|
||||
UIView* scrollableRootView();
|
||||
|
||||
QIOSLocaleListener *m_localeListener;
|
||||
QIOSKeyboardListener *m_keyboardHideGesture;
|
||||
QIOSTextInputResponder *m_textResponder;
|
||||
KeyboardState m_keyboardState;
|
||||
|
@ -56,6 +56,39 @@ static QUIView *focusView()
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
@interface QIOSLocaleListener : NSObject
|
||||
@end
|
||||
|
||||
@implementation QIOSLocaleListener
|
||||
|
||||
- (id)init
|
||||
{
|
||||
if (self = [super init]) {
|
||||
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
|
||||
[notificationCenter addObserver:self
|
||||
selector:@selector(localeDidChange:)
|
||||
name:NSCurrentLocaleDidChangeNotification object:nil];
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)dealloc
|
||||
{
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (void)localeDidChange:(NSNotification *)notification
|
||||
{
|
||||
Q_UNUSED(notification);
|
||||
QIOSInputContext::instance()->emitLocaleChanged();
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
@interface QIOSKeyboardListener : UIGestureRecognizer <UIGestureRecognizerDelegate> {
|
||||
@private
|
||||
QIOSInputContext *m_context;
|
||||
@ -285,6 +318,7 @@ QIOSInputContext *QIOSInputContext::instance()
|
||||
|
||||
QIOSInputContext::QIOSInputContext()
|
||||
: QPlatformInputContext()
|
||||
, m_localeListener([QIOSLocaleListener new])
|
||||
, m_keyboardHideGesture([[QIOSKeyboardListener alloc] initWithQIOSInputContext:this])
|
||||
, m_textResponder(0)
|
||||
{
|
||||
@ -298,6 +332,7 @@ QIOSInputContext::QIOSInputContext()
|
||||
|
||||
QIOSInputContext::~QIOSInputContext()
|
||||
{
|
||||
[m_localeListener release];
|
||||
[m_keyboardHideGesture.view removeGestureRecognizer:m_keyboardHideGesture];
|
||||
[m_keyboardHideGesture release];
|
||||
|
||||
@ -657,3 +692,8 @@ void QIOSInputContext::commit()
|
||||
[m_textResponder unmarkText];
|
||||
[m_textResponder notifyInputDelegate:Qt::ImSurroundingText];
|
||||
}
|
||||
|
||||
QLocale QIOSInputContext::locale() const
|
||||
{
|
||||
return QLocale(QString::fromNSString([[NSLocale currentLocale] objectForKey:NSLocaleIdentifier]));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user