Reviewed by John Sullivan.
authorharrison <harrison@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 18 Sep 2006 21:37:08 +0000 (21:37 +0000)
committerharrison <harrison@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 18 Sep 2006 21:37:08 +0000 (21:37 +0000)
        <rdar://problem/4494340> REGRESSION: Making the font size bigger/smaller in an HTML message doesn't affect the body until you reopen it

        Problem was the public API -[WebView setTextSizeMultiplier] did not notify anyone that the value changed.

        * WebView/WebDocumentInternal.h:
        Add _textSizeMultiplierChanged to the _WebDocumentTextSizing protocol.

        * WebView/WebHTMLView.m:
        (-[WebHTMLView _textSizeMultiplierChanged]):
        Send [self _updateTextSizeMultiplier].

        * WebView/WebPDFView.m:
        (-[WebPDFView _textSizeMultiplierChanged]):
        ASSERT_NOT_REACHED() because WebPDFView does not track the common multiplier.

        * WebView/WebView.m:
        (-[WebView setTextSizeMultiplier:]):
        Send [self _notifyTextSizeMultiplierChanged];

        (-[WebView _performTextSizingSelector:withObject:onTrackingDocs:selForNonTrackingDocs:newScaleFactor:]):
        Alter the _textSizeMultiplier directly so that notification is not sent.
        Minor formatting.

        (-[WebView _notifyTextSizeMultiplierChanged]):
        New. Send _textSizeMultiplierChanged to all document views that track the common multiplier.

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

WebKit/ChangeLog
WebKit/WebView/WebDocumentInternal.h
WebKit/WebView/WebHTMLView.m
WebKit/WebView/WebPDFView.m
WebKit/WebView/WebView.m

index 1dac0bc420ab1e8e53e52df9fa4c846a4dd10dc3..534f0e9675ecef7f94522a0c01720e7e1f1b7022 100644 (file)
@@ -1,3 +1,33 @@
+2006-09-17  David Harrison  <harrison@apple.com>
+
+        Reviewed by John Sullivan.
+
+        <rdar://problem/4494340> REGRESSION: Making the font size bigger/smaller in an HTML message doesn't affect the body until you reopen it
+
+        Problem was the public API -[WebView setTextSizeMultiplier] did not notify anyone that the value changed.
+        
+        * WebView/WebDocumentInternal.h:
+        Add _textSizeMultiplierChanged to the _WebDocumentTextSizing protocol.
+        
+        * WebView/WebHTMLView.m:
+        (-[WebHTMLView _textSizeMultiplierChanged]):
+        Send [self _updateTextSizeMultiplier].
+        
+        * WebView/WebPDFView.m:
+        (-[WebPDFView _textSizeMultiplierChanged]):
+        ASSERT_NOT_REACHED() because WebPDFView does not track the common multiplier.
+        
+        * WebView/WebView.m:
+        (-[WebView setTextSizeMultiplier:]):
+        Send [self _notifyTextSizeMultiplierChanged];
+        
+        (-[WebView _performTextSizingSelector:withObject:onTrackingDocs:selForNonTrackingDocs:newScaleFactor:]):
+        Alter the _textSizeMultiplier directly so that notification is not sent.
+        Minor formatting.
+        
+        (-[WebView _notifyTextSizeMultiplierChanged]):
+        New. Send _textSizeMultiplierChanged to all document views that track the common multiplier.
+
 2006-09-16  Brady Eidson <beidson@apple.com>
 
         Reviewed by Hyatt
index 0d9e101ccaf9af146b37d1ffee009c6a6ada8cc7..f662d906e20738862f7722288b0b1385066a8f0f 100644 (file)
@@ -45,6 +45,9 @@
 // with the smaller/larger commands, which in the user model operate across all frames of the WebView.
 - (BOOL)_tracksCommonSizeFactor;
 
+// Views that track the common size factor need to be told when the WebView itself changed the value.
+- (void)_textSizeMultiplierChanged;
+
 // Views that do not track the common size factor must answer for themselves if they are able to zoom in
 // or out.  Views that do track it are not sent these messages.
 - (BOOL)_canMakeTextSmaller;
index d10ff42da9f401adcc220f22d2a82f9dd0bd62e1..233a473ecc2f317bf3ca83bbe814e01d255023fd 100644 (file)
@@ -4844,6 +4844,11 @@ static DOMRange *unionDOMRanges(DOMRange *a, DOMRange *b)
     return YES;
 }
 
+- (void)_textSizeMultiplierChanged
+{
+    [self _updateTextSizeMultiplier];
+}
+
 // never sent because we track the common size factor
 - (BOOL)_canMakeTextSmaller          {   ASSERT_NOT_REACHED(); return NO;    }
 - (BOOL)_canMakeTextLarger           {   ASSERT_NOT_REACHED(); return NO;    }
