[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:46 UTC 2009


The following commit has been merged in the debian/unstable branch:
commit 8b03f6fc3835430d273cf49e3eb41c92d508af02
Author: rjw <rjw at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Sat Sep 21 00:58:01 2002 +0000

            Made double and triple click selection behave like
            like other selection in OS X.  That is, selection happens
            on mouse down, not mouse up, and can be extended by
            further dragging.  Triple click followed by dragging extends
            the selection a line at a time.
    
            * khtml/khtml_events.cpp:
            * khtml/khtml_events.h:
            * khtml/khtml_part.cpp:
            (KHTMLPart::customEvent):
            (firstSlaveAt):
            (lastSlaveAt):
            (startAndEndLineNodesIncludingNode):
            (KHTMLPart::khtmlMousePressEvent):
            (KHTMLPart::khtmlMouseDoubleClickEvent):
            (KHTMLPart::khtmlMouseMoveEvent):
            * khtml/khtml_part.h:
            * khtml/khtmlpart_p.h:
            * khtml/khtmlview.cpp:
            * khtml/khtmlview.h:
            * khtml/xml/dom_elementimpl.cpp:
            (ElementImpl::setAttribute):
            * kwq/WebCoreBridge.mm:
            (-[WebCoreBridge mouseUp:]):
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@2110 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog-2002-12-03 b/WebCore/ChangeLog-2002-12-03
index f02a2ea..35f8598 100644
--- a/WebCore/ChangeLog-2002-12-03
+++ b/WebCore/ChangeLog-2002-12-03
@@ -1,3 +1,30 @@
+2002-09-20  Richard Williamson   <rjw at apple.com>
+
+        Made double and triple click selection behave like
+        like other selection in OS X.  That is, selection happens
+        on mouse down, not mouse up, and can be extended by
+        further dragging.  Triple click followed by dragging extends
+        the selection a line at a time.
+        
+        * khtml/khtml_events.cpp:
+        * khtml/khtml_events.h:
+        * khtml/khtml_part.cpp:
+        (KHTMLPart::customEvent):
+        (firstSlaveAt):
+        (lastSlaveAt):
+        (startAndEndLineNodesIncludingNode):
+        (KHTMLPart::khtmlMousePressEvent):
+        (KHTMLPart::khtmlMouseDoubleClickEvent):
+        (KHTMLPart::khtmlMouseMoveEvent):
+        * khtml/khtml_part.h:
+        * khtml/khtmlpart_p.h:
+        * khtml/khtmlview.cpp:
+        * khtml/khtmlview.h:
+        * khtml/xml/dom_elementimpl.cpp:
+        (ElementImpl::setAttribute):
+        * kwq/WebCoreBridge.mm:
+        (-[WebCoreBridge mouseUp:]):
+
 2002-09-20  Darin Adler  <darin at apple.com>
 
         * kwq/KWQFileButton.h: Add an icon.
diff --git a/WebCore/ChangeLog-2003-10-25 b/WebCore/ChangeLog-2003-10-25
index f02a2ea..35f8598 100644
--- a/WebCore/ChangeLog-2003-10-25
+++ b/WebCore/ChangeLog-2003-10-25
@@ -1,3 +1,30 @@
+2002-09-20  Richard Williamson   <rjw at apple.com>
+
+        Made double and triple click selection behave like
+        like other selection in OS X.  That is, selection happens
+        on mouse down, not mouse up, and can be extended by
+        further dragging.  Triple click followed by dragging extends
+        the selection a line at a time.
+        
+        * khtml/khtml_events.cpp:
+        * khtml/khtml_events.h:
+        * khtml/khtml_part.cpp:
+        (KHTMLPart::customEvent):
+        (firstSlaveAt):
+        (lastSlaveAt):
+        (startAndEndLineNodesIncludingNode):
+        (KHTMLPart::khtmlMousePressEvent):
+        (KHTMLPart::khtmlMouseDoubleClickEvent):
+        (KHTMLPart::khtmlMouseMoveEvent):
+        * khtml/khtml_part.h:
+        * khtml/khtmlpart_p.h:
+        * khtml/khtmlview.cpp:
+        * khtml/khtmlview.h:
+        * khtml/xml/dom_elementimpl.cpp:
+        (ElementImpl::setAttribute):
+        * kwq/WebCoreBridge.mm:
+        (-[WebCoreBridge mouseUp:]):
+
 2002-09-20  Darin Adler  <darin at apple.com>
 
         * kwq/KWQFileButton.h: Add an icon.
diff --git a/WebCore/ChangeLog-2005-08-23 b/WebCore/ChangeLog-2005-08-23
index f02a2ea..35f8598 100644
--- a/WebCore/ChangeLog-2005-08-23
+++ b/WebCore/ChangeLog-2005-08-23
@@ -1,3 +1,30 @@
+2002-09-20  Richard Williamson   <rjw at apple.com>
+
+        Made double and triple click selection behave like
+        like other selection in OS X.  That is, selection happens
+        on mouse down, not mouse up, and can be extended by
+        further dragging.  Triple click followed by dragging extends
+        the selection a line at a time.
+        
+        * khtml/khtml_events.cpp:
+        * khtml/khtml_events.h:
+        * khtml/khtml_part.cpp:
+        (KHTMLPart::customEvent):
+        (firstSlaveAt):
+        (lastSlaveAt):
+        (startAndEndLineNodesIncludingNode):
+        (KHTMLPart::khtmlMousePressEvent):
+        (KHTMLPart::khtmlMouseDoubleClickEvent):
+        (KHTMLPart::khtmlMouseMoveEvent):
+        * khtml/khtml_part.h:
+        * khtml/khtmlpart_p.h:
+        * khtml/khtmlview.cpp:
+        * khtml/khtmlview.h:
+        * khtml/xml/dom_elementimpl.cpp:
+        (ElementImpl::setAttribute):
+        * kwq/WebCoreBridge.mm:
+        (-[WebCoreBridge mouseUp:]):
+
 2002-09-20  Darin Adler  <darin at apple.com>
 
         * kwq/KWQFileButton.h: Add an icon.
diff --git a/WebCore/khtml/khtml_events.cpp b/WebCore/khtml/khtml_events.cpp
index ca50f72..9eede6b 100644
--- a/WebCore/khtml/khtml_events.cpp
+++ b/WebCore/khtml/khtml_events.cpp
@@ -60,10 +60,6 @@ const char *khtml::MousePressEvent::s_strMousePressEvent = "khtml/Events/MousePr
 
 const char *khtml::MouseDoubleClickEvent::s_strMouseDoubleClickEvent = "khtml/Events/MouseDoubleClickEvent";
 
-#ifdef APPLE_CHANGES
-const char *khtml::MouseTripleClickEvent::s_strMouseTripleClickEvent = "khtml/Events/MouseTripleClickEvent";
-#endif
-
 const char *khtml::MouseMoveEvent::s_strMouseMoveEvent = "khtml/Events/MouseMoveEvent";
 
 const char *khtml::MouseReleaseEvent::s_strMouseReleaseEvent = "khtml/Events/MouseReleaseEvent";
diff --git a/WebCore/khtml/khtml_events.h b/WebCore/khtml/khtml_events.h
index 78db9c4..e9ed5e7 100644
--- a/WebCore/khtml/khtml_events.h
+++ b/WebCore/khtml/khtml_events.h
@@ -92,23 +92,6 @@ private:
   static const char *s_strMouseDoubleClickEvent;
 };
 
