Merge branch 'osx-fix-dialog-level-on-floating-frames-master' of https://github.com/lanurmi/wxWidgets
Closes #4355.
This commit is contained in:
@@ -170,6 +170,7 @@ wxMSW:
|
|||||||
wxOSX:
|
wxOSX:
|
||||||
|
|
||||||
- Fix handling of non-BMP characters in GetPartialTextExtents() (ARATA Mizuki).
|
- Fix handling of non-BMP characters in GetPartialTextExtents() (ARATA Mizuki).
|
||||||
|
- Fix dialogs using wxFRAME_FLOAT_ON_PARENT frame as parent (Lauri Nurmi).
|
||||||
- Implement wxGetDisplaySizeMM() and fix printing DPI (David Vanderson).
|
- Implement wxGetDisplaySizeMM() and fix printing DPI (David Vanderson).
|
||||||
- Remove extra borders around wxFilePickerCtrl (John Roberts).
|
- Remove extra borders around wxFilePickerCtrl (John Roberts).
|
||||||
- Set up extensions filter correctly in wxFileDialog (nick863).
|
- Set up extensions filter correctly in wxFileDialog (nick863).
|
||||||
|
@@ -671,7 +671,7 @@ long style, long extraStyle, const wxString& WXUNUSED(name) )
|
|||||||
|
|
||||||
[m_macWindow setAcceptsMouseMovedEvents:YES];
|
[m_macWindow setAcceptsMouseMovedEvents:YES];
|
||||||
|
|
||||||
CGWindowLevel level = kCGNormalWindowLevel;
|
NSInteger level = NSNormalWindowLevel;
|
||||||
|
|
||||||
if ( style & wxFRAME_TOOL_WINDOW )
|
if ( style & wxFRAME_TOOL_WINDOW )
|
||||||
{
|
{
|
||||||
@@ -679,7 +679,7 @@ long style, long extraStyle, const wxString& WXUNUSED(name) )
|
|||||||
}
|
}
|
||||||
else if ( ( style & wxPOPUP_WINDOW ) )
|
else if ( ( style & wxPOPUP_WINDOW ) )
|
||||||
{
|
{
|
||||||
level = kCGPopUpMenuWindowLevel;
|
level = NSPopUpMenuWindowLevel;
|
||||||
}
|
}
|
||||||
else if ( ( style & wxFRAME_DRAWER ) )
|
else if ( ( style & wxFRAME_DRAWER ) )
|
||||||
{
|
{
|
||||||
@@ -709,10 +709,10 @@ long style, long extraStyle, const wxString& WXUNUSED(name) )
|
|||||||
windowstyle |= NSTexturedBackgroundWindowMask;
|
windowstyle |= NSTexturedBackgroundWindowMask;
|
||||||
|
|
||||||
if ( ( style & wxFRAME_FLOAT_ON_PARENT ) || ( style & wxFRAME_TOOL_WINDOW ) )
|
if ( ( style & wxFRAME_FLOAT_ON_PARENT ) || ( style & wxFRAME_TOOL_WINDOW ) )
|
||||||
level = kCGFloatingWindowLevel;
|
level = NSFloatingWindowLevel;
|
||||||
|
|
||||||
if ( ( style & wxSTAY_ON_TOP ) )
|
if ( ( style & wxSTAY_ON_TOP ) )
|
||||||
level = kCGUtilityWindowLevel;
|
level = NSModalPanelWindowLevel;
|
||||||
|
|
||||||
NSRect r = wxToNSRect( NULL, wxRect( pos, size) );
|
NSRect r = wxToNSRect( NULL, wxRect( pos, size) );
|
||||||
|
|
||||||
@@ -734,20 +734,20 @@ long style, long extraStyle, const wxString& WXUNUSED(name) )
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If the parent is modal, windows with wxFRAME_FLOAT_ON_PARENT style need
|
// If the parent is modal, windows with wxFRAME_FLOAT_ON_PARENT style need
|
||||||
// to be in kCGUtilityWindowLevel and not kCGFloatingWindowLevel to stay
|
// to be in NSModalPanelWindowLevel and not NSFloatingWindowLevel to stay
|
||||||
// above the parent.
|
// above the parent.
|
||||||
wxDialog * const parentDialog = parent == NULL ? NULL : wxDynamicCast(parent->MacGetTopLevelWindow(), wxDialog);
|
wxDialog * const parentDialog = parent == NULL ? NULL : wxDynamicCast(parent->MacGetTopLevelWindow(), wxDialog);
|
||||||
if (parentDialog && parentDialog->IsModal())
|
if (parentDialog && parentDialog->IsModal())
|
||||||
{
|
{
|
||||||
if (level == kCGFloatingWindowLevel)
|
if (level == NSFloatingWindowLevel)
|
||||||
{
|
{
|
||||||
level = kCGUtilityWindowLevel;
|
level = NSModalPanelWindowLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cocoa's modal loop does not process other windows by default, but
|
// 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
|
// don't call this on normal window levels so nested modal dialogs will
|
||||||
// still behave modally.
|
// still behave modally.
|
||||||
if (level != kCGNormalWindowLevel)
|
if (level != NSNormalWindowLevel)
|
||||||
{
|
{
|
||||||
if ([m_macWindow isKindOfClass:[NSPanel class]])
|
if ([m_macWindow isKindOfClass:[NSPanel class]])
|
||||||
{
|
{
|
||||||
@@ -806,14 +806,23 @@ bool wxNonOwnedWindowCocoaImpl::Show(bool show)
|
|||||||
{
|
{
|
||||||
// add to parent window before showing
|
// add to parent window before showing
|
||||||
wxDialog * const dialog = wxDynamicCast(wxpeer, wxDialog);
|
wxDialog * const dialog = wxDynamicCast(wxpeer, wxDialog);
|
||||||
if ( wxpeer->GetParent() && dialog && dialog->IsModal())
|
if ( wxpeer->GetParent() && dialog )
|
||||||
{
|
{
|
||||||
NSView * parentView = wxpeer->GetParent()->GetPeer()->GetWXWidget();
|
NSView * parentView = wxpeer->GetParent()->GetPeer()->GetWXWidget();
|
||||||
if ( parentView )
|
if ( parentView )
|
||||||
{
|
{
|
||||||
NSWindow* parentNSWindow = [parentView window];
|
NSWindow* parentNSWindow = [parentView window];
|
||||||
if ( parentNSWindow )
|
if ( parentNSWindow ) {
|
||||||
[parentNSWindow addChildWindow:m_macWindow ordered:NSWindowAbove];
|
[parentNSWindow addChildWindow:m_macWindow ordered:NSWindowAbove];
|
||||||
|
// If the parent is modal, windows with wxFRAME_FLOAT_ON_PARENT style need
|
||||||
|
// to be in NSModalPanelWindowLevel and not NSFloatingWindowLevel to stay
|
||||||
|
// above the parent.
|
||||||
|
if ([m_macWindow level] == NSFloatingWindowLevel ||
|
||||||
|
[m_macWindow level] == NSModalPanelWindowLevel) {
|
||||||
|
m_macWindowLevel = NSModalPanelWindowLevel;
|
||||||
|
[m_macWindow setLevel:m_macWindowLevel];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -881,12 +890,12 @@ void wxNonOwnedWindowCocoaImpl::SetWindowStyleFlag( long style )
|
|||||||
// don't mess with native wrapped windows, they might throw an exception when their level is changed
|
// don't mess with native wrapped windows, they might throw an exception when their level is changed
|
||||||
if (!m_wxPeer->IsNativeWindowWrapper() && m_macWindow)
|
if (!m_wxPeer->IsNativeWindowWrapper() && m_macWindow)
|
||||||
{
|
{
|
||||||
CGWindowLevel level = kCGNormalWindowLevel;
|
NSInteger level = NSNormalWindowLevel;
|
||||||
|
|
||||||
if (style & wxSTAY_ON_TOP)
|
if (style & wxSTAY_ON_TOP)
|
||||||
level = kCGUtilityWindowLevel;
|
level = NSModalPanelWindowLevel;
|
||||||
else if (( style & wxFRAME_FLOAT_ON_PARENT ) || ( style & wxFRAME_TOOL_WINDOW ))
|
else if (( style & wxFRAME_FLOAT_ON_PARENT ) || ( style & wxFRAME_TOOL_WINDOW ))
|
||||||
level = kCGFloatingWindowLevel;
|
level = NSFloatingWindowLevel;
|
||||||
|
|
||||||
[m_macWindow setLevel: level];
|
[m_macWindow setLevel: level];
|
||||||
m_macWindowLevel = level;
|
m_macWindowLevel = level;
|
||||||
|
Reference in New Issue
Block a user