Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qiosglobal.mm
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#include "qiosglobal.h"
7#include "qiosscreen.h"
8
9#include <QtCore/private/qcore_mac_p.h>
10
12
13Q_LOGGING_CATEGORY(lcQpaApplication, "qt.qpa.application");
14Q_LOGGING_CATEGORY(lcQpaInputMethods, "qt.qpa.input.methods");
15Q_LOGGING_CATEGORY(lcQpaWindow, "qt.qpa.window");
16
18{
20 return false;
21
22 // Returns \c true if the plugin is in full control of the whole application. This means
23 // that we control the application delegate and the top view controller, and can take
24 // actions that impacts all parts of the application. The opposite means that we are
25 // embedded inside a native iOS application, and should be more focused on playing along
26 // with native UIControls, and less inclined to change structures that lies outside the
27 // scope of our QWindows/UIViews.
28 static bool isQt = ([qt_apple_sharedApplication().delegate isKindOfClass:[QIOSApplicationDelegate class]]);
29 return isQt;
30}
31
32#ifndef Q_OS_TVOS
33Qt::ScreenOrientation toQtScreenOrientation(UIDeviceOrientation uiDeviceOrientation)
34{
35 Qt::ScreenOrientation qtOrientation;
36 switch (uiDeviceOrientation) {
37 case UIDeviceOrientationPortraitUpsideDown:
38 qtOrientation = Qt::InvertedPortraitOrientation;
39 break;
40 case UIDeviceOrientationLandscapeLeft:
41 qtOrientation = Qt::LandscapeOrientation;
42 break;
43 case UIDeviceOrientationLandscapeRight:
45 break;
46 case UIDeviceOrientationFaceUp:
47 case UIDeviceOrientationFaceDown:
48 qWarning("Falling back to Qt::PortraitOrientation for UIDeviceOrientationFaceUp/UIDeviceOrientationFaceDown");
49 qtOrientation = Qt::PortraitOrientation;
50 break;
51 default:
52 qtOrientation = Qt::PortraitOrientation;
53 break;
54 }
55 return qtOrientation;
56}
57
58UIDeviceOrientation fromQtScreenOrientation(Qt::ScreenOrientation qtOrientation)
59{
60 UIDeviceOrientation uiOrientation;
61 switch (qtOrientation) {
63 uiOrientation = UIDeviceOrientationLandscapeLeft;
64 break;
66 uiOrientation = UIDeviceOrientationLandscapeRight;
67 break;
69 uiOrientation = UIDeviceOrientationPortraitUpsideDown;
70 break;
73 default:
74 uiOrientation = UIDeviceOrientationPortrait;
75 break;
76 }
77 return uiOrientation;
78}
79#endif
80
81int infoPlistValue(NSString* key, int defaultValue)
82{
83 static NSBundle *bundle = [NSBundle mainBundle];
84 NSNumber* value = [bundle objectForInfoDictionaryKey:key];
85 return value ? [value intValue] : defaultValue;
86}
87
89
90// -------------------------------------------------------------------------
91
92@interface QtFirstResponderEvent : UIEvent
93@property (nonatomic, strong) id firstResponder;
94@end
95
96@implementation QtFirstResponderEvent
97- (void)dealloc
98{
99 self.firstResponder = 0;
100 [super dealloc];
101}
102@end
103
104
105@implementation UIView (QtFirstResponder)
106- (UIView*)qt_findFirstResponder
107{
108 if ([self isFirstResponder])
109 return self;
110
111 for (UIView *subview in self.subviews) {
112 if (UIView *firstResponder = [subview qt_findFirstResponder])
113 return firstResponder;
114 }
115
116 return nil;
117}
118@end
119
120@implementation UIResponder (QtFirstResponder)
121
122+ (id)currentFirstResponder
123{
125 qWarning() << "can't get first responder in application extensions!";
126 return nil;
127 }
128
129 QtFirstResponderEvent *event = [[[QtFirstResponderEvent alloc] init] autorelease];
130 [qt_apple_sharedApplication() sendAction:@selector(qt_findFirstResponder:event:) to:nil from:nil forEvent:event];
131 return event.firstResponder;
132}
133
134- (void)qt_findFirstResponder:(id)sender event:(QtFirstResponderEvent *)event
135{
136 Q_UNUSED(sender);
137
138 if ([self isKindOfClass:[UIView class]])
139 event.firstResponder = [static_cast<UIView *>(self) qt_findFirstResponder];
140 else
141 event.firstResponder = [self isFirstResponder] ? self : nil;
142}
143@end
144
146
148 : QScopedValueRollback<UIResponder *>(s_firstResponderCandidate, responder)
149{
150}
151
152UIResponder *FirstResponderCandidate::s_firstResponderCandidate = nullptr;
153
155
FirstResponderCandidate(UIResponder *)
Combined button and popup list for selecting options.
ScreenOrientation
Definition qnamespace.h:270
@ InvertedLandscapeOrientation
Definition qnamespace.h:275
@ InvertedPortraitOrientation
Definition qnamespace.h:274
@ LandscapeOrientation
Definition qnamespace.h:273
@ PortraitOrientation
Definition qnamespace.h:272
@ PrimaryOrientation
Definition qnamespace.h:271
QString self
Definition language.cpp:57
bool qt_apple_isApplicationExtension()
Definition qcore_mac.mm:423
AppleApplication * qt_apple_sharedApplication()
Definition qcore_mac.mm:430
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
int infoPlistValue(NSString *key, int defaultValue)
Definition qiosglobal.mm:81
Qt::ScreenOrientation toQtScreenOrientation(UIDeviceOrientation uiDeviceOrientation)
Definition qiosglobal.mm:33
bool isQtApplication()
Definition qiosglobal.mm:17
UIDeviceOrientation fromQtScreenOrientation(Qt::ScreenOrientation qtOrientation)
Definition qiosglobal.mm:58
#define qWarning
Definition qlogging.h:162
#define Q_LOGGING_CATEGORY(name,...)
GLuint64 key
GLenum GLuint id
[7]
struct _cl_event * event
GLuint in
#define Q_UNUSED(x)
QString bundle
QSharedPointer< int > strong