-#ifdef APPLE_CHANGES
-class MouseTripleClickEvent : public MouseEvent
-{
-public:
-  MouseTripleClickEvent( QMouseEvent *mouseEvent, int x, int y,
-                         const DOM::DOMString &url, const DOM::DOMString& target,
-		         const DOM::Node &innerNode)
-  : MouseEvent( s_strMouseTripleClickEvent, mouseEvent, x, y, url, target, innerNode )
-  {}
-
-  static bool test( const QEvent *event )
-  { return KParts::Event::test( event, s_strMouseTripleClickEvent ); }
-
-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 bc5d9a6..b22bc1a 100644
--- a/WebCore/khtml/khtml_part.cpp
+++ b/WebCore/khtml/khtml_part.cpp
@@ -3902,14 +3902,6 @@ 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 ) );
@@ -3931,145 +3923,23 @@ void KHTMLPart::customEvent( QCustomEvent *event )
   KParts::ReadOnlyPart::customEvent( event );
 }
 
-void KHTMLPart::khtmlMousePressEvent( khtml::MousePressEvent *event )
-{
-  DOM::DOMString url = event->url();
-  QMouseEvent *_mouse = event->qmouseEvent();
-  DOM::Node innerNode = event->innerNode();
-  d->m_mousePressNode = innerNode;
-
-   d->m_dragStartPos = _mouse->pos();
-
-   if ( !event->url().isNull() ) {
-     d->m_strSelectedURL = event->url().string();
-     d->m_strSelectedURLTarget = event->target().string();
-   }
-   else
-     d->m_strSelectedURL = d->m_strSelectedURLTarget = QString::null;
-
-  if ( _mouse->button() == LeftButton ||
-       _mouse->button() == MidButton )
-  {
-    d->m_bMousePressed = true;
-
-#ifndef KHTML_NO_SELECTION
-    if ( _mouse->button() == LeftButton )
-    {
-      if ( !innerNode.isNull()  && innerNode.handle()->renderer()) {
-          int offset = 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, offset);
-
-          d->m_selectionStart = node;
-          d->m_startOffset = offset;
-//           kdDebug(6005) << "KHTMLPart::khtmlMousePressEvent selectionStart=" << d->m_selectionStart.handle()->renderer()
-//                         << " offset=" << d->m_startOffset << endl;
-          d->m_selectionEnd = d->m_selectionStart;
-          d->m_endOffset = d->m_startOffset;
-          d->m_doc->clearSelection();
-      }
-      else
-      {
-        d->m_selectionStart = DOM::Node();
-        d->m_selectionEnd = DOM::Node();
-      }
-      emitSelectionChanged();
-      startAutoScroll();
-    }
-#else
-    d->m_dragLastPos = _mouse->globalPos();
-#endif
-  }
-
-  if ( _mouse->button() == RightButton )
-  {
-    popupMenu( d->m_strSelectedURL );
-    d->m_strSelectedURL = d->m_strSelectedURLTarget = QString::null;
-  }
-}
-
-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
-static bool firstSlaveAt (khtml::RenderObject *renderNode, int y, DOM::NodeImpl*&startNode, int &startOffset)
+static bool firstSlaveAt (khtml::RenderObject *renderNode, int y, DOM::NodeImpl*&startNode, long &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;
+    if (renderNode->isText()){
+        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;
+            }
         }
     }
     
