iOS: add support for Qt::ApplicationStates
Change-Id: I39858fe835c131d5c681db535f2ec9308e2f8223 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
This commit is contained in:
parent
241ba7dc07
commit
5656e6969f
@ -15,6 +15,7 @@ OBJECTIVE_SOURCES = \
|
||||
qiosscreen.mm \
|
||||
qiosbackingstore.mm \
|
||||
qiosapplicationdelegate.mm \
|
||||
qiosapplicationstate.mm \
|
||||
qiosviewcontroller.mm \
|
||||
qioscontext.mm \
|
||||
qiosinputcontext.mm \
|
||||
@ -27,6 +28,7 @@ HEADERS = \
|
||||
qiosscreen.h \
|
||||
qiosbackingstore.h \
|
||||
qiosapplicationdelegate.h \
|
||||
qiosapplicationstate.h \
|
||||
qiosviewcontroller.h \
|
||||
qioscontext.h \
|
||||
qiosinputcontext.h \
|
||||
|
60
src/plugins/platforms/ios/qiosapplicationstate.h
Normal file
60
src/plugins/platforms/ios/qiosapplicationstate.h
Normal file
@ -0,0 +1,60 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||
** Contact: http://www.qt-project.org/legal
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and Digia. For licensing terms and
|
||||
** conditions see http://qt.digia.com/licensing. For further information
|
||||
** use the contact form at http://qt.digia.com/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Digia gives you certain additional
|
||||
** rights. These rights are described in the Digia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3.0 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU General Public License version 3.0 requirements will be
|
||||
** met: http://www.gnu.org/copyleft/gpl.html.
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QIOSAPPLICATIONSTATE_H
|
||||
#define QIOSAPPLICATIONSTATE_H
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
@class QIOSApplicationStateListener;
|
||||
|
||||
class QIOSApplicationState
|
||||
{
|
||||
public:
|
||||
QIOSApplicationState();
|
||||
~QIOSApplicationState();
|
||||
private:
|
||||
QIOSApplicationStateListener *m_listener;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif
|
162
src/plugins/platforms/ios/qiosapplicationstate.mm
Normal file
162
src/plugins/platforms/ios/qiosapplicationstate.mm
Normal file
@ -0,0 +1,162 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||
** Contact: http://www.qt-project.org/legal
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and Digia. For licensing terms and
|
||||
** conditions see http://qt.digia.com/licensing. For further information
|
||||
** use the contact form at http://qt.digia.com/contact-us.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Digia gives you certain additional
|
||||
** rights. These rights are described in the Digia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3.0 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU General Public License version 3.0 requirements will be
|
||||
** met: http://www.gnu.org/copyleft/gpl.html.
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
#include <qpa/qwindowsysteminterface.h>
|
||||
#include "qiosapplicationstate.h"
|
||||
|
||||
@interface QIOSApplicationStateListener : NSObject
|
||||
@end
|
||||
|
||||
@implementation QIOSApplicationStateListener
|
||||
|
||||
- (id) init
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
// Listen for application state changes.
|
||||
// Note: We use notifications rather than application delegate callbacks to
|
||||
// also support hybrid applications were QIOSApplicationDelegate is not in use.
|
||||
[[NSNotificationCenter defaultCenter]
|
||||
addObserver:self
|
||||
selector:@selector(applicationDidBecomeActive)
|
||||
name:UIApplicationDidBecomeActiveNotification
|
||||
object:nil];
|
||||
[[NSNotificationCenter defaultCenter]
|
||||
addObserver:self
|
||||
selector:@selector(applicationWillResignActive)
|
||||
name:UIApplicationWillResignActiveNotification
|
||||
object:nil];
|
||||
[[NSNotificationCenter defaultCenter]
|
||||
addObserver:self
|
||||
selector:@selector(applicationDidEnterBackground)
|
||||
name:UIApplicationDidEnterBackgroundNotification
|
||||
object:nil];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) dealloc
|
||||
{
|
||||
[[NSNotificationCenter defaultCenter]
|
||||
removeObserver:self
|
||||
name:UIApplicationDidBecomeActiveNotification
|
||||
object:nil];
|
||||
[[NSNotificationCenter defaultCenter]
|
||||
removeObserver:self
|
||||
name:UIApplicationWillResignActiveNotification
|
||||
object:nil];
|
||||
[[NSNotificationCenter defaultCenter]
|
||||
removeObserver:self
|
||||
name:UIApplicationDidEnterBackgroundNotification
|
||||
object:nil];
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (void) applicationDidBecomeActive
|
||||
{
|
||||
[self handleApplicationStateChanged:UIApplicationStateActive];
|
||||
}
|
||||
|
||||
- (void) applicationWillResignActive
|
||||
{
|
||||
// Note that UIApplication is still UIApplicationStateActive at this
|
||||
// point, but since there is no separate notification for the inactive
|
||||
// state, we report UIApplicationStateInactive now:
|
||||
[self handleApplicationStateChanged:UIApplicationStateInactive];
|
||||
}
|
||||
|
||||
- (void) applicationDidEnterBackground
|
||||
{
|
||||
[self handleApplicationStateChanged:UIApplicationStateBackground];
|
||||
}
|
||||
|
||||
- (void) handleApplicationStateChanged:(UIApplicationState) uiApplicationState
|
||||
{
|
||||
Qt::ApplicationState state;
|
||||
switch (uiApplicationState) {
|
||||
case UIApplicationStateActive:
|
||||
// The application is visible in front, and receiving events:
|
||||
state = Qt::ApplicationActive;
|
||||
break;
|
||||
case UIApplicationStateInactive:
|
||||
// The app is running in the foreground but is not receiving events. This
|
||||
// typically happens while transitioning to/from active/background, like
|
||||
// upon app launch or when receiving incoming calls:
|
||||
state = Qt::ApplicationInactive;
|
||||
break;
|
||||
case UIApplicationStateBackground:
|
||||
// Normally the app would enter this state briefly before it gets
|
||||
// suspeded (you have five seconds, according to Apple).
|
||||
// You can request more time and start a background task, which would
|
||||
// normally map closer to Qt::ApplicationHidden. But since we have no
|
||||
// API for doing that yet, we handle this state as "about to be suspended".
|
||||
// Note: A screen-shot for the SpringBoard will also be taken after this
|
||||
// call returns.
|
||||
state = Qt::ApplicationSuspended;
|
||||
break;
|
||||
}
|
||||
QWindowSystemInterface::handleApplicationStateChanged(state);
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
QIOSApplicationState::QIOSApplicationState()
|
||||
: m_listener([[QIOSApplicationStateListener alloc] init])
|
||||
{
|
||||
// Update the current state now, since we have missed all the updates
|
||||
// posted from AppKit so far. But let QPA finish initialization first:
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
UIApplicationState state = [UIApplication sharedApplication].applicationState;
|
||||
[m_listener handleApplicationStateChanged:state];
|
||||
});
|
||||
}
|
||||
|
||||
QIOSApplicationState::~QIOSApplicationState()
|
||||
{
|
||||
[m_listener release];
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -46,6 +46,8 @@
|
||||
#include <qpa/qplatformnativeinterface.h>
|
||||
#include <qpa/qwindowsysteminterface.h>
|
||||
|
||||
#include "qiosapplicationstate.h"
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QIOSIntegration : public QPlatformIntegration, public QPlatformNativeInterface
|
||||
@ -79,6 +81,7 @@ private:
|
||||
QPlatformInputContext *m_inputContext;
|
||||
QPlatformScreen *m_screen;
|
||||
QTouchDevice *m_touchDevice;
|
||||
QIOSApplicationState m_applicationState;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -90,6 +90,8 @@ bool QIOSIntegration::hasCapability(Capability cap) const
|
||||
return true;
|
||||
case MultipleWindows:
|
||||
return true;
|
||||
case ApplicationState:
|
||||
return true;
|
||||
default:
|
||||
return QPlatformIntegration::hasCapability(cap);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user