[webkit-changes] cvs commit: WebCore/kwq WebCoreBridge.mm KWQKHTMLPart.mm

Vicki vicki at opensource.apple.com
Sun Nov 13 19:49:56 PST 2005


vicki       05/11/13 19:49:56

  Modified:    .        ChangeLog
               kwq      WebCoreBridge.mm KWQKHTMLPart.mm
  Log:
          Reviewed by Maciej.
  
  	- fix <rdar://problem/4316201> REGRESSION: cursor and text in status bar is not updated when mousing over links in a frame (5509)
  
          * kwq/KWQKHTMLPart.mm:
          (KWQKHTMLPart::passSubframeEventToSubframe): add a case to handle NSMouseMoved, to fix the problem with the hand cursor
          (KWQKHTMLPart::mouseMoved): return if we're already sending an event to the subview
  	* kwq/WebCoreBridge.mm:
          (-[WebCoreBridge elementAtPoint:]): if we're over a frame, return the element within the frame, to fix the problem with
  	status bar text
  
  Revision  Changes    Path
  1.361     +14 -1     WebCore/ChangeLog
  
  Index: ChangeLog
  ===================================================================
  RCS file: /cvs/root/WebCore/ChangeLog,v
  retrieving revision 1.360
  retrieving revision 1.361
  diff -u -r1.360 -r1.361
  --- ChangeLog	13 Nov 2005 23:52:50 -0000	1.360
  +++ ChangeLog	14 Nov 2005 03:49:50 -0000	1.361
  @@ -1,4 +1,17 @@
  -2005-11-14  Anders Carlsson  <andersca at mac.com>
  +2005-11-13  Vicki Murley  <vicki at apple.com>
  +
  +        Reviewed by Maciej.
  +
  +	- fix <rdar://problem/4316201> REGRESSION: cursor and text in status bar is not updated when mousing over links in a frame (5509)
  +
  +        * kwq/KWQKHTMLPart.mm:
  +        (KWQKHTMLPart::passSubframeEventToSubframe): add a case to handle NSMouseMoved, to fix the problem with the hand cursor
  +        (KWQKHTMLPart::mouseMoved): return if we're already sending an event to the subview
  +	* kwq/WebCoreBridge.mm:
  +        (-[WebCoreBridge elementAtPoint:]): if we're over a frame, return the element within the frame, to fix the problem with
  +	status bar text
  +
  +2005-11-13  Anders Carlsson  <andersca at mac.com>
   
           Reviewed by Eric.
   
  
  
  
  1.427     +22 -3     WebCore/kwq/WebCoreBridge.mm
  
  Index: WebCoreBridge.mm
  ===================================================================
  RCS file: /cvs/root/WebCore/kwq/WebCoreBridge.mm,v
  retrieving revision 1.426
  retrieving revision 1.427
  diff -u -r1.426 -r1.427
  --- WebCoreBridge.mm	9 Nov 2005 02:46:29 -0000	1.426
  +++ WebCoreBridge.mm	14 Nov 2005 03:49:54 -0000	1.427
  @@ -1024,16 +1024,35 @@
   - (NSDictionary *)elementAtPoint:(NSPoint)point
   {
       RenderObject *renderer = _part->renderer();
  -    if (!renderer) {
  +    if (!renderer) 
           return nil;
  -    }
  +    
       RenderObject::NodeInfo nodeInfo(true, true);
       renderer->layer()->hitTest(nodeInfo, (int)point.x, (int)point.y);
  +
  +    NodeImpl *n = nodeInfo.innerNode();
  +    QWidget *widget = static_cast<RenderWidget *>(n->renderer())->widget();
       
  +    while (n && n->renderer() && n->renderer()->isWidget() && widget && widget->inherits("KHTMLView")) {
  +        KHTMLPart *kpart = static_cast<DOM::HTMLFrameElementImpl *>(n)->contentPart();
  +        if (kpart && static_cast<KWQKHTMLPart *>(kpart)->renderer()) {
  +            int _x, _y;
  +            n->renderer()->absolutePosition(_x, _y, true);
  +            _x = (int)point.x - _x;
  +            _y = (int)point.y - _y;
  +            RenderObject::NodeInfo widgetNodeInfo(true, true);
  +            static_cast<KWQKHTMLPart *>(kpart)->renderer()->layer()->hitTest(widgetNodeInfo, _x, _y);
  +            nodeInfo = widgetNodeInfo;
  +            n = nodeInfo.innerNode();
  +            if (n && n->renderer())
  +                widget = static_cast<RenderWidget *>(n->renderer())->widget();
  +        }
  +    }  
  +        
       NSMutableDictionary *element = [NSMutableDictionary dictionary];
       [element setObject:[NSNumber numberWithBool:_part->isPointInsideSelection((int)point.x, (int)point.y)]
                   forKey:WebCoreElementIsSelectedKey];
  -    
  +
       // Find the title in the nearest enclosing DOM node.
       // For <area> tags in image maps, walk the tree for the <area>, not the <img> using it.
       for (NodeImpl *titleNode = nodeInfo.innerNode(); titleNode; titleNode = titleNode->parentNode()) {
  
  
  
  1.687     +18 -2     WebCore/kwq/KWQKHTMLPart.mm
  
  Index: KWQKHTMLPart.mm
  ===================================================================
  RCS file: /cvs/root/WebCore/kwq/KWQKHTMLPart.mm,v
  retrieving revision 1.686
  retrieving revision 1.687
  diff -u -r1.686 -r1.687
  --- KWQKHTMLPart.mm	9 Nov 2005 02:46:28 -0000	1.686
  +++ KWQKHTMLPart.mm	14 Nov 2005 03:49:54 -0000	1.687
  @@ -2164,7 +2164,6 @@
       if (!wasDeferringTimers) {
           QObject::setDefersTimers(true);
       }
  -
       ASSERT(!_sendingEventToSubview);
       _sendingEventToSubview = true;
       [view mouseDown:_currentEvent];
  @@ -2590,6 +2589,23 @@
       KWQ_BLOCK_EXCEPTIONS;
   
       switch ([_currentEvent type]) {
  +        case NSMouseMoved: {
  +            NodeImpl *node = event.innerNode.get();
  +            if (!node)
  +                return false;
  +            RenderObject *renderer = node->renderer();
  +            if (!renderer || !renderer->isWidget())
  +                return false;
  +            QWidget *widget = static_cast<RenderWidget *>(renderer)->widget();
  +            if (!widget || !widget->inherits("KHTMLView"))
  +                return false;
  +            KHTMLPart *subframePart = static_cast<KHTMLView *>(widget)->part();
  +            if (!subframePart)
  +                return false;
  +            [KWQ(subframePart)->bridge() mouseMoved:_currentEvent];
  +            return true;
  +        }
  +        
       	case NSLeftMouseDown: {
               NodeImpl *node = event.innerNode.get();
               if (!node) {
  @@ -2826,7 +2842,7 @@
       KHTMLView *v = d->m_view;
       // Reject a mouse moved if the button is down - screws up tracking during autoscroll
       // These happen because WebKit sometimes has to fake up moved events.
  -    if (!v || d->m_bMousePressed) {
  +    if (!v || d->m_bMousePressed || _sendingEventToSubview) {
           return;
       }
       
  
  
  



More information about the webkit-changes mailing list