[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.15-1-40151-g37bb677

rjw rjw at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 06:40:23 UTC 2009


The following commit has been merged in the debian/unstable branch:
commit 662d635c9c1754fca39ce0f2de83cf155303bbfc
Author: rjw <rjw at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Fri Sep 20 04:09:26 2002 +0000

            Implemented double and triple click selection.
    
            * khtml/khtml_events.h:
            * khtml/khtml_part.cpp:
            (KHTMLPart::customEvent):
            (KHTMLPart::khtmlMouseDoubleClickEvent):
            (firstSlaveAt):
            (lastSlaveAt):
            (KHTMLPart::khtmlMouseTripleClickEvent):
            * khtml/khtml_part.h:
            * khtml/rendering/render_text.h:
            * kwq/WebCoreBridge.mm:
            (-[WebCoreBridge mouseUp:]):
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2101 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog-2002-12-03 b/WebCore/ChangeLog-2002-12-03
index 1040667..05ede80 100644
--- a/WebCore/ChangeLog-2002-12-03
+++ b/WebCore/ChangeLog-2002-12-03
@@ -1,3 +1,19 @@
+2002-09-19  Richard Williamson   <rjw at apple.com>
+
+        Implemented double and triple click selection.
+        
+        * khtml/khtml_events.h:
+        * khtml/khtml_part.cpp:
+        (KHTMLPart::customEvent):
+        (KHTMLPart::khtmlMouseDoubleClickEvent):
+        (firstSlaveAt):
+        (lastSlaveAt):
+        (KHTMLPart::khtmlMouseTripleClickEvent):
+        * khtml/khtml_part.h:
+        * khtml/rendering/render_text.h:
+        * kwq/WebCoreBridge.mm:
+        (-[WebCoreBridge mouseUp:]):
+
 2002-09-19  Darin Adler  <darin at apple.com>
 
 	- fixed 3045651 -- null-dereference in DOM::CharacterDataImpl constructor
diff --git a/WebCore/ChangeLog-2003-10-25 b/WebCore/ChangeLog-2003-10-25
index 1040667..05ede80 100644
--- a/WebCore/ChangeLog-2003-10-25
+++ b/WebCore/ChangeLog-2003-10-25
@@ -1,3 +1,19 @@
+2002-09-19  Richard Williamson   <rjw at apple.com>
+
+        Implemented double and triple click selection.
+        
+        * khtml/khtml_events.h:
+        * khtml/khtml_part.cpp:
+        (KHTMLPart::customEvent):
+        (KHTMLPart::khtmlMouseDoubleClickEvent):
+        (firstSlaveAt):
+        (lastSlaveAt):
+        (KHTMLPart::khtmlMouseTripleClickEvent):
+        * khtml/khtml_part.h:
+        * khtml/rendering/render_text.h:
+        * kwq/WebCoreBridge.mm:
+        (-[WebCoreBridge mouseUp:]):
+
 2002-09-19  Darin Adler  <darin at apple.com>
 
 	- fixed 3045651 -- null-dereference in DOM::CharacterDataImpl constructor
diff --git a/WebCore/ChangeLog-2005-08-23 b/WebCore/ChangeLog-2005-08-23
index 1040667..05ede80 100644
--- a/WebCore/ChangeLog-2005-08-23
+++ b/WebCore/ChangeLog-2005-08-23
@@ -1,3 +1,19 @@
+2002-09-19  Richard Williamson   <rjw at apple.com>
+
+        Implemented double and triple click selection.
+        
+        * khtml/khtml_events.h:
+        * khtml/khtml_part.cpp:
+        (KHTMLPart::customEvent):
+        (KHTMLPart::khtmlMouseDoubleClickEvent):
+        (firstSlaveAt):
+        (lastSlaveAt):
+        (KHTMLPart::khtmlMouseTripleClickEvent):
+        * khtml/khtml_part.h:
+        * khtml/rendering/render_text.h:
+        * kwq/WebCoreBridge.mm:
+        (-[WebCoreBridge mouseUp:]):
+
 2002-09-19  Darin Adler  <darin at apple.com>
 
 	- fixed 3045651 -- null-dereference in DOM::CharacterDataImpl constructor
diff --git a/WebCore/khtml/khtml_events.h b/WebCore/khtml/khtml_events.h
index e552bde..78db9c4 100644
--- a/WebCore/khtml/khtml_events.h
+++ b/WebCore/khtml/khtml_events.h
@@ -92,6 +92,7 @@ private:
   static const char *s_strMouseDoubleClickEvent;
 };
 
