WebCore:
authorkocienda <kocienda@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 19 Nov 2004 18:43:54 +0000 (18:43 +0000)
committerkocienda <kocienda@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 19 Nov 2004 18:43:54 +0000 (18:43 +0000)
        Reviewed by Harrison

        Fix for this bug:

        <rdar://problem/3655241> setTypingStyle: does not set the real typing style, and typingStyle does not return it

        * khtml/khtml_part.cpp:
        (KHTMLPart::computeAndSetTypingStyle): New helper that does the work of reducing a passed-in style
        declaration given the current selection, and then sets the minimum necessary style as the typing
        style on the part.
        (KHTMLPart::applyStyle): Call new computeAndSetTypingStyle. The guts of computeAndSetTypingStyle used
        to be here in the selection-as-caret case. But now [WebCoreBridge setTypingStyle:] needs this code
        as well.
        * khtml/khtml_part.h: Declare new computeAndSetTypingStyle() function.
        * kwq/WebCoreBridge.h: Declare new typingStyle and setTypingStyle: methods.
        * kwq/WebCoreBridge.mm:
        (-[WebCoreBridge typingStyle]): Calls through to the part to retrieve the typing style.
        (-[WebCoreBridge setTypingStyle:]): Calls through to the part to set the typing style.

WebKit:

        Reviewed by Harrison

        Fix for this bug:

        <rdar://problem/3655241> setTypingStyle: does not set the real typing style, and typingStyle does not return it

        * WebCoreSupport.subproj/WebBridge.m:
        (-[WebBridge respondToChangedContents]): No longer call through to WebKit to set the typing style. The call
        was part of the misguided use of the setTypingStyle: and typingStyle as a cache of what was stored on
        the WebCore side.
        (-[WebBridge respondToChangedSelection]): Ditto.
        * WebView.subproj/WebView.m:
        (-[WebViewPrivate dealloc]): Object no longer has typingStyle ivar.
        (-[WebView setTypingStyle:]): Call over the bridge to set typing style.
        (-[WebView typingStyle]): Call over the bridge to retrieve typing style.
        * WebView.subproj/WebViewInternal.h: Object no longer has typingStyle ivar.

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

WebCore/ChangeLog-2005-08-23
WebCore/khtml/khtml_part.cpp
WebCore/khtml/khtml_part.h
WebCore/kwq/WebCoreBridge.h
WebCore/kwq/WebCoreBridge.mm
WebKit/ChangeLog
WebKit/WebCoreSupport.subproj/WebBridge.m
WebKit/WebView.subproj/WebView.m
WebKit/WebView.subproj/WebViewInternal.h

index 539f4ebccac9d86456d3726efbaba32909983d5f..4e49d184c3bdeb6dc2155b764b29a4b2bfd89257 100644 (file)
@@ -1,3 +1,24 @@
+2004-11-19  Ken Kocienda  <kocienda@apple.com>
+
+        Reviewed by Harrison
+
+        Fix for this bug:
+        
+        <rdar://problem/3655241> setTypingStyle: does not set the real typing style, and typingStyle does not return it
+
+        * khtml/khtml_part.cpp:
+        (KHTMLPart::computeAndSetTypingStyle): New helper that does the work of reducing a passed-in style
+        declaration given the current selection, and then sets the minimum necessary style as the typing
+        style on the part.
+        (KHTMLPart::applyStyle): Call new computeAndSetTypingStyle. The guts of computeAndSetTypingStyle used
+        to be here in the selection-as-caret case. But now [WebCoreBridge setTypingStyle:] needs this code
+        as well.
+        * khtml/khtml_part.h: Declare new computeAndSetTypingStyle() function.
+        * kwq/WebCoreBridge.h: Declare new typingStyle and setTypingStyle: methods.
+        * kwq/WebCoreBridge.mm: 
+        (-[WebCoreBridge typingStyle]): Calls through to the part to retrieve the typing style.
+        (-[WebCoreBridge setTypingStyle:]): Calls through to the part to set the typing style.
+
 2004-11-18  David Harrison  <harrison@apple.com>
 
         Reviewed by Darin.
index 5299b138762ad285f1f3a62f9b0d029875f34b7c..f1fb3d531f660eb49a32428ef106b9549d2a40fe 100644 (file)
@@ -5322,6 +5322,40 @@ bool KHTMLPart::canUndo() const
 
 #endif
 
