+
+ // If the parent is modal, windows with wxFRAME_FLOAT_ON_PARENT style need
+ // to be in kCGUtilityWindowLevel and not kCGFloatingWindowLevel to stay
+ // above the parent.
+ wxDialog * const parentDialog = wxDynamicCast(parent, wxDialog);
+ if (parentDialog && parentDialog->IsModal())
+ {
+ if (level == kCGFloatingWindowLevel)
+ {
+ level = kCGUtilityWindowLevel;
+ }
+
+ // Cocoa's modal loop does not process other windows by default, but
+ // don't call this on normal window levels so nested modal dialogs will
+ // still behave modally.
+ if (level != kCGNormalWindowLevel)
+ {
+ if ([m_macWindow isKindOfClass:[NSPanel class]])
+ {
+ [(NSPanel*)m_macWindow setWorksWhenModal:YES];
+ }
+ }
+ }
+