+#ifdef APPLE_CHANGES
 class MouseTripleClickEvent : public MouseEvent
 {
 public:
@@ -107,6 +108,7 @@ public:
 private:
   static const char *s_strMouseTripleClickEvent;
 };
+#endif
 
 class MouseMoveEvent : public MouseEvent
 {
diff --git a/WebCore/khtml/khtml_part.cpp b/WebCore/khtml/khtml_part.cpp
index f1d0171..350e0a9 100644
--- a/WebCore/khtml/khtml_part.cpp
+++ b/WebCore/khtml/khtml_part.cpp
@@ -3898,6 +3898,14 @@ void KHTMLPart::customEvent( QCustomEvent *event )
     return;
   }
 
+#ifdef APPLE_CHANGES
+  if ( khtml::MouseTripleClickEvent::test( event ) )
+  {
+    khtmlMouseTripleClickEvent( static_cast<khtml::MouseTripleClickEvent *>( event ) );
+    return;
+  }
+#endif
+
   if ( khtml::MouseMoveEvent::test( event ) )
   {
     khtmlMouseMoveEvent( static_cast<khtml::MouseMoveEvent *>( event ) );
@@ -3978,13 +3986,191 @@ void KHTMLPart::khtmlMousePressEvent( khtml::MousePressEvent *event )
   }
 }
 
-void KHTMLPart::khtmlMouseDoubleClickEvent( khtml::MouseDoubleClickEvent * )
+void KHTMLPart::khtmlMouseDoubleClickEvent( khtml::MouseDoubleClickEvent *event)
 {
+#ifdef APPLE_CHANGES
+    QMouseEvent *_mouse = event->qmouseEvent();
+    DOM::Node innerNode = event->innerNode();
+    
+    d->m_selectionStart = 0;
+    d->m_selectionEnd = 0;
+    d->m_startOffset = 0;
+    d->m_endOffset = 0;
+
+    if ( _mouse->button() == LeftButton ){
+        if ( !innerNode.isNull()  && innerNode.handle()->renderer()) {
+            int startOffset = 0, endOffset = 0;
+            DOM::NodeImpl* node = 0;
+            
+            innerNode.handle()->renderer()->checkSelectionPoint( event->x(), event->y(),
+                                        event->absX()-innerNode.handle()->renderer()->xPos(),
+                                        event->absY()-innerNode.handle()->renderer()->yPos(), 
+                                        node, startOffset);
+            
+            if (node && (node->nodeType() == Node::TEXT_NODE || node->nodeType() == Node::CDATA_SECTION_NODE)){
+                DOMString t = node->nodeValue();
+                QChar *chars = t.unicode();
+                uint len = t.length();
+                
+                if (chars[startOffset] == ' '){
+                    int pos = startOffset;
+                    while (chars[pos].isSpace() && pos >= 0)
+                        pos--;
+                    startOffset = pos+1;
+                    pos = startOffset;
+                    while (chars[pos].isSpace() && pos < (int)len)
+                        pos++;
+                    endOffset = pos;
+                }
+                else {
+                    int pos = startOffset;
+                    while (!chars[pos].isSpace() && pos >= 0)
+                        pos--;
+                    startOffset = pos+1;
+                    pos = startOffset;
+                    while (!chars[pos].isSpace() && pos < (int)len)
+                        pos++;
+                    endOffset = pos;
+                }
+                d->m_startBeforeEnd = true;
+                d->m_selectionStart = node;
+                d->m_startOffset = startOffset;
+                d->m_selectionEnd = d->m_selectionStart;
+                d->m_endOffset = endOffset;
+            }
+        }
+    }
+    if (d->m_selectionStart == 0)
+        d->m_doc->clearSelection();
+    else
+        d->m_doc->setSelection(d->m_selectionStart.handle(), d->m_startOffset,
+                d->m_selectionEnd.handle(),d->m_endOffset);
+                
+    emitSelectionChanged();
+    startAutoScroll();
+#endif
 }
 
 #ifdef APPLE_CHANGES
