[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.15-1-40151-g37bb677
cblu
cblu at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 08:24:58 UTC 2009
The following commit has been merged in the debian/unstable branch:
commit e6c0ce365423f17dc4e5a5de7e949a185b2e038c
Author: cblu <cblu at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Mon Feb 2 17:47:31 2004 +0000
WebCore:
Fixed: <rdar://problem/3546379>: support for editing via drag & drop
Reviewed by kocienda.
* khtml/xml/dom_docimpl.cpp:
(DocumentImpl::deleteSelection): fixed a crash I encountered while attempting to delete and empty selection
* kwq/WebCoreBridge.h:
* kwq/WebCoreBridge.mm:
(-[WebCoreBridge isSelectionEditable]): renamed from isEditable
(-[WebCoreBridge moveCaretToPoint:]): new
(-[WebCoreBridge elementAtPoint:]): added support for WebCoreElementHTMLStringKey and WebCoreElementIsEditableKey
WebKit:
Fixed: <rdar://problem/3546379>: support for editing via drag & drop
Reviewed by kocienda.
* Misc.subproj/WebNSViewExtras.h:
* Misc.subproj/WebNSViewExtras.m:
(-[NSView _web_dragImage:fileWrapper:rect:URL:title:HTMLString:event:]): added a HTMLString argument so that we retain all attributes when dragging images
* WebView.subproj/WebHTMLView.m:
(-[WebHTMLView _canDelete]): call renamed isSelectionEditable
(-[WebHTMLView _canPaste]): call renamed isSelectionEditable
(-[WebHTMLView _pasteHTMLFromPasteboard:]): new, factored out from paste:
(-[WebHTMLView _handleMouseDragged:]): removed code that returned early if we were loading, this kind of protection is no longer needed since we now retain the view while dragging, call renamed _web_dragImage
(-[WebHTMLView initWithFrame:]): register for drop types
(-[WebHTMLView paste:]): call _pasteHTMLFromPasteboard
(-[WebHTMLView dragImage:at:offset:event:pasteboard:source:slideBack:]): set new isDragging BOOL to YES
(-[WebHTMLView draggedImage:endedAt:operation:]): set new isDragging BOOL to NO
(-[WebHTMLView draggingEntered:]): new
(-[WebHTMLView draggingUpdated:]): new, handle caret movement during the drag
(-[WebHTMLView prepareForDragOperation:]): new
(-[WebHTMLView performDragOperation:]): new
(-[WebHTMLView concludeDragOperation:]): new, paste in the drag
* WebView.subproj/WebHTMLViewPrivate.h:
* WebView.subproj/WebImageView.m:
(-[WebImageView mouseDragged:]): call renamed _web_dragImage
* WebView.subproj/WebView.h:
* WebView.subproj/WebView.m:
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@6019 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog-2005-08-23 b/WebCore/ChangeLog-2005-08-23
index af6941e..a68df0f 100644
--- a/WebCore/ChangeLog-2005-08-23
+++ b/WebCore/ChangeLog-2005-08-23
@@ -1,3 +1,17 @@
+2004-02-02 Chris Blumenberg <cblu at apple.com>
+
+ Fixed: <rdar://problem/3546379>: support for editing via drag & drop
+
+ Reviewed by kocienda.
+
+ * khtml/xml/dom_docimpl.cpp:
+ (DocumentImpl::deleteSelection): fixed a crash I encountered while attempting to delete and empty selection
+ * kwq/WebCoreBridge.h:
+ * kwq/WebCoreBridge.mm:
+ (-[WebCoreBridge isSelectionEditable]): renamed from isEditable
+ (-[WebCoreBridge moveCaretToPoint:]): new
+ (-[WebCoreBridge elementAtPoint:]): added support for WebCoreElementHTMLStringKey and WebCoreElementIsEditableKey
+
2004-01-30 David Hyatt <hyatt at apple.com>
Fix for 3522497, <br>s should not get AXObjects created.
diff --git a/WebCore/khtml/xml/dom_docimpl.cpp b/WebCore/khtml/xml/dom_docimpl.cpp
index 65549ec..3dcd01e 100644
--- a/WebCore/khtml/xml/dom_docimpl.cpp
+++ b/WebCore/khtml/xml/dom_docimpl.cpp
@@ -1202,9 +1202,11 @@ void DocumentImpl::clearSelection()
void DocumentImpl::deleteSelection()
{
KHTMLSelection &selection = part()->getKHTMLSelection();
- clearSelection();
- Range range(selection.startNode(), selection.startOffset(), selection.endNode(), selection.endOffset());
- range.deleteContents();
+ if (!selection.isEmpty()) {
+ clearSelection();
+ Range range(selection.startNode(), selection.startOffset(), selection.endNode(), selection.endOffset());
+ range.deleteContents();
+ }
}
void DocumentImpl::pasteHTMLString(const QString &HTMLString)
diff --git a/WebCore/kwq/WebCoreBridge.h b/WebCore/kwq/WebCoreBridge.h
index 33cd563..93916ea 100644
--- a/WebCore/kwq/WebCoreBridge.h
+++ b/WebCore/kwq/WebCoreBridge.h
@@ -64,10 +64,12 @@ typedef khtml::RenderPart KHTMLRenderPart;
@protocol WebDOMElement;
extern NSString *WebCoreElementFrameKey;
+extern NSString *WebCoreElementHTMLStringKey;
extern NSString *WebCoreElementImageAltStringKey;
extern NSString *WebCoreElementImageKey;
extern NSString *WebCoreElementImageRectKey;
extern NSString *WebCoreElementImageURLKey;
+extern NSString *WebCoreElementIsEditableKey;
extern NSString *WebCoreElementIsSelectedKey;
extern NSString *WebCoreElementLinkURLKey;
extern NSString *WebCoreElementLinkTargetFrameKey;
@@ -200,7 +202,9 @@ typedef enum {
- (void)setSelectionFrom:(id <WebDOMNode>)start startOffset:(int)startOffset to:(id <WebDOMNode>)end endOffset:(int) endOffset;
-- (BOOL)isEditable;
+- (BOOL)isSelectionEditable;
+- (BOOL)moveCaretToPoint:(NSPoint)point;
+
- (void)pasteHTMLString:(NSString *)HTMLString;
- (void)deleteSelection;
diff --git a/WebCore/kwq/WebCoreBridge.mm b/WebCore/kwq/WebCoreBridge.mm
index 11b3000..10c133a 100644
--- a/WebCore/kwq/WebCoreBridge.mm
+++ b/WebCore/kwq/WebCoreBridge.mm
@@ -90,18 +90,20 @@ using KParts::URLArgs;
using KJS::Bindings::RootObject;
-NSString *WebCoreElementFrameKey = @"WebElementFrame";
+NSString *WebCoreElementFrameKey = @"WebElementFrame";
+NSString *WebCoreElementHTMLStringKey = @"WebElementHTMLString";
NSString *WebCoreElementImageAltStringKey = @"WebElementImageAltString";
-NSString *WebCoreElementImageKey = @"WebElementImage";
-NSString *WebCoreElementImageRectKey = @"WebElementImageRect";
-NSString *WebCoreElementImageURLKey = @"WebElementImageURL";
-NSString *WebCoreElementIsSelectedKey = @"WebElementIsSelected";
-NSString *WebCoreElementLinkURLKey = @"WebElementLinkURL";
+NSString *WebCoreElementImageKey = @"WebElementImage";
+NSString *WebCoreElementImageRectKey = @"WebElementImageRect";
+NSString *WebCoreElementImageURLKey = @"WebElementImageURL";
+NSString *WebCoreElementIsEditableKey = @"WebElementIsEditable";
+NSString *WebCoreElementIsSelectedKey = @"WebElementIsSelected";
+NSString *WebCoreElementLinkURLKey = @"WebElementLinkURL";
NSString *WebCoreElementLinkTargetFrameKey = @"WebElementTargetFrame";
-NSString *WebCoreElementLinkLabelKey = @"WebElementLinkLabel";
-NSString *WebCoreElementLinkTitleKey = @"WebElementLinkTitle";
-NSString *WebCoreElementNameKey = @"WebElementName";
-NSString *WebCoreElementTitleKey = @"WebCoreElementTitle"; // not in WebKit API for now, could be in API some day
+NSString *WebCoreElementLinkLabelKey = @"WebElementLinkLabel";
+NSString *WebCoreElementLinkTitleKey = @"WebElementLinkTitle";
+NSString *WebCoreElementNameKey = @"WebElementName";
+NSString *WebCoreElementTitleKey = @"WebCoreElementTitle"; // not in WebKit API for now, could be in API some day
NSString *WebCorePageCacheStateKey = @"WebCorePageCacheState";
@@ -356,12 +358,42 @@ static bool initializedKJS = FALSE;
_part->gotoAnchor(QString::fromNSString(a));
}
-- (BOOL)isEditable
+- (BOOL)isSelectionEditable
{
NodeImpl *startNode = _part->getKHTMLSelection().startNode();
return startNode ? startNode->isContentEditable() : NO;
}
+- (BOOL)moveCaretToPoint:(NSPoint)point
+{
+ RenderObject *renderer = _part->renderer();
+ if (!renderer) {
+ return NO;
+ }
+
+ RenderObject::NodeInfo nodeInfo(true, true);
+ renderer->layer()->nodeAtPoint(nodeInfo, (int)point.x, (int)point.y);
+ NodeImpl *node = nodeInfo.innerNode();
+
+ // FIXME: You should be move the caret to non-text nodes.
+ if (!node->isTextNode()) {
+ return NO;
+ }
+
+ NodeImpl *tempNode;
+ int absX = 0;
+ int absY = 0;
+ int offset;
+ node->renderer()->absolutePosition(absX, absY);
+ node->renderer()->checkSelectionPoint((int)point.x, (int)point.y, absX, absY, tempNode, offset);
+
+ KHTMLSelection &selection = _part->getKHTMLSelection();
+ selection.setSelection(node, offset);
+ _part->xmlDocImpl()->setSelection(selection);
+
+ return YES;
+}
+
- (void)pasteHTMLString:(NSString *)HTMLString
{
DocumentImpl *doc = _part->xmlDocImpl();
@@ -790,7 +822,7 @@ static HTMLFormElementImpl *formElementFromDOMElement(id <WebDOMElement>element)
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()) {
@@ -842,44 +874,52 @@ static HTMLFormElementImpl *formElementFromDOMElement(id <WebDOMElement>element)
}
NodeImpl *node = nodeInfo.innerNonSharedNode();
- if (node && node->renderer() && node->renderer()->isImage()) {
-
- RenderImage *r = static_cast<RenderImage *>(node->renderer());
- NSImage *image = r->pixmap().image();
- // Only return image information if there is an image.
- if (image && !r->isDisplayingError()) {
- [element setObject:r->pixmap().image() forKey:WebCoreElementImageKey];
-
- int x, y;
- if (r->absolutePosition(x, y)) {
- NSValue *rect = [NSValue valueWithRect:NSMakeRect(x, y, r->contentWidth(), r->contentHeight())];
- [element setObject:rect forKey:WebCoreElementImageRectKey];
- }
-
- ElementImpl *i = static_cast<ElementImpl*>(node);
+ if (node) {
+ [element setObject:[NSNumber numberWithBool:node->isContentEditable()]
+ forKey:WebCoreElementIsEditableKey];
+ NSString *HTMLString = node->recursive_toHTML(true).getNSString();
+ if ([HTMLString length] != 0) {
+ [element setObject:HTMLString forKey:WebCoreElementHTMLStringKey];
+ }
- // FIXME: Code copied from RenderImage::updateFromElement; should share.
- DOMString attr;
- if (idFromNode(i) == ID_OBJECT) {
- attr = i->getAttribute(ATTR_DATA);
- } else {
- attr = i->getAttribute(ATTR_SRC);
- }
- if (!attr.isEmpty()) {
- QString URLString = parseURL(attr).string();
- [element setObject:_part->xmlDocImpl()->completeURL(URLString).getNSString() forKey:WebCoreElementImageURLKey];
- }
-
- // FIXME: Code copied from RenderImage::updateFromElement; should share.
- DOMString alt;
- if (idFromNode(i) == ID_INPUT)
- alt = static_cast<HTMLInputElementImpl *>(i)->altText();
- else if (idFromNode(i) == ID_IMG)
- alt = static_cast<HTMLImageElementImpl *>(i)->altText();
- if (!alt.isNull()) {
- QString altText = alt.string();
- altText.replace('\\', _part->backslashAsCurrencySymbol());
- [element setObject:altText.getNSString() forKey:WebCoreElementImageAltStringKey];
+ if (node->renderer() && node->renderer()->isImage()) {
+ RenderImage *r = static_cast<RenderImage *>(node->renderer());
+ NSImage *image = r->pixmap().image();
+ // Only return image information if there is an image.
+ if (image && !r->isDisplayingError()) {
+ [element setObject:r->pixmap().image() forKey:WebCoreElementImageKey];
+
+ int x, y;
+ if (r->absolutePosition(x, y)) {
+ NSValue *rect = [NSValue valueWithRect:NSMakeRect(x, y, r->contentWidth(), r->contentHeight())];
+ [element setObject:rect forKey:WebCoreElementImageRectKey];
+ }
+
+ ElementImpl *i = static_cast<ElementImpl*>(node);
+
+ // FIXME: Code copied from RenderImage::updateFromElement; should share.
+ DOMString attr;
+ if (idFromNode(i) == ID_OBJECT) {
+ attr = i->getAttribute(ATTR_DATA);
+ } else {
+ attr = i->getAttribute(ATTR_SRC);
+ }
+ if (!attr.isEmpty()) {
+ QString URLString = parseURL(attr).string();
+ [element setObject:_part->xmlDocImpl()->completeURL(URLString).getNSString() forKey:WebCoreElementImageURLKey];
+ }
+
+ // FIXME: Code copied from RenderImage::updateFromElement; should share.
+ DOMString alt;
+ if (idFromNode(i) == ID_INPUT)
+ alt = static_cast<HTMLInputElementImpl *>(i)->altText();
+ else if (idFromNode(i) == ID_IMG)
+ alt = static_cast<HTMLImageElementImpl *>(i)->altText();
+ if (!alt.isNull()) {
+ QString altText = alt.string();
+ altText.replace('\\', _part->backslashAsCurrencySymbol());
+ [element setObject:altText.getNSString() forKey:WebCoreElementImageAltStringKey];
+ }
}
}
}
diff --git a/WebKit/ChangeLog b/WebKit/ChangeLog
index 865ec0c..ab12eaa 100644
--- a/WebKit/ChangeLog
+++ b/WebKit/ChangeLog
@@ -1,3 +1,32 @@
+2004-02-02 Chris Blumenberg <cblu at apple.com>
+
+ Fixed: <rdar://problem/3546379>: support for editing via drag & drop
+
+ Reviewed by kocienda.
+
+ * Misc.subproj/WebNSViewExtras.h:
+ * Misc.subproj/WebNSViewExtras.m:
+ (-[NSView _web_dragImage:fileWrapper:rect:URL:title:HTMLString:event:]): added a HTMLString argument so that we retain all attributes when dragging images
+ * WebView.subproj/WebHTMLView.m:
+ (-[WebHTMLView _canDelete]): call renamed isSelectionEditable
+ (-[WebHTMLView _canPaste]): call renamed isSelectionEditable
+ (-[WebHTMLView _pasteHTMLFromPasteboard:]): new, factored out from paste:
+ (-[WebHTMLView _handleMouseDragged:]): removed code that returned early if we were loading, this kind of protection is no longer needed since we now retain the view while dragging, call renamed _web_dragImage
+ (-[WebHTMLView initWithFrame:]): register for drop types
+ (-[WebHTMLView paste:]): call _pasteHTMLFromPasteboard
+ (-[WebHTMLView dragImage:at:offset:event:pasteboard:source:slideBack:]): set new isDragging BOOL to YES
+ (-[WebHTMLView draggedImage:endedAt:operation:]): set new isDragging BOOL to NO
+ (-[WebHTMLView draggingEntered:]): new
+ (-[WebHTMLView draggingUpdated:]): new, handle caret movement during the drag
+ (-[WebHTMLView prepareForDragOperation:]): new
+ (-[WebHTMLView performDragOperation:]): new
+ (-[WebHTMLView concludeDragOperation:]): new, paste in the drag
+ * WebView.subproj/WebHTMLViewPrivate.h:
+ * WebView.subproj/WebImageView.m:
+ (-[WebImageView mouseDragged:]): call renamed _web_dragImage
+ * WebView.subproj/WebView.h:
+ * WebView.subproj/WebView.m:
+
=== Safari-126 ===
2004-01-30 Chris Blumenberg <cblu at apple.com>
diff --git a/WebKit/Misc.subproj/WebNSViewExtras.h b/WebKit/Misc.subproj/WebNSViewExtras.h
index d402679..8d19b43 100644
--- a/WebKit/Misc.subproj/WebNSViewExtras.h
+++ b/WebKit/Misc.subproj/WebNSViewExtras.h
@@ -45,5 +45,6 @@
rect:(NSRect)rect
URL:(NSURL *)URL
title:(NSString *)title
+ HTMLString:(NSString *)HTMLString
event:(NSEvent *)event;
@end
diff --git a/WebKit/Misc.subproj/WebNSViewExtras.m b/WebKit/Misc.subproj/WebNSViewExtras.m
index 279c00c..bed9429 100644
--- a/WebKit/Misc.subproj/WebNSViewExtras.m
+++ b/WebKit/Misc.subproj/WebNSViewExtras.m
@@ -182,6 +182,7 @@
rect:(NSRect)rect
URL:(NSURL *)URL
title:(NSString *)title
+ HTMLString:(NSString *)HTMLString
event:(NSEvent *)event
{
NSPoint mouseDownPoint = [self convertPoint:[event locationInWindow] fromView:nil];
@@ -230,10 +231,16 @@
if (fileWrapper) {
[types insertObject:NSRTFDPboardType atIndex:0];
}
+ if (HTMLString) {
+ [types addObject:NSHTMLPboardType];
+ }
[pboard _web_writeURL:URL andTitle:title withOwner:self types:types];
if (fileWrapper) {
[pboard _web_writeFileWrapperAsRTFDAttachment:fileWrapper];
}
+ if (HTMLString) {
+ [pboard setString:HTMLString forType:NSHTMLPboardType];
+ }
[pboard setPropertyList:filesTypes forType:NSFilesPromisePboardType];
[pboard setData:[image TIFFRepresentation] forType:NSTIFFPboardType];
diff --git a/WebKit/WebView.subproj/WebHTMLView.m b/WebKit/WebView.subproj/WebHTMLView.m
index df004d3..4669c0f 100644
--- a/WebKit/WebView.subproj/WebHTMLView.m
+++ b/WebKit/WebView.subproj/WebHTMLView.m
@@ -540,12 +540,28 @@ static WebHTMLView *lastHitView = nil;
- (BOOL)_canDelete
{
- return [self _haveSelection] && [[self _bridge] isEditable];
+ return [self _haveSelection] && [[self _bridge] isSelectionEditable];
}
- (BOOL)_canPaste
{
- return [[self _bridge] isEditable];
+ return [[self _bridge] isSelectionEditable];
+}
+
+- (void)_pasteHTMLFromPasteboard:(NSPasteboard *)pasteboard
+{
+ NSArray *types = [pasteboard types];
+ NSString *HTMLString = nil;
+
+ if ([types containsObject:NSHTMLPboardType]) {
+ HTMLString = [pasteboard stringForType:NSHTMLPboardType];
+ } else if ([types containsObject:NSStringPboardType]) {
+ HTMLString = [pasteboard stringForType:NSStringPboardType];
+ }
+
+ if (HTMLString) {
+ [[self _bridge] pasteHTMLString:HTMLString];
+ }
}
-(NSImage *)_dragImageForLinkElement:(NSDictionary *)element
@@ -627,25 +643,19 @@ static WebHTMLView *lastHitView = nil;
- (void)_handleMouseDragged:(NSEvent *)event
{
- // If the frame has a provisional data source, this view may be released.
- // Don't allow drag because drag callbacks will reference this released view.
- if ([[self _frame] provisionalDataSource]) {
- return;
- }
-
NSPoint mouseDownPoint = [self convertPoint:[_private->mouseDownEvent locationInWindow] fromView:nil];
NSDictionary *element = [self _elementAtPoint:mouseDownPoint];
NSURL *linkURL = [element objectForKey:WebElementLinkURLKey];
NSURL *imageURL = [element objectForKey:WebElementImageURLKey];
- BOOL isSelectedText = [[element objectForKey:WebElementIsSelectedKey] boolValue];
+ BOOL isSelected = [[element objectForKey:WebElementIsSelectedKey] boolValue];
[_private->draggingImageURL release];
_private->draggingImageURL = nil;
// We must have started over something draggable:
ASSERT((imageURL && [[WebPreferences standardPreferences] loadsImagesAutomatically]) ||
- (!imageURL && linkURL) || isSelectedText);
+ (!imageURL && linkURL) || isSelected);
NSPoint mouseDraggedPoint = [self convertPoint:[event locationInWindow] fromView:nil];
float deltaX = ABS(mouseDraggedPoint.x - mouseDownPoint.x);
@@ -654,8 +664,8 @@ static WebHTMLView *lastHitView = nil;
// Drag hysteresis hasn't been met yet but we don't want to do other drag actions like selection.
if ((imageURL && deltaX < ImageDragHysteresis && deltaY < ImageDragHysteresis) ||
(linkURL && deltaX < LinkDragHysteresis && deltaY < LinkDragHysteresis) ||
- (isSelectedText && deltaX < TextDragHysteresis && deltaY < TextDragHysteresis)) {
- return;
+ (isSelected && deltaX < TextDragHysteresis && deltaY < TextDragHysteresis)) {
+ return;
}
if (imageURL) {
@@ -667,6 +677,7 @@ static WebHTMLView *lastHitView = nil;
rect:[[element objectForKey:WebElementImageRectKey] rectValue]
URL:linkURL ? linkURL : imageURL
title:[element objectForKey:WebElementImageAltStringKey]
+ HTMLString:[element objectForKey:WebElementHTMLStringKey]
event:_private->mouseDownEvent];
} else if (linkURL) {
@@ -683,7 +694,7 @@ static WebHTMLView *lastHitView = nil;
source:self
slideBack:NO];
- } else if (isSelectedText) {
+ } else if (isSelected) {
NSPasteboard *pasteboard = [NSPasteboard pasteboardWithName:NSDragPboard];
[self _writeSelectionToPasteboard:pasteboard];
NSImage *selectionImage = [[self _bridge] selectionImage];
@@ -899,6 +910,8 @@ static WebHTMLView *lastHitView = nil;
_private->pluginController = [[WebPluginController alloc] initWithHTMLView:self];
_private->needsLayout = YES;
+
+ [self registerForDraggedTypes:[NSArray arrayWithObjects:NSHTMLPboardType, NSStringPboardType, nil]];
return self;
}
@@ -941,19 +954,7 @@ static WebHTMLView *lastHitView = nil;
- (void)paste:(id)sender
{
- NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
- NSArray *types = [pasteboard types];
- NSString *HTMLString = nil;
-
- if ([types containsObject:NSHTMLPboardType]) {
- HTMLString = [pasteboard stringForType:NSHTMLPboardType];
- } else if ([types containsObject:NSStringPboardType]) {
- HTMLString = [pasteboard stringForType:NSStringPboardType];
- }
-
- if (HTMLString) {
- [[self _bridge] pasteHTMLString:HTMLString];
- }
+ [self _pasteHTMLFromPasteboard:[NSPasteboard generalPasteboard]];
}
- (BOOL)writeSelectionToPasteboard:(NSPasteboard *)pasteboard types:(NSArray *)types
@@ -1504,7 +1505,9 @@ static WebHTMLView *lastHitView = nil;
pasteboard:(NSPasteboard *)pasteboard
source:(id)source
slideBack:(BOOL)slideBack
-{
+{
+ _private->isDragging = YES;
+
[self _stopAutoscrollTimer];
// Don't allow drags to be accepted by this WebFrameView.
@@ -1530,6 +1533,8 @@ static WebHTMLView *lastHitView = nil;
- (void)draggedImage:(NSImage *)anImage endedAt:(NSPoint)aPoint operation:(NSDragOperation)operation
{
+ _private->isDragging = NO;
+
// Prevent queued mouseDragged events from coming after the drag and fake mouseUp event.
_private->ignoringMouseDraggedEvents = YES;
@@ -1578,6 +1583,41 @@ static WebHTMLView *lastHitView = nil;
return [NSArray arrayWithObject:filename];
}
+- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
+{
+ return _private->isDragging ? NSDragOperationMove : NSDragOperationCopy;
+}
+
+- (NSDragOperation)draggingUpdated:(id <NSDraggingInfo>)sender
+{
+ NSPoint point = [self convertPoint:[sender draggingLocation] fromView:nil];
+ NSDictionary *element = [self _elementAtPoint:point];
+ if ([[element objectForKey:WebElementIsEditableKey] boolValue] && [[self _bridge] moveCaretToPoint:point]) {
+ if (_private->isDragging) {
+ return [[element objectForKey:WebElementIsSelectedKey] boolValue] ? NSDragOperationNone : NSDragOperationMove;
+ } else {
+ return NSDragOperationCopy;
+ }
+ }
+ return NSDragOperationNone;
+}
+
+- (BOOL)prepareForDragOperation:(id <NSDraggingInfo>)sender
+{
+ return YES;
+}
+
+- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender
+{
+ return YES;
+}
+
+- (void)concludeDragOperation:(id <NSDraggingInfo>)sender
+{
+ // FIXME: We should delete the original selection if we're doing a move.
+ [self _pasteHTMLFromPasteboard:[sender draggingPasteboard]];
+}
+
- (void)mouseUp:(NSEvent *)event
{
[self _stopAutoscrollTimer];
diff --git a/WebKit/WebView.subproj/WebHTMLViewPrivate.h b/WebKit/WebView.subproj/WebHTMLViewPrivate.h
index e2bdf41..4d947d1 100644
--- a/WebKit/WebView.subproj/WebHTMLViewPrivate.h
+++ b/WebKit/WebView.subproj/WebHTMLViewPrivate.h
@@ -22,6 +22,7 @@
BOOL inNextValidKeyView;
BOOL ignoringMouseDraggedEvents;
BOOL printing;
+ BOOL isDragging;
id savedSubviews;
BOOL subviewsSetAside;
@@ -73,6 +74,7 @@
- (BOOL)_canDelete;
- (BOOL)_canPaste;
- (BOOL)_haveSelection;
+- (void)_pasteHTMLFromPasteboard:(NSPasteboard *)pasteboard;
- (void)_frameOrBoundsChanged;
diff --git a/WebKit/WebView.subproj/WebImageView.m b/WebKit/WebView.subproj/WebImageView.m
index 60f9fbf..11e3d2c 100644
--- a/WebKit/WebView.subproj/WebImageView.m
+++ b/WebKit/WebView.subproj/WebImageView.m
@@ -238,6 +238,7 @@
rect:[self drawingRect]
URL:[rep URL]
title:nil
+ HTMLString:nil
event:event];
}
diff --git a/WebKit/WebView.subproj/WebView.h b/WebKit/WebView.subproj/WebView.h
index 14f311e..2986406 100644
--- a/WebKit/WebView.subproj/WebView.h
+++ b/WebKit/WebView.subproj/WebView.h
@@ -20,11 +20,13 @@
// the WebContextMenuDelegate's contextMenuItemsForElement and the WebwebViewPolicyDelegate's clickPolicyForElement.
extern NSString *WebElementFrameKey; // WebFrame of the element
+extern NSString *WebElementHTMLStringKey; // NSString of the HTML representation of the element
extern NSString *WebElementImageAltStringKey; // NSString of the ALT attribute of the image element
extern NSString *WebElementImageKey; // NSImage of the image element
extern NSString *WebElementImageRectKey; // NSValue of an NSRect, the rect of the image element
extern NSString *WebElementImageURLKey; // NSURL of the image element
-extern NSString *WebElementIsSelectedKey; // NSNumber of BOOL indicating whether the element is selected text or not
+extern NSString *WebElementIsEditableKey; // NSNumber of BOOL indicating whether the element is editable or not
+extern NSString *WebElementIsSelectedKey; // NSNumber of BOOL indicating whether the element is selected or not
extern NSString *WebElementLinkURLKey; // NSURL of the link if the element is within an anchor
extern NSString *WebElementLinkTargetFrameKey; // NSString of the target of the anchor
extern NSString *WebElementLinkTitleKey; // NSString of the title of the anchor
diff --git a/WebKit/WebView.subproj/WebView.m b/WebKit/WebView.subproj/WebView.m
index 4bc1ddb..25de2da 100644
--- a/WebKit/WebView.subproj/WebView.m
+++ b/WebKit/WebView.subproj/WebView.m
@@ -63,16 +63,18 @@ static const struct UserAgentSpoofTableEntry *_web_findSpoofTableEntry(const cha
#include "WebUserAgentSpoofTable.c"
#undef __inline
-NSString *WebElementFrameKey = @"WebElementFrame";
-NSString *WebElementImageKey = @"WebElementImage";
-NSString *WebElementImageAltStringKey = @"WebElementImageAltString";
-NSString *WebElementImageRectKey = @"WebElementImageRect";
-NSString *WebElementImageURLKey = @"WebElementImageURL";
-NSString *WebElementIsSelectedKey = @"WebElementIsSelected";
-NSString *WebElementLinkURLKey = @"WebElementLinkURL";
-NSString *WebElementLinkTargetFrameKey = @"WebElementTargetFrame";
-NSString *WebElementLinkLabelKey = @"WebElementLinkLabel";
-NSString *WebElementLinkTitleKey = @"WebElementLinkTitle";
+NSString *WebElementFrameKey = @"WebElementFrame";
+NSString *WebElementHTMLStringKey = @"WebElementHTMLString";
+NSString *WebElementImageKey = @"WebElementImage";
+NSString *WebElementImageAltStringKey = @"WebElementImageAltString";
+NSString *WebElementImageRectKey = @"WebElementImageRect";
+NSString *WebElementImageURLKey = @"WebElementImageURL";
+NSString *WebElementIsEditableKey = @"WebElementIsEditable";
+NSString *WebElementIsSelectedKey = @"WebElementIsSelected";
+NSString *WebElementLinkURLKey = @"WebElementLinkURL";
+NSString *WebElementLinkTargetFrameKey = @"WebElementTargetFrame";
+NSString *WebElementLinkLabelKey = @"WebElementLinkLabel";
+NSString *WebElementLinkTitleKey = @"WebElementLinkTitle";
NSString *WebViewProgressStartedNotification = @"WebProgressStartedNotification";
NSString *WebViewProgressEstimateChangedNotification = @"WebProgressEstimateChangedNotification";
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list