+void KHTMLPart::computeAndSetTypingStyle(CSSStyleDeclarationImpl *style)
+{
+    if (!style || style->length() == 0) {
+        clearTypingStyle();
+        return;
+    }
+
+    // Calculate the current typing style.
+    CSSMutableStyleDeclarationImpl *mutableStyle = style->makeMutable();
+    mutableStyle->ref();
+    if (typingStyle()) {
+        typingStyle()->merge(mutableStyle);
+        mutableStyle->deref();
+        mutableStyle = typingStyle();
+        mutableStyle->ref();
+    }
+    CSSComputedStyleDeclarationImpl computedStyle(selection().start().upstream(StayInBlock).node());
+    computedStyle.diff(mutableStyle);
+    
+    // Handle block styles, substracting these from the typing style.
+    CSSMutableStyleDeclarationImpl *blockStyle = mutableStyle->copyBlockProperties();
+    blockStyle->ref();
+    blockStyle->diff(mutableStyle);
+    if (xmlDocImpl() && blockStyle->length() > 0) {
+        EditCommandPtr cmd(new ApplyStyleCommand(xmlDocImpl(), blockStyle));
+        cmd.apply();
+    }
+    blockStyle->deref();
+    
+    // Set the remaining style as the typing style.
+    setTypingStyle(mutableStyle);
+    mutableStyle->deref();
+}
+
 void KHTMLPart::applyStyle(CSSStyleDeclarationImpl *style)
 {
     switch (selection().state()) {
@@ -5329,31 +5363,7 @@ void KHTMLPart::applyStyle(CSSStyleDeclarationImpl *style)
             // do nothing
             break;
         case Selection::CARET: {
-            // Calculate the current typing style.
-            CSSMutableStyleDeclarationImpl *mutableStyle = style->makeMutable();
-            mutableStyle->ref();
-            if (typingStyle()) {
-                typingStyle()->merge(mutableStyle);
-                mutableStyle->deref();
-                mutableStyle = typingStyle();
-                mutableStyle->ref();
-            }
-            CSSComputedStyleDeclarationImpl computedStyle(selection().start().upstream(StayInBlock).node());
-            computedStyle.diff(mutableStyle);
-            
-            // Handle block styles, substracting these from the typing style.
-            CSSMutableStyleDeclarationImpl *blockStyle = mutableStyle->copyBlockProperties();
-            blockStyle->ref();
-            blockStyle->diff(mutableStyle);
-            if (xmlDocImpl() && blockStyle->length() > 0) {
-                EditCommandPtr cmd(new ApplyStyleCommand(xmlDocImpl(), blockStyle));
-                cmd.apply();
-            }
-            blockStyle->deref();
-            
-            // Set the remaining style as the typing style.
-            setTypingStyle(mutableStyle);
-            mutableStyle->deref();
+            computeAndSetTypingStyle(style);
             break;
         }
         case Selection::RANGE:
index d0cce4d116fbaf2e9234037f19bf8a447f00aa7d..663923c623cbaf87fb82168120eabfa244eafa5d 100644 (file)
@@ -888,6 +888,7 @@ public:
   void undo();
   bool canRedo() const;
   bool canUndo() const;
+  void computeAndSetTypingStyle(DOM::CSSStyleDeclarationImpl *);
   void applyStyle(DOM::CSSStyleDeclarationImpl *);
   TriState selectionHasStyle(DOM::CSSStyleDeclarationImpl *) const;
   bool selectionStartHasStyle(DOM::CSSStyleDeclarationImpl *) const;
index 1c1965264458eb4bc05ea3fa48b6d601a28bbc2e..d230e6498ec97e3908279dc0da759e3b24e9c654 100644 (file)
@@ -350,6 +350,8 @@ typedef enum {
 - (void)deleteSelectionWithSmartDelete:(BOOL)smartDelete;
 - (void)deleteKeyPressed;
 
+- (DOMCSSStyleDeclaration *)typingStyle;
+- (void)setTypingStyle:(DOMCSSStyleDeclaration *)style;
 - (void)applyStyle:(DOMCSSStyleDeclaration *)style;
 - (BOOL)selectionStartHasStyle:(DOMCSSStyleDeclaration *)style;
 - (void)applyEditingStyleToBodyElement;
index a89cdb38f2b66280820b373ebc393cf865c03dd4..94ad024f53f10c610e802f1583b804cc821e3cc0 100644 (file)
@@ -1702,6 +1702,20 @@ static HTMLFormElementImpl *formElementFromDOMElement(DOMElement *element)
     [self ensureSelectionVisible];
 }
 
+- (DOMCSSStyleDeclaration *)typingStyle
+{
+    if (!_part || !_part->typingStyle())
+        return nil;
+    return [DOMCSSStyleDeclaration _styleDeclarationWithImpl:_part->typingStyle()];
+}
+
+- (void)setTypingStyle:(DOMCSSStyleDeclaration *)style
+{
+    if (!_part)
+        return;
+    _part->computeAndSetTypingStyle([style _styleDeclarationImpl]);
+}
+
 - (void)applyStyle:(DOMCSSStyleDeclaration *)style
 {
     if (!_part)
index 5d956d9ab5fbd64d775544109892d5746f54e42a..b3c38462e0a3d67ad3b885f1e46f0bf81384b0c9 100644 (file)
@@ -1,3 +1,22 @@
+2004-11-19  Ken Kocienda  <kocienda@apple.com>
+
+        Reviewed by Harrison
+
+        Fix for this bug:
+
+        <rdar://problem/3655241> setTypingStyle: does not set the real typing style, and typingStyle does not return it
+
+        * WebCoreSupport.subproj/WebBridge.m:
+        (-[WebBridge respondToChangedContents]): No longer call through to WebKit to set the typing style. The call
+        was part of the misguided use of the setTypingStyle: and typingStyle as a cache of what was stored on
+        the WebCore side.
+        (-[WebBridge respondToChangedSelection]): Ditto.
+        * WebView.subproj/WebView.m:
+        (-[WebViewPrivate dealloc]): Object no longer has typingStyle ivar.
+        (-[WebView setTypingStyle:]): Call over the bridge to set typing style.
+        (-[WebView typingStyle]): Call over the bridge to retrieve typing style.
+        * WebView.subproj/WebViewInternal.h: Object no longer has typingStyle ivar.
+
 2004-11-18  John Sullivan  <sullivan@apple.com>
 
         Reviewed by Darin.
index 4863f8af60a5f903bdc6947c674644a9e37bfc28..aa7e8a1c1cbb2e7ab3693d0e896953020f058844 100644 (file)
@@ -1318,7 +1318,6 @@ static id <WebFormDelegate> formDelegate(WebBridge *self)
     if ([view isKindOfClass:[WebHTMLView class]]) {
         [(WebHTMLView *)view _updateFontPanel];
     }
-    [[_frame webView] setTypingStyle:nil];
     [[NSNotificationCenter defaultCenter] postNotificationName:WebViewDidChangeNotification object:[_frame webView]];
 }
 
@@ -1328,7 +1327,6 @@ static id <WebFormDelegate> formDelegate(WebBridge *self)
     if ([view isKindOfClass:[WebHTMLView class]]) {
         [(WebHTMLView *)view _selectionChanged];
     }
-    [[_frame webView] setTypingStyle:nil];
     [[NSNotificationCenter defaultCenter] postNotificationName:WebViewDidChangeSelectionNotification object:[_frame webView]];
 }
 
index 9861dedbbc9bdf23979414677d8ac5eabd5ae7e6..c792b5c3125c9db38e30188daf1059a4f2ecddb9 100644 (file)
@@ -164,7 +164,6 @@ NSString *_WebMainFrameURLKey =         @"mainFrameURL";
     [progressItems release];
         
     [mediaStyle release];
-    [typingStyle release];
     
     [super dealloc];
 }