-void KHTMLPart::khtmlMouseTripleClickEvent( khtml::MouseTripleClickEvent * )
+static bool firstSlaveAt (khtml::RenderObject *renderNode, int y, DOM::NodeImpl*&startNode, int &startOffset)
+{
+    bool found = false;
+    
+    if (renderNode == 0)
+        return false;
+        
+    khtml::RenderText *textRenderer =  static_cast<khtml::RenderText *>(renderNode);
+    khtml::TextSlaveArray slaves = textRenderer->textSlaves();
+    for (int i = 0; i < (int)slaves.count(); i++){
+        if (slaves[i]->m_y == y){
+            startNode = textRenderer->element();
+            startOffset = slaves[i]->m_start;
+            return true;
+        }
+    }
+    
+    found =  firstSlaveAt(renderNode->firstChild(), y, startNode, startOffset);
+    if (found)
+        return found;
+
+    found = firstSlaveAt(renderNode->nextSibling(), y, startNode, startOffset);
+    if (found)
+        return found;
+    
+    return false;
+}
+
+static bool lastSlaveAt (khtml::RenderObject *renderNode, int y, DOM::NodeImpl*&endNode, int &endOffset)
+{
+    bool found = false;
+    
+    if (renderNode == 0)
+        return false;
+        
+    found = lastSlaveAt(renderNode->nextSibling(), y, endNode, endOffset);
+    if (found)
+        return found;
+    
+    found =  lastSlaveAt(renderNode->firstChild(), y, endNode, endOffset);
+    if (found)
+        return found;
+
+    khtml::RenderText *textRenderer =  static_cast<khtml::RenderText *>(renderNode);
+    khtml::TextSlaveArray slaves = textRenderer->textSlaves();
+    for (int i = 0; i < (int)slaves.count(); i++){
+        if (slaves[i]->m_y == y){
+            endNode = textRenderer->element();
+            endOffset = slaves[i]->m_start + slaves[i]->m_len;
+            return true;
+        }
+    }
+    
+    return false;
+}
+
+void KHTMLPart::khtmlMouseTripleClickEvent( khtml::MouseTripleClickEvent *event )
 {
+    QMouseEvent *_mouse = event->qmouseEvent();
+    DOM::Node innerNode = event->innerNode();
+    
+    d->m_selectionStart = 0;
+    d->m_selectionEnd = 0;
+    d->m_startOffset = 0;
+    d->m_endOffset = 0;
+
+    if ( _mouse->button() == LeftButton ){
+        if ( !innerNode.isNull()  && innerNode.handle()->renderer()) {
+            int startOffset = 0;
+            DOM::NodeImpl* node = 0;
+            
+            innerNode.handle()->renderer()->checkSelectionPoint( event->x(), event->y(),
+                                        event->absX()-innerNode.handle()->renderer()->xPos(),
+                                        event->absY()-innerNode.handle()->renderer()->yPos(), 
+                                        node, startOffset);
+            
+            if (node && (node->nodeType() == Node::TEXT_NODE || node->nodeType() == Node::CDATA_SECTION_NODE)){
+                int pos;
+                int selectionPointY;
+                khtml::RenderText *renderer = static_cast<khtml::RenderText *>(node->renderer());
+                khtml::TextSlave * slave = renderer->findTextSlave( startOffset, pos );
+                DOMString t = node->nodeValue();
+                DOM::NodeImpl* startNode;
+                DOM::NodeImpl* endNode;
+                int endOffset;
+                
+                selectionPointY = slave->m_y;
+                
+                // Go up to first non-inline element.
+                khtml::RenderObject *renderNode = renderer;
+                while (renderNode && renderNode->isInline())
+                    renderNode = renderNode->parent();
+                
+                renderNode = renderNode->firstChild();
+                
+                // Look for all the first child in the block that is on the same line
+                // as the selection point.
+                firstSlaveAt (renderNode, selectionPointY, startNode, startOffset);
+
+                // Look for all the last child in the block that is on the same line
+                // as the selection point.
+                lastSlaveAt (renderNode, selectionPointY, endNode, endOffset);
+                
+                d->m_startBeforeEnd = true;
+                d->m_selectionStart = startNode;
+                d->m_startOffset = startOffset;
+                d->m_selectionEnd = endNode;
+                d->m_endOffset = endOffset;
+            }
+        }
+    }
+    if (d->m_selectionStart == 0)
+        d->m_doc->clearSelection();
+    else
+        d->m_doc->setSelection(d->m_selectionStart.handle(), d->m_startOffset,
+                d->m_selectionEnd.handle(),d->m_endOffset);
+                
+    emitSelectionChanged();
+    startAutoScroll();
 }
 #endif
 
