]> git.saurik.com Git - wxWidgets.git/commitdiff
avoiding focus lost events when a different subview gets focused, see #14042
authorStefan Csomor <csomor@advancedconcepts.ch>
Mon, 3 Jun 2013 17:49:03 +0000 (17:49 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Mon, 3 Jun 2013 17:49:03 +0000 (17:49 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74100 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/osx/cocoa/window.mm

index acd1ced6382ca7064cddbf9a0624847eb7a29922..a5aaeac505e01a45772550acb474263fa6bee92b 100644 (file)
@@ -1349,21 +1349,19 @@ bool wxWidgetCocoaImpl::resignFirstResponder(WXWidget slf, void *_cmd)
     BOOL r = superimpl(slf, (SEL)_cmd);
  
     NSResponder * responder = wxNonOwnedWindowCocoaImpl::GetNextFirstResponder();
-    NSView* otherView = [responder isKindOfClass:[NSView class]] ? (NSView*)responder : nil;
+    NSView* otherView = GetViewFromResponder(responder);
 
     wxWidgetImpl* otherWindow = FindFromWXWidget(otherView);
-
-    // CS: the fix for #12267 leads to missed focus events like in #14938 , as #12267 doesn't seem to happen anymore even
-    // without the fix, I'm turning it off, if it still is needed we should only use it in case of the wxGridCellTextEditor 
-#if 0
-    // It doesn't make sense to notify about the loss of focus if we're not
-    // really losing it and the window which has just gained focus is the same
-    // one as this window itself. Of course, this should never happen in the
-    // first place but somehow it does in wxGrid code and without this check we
-    // enter into an infinite recursion, see #12267.
+    
+    // NSScrollViews can have their subviews like NSClipView getting focus
+    // therefore check and use the NSScrollView peer in that case
+    if ( otherWindow == NULL && [[otherView superview] isKindOfClass:[NSScrollView class]])
+        otherWindow = FindFromWXWidget([otherView superview]);
+    
+    // It doesn't make sense to notify about the loss of focus if it's the same
+    // control in the end, and just a different subview
     if ( otherWindow == this )
         return r;
-#endif
     
     // NSTextViews have an editor as true responder, therefore the might get the
     // resign notification if their editor takes over, don't trigger any event then