5#include <AppKit/AppKit.h>
10#include <QtCore/private/qcore_mac_p.h>
12#include <QtGui/qguiapplication.h>
13#include <QtGui/qwindow.h>
17QCocoaWindowManager::QCocoaWindowManager()
22 m_applicationDidFinishLaunchingObserver = QMacNotificationObserver(nil,
23 NSApplicationDidFinishLaunchingNotification, [
this] { initialize(); });
36 m_modalSessionObserver = QMacKeyValueObserver(
37 NSApp, @
"modalWindow", [
this] { modalSessionChanged(); },
38 NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew);
45 for (
auto *window : QGuiApplication::topLevelWindows()) {
46 auto *platformWindow =
static_cast<QCocoaWindow*>(window->handle());
50 auto naturalWindowLevel = platformWindow->windowLevel(window->flags());
51 if (naturalWindowLevel > NSModalPanelWindowLevel) {
52 NSWindow *nativeWindow = platformWindow->nativeWindow();
53 if (NSApp.modalWindow) {
55 nativeWindow.level = NSModalPanelWindowLevel;
56 if ([nativeWindow isVisible])
57 [nativeWindow orderBack:nil];
60 nativeWindow.level = naturalWindowLevel;
69 for (id window in NSApp.windows) {
70 if ([window isKindOfClass:[QNSPanel
class]]) {
71 auto *panel =
static_cast<QNSPanel *>(window);
73 [panel setWorksWhenModal:panel.worksWhenModal];