@@ -2556,20 +2555,12 @@ static WebFrame *incrementFrame(WebFrame *curr, BOOL forward, BOOL wrapFlag)
 
 - (void)setTypingStyle:(DOMCSSStyleDeclaration *)style
 {
-    // FIXME: We do nothing with this typing style right now other than store it.
-    if (style == _private->typingStyle)
-        return;
-
-    DOMCSSStyleDeclaration *oldStyle = _private->typingStyle;
-    _private->typingStyle = [style retain];
-    if (oldStyle)
-        [oldStyle release];
+    [[self _bridgeForCurrentSelection] setTypingStyle:style];
 }
 
 - (DOMCSSStyleDeclaration *)typingStyle
 {
-    // FIXME: We do nothing with this typing style right now other than store it.
-    return _private->typingStyle;
+    return [[self _bridgeForCurrentSelection] typingStyle];
 }
 
 - (void)setSmartInsertDeleteEnabled:(BOOL)flag
index 8995d314b955bce91dc2b92a9b3a27112aeb2e2f..27cbd0324781c514ff6370da151efaa80f4393da 100644 (file)
@@ -74,8 +74,6 @@
     unsigned int dragDestinationActionMask;
     WebBridge *dragCaretBridge;
     
-    DOMCSSStyleDeclaration *typingStyle;
-
     BOOL hasSpellCheckerDocumentTag;
     int spellCheckerDocumentTag;