diff options
Diffstat (limited to 'src/plugins/platforms/uikit/quikiteventloop.mm')
-rw-r--r-- | src/plugins/platforms/uikit/quikiteventloop.mm | 27 |
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 |