index c21a7147def9ec724199d7a257efffdca7c7cbef..08183c4d9de4af92b70e406120c188443c52b65d 100644 (file)
@@ -803,6 +803,9 @@ static BOOL PDFSelectionsAreEqual(PDFSelection *selectionA, PDFSelection *select
     [PDFSubviewProxy setScaleFactor:1.0f];
 }
 
+// never sent because we do not track the common size factor
+- (void)_textSizeMultiplierChanged      { ASSERT_NOT_REACHED(); }
+
 - (BOOL)_tracksCommonSizeFactor
 {
     // We keep our own scale factor instead of tracking the common one in the WebView for a couple reasons.
index 90fe2ec8f405567e8035226bd5c64d5d78ff275a..37efa4fd320a13c87fd01374336b5de60c73e5e1 100644 (file)
@@ -316,6 +316,7 @@ macro(yankAndSelect) \
 - (BOOL)_continuousCheckingAllowed;
 - (NSResponder *)_responderForResponderOperations;
 - (BOOL)_performTextSizingSelector:(SEL)sel withObject:(id)arg onTrackingDocs:(BOOL)doTrackingViews selForNonTrackingDocs:(SEL)testSel newScaleFactor:(float)newScaleFactor;
+- (void)_notifyTextSizeMultiplierChanged;
 @end
 
 NSString *WebElementDOMNodeKey =            @"WebElementDOMNode";
@@ -2105,10 +2106,12 @@ NS_ENDHANDLER
 
 - (void)setTextSizeMultiplier:(float)m
 {
-    if (_private->textSizeMultiplier == m) {
+    // NOTE: This has no visible effect when viewing a PDF (see <rdar://problem/4737380>)
+    if (_private->textSizeMultiplier == m)
         return;
-    }
+
     _private->textSizeMultiplier = m;
+    [self _notifyTextSizeMultiplierChanged];
 }
 
 - (float)textSizeMultiplier
@@ -3484,23 +3487,20 @@ static WebFrameView *containingFrameView(NSView *view)
 // to that new factor before we send sel to any of them. 
 - (BOOL)_performTextSizingSelector:(SEL)sel withObject:(id)arg onTrackingDocs:(BOOL)doTrackingViews selForNonTrackingDocs:(SEL)testSel newScaleFactor:(float)newScaleFactor
 {
-    if ([[self mainFrame] dataSource] == nil) {
+    if ([[self mainFrame] dataSource] == nil)
         return NO;
-    }
     
     BOOL foundSome = NO;
     NSArray *docViews = [[self mainFrame] _documentViews];
-    int i;
-    for (i = [docViews count]-1; i >= 0; i--) {
+    for (int i = [docViews count]-1; i >= 0; i--) {
         id docView = [docViews objectAtIndex:i];
         if ([docView conformsToProtocol:@protocol(_WebDocumentTextSizing)]) {
             id <_WebDocumentTextSizing> sizingDocView = (id <_WebDocumentTextSizing>)docView;
             BOOL isSuitable;
             if ([sizingDocView _tracksCommonSizeFactor]) {
                 isSuitable = doTrackingViews;
-                if (isSuitable && newScaleFactor != 0) {
-                    [self setTextSizeMultiplier:newScaleFactor];
-                }
+                if (isSuitable && newScaleFactor != 0)
+                    _private->textSizeMultiplier = newScaleFactor;
             } else {
                 // Incantation to perform a selector returning a BOOL.
                 isSuitable = ((BOOL(*)(id, SEL))objc_msgSend)(sizingDocView, testSel);
@@ -3521,6 +3521,24 @@ static WebFrameView *containingFrameView(NSView *view)
     return foundSome;
 }
 
+- (void)_notifyTextSizeMultiplierChanged
+{
+    if ([[self mainFrame] dataSource] == nil)
+        return;
+
+    NSArray *docViews = [[self mainFrame] _documentViews];
+    for (int i = [docViews count]-1; i >= 0; i--) {
+        id docView = [docViews objectAtIndex:i];
+        if ([docView conformsToProtocol:@protocol(_WebDocumentTextSizing)] == NO)
+            continue;
+
+        id <_WebDocumentTextSizing> sizingDocView = (id <_WebDocumentTextSizing>)docView;
+        if ([sizingDocView _tracksCommonSizeFactor])
+            [sizingDocView _textSizeMultiplierChanged];
+    }
+
+}
+
 @end
 
 @implementation WebView (WebViewBridge)