[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 06:27:47 UTC 2009
The following commit has been merged in the debian/unstable branch:
commit b2923f1323978ec8b76155212d72c80136765612
Author: cblu <cblu at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Sat Jul 27 16:14:01 2002 +0000
WebKit:
Implemented click policy, support for option-click
Implemented dragging of links and images from WebHTMLView
* Misc.subproj/WebNSViewExtras.h:
* Misc.subproj/WebNSViewExtras.m:
(-[NSView _web_dragShouldBeginFromMouseDown:withExpiration:]): added, moved from WebBrowser
(-[NSView _web_dragOperationForDraggingInfo:]): don't accept drag if source == destination
* WebView.subproj/WebControllerPolicyHandler.h:
* WebView.subproj/WebControllerPolicyHandler.m:
(-[WebPolicy URL]): needed for click policy
(+[WebURLPolicy webPolicyWithURLAction:]):
(+[WebFileURLPolicy webPolicyWithFileAction:]):
(+[WebContentPolicy webPolicyWithContentAction:andPath:]):
* WebView.subproj/WebControllerPrivate.h:
* WebView.subproj/WebControllerPrivate.m:
(-[WebController _downloadURL:toPath:]): added, simply downloads a URL
* WebView.subproj/WebDefaultContextMenuHandler.m:
(-[WebDefaultContextMenuHandler downloadURL:]): calls [WebController _downloadURL:toPath:]
* WebView.subproj/WebDefaultPolicyHandler.m:
(-[WebDefaultPolicyHandler clickPolicyForElement:button:modifierMask:]):
* WebView.subproj/WebHTMLView.m:
(-[WebHTMLView mouseDown:]): calls _continueAfterCheckingDragForEvent
(-[WebHTMLView mouseUp:]): calls _continueAfterClickPolicyForEvent
(-[WebHTMLView draggingSourceOperationMaskForLocal:]): added
(-[WebHTMLView namesOfPromisedFilesDroppedAtDestination:]): added, starts download
* WebView.subproj/WebHTMLViewPrivate.h:
* WebView.subproj/WebHTMLViewPrivate.m:
(-[WebHTMLViewPrivate dealloc]):
(-[WebHTMLView _elementAtPoint:]):
(-[WebHTMLView _continueAfterClickPolicyForEvent:]): added, implements click policy
(-[WebHTMLView _continueAfterCheckingDragForEvent:]): added, checks if mouse event is a drag
WebBrowser:
Support for option-click.
Moved _web_dragShouldBeginFromMouseDown:withExpiration: to WebKit
* BrowserWebController.m:
(-[BrowserWebController clickPolicyForElement:button:modifierMask:]): support for option and command click
* FavoriteButton.m:
(-[FavoriteButton mouseDown:]): call _web_dragShouldBeginFromMouseDown:withExpiration:
* LocationTextField.m:
(-[LocationTextField mouseDown:]): call _web_dragShouldBeginFromMouseDown:withExpiration:
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@1686 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebKit/ChangeLog b/WebKit/ChangeLog
index ea98d5e..d994c4d 100644
--- a/WebKit/ChangeLog
+++ b/WebKit/ChangeLog
@@ -1,3 +1,37 @@
+2002-07-27 Chris Blumenberg <cblu at apple.com>
+
+ Implemented click policy, support for option-click
+ Implemented dragging of links and images from WebHTMLView
+
+ * Misc.subproj/WebNSViewExtras.h:
+ * Misc.subproj/WebNSViewExtras.m:
+ (-[NSView _web_dragShouldBeginFromMouseDown:withExpiration:]): added, moved from WebBrowser
+ (-[NSView _web_dragOperationForDraggingInfo:]): don't accept drag if source == destination
+ * WebView.subproj/WebControllerPolicyHandler.h:
+ * WebView.subproj/WebControllerPolicyHandler.m:
+ (-[WebPolicy URL]): needed for click policy
+ (+[WebURLPolicy webPolicyWithURLAction:]):
+ (+[WebFileURLPolicy webPolicyWithFileAction:]):
+ (+[WebContentPolicy webPolicyWithContentAction:andPath:]):
+ * WebView.subproj/WebControllerPrivate.h:
+ * WebView.subproj/WebControllerPrivate.m:
+ (-[WebController _downloadURL:toPath:]): added, simply downloads a URL
+ * WebView.subproj/WebDefaultContextMenuHandler.m:
+ (-[WebDefaultContextMenuHandler downloadURL:]): calls [WebController _downloadURL:toPath:]
+ * WebView.subproj/WebDefaultPolicyHandler.m:
+ (-[WebDefaultPolicyHandler clickPolicyForElement:button:modifierMask:]):
+ * WebView.subproj/WebHTMLView.m:
+ (-[WebHTMLView mouseDown:]): calls _continueAfterCheckingDragForEvent
+ (-[WebHTMLView mouseUp:]): calls _continueAfterClickPolicyForEvent
+ (-[WebHTMLView draggingSourceOperationMaskForLocal:]): added
+ (-[WebHTMLView namesOfPromisedFilesDroppedAtDestination:]): added, starts download
+ * WebView.subproj/WebHTMLViewPrivate.h:
+ * WebView.subproj/WebHTMLViewPrivate.m:
+ (-[WebHTMLViewPrivate dealloc]):
+ (-[WebHTMLView _elementAtPoint:]):
+ (-[WebHTMLView _continueAfterClickPolicyForEvent:]): added, implements click policy
+ (-[WebHTMLView _continueAfterCheckingDragForEvent:]): added, checks if mouse event is a drag
+
2002-07-26 Richard Williamson <rjw at apple.com>
WebframeLoadType enum first value wasn't explicitly set, so 0 was used.
diff --git a/WebKit/ChangeLog-2002-12-03 b/WebKit/ChangeLog-2002-12-03
index ea98d5e..d994c4d 100644
--- a/WebKit/ChangeLog-2002-12-03
+++ b/WebKit/ChangeLog-2002-12-03
@@ -1,3 +1,37 @@
+2002-07-27 Chris Blumenberg <cblu at apple.com>
+
+ Implemented click policy, support for option-click
+ Implemented dragging of links and images from WebHTMLView
+
+ * Misc.subproj/WebNSViewExtras.h:
+ * Misc.subproj/WebNSViewExtras.m:
+ (-[NSView _web_dragShouldBeginFromMouseDown:withExpiration:]): added, moved from WebBrowser
+ (-[NSView _web_dragOperationForDraggingInfo:]): don't accept drag if source == destination
+ * WebView.subproj/WebControllerPolicyHandler.h:
+ * WebView.subproj/WebControllerPolicyHandler.m:
+ (-[WebPolicy URL]): needed for click policy
+ (+[WebURLPolicy webPolicyWithURLAction:]):
+ (+[WebFileURLPolicy webPolicyWithFileAction:]):
+ (+[WebContentPolicy webPolicyWithContentAction:andPath:]):
+ * WebView.subproj/WebControllerPrivate.h:
+ * WebView.subproj/WebControllerPrivate.m:
+ (-[WebController _downloadURL:toPath:]): added, simply downloads a URL
+ * WebView.subproj/WebDefaultContextMenuHandler.m:
+ (-[WebDefaultContextMenuHandler downloadURL:]): calls [WebController _downloadURL:toPath:]
+ * WebView.subproj/WebDefaultPolicyHandler.m:
+ (-[WebDefaultPolicyHandler clickPolicyForElement:button:modifierMask:]):
+ * WebView.subproj/WebHTMLView.m:
+ (-[WebHTMLView mouseDown:]): calls _continueAfterCheckingDragForEvent
+ (-[WebHTMLView mouseUp:]): calls _continueAfterClickPolicyForEvent
+ (-[WebHTMLView draggingSourceOperationMaskForLocal:]): added
+ (-[WebHTMLView namesOfPromisedFilesDroppedAtDestination:]): added, starts download
+ * WebView.subproj/WebHTMLViewPrivate.h:
+ * WebView.subproj/WebHTMLViewPrivate.m:
+ (-[WebHTMLViewPrivate dealloc]):
+ (-[WebHTMLView _elementAtPoint:]):
+ (-[WebHTMLView _continueAfterClickPolicyForEvent:]): added, implements click policy
+ (-[WebHTMLView _continueAfterCheckingDragForEvent:]): added, checks if mouse event is a drag
+
2002-07-26 Richard Williamson <rjw at apple.com>
WebframeLoadType enum first value wasn't explicitly set, so 0 was used.
diff --git a/WebKit/Misc.subproj/WebNSViewExtras.h b/WebKit/Misc.subproj/WebNSViewExtras.h
index 6db9368..0ffbcc6 100644
--- a/WebKit/Misc.subproj/WebNSViewExtras.h
+++ b/WebKit/Misc.subproj/WebNSViewExtras.h
@@ -15,6 +15,8 @@
// Returns the first WebView superview. Only works if self is the WebView's document view.
- (WebView *)_web_parentWebView;
+- (BOOL)_web_dragShouldBeginFromMouseDown: (NSEvent *)mouseDownEvent withExpiration:(NSDate *)expiration;
+
// FIXME: The following can be class methods
// Returns an array with NSURLPboardType, NSStringPboardType and NSFilenamesPboardType pasteboard types
diff --git a/WebKit/Misc.subproj/WebNSViewExtras.m b/WebKit/Misc.subproj/WebNSViewExtras.m
index 0410fdf..e7685cf 100644
--- a/WebKit/Misc.subproj/WebNSViewExtras.m
+++ b/WebKit/Misc.subproj/WebNSViewExtras.m
@@ -10,6 +10,8 @@
#import <WebFoundation/WebNSStringExtras.h>
#import <WebFoundation/WebNSURLExtras.h>
+#define DragStartHysteresis 5.0
+
#ifdef DEBUG_VIEWS
@interface NSObject (Foo)
- (void*)_renderFramePart;
@@ -43,6 +45,66 @@
return nil;
}
+/* Determine whether a mouse down should turn into a drag; started as copy of NSTableView code */
+- (BOOL)_web_dragShouldBeginFromMouseDown: (NSEvent *)mouseDownEvent withExpiration:(NSDate *)expiration
+{
+ NSEvent *nextEvent, *firstEvent, *dragEvent, *mouseUp;
+ BOOL dragIt;
+
+ if ([mouseDownEvent type] != NSLeftMouseDown) {
+ return NO;
+ }
+
+ nextEvent = nil;
+ firstEvent = nil;
+ dragEvent = nil;
+ mouseUp = nil;
+ dragIt = NO;
+
+ while ((nextEvent = [[self window] nextEventMatchingMask:(NSLeftMouseUpMask | NSLeftMouseDraggedMask)
+ untilDate:expiration
+ inMode:NSEventTrackingRunLoopMode
+ dequeue:YES]) != nil) {
+ if (firstEvent == nil) {
+ firstEvent = nextEvent;
+ }
+
+ if ([nextEvent type] == NSLeftMouseDragged) {
+ float deltax = ABS([nextEvent locationInWindow].x - [mouseDownEvent locationInWindow].x);
+ float deltay = ABS([nextEvent locationInWindow].y - [mouseDownEvent locationInWindow].y);
+ dragEvent = nextEvent;
+
+ if (deltax >= DragStartHysteresis) {
+ dragIt = YES;
+ break;
+ }
+
+ if (deltay >= DragStartHysteresis) {
+ dragIt = YES;
+ break;
+ }
+ } else if ([nextEvent type] == NSLeftMouseUp) {
+ mouseUp = nextEvent;
+ break;
+ }
+ }
+
+ // Since we've been dequeuing the events (If we don't, we'll never see the mouse up...),
+ // we need to push some of the events back on. It makes sense to put the first and last
+ // drag events and the mouse up if there was one.
+ if (mouseUp != nil) {
+ [NSApp postEvent: mouseUp atStart: YES];
+ }
+ if (dragEvent != nil) {
+ [NSApp postEvent: dragEvent atStart: YES];
+ }
+ if (firstEvent != mouseUp && firstEvent != dragEvent) {
+ [NSApp postEvent: firstEvent atStart: YES];
+ }
+
+ return dragIt;
+}
+
- (NSArray *)_web_acceptableDragTypes
{
return [NSArray arrayWithObjects:NSURLPboardType, NSStringPboardType, NSFilenamesPboardType, nil];
@@ -77,7 +139,7 @@
- (NSDragOperation)_web_dragOperationForDraggingInfo:(id <NSDraggingInfo>)sender
{
- if([self _web_bestURLForDraggingInfo:sender]){
+ if([self _web_bestURLForDraggingInfo:sender] && [sender draggingSource] != self){
return NSDragOperationCopy;
} else {
return NSDragOperationNone;
diff --git a/WebKit/WebView.subproj/WebControllerPolicyDelegate.h b/WebKit/WebView.subproj/WebControllerPolicyDelegate.h
index 3621285..6b4ef14 100644
--- a/WebKit/WebView.subproj/WebControllerPolicyDelegate.h
+++ b/WebKit/WebView.subproj/WebControllerPolicyDelegate.h
@@ -18,6 +18,7 @@ typedef enum {
WebPolicySave,
WebPolicyOpenURL,
WebPolicySaveAndOpen,
+ WebPolicyOpenNewWindow,
WebPolicyIgnore
} WebPolicyAction;
@@ -43,8 +44,8 @@ typedef enum {
} WebContentAction;
typedef enum {
- WebClickPolicyNone = WebPolicyNone,
WebClickPolicyShow = WebPolicyUse,
+ WebClickPolicyOpenNewWindow = WebPolicyOpenNewWindow,
WebClickPolicySave = WebPolicySave,
WebClickPolicySaveAndOpenExternally = WebPolicySaveAndOpen,
WebClickPolicyIgnore = WebPolicyIgnore
@@ -58,6 +59,7 @@ typedef enum {
}
- (WebPolicyAction)policyAction;
- (NSString *)path;
+- (NSURL *)URL;
@end
@@ -74,7 +76,7 @@ typedef enum {
@end
@interface WebClickPolicy : WebPolicy
-+ webPolicyWithClickAction: (WebClickAction)action andPath: (NSString *)thePath;
++ webPolicyWithClickAction: (WebClickAction)action URL:(NSURL *)URL andPath: (NSString *)thePath;
@end
diff --git a/WebKit/WebView.subproj/WebControllerPolicyHandler.h b/WebKit/WebView.subproj/WebControllerPolicyHandler.h
index 3621285..6b4ef14 100644
--- a/WebKit/WebView.subproj/WebControllerPolicyHandler.h
+++ b/WebKit/WebView.subproj/WebControllerPolicyHandler.h
@@ -18,6 +18,7 @@ typedef enum {
WebPolicySave,
WebPolicyOpenURL,
WebPolicySaveAndOpen,
+ WebPolicyOpenNewWindow,
WebPolicyIgnore
} WebPolicyAction;
@@ -43,8 +44,8 @@ typedef enum {
} WebContentAction;
typedef enum {
- WebClickPolicyNone = WebPolicyNone,
WebClickPolicyShow = WebPolicyUse,
+ WebClickPolicyOpenNewWindow = WebPolicyOpenNewWindow,
WebClickPolicySave = WebPolicySave,
WebClickPolicySaveAndOpenExternally = WebPolicySaveAndOpen,
WebClickPolicyIgnore = WebPolicyIgnore
@@ -58,6 +59,7 @@ typedef enum {
}
- (WebPolicyAction)policyAction;
- (NSString *)path;
+- (NSURL *)URL;
@end
@@ -74,7 +76,7 @@ typedef enum {
@end
@interface WebClickPolicy : WebPolicy
-+ webPolicyWithClickAction: (WebClickAction)action andPath: (NSString *)thePath;
++ webPolicyWithClickAction: (WebClickAction)action URL:(NSURL *)URL andPath: (NSString *)thePath;
@end
diff --git a/WebKit/WebView.subproj/WebControllerPolicyHandler.m b/WebKit/WebView.subproj/WebControllerPolicyHandler.m
index 01a2216..1d235fe 100644
--- a/WebKit/WebView.subproj/WebControllerPolicyHandler.m
+++ b/WebKit/WebView.subproj/WebControllerPolicyHandler.m
@@ -13,6 +13,7 @@
@public
WebPolicyAction policyAction;
NSString *path;
+ NSURL *URL;
}
@end
@@ -26,12 +27,13 @@
@end
@implementation WebPolicy
-- initWithPolicyAction: (WebPolicyAction)action andPath:(NSString *)path;
+- initWithPolicyAction: (WebPolicyAction)action URL:(NSURL *)URL andPath:(NSString *)path;
{
[super init];
_private = [[WebPolicyPrivate alloc] init];
_private->policyAction = action;
_private->path = [path retain];
+ _private->URL = [URL retain];
return self;
}
@@ -50,6 +52,11 @@
return _private->path;
}
+- (NSURL *)URL
+{
+ return _private->URL;
+}
+
- (void)_setPath:(NSString *)path
{
[_private->path release];
@@ -69,7 +76,7 @@
+ webPolicyWithURLAction: (WebURLAction)action
{
- return [[[WebPolicy alloc] initWithPolicyAction:action andPath:nil] autorelease];
+ return [[[WebPolicy alloc] initWithPolicyAction:action URL:nil andPath:nil] autorelease];
}
@end
@@ -78,7 +85,7 @@
+ webPolicyWithFileAction: (WebFileAction)action
{
- return [[[WebPolicy alloc] initWithPolicyAction:action andPath:nil] autorelease];
+ return [[[WebPolicy alloc] initWithPolicyAction:action URL:nil andPath:nil] autorelease];
}
@end
@@ -87,7 +94,7 @@
+ webPolicyWithContentAction: (WebContentAction)action andPath: (NSString *)thePath
{
- return [[[WebPolicy alloc] initWithPolicyAction:action andPath:thePath] autorelease];
+ return [[[WebPolicy alloc] initWithPolicyAction:action URL:nil andPath:thePath] autorelease];
}
@@ -95,9 +102,9 @@
@implementation WebClickPolicy
-+ webPolicyWithClickAction: (WebClickAction)action andPath: (NSString *)thePath
++ webPolicyWithClickAction: (WebClickAction)action URL:(NSURL *)URL andPath: (NSString *)thePath;
{
- return [[[WebPolicy alloc] initWithPolicyAction:action andPath:thePath] autorelease];
+ return [[[WebPolicy alloc] initWithPolicyAction:action URL:URL andPath:thePath] autorelease];
}
diff --git a/WebKit/WebView.subproj/WebControllerPrivate.h b/WebKit/WebView.subproj/WebControllerPrivate.h
index 414372f..c3c99f6 100644
--- a/WebKit/WebView.subproj/WebControllerPrivate.h
+++ b/WebKit/WebView.subproj/WebControllerPrivate.h
@@ -36,4 +36,5 @@
+ (NSString *)_MIMETypeForFile: (NSString *)path;
- (BOOL)_openedByScript;
- (void)_setOpenedByScript:(BOOL)openedByScript;
+- (void)_downloadURL:(NSURL *)URL toPath:(NSString *)path;
@end
diff --git a/WebKit/WebView.subproj/WebControllerPrivate.m b/WebKit/WebView.subproj/WebControllerPrivate.m
index 88b87a3..977aa0d 100644
--- a/WebKit/WebView.subproj/WebControllerPrivate.m
+++ b/WebKit/WebView.subproj/WebControllerPrivate.m
@@ -5,6 +5,7 @@
#import <WebKit/WebBackForwardList.h>
#import <WebKit/WebControllerPrivate.h>
+#import <WebKit/WebControllerPolicyHandlerPrivate.h>
#import <WebKit/WebDataSourcePrivate.h>
#import <WebKit/WebDefaultContextMenuHandler.h>
#import <WebKit/WebFramePrivate.h>
@@ -179,5 +180,17 @@
_private->openedByScript = openedByScript;
}
+- (void)_downloadURL:(NSURL *)URL toPath:(NSString *)path
+{
+ WebDataSource *dataSource = [[WebDataSource alloc] initWithURL:URL];
+ WebFrame *webFrame = [self mainFrame];
+
+ WebContentPolicy *contentPolicy = [WebContentPolicy webPolicyWithContentAction:WebContentPolicySave andPath:path];
+ [dataSource _setContentPolicy:contentPolicy];
+ if([webFrame setProvisionalDataSource:dataSource]){
+ [webFrame startLoading];
+ }
+ [dataSource release];
+}
@end
diff --git a/WebKit/WebView.subproj/WebDefaultContextMenuDelegate.m b/WebKit/WebView.subproj/WebDefaultContextMenuDelegate.m
index 095e1f5..087fbb0 100644
--- a/WebKit/WebView.subproj/WebDefaultContextMenuDelegate.m
+++ b/WebKit/WebView.subproj/WebDefaultContextMenuDelegate.m
@@ -10,7 +10,7 @@
#import <WebKit/WebDataSourcePrivate.h>
#import <WebKit/WebDefaultContextMenuHandler.h>
#import <WebKit/WebControllerPolicyHandler.h>
-#import <WebKit/WebControllerPolicyHandlerPrivate.h>
+#import <WebKit/WebControllerPrivate.h>
#import <WebKit/WebFrame.h>
@implementation WebDefaultContextMenuHandler
@@ -105,12 +105,7 @@
// FIXME: This is a hack
WebContentPolicy *contentPolicy = [[controller policyHandler] contentPolicyForMIMEType:@"application/octet-stream" dataSource:dataSource];
- [contentPolicy _setPolicyAction:WebContentPolicySave];
- [dataSource _setContentPolicy:contentPolicy];
- if([webFrame setProvisionalDataSource:dataSource]){
- [webFrame startLoading];
- }
- [dataSource release];
+ [controller _downloadURL:URL toPath:[contentPolicy path]];
}
- (void)openLinkInNewWindow:(id)sender
diff --git a/WebKit/WebView.subproj/WebDefaultContextMenuHandler.m b/WebKit/WebView.subproj/WebDefaultContextMenuHandler.m
index 095e1f5..087fbb0 100644
--- a/WebKit/WebView.subproj/WebDefaultContextMenuHandler.m
+++ b/WebKit/WebView.subproj/WebDefaultContextMenuHandler.m
@@ -10,7 +10,7 @@
#import <WebKit/WebDataSourcePrivate.h>
#import <WebKit/WebDefaultContextMenuHandler.h>
#import <WebKit/WebControllerPolicyHandler.h>
-#import <WebKit/WebControllerPolicyHandlerPrivate.h>
+#import <WebKit/WebControllerPrivate.h>
#import <WebKit/WebFrame.h>
@implementation WebDefaultContextMenuHandler
@@ -105,12 +105,7 @@
// FIXME: This is a hack
WebContentPolicy *contentPolicy = [[controller policyHandler] contentPolicyForMIMEType:@"application/octet-stream" dataSource:dataSource];
- [contentPolicy _setPolicyAction:WebContentPolicySave];
- [dataSource _setContentPolicy:contentPolicy];
- if([webFrame setProvisionalDataSource:dataSource]){
- [webFrame startLoading];
- }
- [dataSource release];
+ [controller _downloadURL:URL toPath:[contentPolicy path]];
}
- (void)openLinkInNewWindow:(id)sender
diff --git a/WebKit/WebView.subproj/WebDefaultPolicyDelegate.m b/WebKit/WebView.subproj/WebDefaultPolicyDelegate.m
index cc262e6..a568c9e 100644
--- a/WebKit/WebView.subproj/WebDefaultPolicyDelegate.m
+++ b/WebKit/WebView.subproj/WebDefaultPolicyDelegate.m
@@ -65,7 +65,7 @@
- (WebClickPolicy *)clickPolicyForElement: (NSDictionary *)elementInformation button: (NSEventType)eventType modifierMask: (unsigned int)eventMask
{
- return [WebClickPolicy webPolicyWithClickAction:WebClickPolicyShow andPath:nil];
+ return [WebClickPolicy webPolicyWithClickAction:WebClickPolicyShow URL:nil andPath:nil];
}
@end
diff --git a/WebKit/WebView.subproj/WebDefaultPolicyHandler.m b/WebKit/WebView.subproj/WebDefaultPolicyHandler.m
index cc262e6..a568c9e 100644
--- a/WebKit/WebView.subproj/WebDefaultPolicyHandler.m
+++ b/WebKit/WebView.subproj/WebDefaultPolicyHandler.m
@@ -65,7 +65,7 @@
- (WebClickPolicy *)clickPolicyForElement: (NSDictionary *)elementInformation button: (NSEventType)eventType modifierMask: (unsigned int)eventMask
{
- return [WebClickPolicy webPolicyWithClickAction:WebClickPolicyShow andPath:nil];
+ return [WebClickPolicy webPolicyWithClickAction:WebClickPolicyShow URL:nil andPath:nil];
}
@end
diff --git a/WebKit/WebView.subproj/WebHTMLView.m b/WebKit/WebView.subproj/WebHTMLView.m
index fce404a..bcb9ca5 100644
--- a/WebKit/WebView.subproj/WebHTMLView.m
+++ b/WebKit/WebView.subproj/WebHTMLView.m
@@ -351,28 +351,45 @@
return YES;
}
-
- (void)windowDidBecomeMain: (NSNotification *)notification
{
if ([notification object] == [self window])
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(mouseMovedNotification:) name: NSMouseMovedNotification object: nil];
}
-
- (void)windowDidResignMain: (NSNotification *)notification
{
if ([notification object] == [self window])
[[NSNotificationCenter defaultCenter] removeObserver: self name: NSMouseMovedNotification object: nil];
}
-- (void)mouseUp: (NSEvent *)event
+- (void)mouseDown: (NSEvent *)event
{
- [[self _bridge] mouseUp:event];
+ if([self _continueAfterCheckingDragForEvent:event]){
+ [[self _bridge] mouseDown:event];
+ }
}
-- (void)mouseDown: (NSEvent *)event
+- (void)mouseUp: (NSEvent *)event
{
- [[self _bridge] mouseDown:event];
+ NSEvent *theEvent;
+
+ if([self _continueAfterClickPolicyForEvent:event]){
+ theEvent = event;
+ }else{
+ // Send a bogus mouse up event so we don't confuse WebCore
+ theEvent = [NSEvent mouseEventWithType: NSLeftMouseUp
+ location: NSMakePoint(0,0)
+ modifierFlags: [event modifierFlags]
+ timestamp: [event timestamp]
+ windowNumber: [event windowNumber]
+ context: [event context]
+ eventNumber: [event eventNumber]
+ clickCount: [event clickCount]
+ pressure: [event pressure]];
+ }
+
+ [[self _bridge] mouseUp:theEvent];
}
- (void)mouseMovedNotification:(NSNotification *)notification
@@ -447,4 +464,18 @@
#endif
+- (unsigned int)draggingSourceOperationMaskForLocal:(BOOL)isLocal
+{
+ return NSDragOperationCopy;
+}
+
+- (NSArray *)namesOfPromisedFilesDroppedAtDestination:(NSURL *)dropDestination
+{
+ NSString *filename = [[_private->draggedURL path] lastPathComponent];
+ NSString *path = [[dropDestination path] stringByAppendingPathComponent:filename];
+
+ [[self _controller] _downloadURL:_private->draggedURL toPath:path];
+ return [NSArray arrayWithObject:filename];
+}
+
@end
diff --git a/WebKit/WebView.subproj/WebHTMLViewPrivate.h b/WebKit/WebView.subproj/WebHTMLViewPrivate.h
index 3a19b33..9e81126 100644
--- a/WebKit/WebView.subproj/WebHTMLViewPrivate.h
+++ b/WebKit/WebView.subproj/WebHTMLViewPrivate.h
@@ -22,6 +22,7 @@
NSCursor *cursor;
BOOL liveAllowsScrolling;
BOOL inWindow;
+ NSURL *draggedURL;
}
@end
@@ -37,4 +38,6 @@
+ (BOOL)_modifierTrackingEnabled;
+ (void)_postFlagsChangedEvent:(NSEvent *)flagsChangedEvent;
- (NSDictionary *)_elementAtPoint:(NSPoint)point;
+- (BOOL)_continueAfterClickPolicyForEvent: (NSEvent *)event;
+- (BOOL)_continueAfterCheckingDragForEvent:(NSEvent *)event;
@end
diff --git a/WebKit/WebView.subproj/WebHTMLViewPrivate.m b/WebKit/WebView.subproj/WebHTMLViewPrivate.m
index 89b72df..d7f8a79 100644
--- a/WebKit/WebView.subproj/WebHTMLViewPrivate.m
+++ b/WebKit/WebView.subproj/WebHTMLViewPrivate.m
@@ -14,6 +14,7 @@
#import <WebKit/WebNSViewExtras.h>
#import <WebKit/WebPluginView.h>
#import <WebKit/WebController.h>
+#import <WebKit/WebControllerPrivate.h>
#import <WebKit/WebBridge.h>
#import <WebKit/WebFramePrivate.h>
#import <WebKit/WebViewPrivate.h>
@@ -38,7 +39,7 @@
- (void)dealloc
{
[cursor release];
-
+ [draggedURL release];
[super dealloc];
}
@@ -127,4 +128,64 @@ BOOL _modifierTrackingEnabled = FALSE;
return elementInfo;
}
+- (BOOL)_continueAfterClickPolicyForEvent: (NSEvent *)event
+{
+ NSPoint point = [self convertPoint:[event locationInWindow] fromView:nil];
+ WebController *controller = [self _controller];
+ WebClickPolicy *clickPolicy;
+
+ clickPolicy = [[controller policyHandler] clickPolicyForElement:[self _elementAtPoint:point]
+ button:[event type]
+ modifierMask:[event modifierFlags]];
+
+ WebPolicyAction clickAction = [clickPolicy policyAction];
+ NSURL *URL = [clickPolicy URL];
+
+ switch (clickAction) {
+ case WebClickPolicyShow:
+ return YES;
+ case WebClickPolicyOpenNewWindow:
+ [[controller windowContext] openNewWindowWithURL:URL];
+ break;
+ case WebClickPolicySave:
+ case WebClickPolicySaveAndOpenExternally:
+ [controller _downloadURL:URL toPath:[clickPolicy path]];
+ break;
+ case WebClickPolicyIgnore:
+ break;
+ default:
+ [NSException raise:NSInvalidArgumentException
+ format:@"clickPolicyForElement:button:modifierMask: returned an invalid WebClickPolicy"];
+ }
+ return NO;
+}
+
+- (BOOL)_continueAfterCheckingDragForEvent:(NSEvent *)event
+{
+ if([self _web_dragShouldBeginFromMouseDown:event withExpiration:[NSDate distantFuture]]){
+
+ NSPoint point = [self convertPoint:[event locationInWindow] fromView:nil];
+ NSDictionary *element = [self _elementAtPoint:point];
+ NSURL *imageURL = [element objectForKey:WebContextImageURL];
+ NSURL *linkURL = [element objectForKey:WebContextLinkURL];
+
+ if(linkURL || imageURL){
+ [_private->draggedURL release];
+
+ if(imageURL){
+ _private->draggedURL = imageURL;
+ }else{
+ _private->draggedURL = linkURL;
+ }
+
+ [_private->draggedURL retain];
+ NSArray *fileType = [NSArray arrayWithObject:[[_private->draggedURL path] pathExtension]];
+ NSRect rect = NSMakeRect(point.x+-16, point.y-16, 32, 32);
+ [self dragPromisedFilesOfTypes:fileType fromRect:rect source:self slideBack:YES event:event];
+ return NO;
+ }
+ }
+ return YES;
+}
+
@end
diff --git a/WebKit/WebView.subproj/WebPolicyDelegate.h b/WebKit/WebView.subproj/WebPolicyDelegate.h
index 3621285..6b4ef14 100644
--- a/WebKit/WebView.subproj/WebPolicyDelegate.h
+++ b/WebKit/WebView.subproj/WebPolicyDelegate.h
@@ -18,6 +18,7 @@ typedef enum {
WebPolicySave,
WebPolicyOpenURL,
WebPolicySaveAndOpen,
+ WebPolicyOpenNewWindow,
WebPolicyIgnore
} WebPolicyAction;
@@ -43,8 +44,8 @@ typedef enum {
} WebContentAction;
typedef enum {
- WebClickPolicyNone = WebPolicyNone,
WebClickPolicyShow = WebPolicyUse,
+ WebClickPolicyOpenNewWindow = WebPolicyOpenNewWindow,
WebClickPolicySave = WebPolicySave,
WebClickPolicySaveAndOpenExternally = WebPolicySaveAndOpen,
WebClickPolicyIgnore = WebPolicyIgnore
@@ -58,6 +59,7 @@ typedef enum {
}
- (WebPolicyAction)policyAction;
- (NSString *)path;
+- (NSURL *)URL;
@end
@@ -74,7 +76,7 @@ typedef enum {
@end
@interface WebClickPolicy : WebPolicy
-+ webPolicyWithClickAction: (WebClickAction)action andPath: (NSString *)thePath;
++ webPolicyWithClickAction: (WebClickAction)action URL:(NSURL *)URL andPath: (NSString *)thePath;
@end
diff --git a/WebKit/WebView.subproj/WebViewPrivate.h b/WebKit/WebView.subproj/WebViewPrivate.h
index 414372f..c3c99f6 100644
--- a/WebKit/WebView.subproj/WebViewPrivate.h
+++ b/WebKit/WebView.subproj/WebViewPrivate.h
@@ -36,4 +36,5 @@
+ (NSString *)_MIMETypeForFile: (NSString *)path;
- (BOOL)_openedByScript;
- (void)_setOpenedByScript:(BOOL)openedByScript;
+- (void)_downloadURL:(NSURL *)URL toPath:(NSString *)path;
@end
diff --git a/WebKit/WebView.subproj/WebViewPrivate.m b/WebKit/WebView.subproj/WebViewPrivate.m
index 88b87a3..977aa0d 100644
--- a/WebKit/WebView.subproj/WebViewPrivate.m
+++ b/WebKit/WebView.subproj/WebViewPrivate.m
@@ -5,6 +5,7 @@
#import <WebKit/WebBackForwardList.h>
#import <WebKit/WebControllerPrivate.h>
+#import <WebKit/WebControllerPolicyHandlerPrivate.h>
#import <WebKit/WebDataSourcePrivate.h>
#import <WebKit/WebDefaultContextMenuHandler.h>
#import <WebKit/WebFramePrivate.h>
@@ -179,5 +180,17 @@
_private->openedByScript = openedByScript;
}
+- (void)_downloadURL:(NSURL *)URL toPath:(NSString *)path
+{
+ WebDataSource *dataSource = [[WebDataSource alloc] initWithURL:URL];
+ WebFrame *webFrame = [self mainFrame];
+
+ WebContentPolicy *contentPolicy = [WebContentPolicy webPolicyWithContentAction:WebContentPolicySave andPath:path];
+ [dataSource _setContentPolicy:contentPolicy];
+ if([webFrame setProvisionalDataSource:dataSource]){
+ [webFrame startLoading];
+ }
+ [dataSource release];
+}
@end
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list