From 6a5bf822aba2f19f1133745d66bc04e2fd26f8a9 Mon Sep 17 00:00:00 2001 From: Francisco Ryan Tolmasky I Date: Mon, 5 Jan 2009 01:58:21 -0800 Subject: [PATCH] Fix for setIgnoresMouseEvents: in CPWindow. [#195 state:resolved]. Reviewed by me. --- AppKit/CPWindow/CPWindow.j | 11 +++++++++++ AppKit/Platform/DOM/CPDOMWindowBridge.j | 18 ++++++++++++++++-- AppKit/Platform/DOM/CPDOMWindowLayer.j | 5 +++++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/AppKit/CPWindow/CPWindow.j b/AppKit/CPWindow/CPWindow.j index 774be7efc..1b0d3e5eb 100644 --- a/AppKit/CPWindow/CPWindow.j +++ b/AppKit/CPWindow/CPWindow.j @@ -260,6 +260,7 @@ var CPWindowSaveImage = nil, CPString _title; BOOL _acceptsMouseMovedEvents; + BOOL _ignoresMouseEvents; CPWindowController _windowController; @@ -927,6 +928,16 @@ CPTexturedBackgroundWindowMask _acceptsMouseMovedEvents = shouldAcceptMouseMovedEvents; } +- (BOOL)ignoresMouseEvents +{ + return _ignoresMouseEvents; +} + +- (void)setIgnoresMouseEvents:(BOOL)shouldIgnoreMouseEvents +{ + _ignoresMouseEvents = shouldIgnoreMouseEvents; +} + // Managing Titles /*! diff --git a/AppKit/Platform/DOM/CPDOMWindowBridge.j b/AppKit/Platform/DOM/CPDOMWindowBridge.j index 71660b60e..bfb42b29b 100644 --- a/AppKit/Platform/DOM/CPDOMWindowBridge.j +++ b/AppKit/Platform/DOM/CPDOMWindowBridge.j @@ -223,6 +223,16 @@ var CPDOMWindowGetFrame, return CPRectCreateCopy(_contentBounds); } +- (CPArray)orderedWindowsAtLevel:(int)aLevel +{ + var layer = [self layerAtLevel:aLevel create:NO]; + + if (!layer) + return []; + + return [layer orderedWindows]; +} + - (CPDOMWindowLayer)layerAtLevel:(int)aLevel create:(BOOL)aFlag { var layer = [_windowLayers objectForKey:aLevel]; @@ -326,8 +336,12 @@ var CPDOMWindowGetFrame, windowCount = windows.length; while (windowCount-- && !theWindow) - if (CPRectContainsPoint(windows[windowCount]._frame, location)) - theWindow = windows[windowCount]; + { + var candidateWindow = windows[windowCount]; + + if (!candidateWindow._ignoresMouseEvents && CGRectContainsPoint(candidateWindow._frame, location)) + theWindow = candidateWindow; + } } return theWindow; diff --git a/AppKit/Platform/DOM/CPDOMWindowLayer.j b/AppKit/Platform/DOM/CPDOMWindowLayer.j index aec5d4868..ddd3b3a6c 100644 --- a/AppKit/Platform/DOM/CPDOMWindowLayer.j +++ b/AppKit/Platform/DOM/CPDOMWindowLayer.j @@ -116,4 +116,9 @@ } } +- (CPArray)orderedWindows +{ + return _windows; +} + @end