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
			
			
		- 
					40common/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