WebCore:
authordarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 12 Feb 2008 00:16:44 +0000 (00:16 +0000)
committerdarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 12 Feb 2008 00:16:44 +0000 (00:16 +0000)
        Reviewed by Mitz.

        - fix <rdar://problem/5726016> REGRESSION: Xcode News window renders
          incorrectly due to visibility fix

        Added an Xcode-specific quirk.

        * WebCore.base.exp: Added export for new Settings function.
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setProperty): Here's the crazy quirk.
        If you try to change the visibilty on a node with the class name tab_content,
        instead it will use display:none.
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Initialize m_needsXcodeVisibilityQuirk. Also
        initialize m_fontRenderingMode! This seems like it was a bug before, but we
        probably were getting lucky and always getting 0 on Windows, which is the
        only place the setting matters.
        (WebCore::Settings::setNeedsXcodeVisibilityQuirk): Added.
        * page/Settings.h:
        (WebCore::Settings::needsXcodeVisibilityQuirk): Added.

WebKit/mac:

        Reviewed by Mitz.

        - fix <rdar://problem/5726016> REGRESSION: Xcode News window renders
          incorrectly due to visibility fix

        Added an Xcode-specific quirk.

        * Misc/WebKitVersionChecks.h: Added a constant for the "linked on or after"
        part of the check.

        * WebView/WebView.mm:
        (-[WebView _needsXcodeVisibilityQuirk]): Added.
        (-[WebView _preferencesChangedNotification:]): Added a call to
        setNeedsXcodeVisibilityQuirk based on _needsXcodeVisibilityQuirk.

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

WebCore/ChangeLog
WebCore/WebCore.base.exp
WebCore/css/CSSMutableStyleDeclaration.cpp
WebCore/page/Settings.cpp
WebCore/page/Settings.h
WebKit/mac/ChangeLog
WebKit/mac/Misc/WebKitVersionChecks.h
WebKit/mac/WebView/WebView.mm

index ff8870f29cd62693611f0a2287e58b4822630c18..c653d755b8862b1e7e07c86fdcf4e3141bc85964 100644 (file)
@@ -1,3 +1,26 @@
+2008-02-11  Darin Adler  <darin@apple.com>
+
+        Reviewed by Mitz.
+
+        - fix <rdar://problem/5726016> REGRESSION: Xcode News window renders
+          incorrectly due to visibility fix
+
+        Added an Xcode-specific quirk.
+
+        * WebCore.base.exp: Added export for new Settings function.
+        * css/CSSMutableStyleDeclaration.cpp:
+        (WebCore::CSSMutableStyleDeclaration::setProperty): Here's the crazy quirk.
+        If you try to change the visibilty on a node with the class name tab_content,
+        instead it will use display:none.
+        * page/Settings.cpp:
+        (WebCore::Settings::Settings): Initialize m_needsXcodeVisibilityQuirk. Also
+        initialize m_fontRenderingMode! This seems like it was a bug before, but we
+        probably were getting lucky and always getting 0 on Windows, which is the
+        only place the setting matters.
+        (WebCore::Settings::setNeedsXcodeVisibilityQuirk): Added.
+        * page/Settings.h:
+        (WebCore::Settings::needsXcodeVisibilityQuirk): Added.
+
 2008-02-11  Timothy Hatcher  <timothy@apple.com>
 
         Reviewed by Brady Eidson.
index 032b5f0f5fabd8a3669a62020a8398be4aa7cd2c..65873fee72b6d081b96740453c6a0ee64edbe77e 100644 (file)
@@ -491,6 +491,7 @@ __ZN7WebCore8Settings26setDefaultTextEncodingNameERKNS_6StringE
 __ZN7WebCore8Settings27setFTPDirectoryTemplatePathERKNS_6StringE
 __ZN7WebCore8Settings27setLoadsImagesAutomaticallyEb
 __ZN7WebCore8Settings28setForceFTPDirectoryListingsEb
+__ZN7WebCore8Settings28setNeedsXcodeVisibilityQuirkEb
 __ZN7WebCore8Settings29setAuthorAndUserStylesEnabledEb
 __ZN7WebCore8Settings31setShrinksStandaloneImagesToFitEb
 __ZN7WebCore8Settings32setNeedsAdobeFrameReloadingQuirkEb
@@ -539,7 +540,6 @@ __ZN7WebCore9TimerBaseD2Ev
 __ZN7WebCore9pageCacheEv
 __ZN7WebCoreeqERKNS_19ResourceRequestBaseES2_
 __ZN7WebCoreeqERKNS_4KURLES2_
-__ZNK7WebCore5Frame37baseWritingDirectionForSelectionStartEv
 __ZNK7WebCore11CachedImage5imageEv
 __ZNK7WebCore11ContextMenu19platformDescriptionEv
 __ZNK7WebCore11FrameLoader10isCompleteEv
@@ -652,6 +652,7 @@ __ZNK7WebCore5Frame19setInViewSourceModeEb
 __ZNK7WebCore5Frame30applyEditingStyleToBodyElementEv
 __ZNK7WebCore5Frame31fontAttributesForSelectionStartEv
 __ZNK7WebCore5Frame33removeEditingStyleFromBodyElementEv
