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

Timothy thatcher at opensource.apple.com
Thu Nov 10 21:12:50 PST 2005


thatcher    05/11/10 21:12:50

  Modified:    .        Tag: Safari-1-3-branch ChangeLog
               WebView.subproj Tag: Safari-1-3-branch WebHTMLView.m
  Log:
          Merged fix from TOT to Safari-1-3-branch
  
      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
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.3120.2.18 +16 -0     WebKit/ChangeLog
  
  Index: ChangeLog
  ===================================================================
  RCS file: /cvs/root/WebKit/ChangeLog,v
  retrieving revision 1.3120.2.17
  retrieving revision 1.3120.2.18
  diff -u -r1.3120.2.17 -r1.3120.2.18
  --- ChangeLog	4 Nov 2005 20:12:08 -0000	1.3120.2.17
  +++ ChangeLog	11 Nov 2005 05:12:35 -0000	1.3120.2.18
  @@ -1,3 +1,19 @@
  +2005-11-10  Timothy Hatcher  <timothy at apple.com>
  +
  +        Merged fix from TOT to Safari-1-3-branch
  +
  +    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
  +
   === WebKit-312.5.2 ===
   
   2005-11-03  Timothy Hatcher  <timothy at apple.com>
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.437.6.1 +31 -37    WebKit/WebView.subproj/WebHTMLView.m
  
  Index: WebHTMLView.m
  ===================================================================
  RCS file: /cvs/root/WebKit/WebView.subproj/WebHTMLView.m,v
  retrieving revision 1.437
  retrieving revision 1.437.6.1
  diff -u -r1.437 -r1.437.6.1
  --- WebHTMLView.m	24 Mar 2005 03:03:02 -0000	1.437
  +++ WebHTMLView.m	11 Nov 2005 05:12:48 -0000	1.437.6.1
  @@ -848,14 +848,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;
   }
   
  @@ -976,19 +974,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
  @@ -1002,38 +994,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];
  -    }
  +        NSDictionary *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]];
  +        // Have the web view send a message to the delegate so it can do status bar display.
  +        [[view _webView] _mouseDidMoveOverElement:element modifierFlags:[event modifierFlags]];
   
  -    // Set a tool tip; it won't show up right away but will if the user pauses.
  -    NSString *newToolTip = nil;
  -    if (_private->showsURLsInToolTips) {
  -        newToolTip = [[element objectForKey:WebCoreElementLinkURLKey] _web_userVisibleString];
  -    }
  -    if (newToolTip == nil) {
  -        newToolTip = [element objectForKey:WebCoreElementTitleKey];
  +        // 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:WebCoreElementTitleKey];
  +        [view _setToolTip:newToolTip];
  +
  +        [view release];
       }
  -    [self _setToolTip:newToolTip];
  -    
  -    [self release];
   }
   
   + (NSArray *)_insertablePasteboardTypes
  
  
  



More information about the webkit-changes mailing list