[webkit-changes] cvs commit: WebKit/WebView.subproj WebHTMLView.m

Vicki vicki at opensource.apple.com
Thu Oct 13 12:37:32 PDT 2005


vicki       05/10/13 12:37:32

  Modified:    .        ChangeLog
               WebView.subproj WebHTMLView.m
  Log:
          Reviewed by Darin.
  
  	- fix <rdar://problem/4043643> iframe swallows events for overlapping elements (3449)
  
          * WebView.subproj/WebHTMLView.m:
          (-[WebHTMLView hitTest:]):
          (-[WebHTMLView _updateMouseoverWithEvent:]): eliminate _hitViewForEvent hackery and self
  	dependency from this function
  
  Revision  Changes    Path
  1.3351    +11 -0     WebKit/ChangeLog
  
  Index: ChangeLog
  ===================================================================
  RCS file: /cvs/root/WebKit/ChangeLog,v
  retrieving revision 1.3350
  retrieving revision 1.3351
  diff -u -r1.3350 -r1.3351
  --- ChangeLog	13 Oct 2005 01:08:12 -0000	1.3350
  +++ ChangeLog	13 Oct 2005 19:37:24 -0000	1.3351
  @@ -1,3 +1,14 @@
  +2005-10-12  Vicki Murley  <vicki at apple.com>
  +
  +        Reviewed by Darin.
  +
  +	- fix <rdar://problem/4043643> iframe swallows events for overlapping elements (3449)
  +
  +        * WebView.subproj/WebHTMLView.m:
  +        (-[WebHTMLView hitTest:]): 
  +        (-[WebHTMLView _updateMouseoverWithEvent:]): eliminate _hitViewForEvent hackery and self
  +	dependency from this function
  +
   2005-10-12  Timothy Hatcher  <timothy at apple.com>
   
           Reviewed by Darin.
  
  
  
  1.476     +29 -44    WebKit/WebView.subproj/WebHTMLView.m
  
  Index: WebHTMLView.m
  ===================================================================
  RCS file: /cvs/root/WebKit/WebView.subproj/WebHTMLView.m,v
  retrieving revision 1.475
  retrieving revision 1.476
  diff -u -r1.475 -r1.476
  --- WebHTMLView.m	12 Oct 2005 01:00:28 -0000	1.475
  +++ WebHTMLView.m	13 Oct 2005 19:37:31 -0000	1.476
  @@ -852,14 +852,12 @@
           captureHitsOnSubviews = NO;
       } else {
           NSEvent *event = [[self window] currentEvent];
  -        captureHitsOnSubviews = [event type] == NSLeftMouseDown && ([event modifierFlags] & NSControlKeyMask) == 0;
  +        captureHitsOnSubviews = !([event type] == NSRightMouseDown || ([event type] == NSLeftMouseDown && ([event modifierFlags] & NSControlKeyMask) != 0));
       }
  -    if (!captureHitsOnSubviews) {
  +    if (!captureHitsOnSubviews)
           return [super hitTest:point];
  -    }
  -    if ([[self superview] mouse:point inRect:[self frame]]) {
  +    if ([[self superview] mouse:point inRect:[self frame]])
           return self;
  -    }
       return nil;
   }
   
  @@ -980,19 +978,13 @@
   
   - (void)_updateMouseoverWithEvent:(NSEvent *)event
   {
  -    [self retain];
  -    
       WebHTMLView *view = nil;
  -    if ([event window] == [self window]) {
  -        NSView *hitView = [self _hitViewForEvent:event];
  -        while (hitView) {
  -            if ([hitView isKindOfClass:[WebHTMLView class]]) {
  -                view = (WebHTMLView *)hitView;
  -                break;
  -            }
  -            hitView = [hitView superview];
  -        }
  -    }
  +    NSView *hitView = [[[event window] contentView] hitTest:[event locationInWindow]];
  +    if ([hitView isKindOfClass:[WebHTMLView class]]) 
  +        view = (WebHTMLView *)hitView; 
  +
  +    if (view)
  +        [view retain];
   
       if (lastHitView != view && lastHitView != nil) {
           // If we are moving out of a view (or frame), let's pretend the mouse moved
  @@ -1006,47 +998,40 @@
                            location:NSMakePoint(-1 - xScroll, -1 - yScroll )
                            modifierFlags:[[NSApp currentEvent] modifierFlags]
                            timestamp:[NSDate timeIntervalSinceReferenceDate]
  -                         windowNumber:[[self window] windowNumber]
  +                         windowNumber:[[view window] windowNumber]
                            context:[[NSApp currentEvent] context]
                            eventNumber:0 clickCount:0 pressure:0];
           [[lastHitView _bridge] mouseMoved:event];
       }
   
       lastHitView = view;
  -    
  -    NSDictionary *element;
  -    if (view == nil) {
  -        element = nil;
  -    } else {
  +
  +    if (view) {
           [[view _bridge] mouseMoved:event];
   
           NSPoint point = [view convertPoint:[event locationInWindow] fromView:nil];
  -        element = [view elementAtPoint:point];
  -    }
  -
  -    // Have the web view send a message to the delegate so it can do status bar display.
  -    [[self _webView] _mouseDidMoveOverElement:element modifierFlags:[event modifierFlags]];
  +        NSDictionary *element = [view elementAtPoint:point];
   
  -    // Set a tool tip; it won't show up right away but will if the user pauses.
  -    NSString *newToolTip = nil;
  -    if (_private->showsURLsInToolTips) {
  -        DOMHTMLElement *domElement = [element objectForKey:WebElementDOMNodeKey];
  -        if ([domElement isKindOfClass:[DOMHTMLInputElement class]]) {
  +        // Have the web view send a message to the delegate so it can do status bar display.
  +        [[view _webView] _mouseDidMoveOverElement:element modifierFlags:[event modifierFlags]];
   
  -            if ([[(DOMHTMLInputElement *) domElement type] isEqualToString:@"submit"]) {
  -                newToolTip = [[(DOMHTMLInputElement *) domElement form] action];
  +        // Set a tool tip; it won't show up right away but will if the user pauses.
  +        NSString *newToolTip = nil;
  +        if (_private->showsURLsInToolTips) {
  +            DOMHTMLElement *domElement = [element objectForKey:WebElementDOMNodeKey];
  +            if ([domElement isKindOfClass:[DOMHTMLInputElement class]]) {
  +                if ([[(DOMHTMLInputElement *)domElement type] isEqualToString:@"submit"])
  +                    newToolTip = [[(DOMHTMLInputElement *) domElement form] action];
               }
  +            if (newToolTip == nil)
  +                newToolTip = [[element objectForKey:WebCoreElementLinkURLKey] _web_userVisibleString];
           }
  -        if (newToolTip == nil) {
  -            newToolTip = [[element objectForKey:WebCoreElementLinkURLKey] _web_userVisibleString];
  -        }
  -    }
  -    if (newToolTip == nil) {
  -        newToolTip = [element objectForKey:WebCoreElementTitleKey];
  +        if (newToolTip == nil)
  +            newToolTip = [element objectForKey:WebCoreElementTitleKey];
  +        [view _setToolTip:newToolTip];
  +
  +        [view release];
       }
  -    [self _setToolTip:newToolTip];
  -    
  -    [self release];
   }
   
   + (NSArray *)_insertablePasteboardTypes
  
  
  



More information about the webkit-changes mailing list