Re: qt4-base-mac-4.8.6-2 compile failure on OS X 10.10 Public Beta 3

Hanspeter Niederstrasser <[email protected]>
Newsgroups gmane.os.apple.fink.devel
Organization Snaggled Works
Message-ID <[email protected]>
On 9/17/2014 6:55 PM, Kevin Horton wrote:
> Attempts to compile qt4-base-mac-4.8.6-2 on OS X 10.10 Public Beta 3 fail with:
>
> gcc -c -pipe -g -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.10 -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.10 -fvisibility=hidden -fvisibility-inlines-hidden -Wall -W -isysroot /Applications/Xcode6-Beta6.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -DQT_SHARED -DQT_BUILD_GUI_LIB -DQT_NO_USING_NAMESPACE -DQT_NO_CAST_TO_ASCII -DQT_ASCII_CAST_WARNINGS -DQT3_SUPPORT -DQT_MOC_COMPAT -DQT_USE_QSTRINGBUILDER -DQT_NO_CUPS -DQT_NO_LPR -DQT_NO_OPENTYPE -DQT_NO_STYLE_WINDOWSVISTA -DQT_NO_STYLE_WINDOWSXP -DQT_NO_STYLE_GTK -DQT_NO_STYLE_WINDOWSCE -DQT_NO_STYLE_WINDOWSMOBILE -DQT_NO_STYLE_S60 -DQ_INTERNAL_QAPP_SRC -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_HAVE_SSE3 -DQT_HAVE_SSSE3 -DQT_HAVE_SSE4_1 -DQ
 T_HAVE_SSE4_2 -DQT_HAVE_AVX -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -I../../mkspecs/macx-g++ -I. -I.moc/debug-shared -I../../include/QtCore -I../../include -I../../include/QtGui -I.rcc/deb
 ug-shared
 -Iimage -I../3rdparty/harfbuzz/src -Idialogs -I.uic/debug-shared -F/sw/src/fink.build/qt4-base-mac-4.8.6-2/qt-everywhere-opensource-src-4.8.6/lib kernel/qcocoaapplicationdelegate_mac.mm -o .obj/debug-shared/qcocoaapplicationdelegate_mac.o
> kernel/qcocoaapplicationdelegate_mac.mm:125:28: error: cannot initialize a parameter of type 'id<NSFileManagerDelegate>' with an lvalue of type 'NSObject<NSApplicationDelegate> *'
>          [NSApp setDelegate:reflectionDelegate];
>                             ^~~~~~~~~~~~~~~~~~
> /Applications/Xcode6-Beta6.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSFileManager.h:109:47: note: passing argument to parameter 'delegate' here
> @property (assign) id <NSFileManagerDelegate> delegate NS_AVAILABLE(10_5, 2_0);
>                                                ^
> 1 error generated.
> make[2]: *** [.obj/debug-shared/qcocoaapplicationdelegate_mac.o] Error 1
> make[1]: *** [debug-all] Error 2
> make: *** [sub-gui-make_default-ordered] Error 2
> ### execution of /tmp/fink.6bgd3 failed, exit code 2
> ### execution of /tmp/fink.vEpqs failed, exit code 2
> Removing runtime build-lock...
> Removing build-lock package...
> /sw/bin/dpkg-lockwait -r fink-buildlock-qt4-base-mac-4.8.6-2
> (Reading database ... 135184 files and directories currently installed.)
> Removing fink-buildlock-qt4-base-mac-4.8.6-2 ...
> Failed: phase compiling: qt4-base-mac-4.8.6-2 failed

Please try the attached patch. Either paste the contents to the end of 
the existing qt4-base-mac.patch and modify the PatchFile-MD5: field to 
match, or add it as a new PatchFileN: and apply it in PatchScript.

Hanspeter

------------------------------------------------------------------------------
Want excitement?
Manually upgrade your production database.
When you want reliability, choose Perforce
Perforce version control. Predictably reliable.
http://pubads.g.doubleclick.net/gampad/clk?id=157508191&iu=/4140/ostg.clktrk

_______________________________________________
Fink-devel mailing list
[email protected]
List archive:
http://news.gmane.org/gmane.os.apple.fink.devel
Subscription management:
https://lists.sourceforge.net/lists/listinfo/fink-devel
qt4-base-mac-nsapp.patch (text/plain, 37.7 KB)
diff --git a/src/gui/dialogs/qcolordialog_mac.mm b/src/gui/dialogs/qcolordialog_mac.mm
index f65422f..df53f6f 100644
--- a/src/gui/dialogs/qcolordialog_mac.mm
+++ b/src/gui/dialogs/qcolordialog_mac.mm
@@ -318,7 +318,7 @@ QT_USE_NAMESPACE
         // It's important that the modal event loop is stopped before
         // we accept/reject QColorDialog, since QColorDialog has its
         // own event loop that needs to be stopped last. 