+__ZNK7WebCore5Frame37baseWritingDirectionForSelectionStartEv
 __ZNK7WebCore5Frame4pageEv
 __ZNK7WebCore5Frame4treeEv
 __ZNK7WebCore5Frame4viewEv
index 2434cf8718825533ec8db1ae552d086648263522..a702b8ed68b33c3f7f8934bf9d030107ae975bdc 100644 (file)
@@ -1,8 +1,6 @@
-/**
- * This file is part of the DOM implementation for KDE.
- *
+/*
  * (C) 1999-2003 Lars Knoll (knoll@kde.org)
- * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc.
+ * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
 #include "CSSProperty.h"
 #include "CSSPropertyNames.h"
 #include "CSSStyleSheet.h"
+#include "CSSValueKeywords.h"
 #include "CSSValueList.h"
 #include "Document.h"
 #include "ExceptionCode.h"
+#include "Settings.h"
 #include "StyledElement.h"
 
 using namespace std;
@@ -525,6 +525,21 @@ bool CSSMutableStyleDeclaration::setProperty(int propertyID, const String& value
         return ec == 0;
     }
 
+    // Quirk for Xcode 3.0 initial help content. It relied on our incorrect handling of visibility
+    // of elements nested inside visibility: hiddent content.
+    if (propertyID == CSS_PROP_VISIBILITY && m_node && m_node->isHTMLElement() && static_cast<HTMLElement*>(m_node)->className() == "tab_content") {
+        if (Settings* settings = m_node->document()->settings()) {
+            if (settings->needsXcodeVisibilityQuirk()) {
+                setProperty(CSS_PROP_VISIBILITY, CSS_VAL_VISIBLE, false, notifyChanged);
+                if (value == "hidden")
+                    setProperty(CSS_PROP_DISPLAY, CSS_VAL_NONE, false, notifyChanged);
+                else
+                    removeProperty(CSS_PROP_DISPLAY, ec);
+                return true;
+            }
+        }
+    }
+
     // When replacing an existing property value, this moves the property to the end of the list.
     // Firefox preserves the position, and MSIE moves the property to the beginning.
     CSSParser parser(useStrictParsing());
index 89f0a6da10eb43b9c5d9344d8b7705c494e2bd3a..f537b2103edb8547edbd9c251f5c03e430bcb9ec 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006, 2007 Apple Computer, Inc.  All rights reserved.
+ * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -69,6 +69,8 @@ Settings::Settings(Page* page)
     , m_forceFTPDirectoryListings(false)
     , m_developerExtrasEnabled(false)
     , m_authorAndUserStylesEnabled(true)
+    , m_fontRenderingMode(0)
+    , m_needsXcodeVisibilityQuirk(false)
 {
     // A Frame may not have been created yet, so we initialize the AtomicString 
     // hash before trying to use it.
@@ -316,4 +318,9 @@ FontRenderingMode Settings::fontRenderingMode() const
     return static_cast<FontRenderingMode>(m_fontRenderingMode);
 }
 
+void Settings::setNeedsXcodeVisibilityQuirk(bool needsQuirk)
+{
+    m_needsXcodeVisibilityQuirk = needsQuirk;
+}
+
 } // namespace WebCore
index 213e5bd2ef9fc4aa4d123656645c69a0baf8950d..a8c6465e6ed803a9eea00b67d3bba304cad91c2a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003, 2006 Apple Computer, Inc.  All rights reserved.
+ * Copyright (C) 2003, 2006, 2007, 2008 Apple Inc. All rights reserved.
  *           (C) 2006 Graham Dennis (graham.dennis@gmail.com)
  *
  * Redistribution and use in source and binary forms, with or without
@@ -28,8 +28,8 @@
 #define Settings_h
 
 #include "AtomicString.h"
-#include "KURL.h"
 #include "FontDescription.h"
+#include "KURL.h"
 
 namespace WebCore {
 
@@ -43,8 +43,7 @@ namespace WebCore {
         EditableLinkNeverLive
     };
 
-    class Settings
-    {
+    class Settings {
     public:
         Settings(Page*);
 
@@ -147,6 +146,9 @@ namespace WebCore {
         void setFontRenderingMode(FontRenderingMode mode);
         FontRenderingMode fontRenderingMode() const;
 
+        void setNeedsXcodeVisibilityQuirk(bool);
+        bool needsXcodeVisibilityQuirk() const { return m_needsXcodeVisibilityQuirk; }
+
     private:
         Page* m_page;
         
@@ -183,6 +185,7 @@ namespace WebCore {
         bool m_developerExtrasEnabled : 1;
         bool m_authorAndUserStylesEnabled : 1;
         unsigned m_fontRenderingMode : 1;
+        bool m_needsXcodeVisibilityQuirk : 1;
     };
 
 } // namespace WebCore
index e1be6a67e617e82c5d58908d6dd3b378041a8789..cd77c5e845ac0117bfc86d34b2f1c575056836d4 100644 (file)
@@ -1,3 +1,20 @@
+2008-02-11  Darin Adler  <darin@apple.com>
+
+        Reviewed by Mitz.
+
+        - fix <rdar://problem/5726016> REGRESSION: Xcode News window renders
+          incorrectly due to visibility fix
+
+        Added an Xcode-specific quirk.
+
+        * Misc/WebKitVersionChecks.h: Added a constant for the "linked on or after"
+        part of the check.
+
+        * WebView/WebView.mm:
+        (-[WebView _needsXcodeVisibilityQuirk]): Added.
+        (-[WebView _preferencesChangedNotification:]): Added a call to
+        setNeedsXcodeVisibilityQuirk based on _needsXcodeVisibilityQuirk.
+
 2008-02-10  Darin Adler  <darin@apple.com>
 
         - fix http://bugs.webkit.org/show_bug.cgi?id=17274
index 793dc7374b2f4ac42fbcdf2ad150e9a657fba175..05bf8a7e6d63550f722c4c1752fbcdc534975817 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006 Apple Computer, Inc.  All rights reserved.
+ * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-/* Version numbers are based on the 'current library version' specified in the WebKit build rules.
-   All of these methods return or take version numbers with each part shifted to the left 2 bytes.
-   For example the version 1.2.3 is returned as 0x00010203 and version 200.3.5 is returned as 0x00C80305
-   A version of -1 is returned if the main executable did not link against WebKit (should never happen). */
+/*
+    Version numbers are based on the 'current library version' specified in the WebKit build rules.
+    All of these methods return or take version numbers with each part shifted to the left 2 bytes.
+    For example the version 1.2.3 is returned as 0x00010203 and version 200.3.5 is returned as 0x00C80305
+    A version of -1 is returned if the main executable did not link against WebKit (should never happen).
 
-/* Please use the current WebKit version number, available in WebKit/Configurations/Version.xcconfig,
-   when adding a new version constant. */
+    Please use the current WebKit version number, available in WebKit/Configurations/Version.xcconfig,
+    when adding a new version constant.
+*/
 
 #define WEBKIT_FIRST_VERSION_WITH_3_0_CONTEXT_MENU_TAGS 0x020A0000 // 522.0.0
 #define WEBKIT_FIRST_VERSION_WITH_LOCAL_RESOURCE_SECURITY_RESTRICTION 0x020A0000 // 522.0.0
