diff options
Diffstat (limited to 'src/testlib/qtestutil_macos.mm')
-rw-r--r-- | src/testlib/qtestutil_macos.mm | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/testlib/qtestutil_macos.mm b/src/testlib/qtestutil_macos.mm index 7579c3b164..880cd0f91f 100644 --- a/src/testlib/qtestutil_macos.mm +++ b/src/testlib/qtestutil_macos.mm @@ -39,6 +39,8 @@ #include "qtestutil_macos_p.h" +#include "QtCore/private/qcore_mac_p.h" + #import <AppKit/AppKit.h> QT_BEGIN_NAMESPACE @@ -55,6 +57,32 @@ namespace QTestPrivate { [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"ApplePersistenceIgnoreState"]; } + bool macCrashReporterWillShowDialog() + { + auto dialogType = QCFType<CFStringRef>(CFPreferencesCopyAppValue( + CFSTR("DialogType"), CFSTR("com.apple.CrashReporter"))); + + auto stringCompare = [](CFStringRef str1, CFStringRef str2) -> bool { + return CFStringCompare(str1, str2, kCFCompareCaseInsensitive) == kCFCompareEqualTo; + }; + + if (!dialogType || stringCompare(dialogType, CFSTR("basic"))) { + // The default (basic) dialog type only shows up if the + // application is 'user visible', as indicated by the + // activation policy. + auto *runningApp = NSRunningApplication.currentApplication; + return runningApp && runningApp.activationPolicy == NSApplicationActivationPolicyRegular; + } else if (stringCompare(dialogType, CFSTR("developer")) + || stringCompare(dialogType, CFSTR("crashreport"))) { + // While in developer mode the dialog will show for all + // crashed applications, including backgrounded ones. + return true; + } else { + // Finally, 'server' or 'none' will result in no dialog + return false; + } + } + /*! \internal \class AppNapDisabler \brief Disables App Nap by registereing a bacground activity. |