@@ -4084,7 +3954,7 @@ static bool firstSlaveAt (khtml::RenderObject *renderNode, int y, DOM::NodeImpl*
     return false;
 }
 
-static bool lastSlaveAt (khtml::RenderObject *renderNode, int y, DOM::NodeImpl*&endNode, int &endOffset)
+static bool lastSlaveAt (khtml::RenderObject *renderNode, int y, DOM::NodeImpl*&endNode, long &endOffset)
 {
     bool found = false;
     
@@ -4099,84 +3969,234 @@ static bool lastSlaveAt (khtml::RenderObject *renderNode, int y, DOM::NodeImpl*&
     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;
+    if (renderNode->isText()){
+        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 )
+static bool startAndEndLineNodesIncludingNode (DOM::NodeImpl *node, int offset, DOM::Node &_startNode, long &startOffset, DOM::Node &_endNode, long &endOffset)
 {
-    QMouseEvent *_mouse = event->qmouseEvent();
-    DOM::Node innerNode = event->innerNode();
+    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( offset, pos );
+        DOMString t = node->nodeValue();
+        DOM::NodeImpl* startNode;
+        DOM::NodeImpl* endNode;
+        
+        if (!slave)
+            return false;
+            
+        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);
     
-    d->m_selectionStart = 0;
-    d->m_selectionEnd = 0;
-    d->m_startOffset = 0;
-    d->m_endOffset = 0;
+        // Look for all the last child in the block that is on the same line
+        // as the selection point.
+        lastSlaveAt (renderNode, selectionPointY, endNode, endOffset);
+        
+        _startNode = startNode;
+        _endNode = endNode;
+        return true;
+    }
+    return false;
+}
+#endif
 
