61 if (!lcQpa().isInfoEnabled())
64 auto osVersion = QMacVersion::currentRuntime();
65 auto qtBuildSDK = QMacVersion::buildSDK(QMacVersion::QtLibraries);
66 auto qtDeploymentTarget = QMacVersion::deploymentTarget(QMacVersion::QtLibraries);
67 auto appBuildSDK = QMacVersion::buildSDK(QMacVersion::ApplicationBinary);
68 auto appDeploymentTarget = QMacVersion::deploymentTarget(QMacVersion::ApplicationBinary);
70 qCInfo(lcQpa,
"Loading macOS (Cocoa) platform plugin for Qt " QT_VERSION_STR
", running on macOS %d.%d.%d\n\n"
71 " Component SDK version Deployment target \n"
72 " ------------- ------------- -------------------\n"
73 " Qt " QT_VERSION_STR
" %d.%d.%d %d.%d.%d\n"
74 " Application %d.%d.%d %d.%d.%d\n",
75 osVersion.majorVersion(), osVersion.minorVersion(), osVersion.microVersion(),
76 qtBuildSDK.majorVersion(), qtBuildSDK.minorVersion(), qtBuildSDK.microVersion(),
77 qtDeploymentTarget.majorVersion(), qtDeploymentTarget.minorVersion(), qtDeploymentTarget.microVersion(),
78 appBuildSDK.majorVersion(), appBuildSDK.minorVersion(), appBuildSDK.microVersion(),
79 appDeploymentTarget.majorVersion(), appDeploymentTarget.minorVersion(), appDeploymentTarget.microVersion());
81 qCInfo(lcQpa) <<
"Running with Liquid Glass enabled:" << qt_apple_runningWithLiquidGlass();
104QCocoaIntegration::QCocoaIntegration(
const QStringList ¶mList)
105 : mOptions(parseOptions(paramList))
107#if QT_CONFIG(accessibility)
108 , mAccessibility(
new QCocoaAccessibility)
110#ifndef QT_NO_CLIPBOARD
111 , mCocoaClipboard(
new QCocoaClipboard)
113 , mCocoaDrag(
new QCocoaDrag)
114 , mNativeInterface(
new QCocoaNativeInterface)
115 , mKeyboardMapper(
new QAppleKeyMapper)
117 logVersionInformation();
120 qWarning(
"Creating multiple Cocoa platform integrations is not supported");
123#ifndef QT_NO_FREETYPE
124 if (mOptions.testFlag(UseFreeTypeFontEngine))
125 mFontDb.reset(
new QCoreTextFontDatabaseEngineFactory<QFontEngineFT>);
128 mFontDb.reset(
new QCoreTextFontDatabaseEngineFactory<QCoreTextFontEngine>);
130 auto icStrs = QPlatformInputContextFactory::requested();
131 icStrs.isEmpty() ? mInputContext.reset(
new QCocoaInputContext)
132 : mInputContext.reset(QPlatformInputContextFactory::create(icStrs));
135 QMacAutoReleasePool pool;
137 NSApplication *cocoaApplication = [QNSApplication sharedApplication];
138 qt_redirectNSApplicationSendEvent();
140 if (qEnvironmentVariableIsEmpty(
"QT_MAC_DISABLE_FOREGROUND_APPLICATION_TRANSFORM")) {
146 qt_mac_transformProccessToForegroundApplication();
151 if (!QCoreApplication::testAttribute(Qt::AA_PluginApplication)) {
154 QCocoaApplicationDelegate *newDelegate = [QCocoaApplicationDelegate sharedDelegate];
155 [newDelegate setReflectionDelegate:[cocoaApplication delegate]];
156 [cocoaApplication setDelegate:newDelegate];
159 QCocoaMenuLoader *qtMenuLoader = [QCocoaMenuLoader sharedMenuLoader];
160 [cocoaApplication setMenu:[qtMenuLoader menu]];
163 QCocoaScreen::initializeScreens();
165 QMacMimeRegistry::initializeMimeTypes();
166 QCocoaMimeTypes::initializeMimeTypes();
167 QWindowSystemInterfacePrivate::TabletEvent::setPlatformSynthesizesMouse(
false);
168 QWindowSystemInterface::registerInputDevice(
new QInputDevice(QString(
"keyboard"), 0,
169 QInputDevice::DeviceType::Keyboard, QString(),
this));
171 connect(qGuiApp, &QGuiApplication::focusWindowChanged,
172 this, &QCocoaIntegration::focusWindowChanged);
175 m_menuTrackingObserver = QMacNotificationObserver(nil,
176 NSMenuDidBeginTrackingNotification, ^{
177 QGuiApplicationPrivate::instance()->closeAllPopups();
181QCocoaIntegration::~QCocoaIntegration()
185 qt_resetNSApplicationSendEvent();
187 QMacAutoReleasePool pool;
188 if (!QCoreApplication::testAttribute(Qt::AA_PluginApplication)) {
190 QCocoaApplicationDelegate *delegate = [QCocoaApplicationDelegate sharedDelegate];
191 [delegate removeAppleEventHandlers];
193 [[NSApplication sharedApplication] setDelegate:nil];
197 QCocoaWindow::removePopupMonitor();
199#ifndef QT_NO_CLIPBOARD
203 delete mCocoaClipboard;
204 QMacMimeRegistry::destroyMimeTypes();
207 QCocoaScreen::cleanupScreens();
227bool QCocoaIntegration::hasCapability(QPlatformIntegration::Capability cap)
const
238 if (QOperatingSystemVersion::current() >= QOperatingSystemVersion::MacOSTahoe) {
240 static bool isSoftwareContext = []{
241 QOpenGLContext context;
243 auto *cocoaContext =
static_cast<QCocoaGLContext*>(context.handle());
244 if (cocoaContext->isSoftwareContext()) {
245 qWarning() <<
"Detected software OpenGL backend,"
246 <<
"which is known to be broken on"
247 << qUtf8Printable(QSysInfo::prettyProductName());
253 return !isSoftwareContext;
256 case BufferQueueingOpenGL:
258 case ThreadedPixmaps:
260 case MultipleWindows:
262 case ApplicationState:
263 case ApplicationIcon:
264 case BackingStoreStaticContents:
267 return QPlatformIntegration::hasCapability(cap);
422QVariant QCocoaIntegration::styleHint(StyleHint hint)
const
425 case FontSmoothingGamma:
426 return QCoreTextFontEngine::fontSmoothingGamma();
427 case ShowShortcutsInContextMenus:
428 return QVariant(
false);
429 case ReplayMousePressOutsidePopup:
430 return QVariant(
false);
434 return QPlatformIntegration::styleHint(hint);
477 NSRect rect = NSMakeRect(0, 0, 32, 32);