-        [NSApp stopModalWithCode:code];
+        [[NSApplication sharedApplication] stopModalWithCode:code];
     } else {
         // Since we are not in a modal event loop, we can safely close
         // down QColorDialog
@@ -350,7 +350,7 @@ QT_USE_NAMESPACE
     while (!modalEnded) {
 #ifndef QT_NO_EXCEPTIONS
         @try {
-            [NSApp runModalForWindow:mColorPanel];
+            [[NSApplication sharedApplication] runModalForWindow:mColorPanel];
             modalEnded = true;
         } @catch (NSException *) {
             // For some reason, NSColorPanel throws an exception when
@@ -358,7 +358,7 @@ QT_USE_NAMESPACE
             // palette (tab three).
         }
 #else
-        [NSApp runModalForWindow:mColorPanel];
+        [[NSApplication sharedApplication] runModalForWindow:mColorPanel];
         modalEnded = true;
 #endif
     }
@@ -469,10 +469,10 @@ void QColorDialogPrivate::mac_nativeDialogModalHelp()
     // Do a queued meta-call to open the native modal dialog so it opens after the new
     // event loop has started to execute (in QDialog::exec). Using a timer rather than
     // a queued meta call is intentional to ensure that the call is only delivered when
-    // [NSApp run] runs (timers are handeled special in cocoa). If NSApp is not
+    // [NSApplication run] runs (timers are handeled special in cocoa). If NSApplication is not
     // running (which is the case if e.g a top-most QEventLoop has been
     // interrupted, and the second-most event loop has not yet been reactivated (regardless
-    // if [NSApp run] is still on the stack)), showing a native modal dialog will fail.
+    // if [NSApplication run] is still on the stack)), showing a native modal dialog will fail.
     if (delegate){
         Q_Q(QColorDialog);
         QTimer::singleShot(1, q, SLOT(_q_macRunNativeAppModalPanel()));
diff --git a/src/gui/dialogs/qfiledialog_mac.mm b/src/gui/dialogs/qfiledialog_mac.mm
index cb9dc77..da15a61 100644
--- a/src/gui/dialogs/qfiledialog_mac.mm
+++ b/src/gui/dialogs/qfiledialog_mac.mm
@@ -229,7 +229,7 @@ QT_USE_NAMESPACE
     if ([mSavePanel respondsToSelector:@selector(close)])
         [mSavePanel close];
     if ([mSavePanel isSheet])
-        [NSApp endSheet: mSavePanel];
+        [[NSApplication sharedApplication] endSheet: mSavePanel];
 }
 
 - (void)showModelessPanel
@@ -1162,10 +1162,10 @@ void QFileDialogPrivate::mac_nativeDialogModalHelp()
     // Do a queued meta-call to open the native modal dialog so it opens after the new
     // event loop has started to execute (in QDialog::exec). Using a timer rather than
     // a queued meta call is intentional to ensure that the call is only delivered when
-    // [NSApp run] runs (timers are handeled special in cocoa). If NSApp is not
+    // [NSApplication run] runs (timers are handeled special in cocoa). If NSApplication is not
     // running (which is the case if e.g a top-most QEventLoop has been
     // interrupted, and the second-most event loop has not yet been reactivated (regardless
-    // if [NSApp run] is still on the stack)), showing a native modal dialog will fail.
+    // if [NSApplication run] is still on the stack)), showing a native modal dialog will fail.
     if (nativeDialogInUse){
         Q_Q(QFileDialog);
         QTimer::singleShot(1, q, SLOT(_q_macRunNativeAppModalPanel()));
diff --git a/src/gui/dialogs/qfontdialog_mac.mm b/src/gui/dialogs/qfontdialog_mac.mm
index f5484f0..75c37d2 100644
--- a/src/gui/dialogs/qfontdialog_mac.mm
+++ b/src/gui/dialogs/qfontdialog_mac.mm
@@ -230,7 +230,7 @@ static QFont qfontForCocoaFont(NSFont *cocoaFont, const QFont &resolveFont)
     mAppModal = true;
     NSWindow *ourPanel = [mStolenContentView window];
     [ourPanel setReleasedWhenClosed:NO];
-    [NSApp runModalForWindow:ourPanel];
+    [[NSApplication sharedApplication] runModalForWindow:ourPanel];
     QAbstractEventDispatcher::instance()->interrupt();
 
     if (mReturnCode == NSOKButton)
@@ -256,7 +256,7 @@ static QFont qfontForCocoaFont(NSFont *cocoaFont, const QFont &resolveFont)
 
     mAppModal = false;
     NSWindow *ourPanel = [mStolenContentView window];
-    [NSApp beginSheet:ourPanel
+    [[NSApplication sharedApplication] beginSheet:ourPanel
         modalForWindow:window
         modalDelegate:0
         didEndSelector:0
@@ -456,7 +456,7 @@ static QFont qfontForCocoaFont(NSFont *cocoaFont, const QFont &resolveFont)
 
     if (mAppModal) {
         mReturnCode = code;
-        [NSApp stopModalWithCode:code];
+        [[NSApplication sharedApplication] stopModalWithCode:code];
     } else {
         if (code == NSOKButton)
             mPriv->fontDialog()->accept();
@@ -636,10 +636,10 @@ void QFontDialogPrivate::mac_nativeDialogModalHelp()
     // Do a queued meta-call to open the native modal dialog so it opens after the new
     // event loop has started to execute (in QDialog::exec). Using a timer rather than
     // a queued meta call is intentional to ensure that the call is only delivered when
-    // [NSApp run] runs (timers are handeled special in cocoa). If NSApp is not
+    // [NSApplication run] runs (timers are handeled special in cocoa). If NSApplication is not
     // running (which is the case if e.g a top-most QEventLoop has been
     // interrupted, and the second-most event loop has not yet been reactivated (regardless
-    // if [NSApp run] is still on the stack)), showing a native modal dialog will fail.
+    // if [NSApplication run] is still on the stack)), showing a native modal dialog will fail.
     if (nativeDialogInUse) {
         Q_Q(QFontDialog);
         QTimer::singleShot(1, q, SLOT(_q_macRunNativeAppModalPanel()));
diff --git a/src/gui/kernel/qapplication_mac.mm b/src/gui/kernel/qapplication_mac.mm
index 445189d..e4516da 100644
--- a/src/gui/kernel/qapplication_mac.mm
+++ b/src/gui/kernel/qapplication_mac.mm
@@ -468,7 +468,7 @@ void qt_mac_set_app_icon(const QPixmap &pixmap)
         image = static_cast<NSImage *>(qt_mac_create_nsimage(pixmap));
     }
 
-    [NSApp setApplicationIconImage:image];
+    [[NSApplication sharedApplication] setApplicationIconImage:image];
     [image release];
 #endif
 }
@@ -750,7 +750,7 @@ void qt_event_request_showsheet(QWidget *w)
     Q_ASSERT(qt_mac_is_macsheet(w));
 #ifdef QT_MAC_USE_COCOA
     w->repaint();
-    [NSApp beginSheet:qt_mac_window_for(w) modalForWindow:qt_mac_window_for(w->parentWidget())
+    [[NSApplication sharedApplication] beginSheet:qt_mac_window_for(w) modalForWindow:qt_mac_window_for(w->parentWidget())
         modalDelegate:nil didEndSelector:nil contextInfo:0];
 #else
     qt_mac_event_remove(request_showsheet_pending);
@@ -992,7 +992,7 @@ Q_GUI_EXPORT void qt_mac_set_dock_menu(QMenu *menu)
 {
     qt_mac_dock_menu = menu;
 #ifdef QT_MAC_USE_COCOA
-    [NSApp setDockMenu:menu->macMenu()];
+    [[NSApplication sharedApplication] setDockMenu:menu->macMenu()];
 #else
     SetApplicationDockTileMenu(menu->macMenu());
 #endif
@@ -1011,7 +1011,7 @@ void qt_mac_event_release(QWidget *w)
 #ifndef QT_MAC_USE_COCOA
             SetApplicationDockTileMenu(0);
 #else
-            [NSApp setDockMenu:0];
+            [[NSApplication sharedApplication] setDockMenu:0];
 #endif
         }
     }
@@ -1463,7 +1463,7 @@ QWidget *QApplication::topLevelAt(const QPoint &p)
     NSWindowList(windowCount, windowList.data());
     int firstQtWindowFound = -1;
     for (int i = 0; i < windowCount; ++i) {
-        NSWindow *window = [NSApp windowWithWindowNumber:windowList[i]];
+        NSWindow *window = [[NSApplication sharedApplication] windowWithWindowNumber:windowList[i]];
         if (window) {
             QWidget *candidateWindow = [window QT_MANGLE_NAMESPACE(qt_qwidget)];
             if (candidateWindow && firstQtWindowFound == -1)
@@ -3071,7 +3071,7 @@ bool QApplicationPrivate::canQuit()
 #else
     Q_Q(QApplication);
 #ifdef QT_MAC_USE_COCOA
-    [[NSApp mainMenu] cancelTracking];
+    [[[NSApplication sharedApplication] mainMenu] cancelTracking];
 #else
     HiliteMenu(0);
 #endif
@@ -3146,7 +3146,7 @@ void onApplicationChangedActivation( bool activated )
         }
 
         if (!app->activeWindow()) {
-            OSWindowRef wp = [NSApp keyWindow];
+            OSWindowRef wp = [[NSApplication sharedApplication] keyWindow];
             if (QWidget *tmp_w = qt_mac_find_window(wp))
                 app->setActiveWindow(tmp_w);
         }
diff --git a/src/gui/kernel/qcocoaapplication_mac.mm b/src/gui/kernel/qcocoaapplication_mac.mm
index 473eec1..6af7b79 100644
--- a/src/gui/kernel/qcocoaapplication_mac.mm
+++ b/src/gui/kernel/qcocoaapplication_mac.mm
@@ -147,7 +147,7 @@ QT_USE_NAMESPACE
     if ([event type] == NSApplicationDefined) {
         switch ([event subtype]) {
             case QtCocoaEventSubTypePostMessage:
-                [NSApp QT_MANGLE_NAMESPACE(qt_sendPostedMessage):event];
+                [[NSApplication sharedApplication] QT_MANGLE_NAMESPACE(qt_sendPostedMessage):event];
                 return true;
             default:
                 break;
@@ -174,7 +174,7 @@ QT_USE_NAMESPACE
     // be called instead of sendEvent if redirection occurs.
     // 'self' will then be an instance of NSApplication
     // (and not QNSApplication)
-    if (![NSApp QT_MANGLE_NAMESPACE(qt_filterEvent):event])
+    if (![[NSApplication sharedApplication] QT_MANGLE_NAMESPACE(qt_filterEvent):event])
         [self QT_MANGLE_NAMESPACE(qt_sendEvent_original):event];
 }
 
@@ -182,7 +182,7 @@ QT_USE_NAMESPACE
 {
     // This method will be called if
     // no redirection occurs
-    if (![NSApp QT_MANGLE_NAMESPACE(qt_filterEvent):event])
+    if (![[NSApplication sharedApplication] QT_MANGLE_NAMESPACE(qt_filterEvent):event])
         [super sendEvent:event];
 }
 
@@ -194,7 +194,7 @@ QT_USE_NAMESPACE
     // visible on screen. Note: If Qt is used as a plugin, Qt will not use a 
     // native menu bar. Hence, we will also not need to do any redirection etc. as 
     // we do with sendEvent.
-    [[NSApp QT_MANGLE_NAMESPACE(qt_qcocoamenuLoader)] qtDispatcherToQAction:sender];
+    [[[NSApplication sharedApplication] QT_MANGLE_NAMESPACE(qt_qcocoamenuLoader)] qtDispatcherToQAction:sender];
 }
 
 @end
@@ -203,7 +203,7 @@ QT_BEGIN_NAMESPACE
 
 void qt_redirectNSApplicationSendEvent()
 {
-    if ([NSApp isMemberOfClass:[QT_MANGLE_NAMESPACE(QNSApplication) class]]) {
+    if ([[NSApplication sharedApplication] isMemberOfClass:[QT_MANGLE_NAMESPACE(QNSApplication) class]]) {
         // No need to change implementation since Qt
         // already controls a subclass of NSApplication
         return;
diff --git a/src/gui/kernel/qcocoaapplicationdelegate_mac.mm b/src/gui/kernel/qcocoaapplicationdelegate_mac.mm
index d45f5f1..cf46a87 100644
--- a/src/gui/kernel/qcocoaapplicationdelegate_mac.mm
+++ b/src/gui/kernel/qcocoaapplicationdelegate_mac.mm
@@ -122,7 +122,7 @@ static void cleanupCocoaApplicationDelegate()
     [dockMenu release];
     [qtMenuLoader release];
     if (reflectionDelegate) {
-        [NSApp setDelegate:reflectionDelegate];
+        [[NSApplication sharedApplication] setDelegate:reflectionDelegate];
         [reflectionDelegate release];
     }
     [super dealloc];
@@ -183,7 +183,7 @@ static void cleanupCocoaApplicationDelegate()
     return [[qtMenuLoader retain] autorelease];
 }
 
-// This function will only be called when NSApp is actually running. Before
+// This function will only be called when NSApplication is actually running. Before
 // that, the kAEQuitApplication Apple event will be sent to
 // QApplicationPrivate::globalAppleEventProcessor in qapplication_mac.mm
 - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
@@ -249,7 +249,7 @@ static void cleanupCocoaApplicationDelegate()
         && [reflectionDelegate respondsToSelector:
                             @selector(applicationShouldTerminateAfterLastWindowClosed:)])
         return [reflectionDelegate applicationShouldTerminateAfterLastWindowClosed:sender];
-    return NO; // Someday qApp->quitOnLastWindowClosed(); when QApp and NSApp work closer together.
+    return NO; // Someday qApp->quitOnLastWindowClosed(); when qApp and NSApplication work closer together.
 }
 
 
@@ -308,7 +308,7 @@ static void cleanupCocoaApplicationDelegate()
     QDesktopWidgetImplementation::instance()->onResize();
 }
 
-- (void)setReflectionDelegate:(NSObject <NSApplicationDelegate> *)oldDelegate
+- (void)setReflectionDelegate:(id <NSApplicationDelegate>)oldDelegate
 {
     [oldDelegate retain];
     [reflectionDelegate release];
@@ -355,12 +355,12 @@ static void cleanupCocoaApplicationDelegate()
 {
     Q_UNUSED(event);
     Q_UNUSED(replyEvent);
-    [NSApp terminate:self];
+    [[NSApplication sharedApplication] terminate:self];
 }
 
 - (void)qtDispatcherToQAction:(id)sender
 {
-    [[NSApp QT_MANGLE_NAMESPACE(qt_qcocoamenuLoader)] qtDispatcherToQAction:sender];
+    [[[NSApplication sharedApplication] QT_MANGLE_NAMESPACE(qt_qcocoamenuLoader)] qtDispatcherToQAction:sender];
 }
 
 @end
diff --git a/src/gui/kernel/qcocoaapplicationdelegate_mac_p.h b/src/gui/kernel/qcocoaapplicationdelegate_mac_p.h
index 7ff08d2..5a43d36 100644
--- a/src/gui/kernel/qcocoaapplicationdelegate_mac_p.h
+++ b/src/gui/kernel/qcocoaapplicationdelegate_mac_p.h
@@ -113,7 +113,7 @@ QT_FORWARD_DECLARE_CLASS(QApplicationPrivate);
     QApplicationPrivate *qtPrivate;
     NSMenu *dockMenu;
     QT_MANGLE_NAMESPACE(QCocoaMenuLoader) *qtMenuLoader;
-    NSObject <NSApplicationDelegate> *reflectionDelegate;
+    id <NSApplicationDelegate> reflectionDelegate;
     bool inLaunch;
 }
 + (QT_MANGLE_NAMESPACE(QCocoaApplicationDelegate)*)sharedDelegate;
@@ -122,7 +122,7 @@ QT_FORWARD_DECLARE_CLASS(QApplicationPrivate);
 - (QApplicationPrivate *)qAppPrivate;
 - (void)setMenuLoader:(QT_MANGLE_NAMESPACE(QCocoaMenuLoader)*)menuLoader;
 - (QT_MANGLE_NAMESPACE(QCocoaMenuLoader) *)menuLoader;
-- (void)setReflectionDelegate:(NSObject <NSApplicationDelegate> *)oldDelegate;
+- (void)setReflectionDelegate:(id <NSApplicationDelegate>)oldDelegate;
 - (void)getUrl:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent;
 @end
 #endif
diff --git a/src/gui/kernel/qcocoamenuloader_mac.mm b/src/gui/kernel/qcocoamenuloader_mac.mm
index 03fed56..c712950 100644
--- a/src/gui/kernel/qcocoamenuloader_mac.mm
+++ b/src/gui/kernel/qcocoamenuloader_mac.mm
@@ -92,8 +92,8 @@ QT_USE_NAMESPACE
     // 'Quit' item. When changing menu bar (e.g when switching between
     // windows with different menu bars), we never recreate this menu, but
     // instead pull it out the current menu bar and place into the new one:
-    NSMenu *mainMenu = [NSApp mainMenu];
-    if ([NSApp mainMenu] == menu)
+    NSMenu *mainMenu = [[NSApplication sharedApplication] mainMenu];
+    if ([[NSApplication sharedApplication] mainMenu] == menu)
         return; // nothing to do (menu is the current menu bar)!
 
 #ifndef QT_NAMESPACE
@@ -201,27 +201,27 @@ QT_USE_NAMESPACE
 
 - (void)terminate:(id)sender
 {
-    [NSApp terminate:sender];
+    [[NSApplication sharedApplication] terminate:sender];
 }
 
 - (void)orderFrontStandardAboutPanel:(id)sender
 {
-    [NSApp orderFrontStandardAboutPanel:sender];
+    [[NSApplication sharedApplication] orderFrontStandardAboutPanel:sender];
 }
 
 - (void)hideOtherApplications:(id)sender
 {
-    [NSApp hideOtherApplications:sender];
+    [[NSApplication sharedApplication] hideOtherApplications:sender];
 }
 
 - (void)unhideAllApplications:(id)sender
 {
-    [NSApp unhideAllApplications:sender];
+    [[NSApplication sharedApplication] unhideAllApplications:sender];
 }
 
 - (void)hide:(id)sender
 {
-    [NSApp hide:sender];
+    [[NSApplication sharedApplication] hide:sender];
 }
 
 - (void)qtUpdateMenubar
@@ -258,7 +258,7 @@ QT_USE_NAMESPACE
 
  - (void)orderFrontCharacterPalette:(id)sender
  {
-     [NSApp orderFrontCharacterPalette:sender];
+     [[NSApplication sharedApplication] orderFrontCharacterPalette:sender];
  }
 
 - (BOOL)validateMenuItem:(NSMenuItem*)menuItem
@@ -266,7 +266,7 @@ QT_USE_NAMESPACE
     if ([menuItem action] == @selector(hide:)
         || [menuItem action] == @selector(hideOtherApplications:)
         || [menuItem action] == @selector(unhideAllApplications:)) {
-        return [NSApp validateMenuItem:menuItem];
+        return [[NSApplication sharedApplication] validateMenuItem:menuItem];
     } else {
         return [menuItem isEnabled];
     }
diff --git a/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h b/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h
index 02cd007..cec899b 100644
--- a/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h
+++ b/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h
@@ -143,7 +143,7 @@ QT_END_NAMESPACE
 {
     // This function is called from the quit item in the menubar when this window
     // is in the first responder chain (see also qtDispatcherToQAction above)
-    [NSApp terminate:sender];
+    [[NSApplication sharedApplication] terminate:sender];
 }
 
 - (void)setLevel:(NSInteger)windowLevel
@@ -364,7 +364,7 @@ QT_END_NAMESPACE
 
     if ([sender draggingSource] != nil) {
         // modifier flags might have changed, update it here since we don't send any input events.
-        QApplicationPrivate::modifier_buttons = qt_cocoaModifiers2QtModifiers([[NSApp currentEvent] modifierFlags]);
+        QApplicationPrivate::modifier_buttons = qt_cocoaModifiers2QtModifiers([[[NSApplication sharedApplication] currentEvent] modifierFlags]);
         modifiers = QApplication::keyboardModifiers();
     } else {
         // when the source is from another application the above technique will not work.
@@ -456,7 +456,7 @@ QT_END_NAMESPACE
 
     // Update modifiers:
     if ([sender draggingSource] != nil) {
-        QApplicationPrivate::modifier_buttons = qt_cocoaModifiers2QtModifiers([[NSApp currentEvent] modifierFlags]);
+        QApplicationPrivate::modifier_buttons = qt_cocoaModifiers2QtModifiers([[[NSApplication sharedApplication] currentEvent] modifierFlags]);
         modifiers = QApplication::keyboardModifiers();
     } else {
         modifiers = qt_cocoaDragOperation2QtModifiers(nsActions);
diff --git a/src/gui/kernel/qeventdispatcher_mac.mm b/src/gui/kernel/qeventdispatcher_mac.mm
index a35fb68..e830eba 100644
--- a/src/gui/kernel/qeventdispatcher_mac.mm
+++ b/src/gui/kernel/qeventdispatcher_mac.mm
@@ -461,7 +461,7 @@ static bool qt_mac_send_event(QEventLoop::ProcessEventsFlags, OSEventRef event,
     if (pt)
         [pt sendEvent:event];
     else
-        [NSApp sendEvent:event];
+        [[NSApplication sharedApplication] sendEvent:event];
     return true;
 #endif
 }
@@ -521,12 +521,12 @@ static inline void qt_mac_waitForMoreEvents()
     // (and free up cpu time) until at least one event occur.
     // This implementation is a bit on the edge, but seems to
     // work fine:
-    NSEvent* event = [NSApp nextEventMatchingMask:NSAnyEventMask
+    NSEvent* event = [[NSApplication sharedApplication] nextEventMatchingMask:NSAnyEventMask
         untilDate:[NSDate distantFuture]
         inMode:NSDefaultRunLoopMode
         dequeue:YES];
     if (event)
-        [NSApp postEvent:event atStart:YES];
+        [[NSApplication sharedApplication] postEvent:event atStart:YES];
 #endif
 }
 
@@ -537,12 +537,12 @@ static inline void qt_mac_waitForMoreModalSessionEvents()
     // (and free up cpu time) until at least one event occur.
     // This implementation is a bit on the edge, but seems to
     // work fine:
-    NSEvent* event = [NSApp nextEventMatchingMask:NSAnyEventMask
+    NSEvent* event = [[NSApplication sharedApplication] nextEventMatchingMask:NSAnyEventMask
         untilDate:[NSDate distantFuture]
         inMode:NSModalPanelRunLoopMode
         dequeue:YES];
     if (event)
-        [NSApp postEvent:event atStart:YES];
+        [[NSApplication sharedApplication] postEvent:event atStart:YES];
 }
 #endif
 
@@ -588,23 +588,23 @@ bool QEventDispatcherMac::processEvents(QEventLoop::ProcessEventsFlags flags)
         // done from the application itself. And if processEvents is called
         // manually (rather than from a QEventLoop), we cannot enter a tight
         // loop and block this call, but instead we need to return after one flush.
-        // Finally, if we are to exclude user input events, we cannot call [NSApp run]
+        // Finally, if we are to exclude user input events, we cannot call [NSApplication run]
         // as we then loose control over which events gets dispatched:
-        const bool canExec_3rdParty = d->nsAppRunCalledByQt || ![NSApp isRunning];
+        const bool canExec_3rdParty = d->nsAppRunCalledByQt || ![[NSApplication sharedApplication] isRunning];
         const bool canExec_Qt = !excludeUserEvents &&
                 (flags & QEventLoop::DialogExec || flags & QEventLoop::EventLoopExec) ;
 
         if (canExec_Qt && canExec_3rdParty) {
             // We can use exec-mode, meaning that we can stay in a tight loop until
             // interrupted. This is mostly an optimization, but it allow us to use
-            // [NSApp run], which is the normal code path for cocoa applications.
+            // [NSApplication run], which is the normal code path for cocoa applications.
             if (NSModalSession session = d->currentModalSession()) {
                 QBoolBlocker execGuard(d->currentExecIsNSAppRun, false);
-                while ([NSApp runModalSession:session] == NSRunContinuesResponse && !d->interrupt)
+                while ([[NSApplication sharedApplication] runModalSession:session] == NSRunContinuesResponse && !d->interrupt)
                     qt_mac_waitForMoreModalSessionEvents();
 
                 if (!d->interrupt && session == d->currentModalSessionCached) {
-                    // Someone called [NSApp stopModal:] from outside the event
+                    // Someone called [[NSApplication sharedApplication] stopModal:] from outside the event
                     // dispatcher (e.g to stop a native dialog). But that call wrongly stopped
                     // 'session' as well. As a result, we need to restart all internal sessions:
                     d->temporarilyStopAllModalSessions();
@@ -612,7 +612,7 @@ bool QEventDispatcherMac::processEvents(QEventLoop::ProcessEventsFlags flags)
             } else {
                 d->nsAppRunCalledByQt = true;
                 QBoolBlocker execGuard(d->currentExecIsNSAppRun, true);
-                [NSApp run];
+                [[NSApplication sharedApplication] run];
             }
             retVal = true;
         } else {
@@ -626,9 +626,9 @@ bool QEventDispatcherMac::processEvents(QEventLoop::ProcessEventsFlags flags)
                     // to use cocoa's native way of running modal sessions:
                     if (flags & QEventLoop::WaitForMoreEvents)
                         qt_mac_waitForMoreModalSessionEvents();
-                    NSInteger status = [NSApp runModalSession:session];
+                    NSInteger status = [[NSApplication sharedApplication] runModalSession:session];
                     if (status != NSRunContinuesResponse && session == d->currentModalSessionCached) {
-                        // INVARIANT: Someone called [NSApp stopModal:] from outside the event
+                        // INVARIANT: Someone called [NSApplication stopModal:] from outside the event
                         // dispatcher (e.g to stop a native dialog). But that call wrongly stopped
                         // 'session' as well. As a result, we need to restart all internal sessions:
                         d->temporarilyStopAllModalSessions();
@@ -637,8 +637,8 @@ bool QEventDispatcherMac::processEvents(QEventLoop::ProcessEventsFlags flags)
                 } else do {
                     // Dispatch all non-user events (but que non-user events up for later). In
                     // this case, we need more control over which events gets dispatched, and
-                    // cannot use [NSApp runModalSession:session]:
-                    event = [NSApp nextEventMatchingMask:NSAnyEventMask
+                    // cannot use [NSApplication runModalSession:session]:
+                    event = [[NSApplication sharedApplication] nextEventMatchingMask:NSAnyEventMask
                     untilDate:nil
                     inMode:NSModalPanelRunLoopMode
                     dequeue: YES];
@@ -655,7 +655,7 @@ bool QEventDispatcherMac::processEvents(QEventLoop::ProcessEventsFlags flags)
                 } while (!d->interrupt && event != nil);
             } else do {
                 // INVARIANT: No modal window is executing.
-                event = [NSApp nextEventMatchingMask:NSAnyEventMask
+                event = [[NSApplication sharedApplication] nextEventMatchingMask:NSAnyEventMask
                 untilDate:nil
                 inMode:NSDefaultRunLoopMode
                 dequeue: YES];
@@ -798,12 +798,12 @@ void QEventDispatcherMacPrivate::ensureNSAppInitialized()
     // we let Cocoa finish the initialization it seems to need. We'll only
     // apply this trick at most once for any application, and we avoid doing it
     // for the common case where main just starts QApplication::exec.
-    if (nsAppRunCalledByQt || [NSApp isRunning])
+    if (nsAppRunCalledByQt || [[NSApplication sharedApplication] isRunning])
         return;
     nsAppRunCalledByQt = true;
     QBoolBlocker block1(interrupt, true);
     QBoolBlocker block2(currentExecIsNSAppRun, true);
-    [NSApp run];
+    [[NSApplication sharedApplication] run];
 }
 
 void QEventDispatcherMacPrivate::temporarilyStopAllModalSessions()
@@ -812,8 +812,8 @@ void QEventDispatcherMacPrivate::temporarilyStopAllModalSessions()
     // such, make them pending again. The next call to
     // currentModalSession will recreate them again. The
     // reason to stop all session like this is that otherwise
-    // a call [NSApp stop] would not stop NSApp, but rather
-    // the current modal session. So if we need to stop NSApp
+    // a call [NSApplication stop] would not stop NSApplication, but rather
+    // the current modal session. So if we need to stop NSApplication
     // we need to stop all the modal session first. To avoid changing
     // the stacking order of the windows while doing so, we put
     // up a block that is used in QCocoaWindow and QCocoaPanel:
@@ -821,7 +821,7 @@ void QEventDispatcherMacPrivate::temporarilyStopAllModalSessions()
     for (int i=0; i<stackSize; ++i) {
         QCocoaModalSessionInfo &info = cocoaModalSessionStack[i];
         if (info.session) {
-            [NSApp endModalSession:info.session];
+            [[NSApplication sharedApplication] endModalSession:info.session];
             info.session = 0;
         }
     }
@@ -856,7 +856,7 @@ NSModalSession QEventDispatcherMacPrivate::currentModalSession()
             info.nswindow = window;
             [(NSWindow*) info.nswindow retain];
             int levelBeforeEnterModal = [window level];
-            info.session = [NSApp beginModalSessionForWindow:window];
+            info.session = [[NSApplication sharedApplication] beginModalSessionForWindow:window];
             // Make sure we don't stack the window lower that it was before
             // entering modal, in case it e.g. had the stays-on-top flag set:
             if (levelBeforeEnterModal > [window level])
@@ -926,7 +926,7 @@ void QEventDispatcherMacPrivate::cleanupModalSessions()
         cocoaModalSessionStack.remove(i);
         currentModalSessionCached = 0;
         if (info.session) {
-            [NSApp endModalSession:info.session];
+            [[NSApplication sharedApplication] endModalSession:info.session];
             [(NSWindow *)info.nswindow release];
         }
     }
@@ -1057,7 +1057,7 @@ inline static void processPostedEvents(QEventDispatcherMacPrivate *const d, cons
             // pending cocoa events first).
             if (d->currentModalSessionCached)
                 d->temporarilyStopAllModalSessions();
-            [NSApp stop:NSApp];
+            [[NSApplication sharedApplication] stop:[NSApplication sharedApplication]];
             d->cancelWaitForMoreEvents();
         }
 #endif
@@ -1093,7 +1093,8 @@ void QEventDispatcherMacPrivate::cancelWaitForMoreEvents()
     // In case the event dispatcher is waiting for more
     // events somewhere, we post a dummy event to wake it up:
     QMacCocoaAutoReleasePool pool;
-    [NSApp postEvent:[NSEvent otherEventWithType:NSApplicationDefined location:NSZeroPoint
+    [[NSApplication sharedApplication] postEvent:[NSEvent otherEventWithType:NSApplicationDefined
+        location:NSZeroPoint
         modifierFlags:0 timestamp:0. windowNumber:0 context:0
         subtype:QtCocoaEventSubTypeWakeup data1:0 data2:0] atStart:NO];
 }
@@ -1110,7 +1111,7 @@ void QEventDispatcherMac::interrupt()
 #else
     // We do nothing more here than setting d->interrupt = true, and
     // poke the event loop if it is sleeping. Actually stopping
-    // NSApp, or the current modal session, is done inside the send
+    // NSApplication, or the current modal session, is done inside the send
     // posted events callback. We do this to ensure that all current pending
     // cocoa events gets delivered before we stop. Otherwise, if we now stop
     // the last event loop recursion, cocoa will just drop pending posted
@@ -1165,7 +1166,7 @@ QtMacInterruptDispatcherHelp::QtMacInterruptDispatcherHelp() : cancelled(false)
     // The whole point of this class is that we enable a way to interrupt
     // the event dispatcher when returning back to a lower recursion level
     // than where interruptLater was called. This is needed to detect if
-    // [NSApp run] should still be running at the recursion level it is at.
+    // [NSApplication run] should still be running at the recursion level it is at.
     // Since the interrupt is canceled if processEvents is called before
     // this object gets deleted, we also avoid interrupting unnecessary.
     deleteLater();
diff --git a/src/gui/kernel/qt_cocoa_helpers_mac.mm b/src/gui/kernel/qt_cocoa_helpers_mac.mm
index 747a42a..cb4057c 100644
--- a/src/gui/kernel/qt_cocoa_helpers_mac.mm
+++ b/src/gui/kernel/qt_cocoa_helpers_mac.mm
@@ -1697,7 +1697,7 @@ void qt_cocoaPostMessage(id target, SEL selector, int argCount, id arg1, id arg2
     NSEvent *e = [NSEvent otherEventWithType:NSApplicationDefined
         location:NSZeroPoint modifierFlags:0 timestamp:0 windowNumber:0
         context:nil subtype:QtCocoaEventSubTypePostMessage data1:lower data2:upper];
-    [NSApp postEvent:e atStart:NO];
+    [[NSApplication sharedApplication] postEvent:e atStart:NO];
 }
 
 void qt_cocoaPostMessageAfterEventLoopExit(id target, SEL selector, int argCount, id arg1, id arg2)
@@ -1727,7 +1727,7 @@ void qt_mac_post_retranslateAppMenu()
 {
 #ifdef QT_MAC_USE_COCOA
     QMacCocoaAutoReleasePool pool;
-    qt_cocoaPostMessage([NSApp QT_MANGLE_NAMESPACE(qt_qcocoamenuLoader)], @selector(qtTranslateApplicationMenu));
+    qt_cocoaPostMessage([[NSApplication sharedApplication] QT_MANGLE_NAMESPACE(qt_qcocoamenuLoader)], @selector(qtTranslateApplicationMenu));
 #endif
 }
 
diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm
index f58a755..7e9ebb9 100644
--- a/src/gui/kernel/qwidget_mac.mm
+++ b/src/gui/kernel/qwidget_mac.mm
@@ -220,7 +220,7 @@ static QSize qt_mac_desktopSize()
 static NSDrawer *qt_mac_drawer_for(const QWidget *widget)
 {
     NSView *widgetView = reinterpret_cast<NSView *>(widget->window()->effectiveWinId());
-    NSArray *windows = [NSApp windows];
+    NSArray *windows = [[NSApplication sharedApplication] windows];
     for (NSWindow *window in windows) {
         NSArray *drawers = [window drawers];
         for (NSDrawer *drawer in drawers) {
@@ -254,7 +254,7 @@ static void qt_mac_destructWindow(OSWindowRef window)
 {
 #ifdef QT_MAC_USE_COCOA
     if ([window isVisible] && [window isSheet]){
-        [NSApp endSheet:window];
+        [[NSApplication sharedApplication] endSheet:window];
         [window orderOut:window];
     }
 
@@ -2439,7 +2439,7 @@ void QWidgetPrivate::recreateMacWindow()
     }
     if ([oldWindow isVisible]){
         if ([oldWindow isSheet])
-            [NSApp endSheet:oldWindow];
+            [[NSApplication sharedApplication] endSheet:oldWindow];
         [oldWindow orderOut:oldWindow];
         show_sys();
     }
@@ -3554,7 +3554,7 @@ void QWidgetPrivate::show_sys()
     }
 
 #ifdef QT_MAC_USE_COCOA
-    if ([NSApp isActive] && !qt_button_down && !QWidget::mouseGrabber()){
+    if ([[NSApplication sharedApplication] isActive] && !qt_button_down && !QWidget::mouseGrabber()){
         // Update enter/leave immidiatly, don't wait for a move event. But only
         // if no grab exists (even if the grab points to this widget, it seems, ref X11)
         QPoint qlocal, qglobal;
@@ -3605,7 +3605,7 @@ void QWidgetPrivate::hide_sys()
             else
                 HideSheetWindow(window);
 #else
-            [NSApp endSheet:window];
+            [[NSApplication sharedApplication] endSheet:window];
             [window orderOut:window];
 #endif
         } else if(qt_mac_is_macdrawer(q)) {
@@ -3716,7 +3716,7 @@ void QWidgetPrivate::hide_sys()
     }
 
 #ifdef QT_MAC_USE_COCOA
-    if ([NSApp isActive] && !qt_button_down && !QWidget::mouseGrabber()){
+    if ([[NSApplication sharedApplication] isActive] && !qt_button_down && !QWidget::mouseGrabber()){
         // Update enter/leave immidiatly, don't wait for a move event. But only
         // if no grab exists (even if the grab points to this widget, it seems, ref X11)
         QPoint qlocal, qglobal;
diff --git a/src/gui/styles/qmacstyle_mac.mm b/src/gui/styles/qmacstyle_mac.mm
index 78d0d19..ff3696c 100644
--- a/src/gui/styles/qmacstyle_mac.mm
+++ b/src/gui/styles/qmacstyle_mac.mm
@@ -780,7 +780,7 @@ static QSize qt_aqua_get_known_size(QStyle::ContentsType ct, const QWidget *widg
             if (!GetThemeMenuBarHeight(&size))
                 ret = QSize(-1, size);
 #else
-            ret = QSize(-1, [[NSApp mainMenu] menuBarHeight]);
+            ret = QSize(-1, [[[NSApplication sharedApplication] mainMenu] menuBarHeight]);
             // In the qt_mac_set_native_menubar(false) case,
             // we come it here with a zero-height main menu,
             // preventing the in-window menu from displaying.
diff --git a/src/gui/util/qsystemtrayicon_mac.mm b/src/gui/util/qsystemtrayicon_mac.mm
index 3d7ca14..07e3ea2 100644
--- a/src/gui/util/qsystemtrayicon_mac.mm
+++ b/src/gui/util/qsystemtrayicon_mac.mm
@@ -536,7 +536,7 @@ private:
 #ifndef QT_MAC_USE_COCOA
                 const short scale = GetMBarHeight();
 #else
-                const short scale = [[NSApp mainMenu] menuBarHeight];
+                const short scale = [[[NSApplication sharedApplication] mainMenu] menuBarHeight];
 #endif
                 NSImage *nsimage = static_cast<NSImage *>(qt_mac_create_nsimage(icon.pixmap(QSize(scale, scale))));
                 [item setImage: nsimage];
diff --git a/src/gui/widgets/qcocoamenu_mac.mm b/src/gui/widgets/qcocoamenu_mac.mm
index c31416a..54bf11c 100644
--- a/src/gui/widgets/qcocoamenu_mac.mm
+++ b/src/gui/widgets/qcocoamenu_mac.mm
@@ -202,7 +202,7 @@ QT_USE_NAMESPACE
      static SEL selForOFCP = NSSelectorFromString(@"orderFrontCharacterPalette:");
      if (index == -1 && selForOFCP == actionSelector) {
          // Check if the 'orderFrontCharacterPalette' SEL exists for QCocoaMenuLoader object
-         QT_MANGLE_NAMESPACE(QCocoaMenuLoader) *loader = [NSApp QT_MANGLE_NAMESPACE(qt_qcocoamenuLoader)];
+         QT_MANGLE_NAMESPACE(QCocoaMenuLoader) *loader = [[NSApplication sharedApplication] QT_MANGLE_NAMESPACE(qt_qcocoamenuLoader)];
          return [super indexOfItemWithTarget:loader andAction:actionSelector];
      }
      return index;
diff --git a/src/gui/widgets/qmenu_mac.mm b/src/gui/widgets/qmenu_mac.mm
index 12ef70d..669f824 100644
--- a/src/gui/widgets/qmenu_mac.mm
+++ b/src/gui/widgets/qmenu_mac.mm
@@ -179,7 +179,7 @@ static void cancelAllMenuTracking()
 {
 #ifdef QT_MAC_USE_COCOA
     QMacCocoaAutoReleasePool pool;
-    NSMenu *mainMenu = [NSApp mainMenu];
+    NSMenu *mainMenu = [[NSApplication sharedApplication] mainMenu];
     [mainMenu cancelTracking];
     for (NSMenuItem *item in [mainMenu itemArray]) {
         if ([item submenu]) {
@@ -633,7 +633,7 @@ static inline void syncMenuBarItemsVisiblity(const QMenuBarPrivate::QMacMenuBarP
 
 static inline QT_MANGLE_NAMESPACE(QCocoaMenuLoader) *getMenuLoader()
 {
-    return [NSApp QT_MANGLE_NAMESPACE(qt_qcocoamenuLoader)];
+    return [[NSApplication sharedApplication] QT_MANGLE_NAMESPACE(qt_qcocoamenuLoader)];
 }
 
 static NSMenuItem *createNSMenuItem(const QString &title)
@@ -2033,7 +2033,7 @@ void qt_mac_clear_menubar()
     QT_MANGLE_NAMESPACE(QCocoaMenuLoader) *loader = getMenuLoader();
     NSMenu *menu = [loader menu];
     [loader ensureAppMenuInMenu:menu];
-    [NSApp setMainMenu:menu];
+    [[NSApplication sharedApplication] setMainMenu:menu];
     const bool modal = qt_mac_should_disable_menu(0);
     if (qt_mac_current_menubar.qmenubar || modal != qt_mac_current_menubar.modal)
         qt_mac_set_modal_state(menu, modal);
@@ -2100,7 +2100,7 @@ bool QMenuBarPrivate::macUpdateMenuBarImmediatly()
 #else
             QT_MANGLE_NAMESPACE(QCocoaMenuLoader) *loader = getMenuLoader();
             [loader ensureAppMenuInMenu:menu];
-            [NSApp setMainMenu:menu];
+            [[NSApplication sharedApplication] setMainMenu:menu];
             syncMenuBarItemsVisiblity(mb->d_func()->mac_menubar);
 
             if (OSMenuRef tmpMerge = QMenuPrivate::mergeMenuHash.value(menu)) {
@@ -2140,7 +2140,7 @@ bool QMenuBarPrivate::macUpdateMenuBarImmediatly()
 #else
                 QT_MANGLE_NAMESPACE(QCocoaMenuLoader) *loader = getMenuLoader();
                 [loader ensureAppMenuInMenu:menu];
-                [NSApp setMainMenu:menu];
+                [[NSApplication sharedApplication] setMainMenu:menu];
                 syncMenuBarItemsVisiblity(qt_mac_current_menubar.qmenubar->d_func()->mac_menubar);
 #endif
                 qt_mac_set_modal_state(menu, modal);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.