-    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;
+void KHTMLPart::khtmlMousePressEvent( khtml::MousePressEvent *event )
+{
+  DOM::DOMString url = event->url();
+  QMouseEvent *_mouse = event->qmouseEvent();
+  DOM::Node innerNode = event->innerNode();
+  d->m_mousePressNode = innerNode;
+    
+   d->m_dragStartPos = _mouse->pos();
+
+   if ( !event->url().isNull() ) {
+     d->m_strSelectedURL = event->url().string();
+     d->m_strSelectedURLTarget = event->target().string();
+   }
+   else
+     d->m_strSelectedURL = d->m_strSelectedURLTarget = QString::null;
+
+  if ( _mouse->button() == LeftButton ||
+       _mouse->button() == MidButton )
+  {
+    d->m_bMousePressed = true;
+
+#ifndef KHTML_NO_SELECTION
+#ifdef APPLE_CHANGES
+    d->m_selectionInitiatedWithDoubleClick = false;
+    d->m_selectionInitiatedWithTripleClick = false;
+
+    if (event->qmouseEvent()->clickCount() == 2){
+        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;
                 
-                // Go up to first non-inline element.
-                khtml::RenderObject *renderNode = renderer;
-                while (renderNode && renderNode->isInline())
-                    renderNode = renderNode->parent();
+                innerNode.handle()->renderer()->checkSelectionPoint( event->x(), event->y(),
+                                            event->absX()-innerNode.handle()->renderer()->xPos(),
+                                            event->absY()-innerNode.handle()->renderer()->yPos(), 
+                                            node, startOffset);
                 
-                renderNode = renderNode->firstChild();
+                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_initialSelectionStart = d->m_selectionStart;
+            d->m_initialSelectionStartOffset = d->m_startOffset;
+            d->m_initialSelectionEnd = d->m_selectionEnd;
+            d->m_initialSelectionEndOffset = d->m_endOffset;
+            d->m_selectionInitiatedWithDoubleClick = true;
+            d->m_doc->setSelection(d->m_selectionStart.handle(), d->m_startOffset,
+                    d->m_selectionEnd.handle(),d->m_endOffset);
+        }
+        emitSelectionChanged();
+        startAutoScroll();
+    }
+    else if (event->qmouseEvent()->clickCount() == 3){
+        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;
                 
-                // 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);
+                innerNode.handle()->renderer()->checkSelectionPoint( event->x(), event->y(),
+                                            event->absX()-innerNode.handle()->renderer()->xPos(),
+                                            event->absY()-innerNode.handle()->renderer()->yPos(), 
+                                            node, startOffset);
                 
-                d->m_startBeforeEnd = true;
-                d->m_selectionStart = startNode;
-                d->m_startOffset = startOffset;
-                d->m_selectionEnd = endNode;
-                d->m_endOffset = endOffset;
+                startAndEndLineNodesIncludingNode (node, startOffset, d->m_selectionStart, d->m_startOffset, d->m_selectionEnd, d->m_endOffset);
             }
         }
+        if (d->m_selectionStart == 0)
+            d->m_doc->clearSelection();
+        else {
+            d->m_initialSelectionStart = d->m_selectionStart;
+            d->m_initialSelectionStartOffset = d->m_startOffset;
+            d->m_initialSelectionEnd = d->m_selectionEnd;
+            d->m_initialSelectionEndOffset = d->m_endOffset;
+            d->m_selectionInitiatedWithTripleClick = true;
+            d->m_doc->setSelection(d->m_selectionStart.handle(), d->m_startOffset,
+                    d->m_selectionEnd.handle(),d->m_endOffset);
+        }
+                    
+        emitSelectionChanged();
+        startAutoScroll();
     }
