Browse Source
wxWidgets and KiCad fixes for quasi-modal dialogs.
wxWidgets and KiCad fixes for quasi-modal dialogs.
OSX activates windows before telling the application, so there's no good way to implement wxWidgets window enable/disable. This patch keeps the quasi-modal dialog and its parent windows order in the z-list fixed, and re-activates the quasi-modal dialog whenever the OS activates the parent window.pull/5/merge
committed by
Wayne Stambaugh
3 changed files with 91 additions and 20 deletions
-
38common/basicframe.cpp
-
7common/dialog_shim.cpp
-
66patches/wxwidgets-3.0.2_macosx_quasimodal.patch
@ -0,0 +1,66 @@ |
|||
From 0cc169ec53f5eb50e6f1e77c2f73f4631561d574 Mon Sep 17 00:00:00 2001 |
|||
From: Jeff Young <jeff@rokeby.ie> |
|||
Date: Tue, 9 Jan 2018 12:04:20 +0000 |
|||
Subject: [PATCH 1/1] Backport OSX disabled-window fixes from master. |
|||
|
|||
Also adds ReparentQuasiModal() which is required for Kicad |
|||
quasi-modal dialogs. |
|||
---
|
|||
src/osx/cocoa/dialog.mm | 12 ++++++++++++ |
|||
src/osx/cocoa/window.mm | 13 ++++++++++++- |
|||
2 files changed, 24 insertions(+), 1 deletion(-) |
|||
|
|||
diff --git a/src/osx/cocoa/dialog.mm b/src/osx/cocoa/dialog.mm
|
|||
index 8b1e48f1b4..c6b508013e 100644
|
|||
--- a/src/osx/cocoa/dialog.mm
|
|||
+++ b/src/osx/cocoa/dialog.mm
|
|||
@@ -44,3 +44,15 @@
|
|||
[NSApp endSheet: GetWXWindow()]; |
|||
[GetWXWindow() orderOut:GetWXWindow()]; |
|||
} |
|||
+
|
|||
+void wxDialog::ReparentQuasiModal()
|
|||
+{
|
|||
+ wxTopLevelWindow* parent = static_cast<wxTopLevelWindow*>(wxGetTopLevelParent(GetParent()));
|
|||
+
|
|||
+ wxASSERT_MSG(parent, "QuasiModal dialogs require a parent.");
|
|||
+
|
|||
+ NSWindow* parentWindow = parent->GetWXWindow();
|
|||
+ NSWindow* theWindow = GetWXWindow();
|
|||
+
|
|||
+ [parentWindow addChildWindow:theWindow ordered:NSWindowAbove];
|
|||
+}
|
|||
diff --git a/src/osx/cocoa/window.mm b/src/osx/cocoa/window.mm
|
|||
index ede8ebf778..2366d65d6b 100644
|
|||
--- a/src/osx/cocoa/window.mm
|
|||
+++ b/src/osx/cocoa/window.mm
|
|||
@@ -863,6 +863,15 @@ - (BOOL) canBecomeKeyView
|
|||
return NO; |
|||
} |
|||
|
|||
+- (NSView *)hitTest:(NSPoint)aPoint;
|
|||
+{
|
|||
+ wxWidgetCocoaImpl* viewimpl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( self );
|
|||
+ if ( viewimpl && viewimpl->GetWXPeer() && !viewimpl->GetWXPeer()->IsEnabled() )
|
|||
+ return nil;
|
|||
+
|
|||
+ return [super hitTest:aPoint];
|
|||
+}
|
|||
+
|
|||
@end // wxNSView |
|||
|
|||
// We need to adopt NSTextInputClient protocol in order to interpretKeyEvents: to work. |
|||
@@ -985,7 +994,9 @@ void wxOSX_mouseEvent(NSView* self, SEL _cmd, NSEvent *event)
|
|||
if (impl == NULL) |
|||
return; |
|||
|
|||
- impl->mouseEvent(event, self, _cmd);
|
|||
+ // We shouldn't let disabled windows get mouse events.
|
|||
+ if (impl->GetWXPeer()->IsEnabled())
|
|||
+ impl->mouseEvent(event, self, _cmd);
|
|||
} |
|||
|
|||
void wxOSX_cursorUpdate(NSView* self, SEL _cmd, NSEvent *event) |
|||
--
|
|||
2.14.3 (Apple Git-98) |
|||
|
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue