Reviewed by John.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 12 Nov 2004 01:29:05 +0000 (01:29 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 12 Nov 2004 01:29:05 +0000 (01:29 +0000)
        - added _wasFirstResponderAtMouseDownTime method to bridge so we can fix
          <rdar://problem/3846152> REGRESSION (125-166): can't drag text out of <input type=text> fields
          with a subsequent change to WebCore.

        * WebCoreSupport.subproj/WebBridge.m:
        (wasFirstResponderAtMouseDownTime:): Added. Calls _wasFirstResponderAtMouseDownTime
        on the WebHTMLView.
        (_getPreSmartSet): Move global inside the function, add (void) for cleanliness.
        (_getPostSmartSet): Ditto.

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLViewPrivate dealloc]): Release firstResponderAtMouseDownTime.
        (-[WebHTMLView _setMouseDownEvent:]): Early exit if event is not changing.
        Set firstResponderAtMouseDownTime to the first responder.
        (-[WebHTMLView mouseDown:]): Release firstResponderAtMouseDownTime after handling
        the mouseDown event.
        (-[WebHTMLView _wasFirstResponderAtMouseDownTime:]): Added. Uses the
        firstResponderAtMouseDownTime field.
        * WebView.subproj/WebHTMLViewInternal.h: Added firstResponderAtMouseDownTime field
        and _wasFirstResponderAtMouseDownTime method.

        * English.lproj/StringsNotToBeLocalized.txt: Update for recent changes.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@7985 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebKit/ChangeLog
WebKit/English.lproj/StringsNotToBeLocalized.txt
WebKit/WebCoreSupport.subproj/WebBridge.m
WebKit/WebView.subproj/WebHTMLView.m
WebKit/WebView.subproj/WebHTMLViewInternal.h

index 2f9db0b..9cd4ef5 100644 (file)
@@ -1,3 +1,30 @@
+2004-11-11  Darin Adler  <darin@apple.com>
+
+        Reviewed by John.
+
+        - added _wasFirstResponderAtMouseDownTime method to bridge so we can fix
+          <rdar://problem/3846152> REGRESSION (125-166): can't drag text out of <input type=text> fields
+          with a subsequent change to WebCore.
+
+        * WebCoreSupport.subproj/WebBridge.m:
+        (wasFirstResponderAtMouseDownTime:): Added. Calls _wasFirstResponderAtMouseDownTime
+        on the WebHTMLView.
+        (_getPreSmartSet): Move global inside the function, add (void) for cleanliness.
+        (_getPostSmartSet): Ditto.
+
+        * WebView.subproj/WebHTMLView.m:
+        (-[WebHTMLViewPrivate dealloc]): Release firstResponderAtMouseDownTime.
+        (-[WebHTMLView _setMouseDownEvent:]): Early exit if event is not changing.
+        Set firstResponderAtMouseDownTime to the first responder.
+        (-[WebHTMLView mouseDown:]): Release firstResponderAtMouseDownTime after handling
+        the mouseDown event.
+        (-[WebHTMLView _wasFirstResponderAtMouseDownTime:]): Added. Uses the
+        firstResponderAtMouseDownTime field.
+        * WebView.subproj/WebHTMLViewInternal.h: Added firstResponderAtMouseDownTime field
+        and _wasFirstResponderAtMouseDownTime method.
+
+        * English.lproj/StringsNotToBeLocalized.txt: Update for recent changes.
+
 2004-11-11  Richard Williamson   <rjw@apple.com>
 
         Reviewed by Chris.
index 5c92cdd..673d61f 100644 (file)
@@ -21,6 +21,8 @@
 "%@://%@"
 "%d"
 "%dpx"
+"([\"\'#$/-`{"
+")].,;:?\'!\"%*-/}"
 ","
 "- %s:%d %s - "
 "/"
@@ -35,7 +37,6 @@
 "/tmp/XXXXXX.tiff"
 "0x0"
 "1"
-"1.0.0"
 "1000"
 "13"
 "16"
 "Library/Internet Plug-Ins"
 "List count: %d items\n"
 "List total size: %d bytes\n"
-"LoginWindowDidSwitchFromUserNotification"
-"LoginWindowDidSwitchToUserNotification"
 "Lucida Grande"
 "Mozilla/5.0 (Macintosh; U; PPC Mac OS X; %@) AppleWebKit/%@ (KHTML, like Gecko) %@"
 "Mozilla/5.0 (Macintosh; U; PPC Mac OS X; %@) AppleWebKit/%@ (KHTML, like Gecko)"
 "WebHistoryItemsRemovedNotification"
 "WebHistoryLoadedNotification"
 "WebHistorySavedNotification"
-"WebHostToSiteURLs"
 "WebIconDatabaseDidAddIconNotification"
 "WebIconDatabaseDirectoryDefaultsKey"
 "WebIconDatabaseVersion"
 "WebKitTabToLinksPreferenceKey"
 "WebKitUserStyleSheetEnabledPreferenceKey"
 "WebKitUserStyleSheetLocationPreferenceKey"
+"WebLoginWindowDidSwitchFromUserNotification"
+"WebLoginWindowDidSwitchToUserNotification"
 "WebMainResource"
 "WebMethodNotYetImplemented"
 "WebModalDialogPretendWindow"
 "WebPlugInAttributesKey"
 "WebPlugInBaseURLKey"
 "WebPlugInContainerKey"
+"WebPlugInModeKey"
 "WebPluginAttributes"
 "WebPluginBaseURL"
 "WebPluginContainer"
 "text/calendar"
 "text/directory"
 "text/html"
+"text/pdf"
 "text/plain"
 "text/qif"
 "text/rtf"
 "utf-16"
 "visitCount"
 "webarchive"
+"webplugin"
 "x"
 "x-apple-web-kit/"
 "{GIF}"
@@ -373,10 +376,10 @@ Misc.subproj/WebKitLogging.m
 Misc.subproj/WebNSURLExtras.m:"file"
 Plugins.subproj/WebBaseNetscapePluginView.m:"height"
 Plugins.subproj/WebBaseNetscapePluginView.m:"width"
+Plugins.subproj/WebBasePluginPackage.m:"Java Applet Plugin Enabler"
 Plugins.subproj/WebBasePluginPackage.m:"name: %@\npath: %@\nmimeTypes:\n%@\npluginDescription:%@"
 Plugins.subproj/WebNetscapePluginPackage.m:"RealPlayer Plugin"
 Plugins.subproj/WebNetscapePluginPackage.m:"main"
-Plugins.subproj/WebPluginDatabase.m:"Java Applet Plugin Enabler"
 Plugins.subproj/WebPluginDocumentView.m:"type"
 WebCoreSupport.subproj/WebBridge.m:"height"
 WebCoreSupport.subproj/WebBridge.m:"width"
@@ -402,6 +405,7 @@ WebView.subproj/WebHTMLView.m:"baseline"
 WebView.subproj/WebHTMLView.m:"black"
 WebView.subproj/WebHTMLView.m:"bold"
 WebView.subproj/WebHTMLView.m:"center"
+WebView.subproj/WebHTMLView.m:"color"
 WebView.subproj/WebHTMLView.m:"i"
 WebView.subproj/WebHTMLView.m:"italic"
 WebView.subproj/WebHTMLView.m:"justify"
index dd32d9c..4863f8a 100644 (file)
@@ -308,6 +308,17 @@ NSString *WebPluginContainerKey =   @"WebPluginContainer";
     [webView _popPerformingProgrammaticFocus];
 }
 
+- (BOOL)wasFirstResponderAtMouseDownTime:(NSResponder *)responder;
+{
+    ASSERT(_frame != nil);
+    NSView *documentView = [[_frame frameView] documentView];
+    if (![documentView isKindOfClass:[WebHTMLView class]]) {
+        return NO;
+    }
+    WebHTMLView *webHTMLView = (WebHTMLView *)documentView;
+    return [webHTMLView _wasFirstResponderAtMouseDownTime:responder];
+}
+
 - (void)closeWindowSoon
 {
     [[_frame webView] performSelector:@selector(_closeWindow) withObject:nil afterDelay:0.0];
@@ -1456,10 +1467,10 @@ static id <WebFormDelegate> formDelegate(WebBridge *self)
 // MF:!!! Another difference in both of these sets from the old text object is we include all the whitespace in whitespaceAndNewlineCharacterSet.
 #define _preSmartString @"([\"\'#$/-`{"
 #define _postSmartString @")].,;:?\'!\"%*-/}"
-static NSMutableCharacterSet *_preSmartSet = nil;
-static NSMutableCharacterSet *_postSmartSet = nil;
 
-static NSCharacterSet *_getPreSmartSet() {
+static NSCharacterSet *_getPreSmartSet(void)
+{
+    static NSMutableCharacterSet *_preSmartSet = nil;
     if (!_preSmartSet) {
         _preSmartSet = [[NSMutableCharacterSet characterSetWithCharactersInString:_preSmartString] retain];
         [_preSmartSet formUnionWithCharacterSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
@@ -1478,7 +1489,9 @@ static NSCharacterSet *_getPreSmartSet() {
     return _preSmartSet;
 }
 
-static NSCharacterSet *_getPostSmartSet() {
+static NSCharacterSet *_getPostSmartSet(void)
+{
+    static NSMutableCharacterSet *_postSmartSet = nil;
     if (!_postSmartSet) {
         _postSmartSet = [[NSMutableCharacterSet characterSetWithCharactersInString:_postSmartString] retain];
         [_postSmartSet formUnionWithCharacterSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
index b094e02..4265874 100644 (file)
@@ -206,6 +206,7 @@ static BOOL forceRealHitTest = NO;
     [pluginController release];
     [toolTip release];
     [compController release];
+    [firstResponderAtMouseDownTime release];
 
     [super dealloc];
 }
@@ -2132,9 +2133,17 @@ static WebHTMLView *lastHitView = nil;
 - (void)_setMouseDownEvent:(NSEvent *)event
 {
     ASSERT([event type] == NSLeftMouseDown || [event type] == NSRightMouseDown || [event type] == NSOtherMouseDown);
+
+    if (event == _private->mouseDownEvent) {
+        return;
+    }
+
     [event retain];
     [_private->mouseDownEvent release];
     _private->mouseDownEvent = event;
+
+    [_private->firstResponderAtMouseDownTime release];
+    _private->firstResponderAtMouseDownTime = [[[self window] firstResponder] retain];
 }
 
 - (BOOL)acceptsFirstMouse:(NSEvent *)event
@@ -2192,18 +2201,19 @@ static WebHTMLView *lastHitView = nil;
 
     // If the web page handles the context menu event and menuForEvent: returns nil, we'll get control click events here.
     // We don't want to pass them along to KHTML a second time.
-    if ([event modifierFlags] & NSControlKeyMask) {
-        return;
+    if (!([event modifierFlags] & NSControlKeyMask)) {
+        _private->ignoringMouseDraggedEvents = NO;
+
+        // Don't do any mouseover while the mouse is down.
+        [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(_updateMouseoverWithFakeEvent) object:nil];
+
+        // Let KHTML get a chance to deal with the event. This will call back to us
+        // to start the autoscroll timer if appropriate.
+        [[self _bridge] mouseDown:event];
     }
-    
-    _private->ignoringMouseDraggedEvents = NO;
-    
-    // Don't do any mouseover while the mouse is down.
-    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(_updateMouseoverWithFakeEvent) object:nil];
 
-    // Let KHTML get a chance to deal with the event. This will call back to us
-    // to start the autoscroll timer if appropriate.
-    [[self _bridge] mouseDown:event];
+    [_private->firstResponderAtMouseDownTime release];
+    _private->firstResponderAtMouseDownTime = nil;
 }
 
 - (void)dragImage:(NSImage *)dragImage
@@ -4166,6 +4176,11 @@ static DOMRange *unionDOMRanges(DOMRange *a, DOMRange *b)
     return [[self _webView] smartInsertDeleteEnabled] && [[self _bridge] selectionGranularity] == WebSelectByWord;
 }
 
+- (BOOL)_wasFirstResponderAtMouseDownTime:(NSResponder *)responder
+{
+    return responder == _private->firstResponderAtMouseDownTime;
+}
+
 @end
 
 @implementation WebHTMLView (WebNSTextInputSupport)
index 9b14bf1..f999d69 100644 (file)
@@ -53,6 +53,8 @@
     WebTextCompleteController *compController;
     
     BOOL transparentBackground;
+
+    NSResponder *firstResponderAtMouseDownTime;
 }
 @end
 
@@ -61,4 +63,5 @@
 - (void)_updateFontPanel;
 - (unsigned int)_delegateDragSourceActionMask;
 - (BOOL)_canSmartCopyOrDelete;
+- (BOOL)_wasFirstResponderAtMouseDownTime:(NSResponder *)responder;
 @end