-    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);
+    else {
+#endif
+        if ( _mouse->button() == LeftButton )
+        {
+            if ( !innerNode.isNull()  && innerNode.handle()->renderer()) {
+                int offset = 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, offset);
                 
-    emitSelectionChanged();
-    startAutoScroll();
-}
+                d->m_selectionStart = node;
+                d->m_startOffset = offset;
+                //           kdDebug(6005) << "KHTMLPart::khtmlMousePressEvent selectionStart=" << d->m_selectionStart.handle()->renderer()
+                //                         << " offset=" << d->m_startOffset << endl;
+                d->m_selectionEnd = d->m_selectionStart;
+                d->m_endOffset = d->m_startOffset;
+                d->m_doc->clearSelection();
+            }
+            else
+            {
+                d->m_selectionStart = DOM::Node();
+                d->m_selectionEnd = DOM::Node();
+            }
+            emitSelectionChanged();
+            startAutoScroll();
+        }
+#ifdef APPLE_CHANGES
+    }
 #endif
+#else
+    d->m_dragLastPos = _mouse->globalPos();
+#endif
+  }
+
+  if ( _mouse->button() == RightButton )
+  {
+    popupMenu( d->m_strSelectedURL );
+    d->m_strSelectedURL = d->m_strSelectedURLTarget = QString::null;
+  }
+}
+
+void KHTMLPart::khtmlMouseDoubleClickEvent( khtml::MouseDoubleClickEvent *event)
+{
+}
 
 void KHTMLPart::khtmlMouseMoveEvent( khtml::MouseMoveEvent *event )
 {
@@ -4296,66 +4316,112 @@ void KHTMLPart::khtmlMouseMoveEvent( khtml::MouseMoveEvent *event )
     // selection stuff
     if( d->m_bMousePressed && innerNode.handle() && innerNode.handle()->renderer() &&
         ( _mouse->state() == LeftButton )) {
-      int offset;
-      //kdDebug(6000) << "KHTMLPart::khtmlMouseMoveEvent x=" << event->x() << " y=" << event->y()
-      //              << " nodeAbsX=" << event->nodeAbsX() << " nodeAbsY=" << event->nodeAbsY()
-      //              << endl;
-      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, offset);
-       d->m_selectionEnd = node;
-       d->m_endOffset = offset;
-//        if (d->m_selectionEnd.handle() && d->m_selectionEnd.handle()->renderer())
-//          kdDebug( 6000 ) << "setting end of selection to " << d->m_selectionEnd.handle()->renderer() << "/"
-//                          << d->m_endOffset << endl;
-
-      // we have to get to know if end is before start or not...
-      DOM::Node n = d->m_selectionStart;
-      d->m_startBeforeEnd = false;
-      while(!n.isNull()) {
-        if(n == d->m_selectionEnd) {
-          d->m_startBeforeEnd = true;
-          break;
+        int offset = -1;
+        //kdDebug(6000) << "KHTMLPart::khtmlMouseMoveEvent x=" << event->x() << " y=" << event->y()
+        //              << " nodeAbsX=" << event->nodeAbsX() << " nodeAbsY=" << event->nodeAbsY()
+        //              << endl;
+        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, offset);
+        //        if (d->m_selectionEnd.handle() && d->m_selectionEnd.handle()->renderer())
+        //          kdDebug( 6000 ) << "setting end of selection to " << d->m_selectionEnd.handle()->renderer() << "/"
+        //                          << d->m_endOffset << endl;
+        
+        // we have to get to know if end is before start or not...
+        DOM::Node n = d->m_selectionStart;
+        d->m_startBeforeEnd = false;
+        while(!n.isNull()) {
+            if(n == node) {
+                d->m_startBeforeEnd = true;
+                break;
+            }
+            DOM::Node next = n.firstChild();
+            if(next.isNull()) next = n.nextSibling();
+            while( next.isNull() && !n.parentNode().isNull() ) {
+                n = n.parentNode();
+                next = n.nextSibling();
+            }
+            n = next;
         }
-        DOM::Node next = n.firstChild();
-        if(next.isNull()) next = n.nextSibling();
-        while( next.isNull() && !n.parentNode().isNull() ) {
-          n = n.parentNode();
-          next = n.nextSibling();
+#ifdef APPLE_CHANGES        
+        if ( d->m_selectionInitiatedWithDoubleClick){
+            if (d->m_startBeforeEnd) {
+                if (node == d->m_initialSelectionStart.handle() && node == d->m_initialSelectionEnd.handle()){
+                    d->m_startOffset = MIN(d->m_initialSelectionStartOffset, offset);
+                    offset = MAX(d->m_initialSelectionEndOffset, offset);
+                }
+                else {
+                    d->m_selectionStart = d->m_initialSelectionStart;
+                    d->m_startOffset = d->m_initialSelectionStartOffset;
+                }
+            }
+            else {
+                d->m_selectionStart = d->m_initialSelectionEnd;
+                d->m_startOffset = d->m_initialSelectionEndOffset;
+            }
+            d->m_selectionEnd = node;
+            d->m_endOffset = offset;
+        }
+        else if (d->m_selectionInitiatedWithTripleClick ){
+            DOM::Node lineStart, lineEnd;
+            long lineStartOffset, lineEndOffset;
+            
+            if (startAndEndLineNodesIncludingNode (node, offset, lineStart, lineStartOffset, lineEnd, lineEndOffset)){
+                if (d->m_startBeforeEnd) {
+                    if (node == d->m_initialSelectionStart.handle() && node == lineEnd.handle()){
+                        d->m_selectionStart = d->m_initialSelectionStart;
+                        d->m_startOffset = MIN(lineStartOffset, d->m_initialSelectionStartOffset);
+                        d->m_selectionEnd = lineEnd;
+                        d->m_endOffset = MAX(lineEndOffset, d->m_initialSelectionEndOffset);
+                    }
+                    else {
+                        d->m_selectionStart = d->m_initialSelectionStart;
+                        d->m_startOffset = d->m_initialSelectionStartOffset;
+                        d->m_selectionEnd = lineEnd;
+                        d->m_endOffset = lineEndOffset;
+                    }
+                }
+                else {
+                    d->m_selectionStart = d->m_initialSelectionEnd;
+                    d->m_startOffset = d->m_initialSelectionEndOffset;
+                    d->m_selectionEnd = lineStart;
+                    d->m_endOffset = lineStartOffset;
+                }
+            }
+        }
+        else {
+            d->m_selectionEnd = node;
+            d->m_endOffset = offset;
         }
-        n = next;
-        //d->m_view->viewport()->repaint(false);
-      }
-
-      if ( !d->m_selectionStart.isNull() && !d->m_selectionEnd.isNull() )
-      {
-        if (d->m_selectionEnd == d->m_selectionStart && d->m_endOffset < d->m_startOffset)
-          d->m_doc
-            ->setSelection(d->m_selectionStart.handle(),d->m_endOffset,
-                           d->m_selectionEnd.handle(),d->m_startOffset);
-        else if (d->m_startBeforeEnd)
-          d->m_doc
-            ->setSelection(d->m_selectionStart.handle(),d->m_startOffset,
-                           d->m_selectionEnd.handle(),d->m_endOffset);
-        else
-          d->m_doc
-            ->setSelection(d->m_selectionEnd.handle(),d->m_endOffset,
-                           d->m_selectionStart.handle(),d->m_startOffset);
-      }
 #else
-      if ( d->m_doc && d->m_view ) {
-        QPoint diff( _mouse->globalPos() - d->m_dragLastPos );
-
-        if ( abs( diff.x() ) > 64 || abs( diff.y() ) > 64 ) {
-          d->m_view->scrollBy( -diff.x(), -diff.y() );
-          d->m_dragLastPos = _mouse->globalPos();
+        d->m_selectionEnd = node;
+        d->m_endOffset = offset;
+#endif        
+        if ( !d->m_selectionStart.isNull() && !d->m_selectionEnd.isNull() )
+        {
+            if (d->m_selectionEnd == d->m_selectionStart && d->m_endOffset < d->m_startOffset)
+                d->m_doc->setSelection(d->m_selectionStart.handle(),d->m_endOffset,
+                                d->m_selectionEnd.handle(),d->m_startOffset);
+            else if (d->m_startBeforeEnd)
+                d->m_doc->setSelection(d->m_selectionStart.handle(),d->m_startOffset,
+                                d->m_selectionEnd.handle(),d->m_endOffset);
+            else
+                d->m_doc->setSelection(d->m_selectionEnd.handle(),d->m_endOffset,
+                                d->m_selectionStart.handle(),d->m_startOffset);
         }
-      }   
+#else
+        if ( d->m_doc && d->m_view ) {
+            QPoint diff( _mouse->globalPos() - d->m_dragLastPos );
+            
+            if ( abs( diff.x() ) > 64 || abs( diff.y() ) > 64 ) {
+                d->m_view->scrollBy( -diff.x(), -diff.y() );
+                d->m_dragLastPos = _mouse->globalPos();
+            }
+        }   
 #endif
+        }
     }
-  }
-
 }
 
 void KHTMLPart::khtmlMouseReleaseEvent( khtml::MouseReleaseEvent *event )
