[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