@@ -44,6 +46,7 @@
 #define WEBKIT_FIRST_VERSION_WITH_CACHE_MODEL_API 0x020B0500 // 523.5.0
 #define WEBKIT_FIRST_VERSION_WITHOUT_JAVASCRIPT_RETURN_QUIRK 0x020D0100 // 525.1.0
 #define WEBKIT_FIRST_VERSION_WITH_IE_COMPATIBLE_KEYBOARD_EVENT_DISPATCH 0x020D0100 // 525.1.0
+#define WEBKIT_FIRST_VERSION_WITHOUT_XCODE_QUIRK 0x020D0700 // 525.7.0
 
 #ifdef __cplusplus
 extern "C" {
index 519ce9852876ac3c27bb1e4367f0abbac429ac11..0cc79edbe6c1e49dbdc9c11cabad568e03657730 100644 (file)
@@ -921,12 +921,27 @@ static bool debugWidget = true;
         return needsQuirks;
 
     needsQuirks = !WebKitLinkedOnOrAfter(WEBKIT_FIRST_VERSION_WITH_IE_COMPATIBLE_KEYBOARD_EVENT_DISPATCH)
-               && ![[[NSBundle mainBundle] bundleIdentifier] isEqualToString:@"com.apple.Safari"];
+        && ![[[NSBundle mainBundle] bundleIdentifier] isEqualToString:@"com.apple.Safari"];
     checked = YES;
 
     return needsQuirks;
 }
 
+- (BOOL)_needsXcodeVisibilityQuirk
+{
+    static BOOL checked = NO;
+    static BOOL needsQuirk = NO;
+
+    if (checked)
+        return needsQuirk;
+
+    needsQuirk = !WebKitLinkedOnOrAfter(WEBKIT_FIRST_VERSION_WITHOUT_XCODE_QUIRK)
+        && [[[NSBundle mainBundle] bundleIdentifier] isEqualToString:@"com.apple.Xcode"];
+    checked = YES;
+
+    return needsQuirk;
+}
+
 - (void)_preferencesChangedNotification:(NSNotification *)notification
 {
     WebPreferences *preferences = (WebPreferences *)[notification object];
@@ -979,6 +994,7 @@ static bool debugWidget = true;
         settings->setUserStyleSheetLocation([NSURL URLWithString:@""]);
     settings->setNeedsAdobeFrameReloadingQuirk([self _needsAdobeFrameReloadingQuirk]);
     settings->setNeedsKeyboardEventDisambiguationQuirks([self _needsKeyboardEventDisambiguationQuirks]);
+    settings->setNeedsXcodeVisibilityQuirk([self _needsXcodeVisibilityQuirk]);
 }
 
 static inline IMP getMethod(id o, SEL s)