diff --git a/WebCore/khtml/khtml_part.h b/WebCore/khtml/khtml_part.h
index 99af0c1..9265672 100644
--- a/WebCore/khtml/khtml_part.h
+++ b/WebCore/khtml/khtml_part.h
@@ -73,9 +73,6 @@ namespace khtml
   class MouseEvent;
   class MousePressEvent;
   class MouseDoubleClickEvent;
-#ifdef APPLE_CHANGES
-  class MouseTripleClickEvent;
-#endif
   class MouseMoveEvent;
   class MouseReleaseEvent;
   class DrawContentsEvent;
@@ -770,10 +767,6 @@ protected:
    */
   virtual void khtmlMouseDoubleClickEvent( khtml::MouseDoubleClickEvent * );
 
-#ifdef APPLE_CHANGES
-  virtual void khtmlMouseTripleClickEvent( khtml::MouseTripleClickEvent * );
-#endif
-
   /**
    * Eventhandler for the khtml::MouseDoubleMoveEvent.
    */
diff --git a/WebCore/khtml/khtmlpart_p.h b/WebCore/khtml/khtmlpart_p.h
index 62be355..4f3eeb0 100644
--- a/WebCore/khtml/khtmlpart_p.h
+++ b/WebCore/khtml/khtmlpart_p.h
@@ -317,6 +317,14 @@ public:
   bool m_bMousePressed;
   DOM::Node m_mousePressNode; //node under the mouse when the mouse was pressed (set in the mouse handler)
 