diff --git a/WebCore/khtml/khtml_part.h b/WebCore/khtml/khtml_part.h
index 4dd5f9f..99af0c1 100644
--- a/WebCore/khtml/khtml_part.h
+++ b/WebCore/khtml/khtml_part.h
@@ -73,7 +73,9 @@ namespace khtml
   class MouseEvent;
   class MousePressEvent;
   class MouseDoubleClickEvent;
+#ifdef APPLE_CHANGES
   class MouseTripleClickEvent;
+#endif
   class MouseMoveEvent;
   class MouseReleaseEvent;
   class DrawContentsEvent;
diff --git a/WebCore/khtml/rendering/render_text.h b/WebCore/khtml/rendering/render_text.h
index d334034..21eb369 100644
--- a/WebCore/khtml/rendering/render_text.h
+++ b/WebCore/khtml/rendering/render_text.h
@@ -190,10 +190,18 @@ public:
     DOM::TextImpl *element() const
     { return static_cast<DOM::TextImpl*>(RenderObject::element()); }
 
+#ifdef APPLE_CHANGES
+    TextSlave * findTextSlave( int offset, int &pos );
+    TextSlaveArray textSlaves() { return m_lines; }
+#endif
+
 protected:
     void printTextOutline(QPainter *p, int tx, int ty, const QRect &prevLine, const QRect &thisLine, const QRect &nextLine);
 
+#ifndef APPLE_CHANGES
     TextSlave * findTextSlave( int offset, int &pos );
+    
+#endif
 
 protected: // members
     TextSlaveArray m_lines;
diff --git a/WebCore/kwq/WebCoreBridge.mm b/WebCore/kwq/WebCoreBridge.mm
index 646446a..6a53f34 100644
--- a/WebCore/kwq/WebCoreBridge.mm
+++ b/WebCore/kwq/WebCoreBridge.mm
@@ -379,8 +379,8 @@ using khtml::RenderPart;
             part->impl->view()->viewportMouseDoubleClickEvent(&doubleClickEvent);
         }
         else if (clickCount > 0 && clickCount % 3 == 0) {
-            QMouseEvent doubleClickEvent(QEvent::MouseButtonDblClick, QPoint(p), button, state, clickCount);
-            part->impl->view()->viewportMouseTripleClickEvent(&doubleClickEvent);
+            QMouseEvent releaseEvent(QEvent::MouseButtonRelease, QPoint(p), button, state, clickCount);
+            part->impl->view()->viewportMouseTripleClickEvent(&releaseEvent);
         }
         else {
             QMouseEvent releaseEvent(QEvent::MouseButtonRelease, QPoint(p), button, state, clickCount);

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list