summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/uikit/quikiteventloop.mm
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/uikit/quikiteventloop.mm')
-rw-r--r--src/plugins/platforms/uikit/quikiteventloop.mm27
1 files changed, 23 insertions, 4 deletions
diff --git a/src/plugins/platforms/uikit/quikiteventloop.mm b/src/plugins/platforms/uikit/quikiteventloop.mm
index 70757b10a7..8d2603c60d 100644
--- a/src/plugins/platforms/uikit/quikiteventloop.mm
+++ b/src/plugins/platforms/uikit/quikiteventloop.mm
@@ -78,10 +78,6 @@
}
QUIKitWindow *platformWindow = static_cast<QUIKitWindow *>(widget->platformWindow());
platformWindow->ensureNativeWindow();
- QUIKitWindowSurface *surface = static_cast<QUIKitWindowSurface*>(widget->windowSurface());
- UIView *view = surface->nativeView();
- [platformWindow->nativeWindow() addSubview:view];
- [platformWindow->nativeWindow() makeKeyAndVisible];
}
return YES;
}
@@ -128,6 +124,7 @@ QT_BEGIN_NAMESPACE
QUIKitEventLoop::QUIKitEventLoop()
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
+ mInputHandler = new QUIKitSoftwareInputHandler;
mHelper = [[EventLoopHelper alloc] initWithEventLoopIntegration:this];
mTimer = [[NSTimer timerWithTimeInterval:0.030 target:mHelper selector:@selector(processEventsAndSchedule) userInfo:nil repeats:YES] retain];
[pool release];
@@ -137,10 +134,12 @@ QUIKitEventLoop::~QUIKitEventLoop()
{
[mTimer release];
[mHelper release];
+ delete mInputHandler;
}
void QUIKitEventLoop::startEventLoop()
{
+ qApp->installEventFilter(mInputHandler);
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
[[NSRunLoop currentRunLoop] addTimer:[mTimer autorelease] forMode:NSDefaultRunLoopMode];
UIApplicationMain(qApp->argc(), qApp->argv(), nil, @"QUIKitAppDelegate");
@@ -157,4 +156,24 @@ void QUIKitEventLoop::qtNeedsToProcessEvents()
[mHelper performSelectorOnMainThread:@selector(processEvents) withObject:nil waitUntilDone:NO];
}
+bool QUIKitSoftwareInputHandler::eventFilter(QObject *obj, QEvent *event)
+{
+ if (event->type() == QEvent::RequestSoftwareInputPanel) {
+ QWidget *widget = qobject_cast<QWidget *>(obj);
+ if (widget) {
+ QUIKitWindow *platformWindow = static_cast<QUIKitWindow *>(widget->platformWindow());
+ [platformWindow->nativeView() becomeFirstResponder];
+ return true;
+ }
+ } else if (event->type() == QEvent::CloseSoftwareInputPanel) {
+ QWidget *widget = qobject_cast<QWidget *>(obj);
+ if (widget) {
+ QUIKitWindow *platformWindow = static_cast<QUIKitWindow *>(widget->platformWindow());
+ [platformWindow->nativeView() resignFirstResponder];
+ return true;
+ }
+ }
+ return false;
+}
+
QT_END_NAMESPACE