+#ifdef APPLE_CHANGES
+    DOM::Node m_initialSelectionStart;
+    long m_initialSelectionStartOffset;
+    DOM::Node m_initialSelectionEnd;
+    long m_initialSelectionEndOffset;
+    bool m_selectionInitiatedWithDoubleClick:1;
+    bool m_selectionInitiatedWithTripleClick:1;
+#endif
   DOM::Node m_selectionStart;
   long m_startOffset;
   DOM::Node m_selectionEnd;
diff --git a/WebCore/khtml/khtmlview.cpp b/WebCore/khtml/khtmlview.cpp
index 18b6eeb..3fb1b0e 100644
--- a/WebCore/khtml/khtmlview.cpp
+++ b/WebCore/khtml/khtmlview.cpp
@@ -457,40 +457,6 @@ void KHTMLView::viewportMousePressEvent( QMouseEvent *_mouse )
     }
 }
 
-#ifdef APPLE_CHANGES
-void KHTMLView::viewportMouseTripleClickEvent( QMouseEvent *_mouse )
-{
-    if ( !m_part->xmlDocImpl() ) return;
-
-    int xm, ym;
-    viewportToContents(_mouse->x(), _mouse->y(), xm, ym);
-
-    //kdDebug( 6000 ) << "\nmouseReleaseEvent: x=" << xm << ", y=" << ym << endl;
-
-    DOM::NodeImpl::MouseEvent mev( _mouse->stateAfter(), DOM::NodeImpl::MouseRelease );
-    m_part->xmlDocImpl()->prepareMouseEvent( false, xm, ym, &mev );
-
-    bool swallowEvent = dispatchMouseEvent(EventImpl::MOUSEUP_EVENT,mev.innerNode.handle(),true,
-                                           d->clickCount,_mouse,false,DOM::NodeImpl::MouseRelease);
-
-    if (d->clickCount > 0 &&
-        QPoint(d->clickX-xm,d->clickY-ym).manhattanLength() <= QApplication::startDragDistance())
-	dispatchMouseEvent(EventImpl::CLICK_EVENT,mev.innerNode.handle(),true,
-			   d->clickCount,_mouse,true,DOM::NodeImpl::MouseRelease);
-
-    if (mev.innerNode.handle())
-	mev.innerNode.handle()->setPressed(false);
-
-    if (!swallowEvent) {
-	khtml::MouseReleaseEvent event( _mouse, xm, ym, mev.url, mev.target, mev.innerNode );
-	QApplication::sendEvent( m_part, &event );
-
-	khtml::MouseTripleClickEvent event2( _mouse, xm, ym, mev.url, mev.target, mev.innerNode );
-	QApplication::sendEvent( m_part, &event2 );
-    }
-}
-#endif    
-
 void KHTMLView::viewportMouseDoubleClickEvent( QMouseEvent *_mouse )
 {
     if(!m_part->xmlDocImpl()) return;
diff --git a/WebCore/khtml/khtmlview.h b/WebCore/khtml/khtmlview.h
index 7eff4bf..6feaaa7 100644
--- a/WebCore/khtml/khtmlview.h
+++ b/WebCore/khtml/khtmlview.h
@@ -166,9 +166,6 @@ public:
     virtual void viewportMousePressEvent( QMouseEvent * );
     virtual void focusOutEvent( QFocusEvent * );
     virtual void viewportMouseDoubleClickEvent( QMouseEvent * );
-#ifdef APPLE_CHANGES
-    virtual void viewportMouseTripleClickEvent( QMouseEvent * );
-#endif
     virtual void viewportMouseMoveEvent(QMouseEvent *);
     virtual void viewportMouseReleaseEvent(QMouseEvent *);
 #ifndef QT_NO_WHEELEVENT
diff --git a/WebCore/khtml/xml/dom_elementimpl.cpp b/WebCore/khtml/xml/dom_elementimpl.cpp
index ba43e1b..c9d8049 100644
--- a/WebCore/khtml/xml/dom_elementimpl.cpp
+++ b/WebCore/khtml/xml/dom_elementimpl.cpp
@@ -223,6 +223,8 @@ void ElementImpl::setAttribute(NodeImpl::Id id, DOMStringImpl* value, int &excep
         return;
     }
 
+    printf ("setAttribute %s\n", (char *)value);
+    
     if (old && !value)
         namedAttrMap->removeAttribute(id);
     else if (!old && value)
diff --git a/WebCore/kwq/WebCoreBridge.mm b/WebCore/kwq/WebCoreBridge.mm
index 6a53f34..2c8ec8c 100644
--- a/WebCore/kwq/WebCoreBridge.mm
+++ b/WebCore/kwq/WebCoreBridge.mm
@@ -378,10 +378,6 @@ using khtml::RenderPart;
             QMouseEvent doubleClickEvent(QEvent::MouseButtonDblClick, QPoint(p), button, state, clickCount);
             part->impl->view()->viewportMouseDoubleClickEvent(&doubleClickEvent);
         }
-        else if (clickCount > 0 && clickCount % 3 == 0) {
-            QMouseEvent releaseEvent(QEvent::MouseButtonRelease, QPoint(p), button, state, clickCount);
-            part->impl->view()->viewportMouseTripleClickEvent(&releaseEvent);
-        }
         else {
             QMouseEvent releaseEvent(QEvent::MouseButtonRelease, QPoint(p), button, state, clickCount);
             part->impl->view()->viewportMouseReleaseEvent(&releaseEvent);

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list