Source/WebCore: <rdar://problem/7337717> Add an option to automatically show tooltips...
authormitz@apple.com <mitz@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 13 Aug 2011 06:25:30 +0000 (06:25 +0000)
committermitz@apple.com <mitz@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 13 Aug 2011 06:25:30 +0000 (06:25 +0000)
https://bugs.webkit.org/show_bug.cgi?id=66178

Reviewed by Simon Fraser.

* WebCore.exp.in: Export setShowsToolTipOverTruncatedText().
* page/Chrome.cpp:
(WebCore::Chrome::setToolTip): If no title is found, and the page is set to show tooltips over
truncated text, try to set the tooltip to the full text of the truncated text, if any.
* page/Settings.cpp:
(WebCore::Settings::Settings): Initialize new member variable.
(WebCore::Settings::setShowsToolTipOverTruncatedText): Added this setter.
* page/Settings.h:
(WebCore::Settings::showsToolTipOverTruncatedText): Added this getter.
* rendering/HitTestResult.cpp:
(WebCore::HitTestResult::innerTextIfTruncated): Added. If the inner node or its nearest enclosing
block has text-overflow: ellipsis and has truncated lines, return the node’s (full) inner text.
* rendering/HitTestResult.h:
* rendering/RootInlineBox.h:
(WebCore::RootInlineBox::hasEllipsisBox): Made this public.

Source/WebKit/mac: Add an option to automatically show tooltips (with the full text) over truncated text
https://bugs.webkit.org/show_bug.cgi?id=66178

Reviewed by Simon Fraser.

* WebView/WebPreferenceKeysPrivate.h: Defined a preference key.
* WebView/WebPreferences.mm:
(+[WebPreferences initialize]): Added a default value of NO for the
ShowsToolTipOverTruncatedText preference.
(-[WebPreferences showsToolTipOverTruncatedText]): Added this getter.
(-[WebPreferences setShowsToolTipOverTruncatedText:]): Added this setter.
* WebView/WebPreferencesPrivate.h:
* WebView/WebView.mm:
(-[WebView _preferencesChanged:]): Added call to Settings::setShowsToolTipOverTruncatedText().

Source/WebKit/win: Add an option to automatically show tooltips (with the full text) over truncated text
https://bugs.webkit.org/show_bug.cgi?id=66178

Reviewed by Simon Fraser.

* Interfaces/IWebPreferencesPrivate.idl: Added accessors.
* WebPreferenceKeysPrivate.h: Defined a preference key.
* WebPreferences.cpp:
(WebPreferences::initializeDefaultSettings): Added a default value of
false for the ShowsToolTipOverTruncatedText preference.
(WebPreferences::showsToolTipOverTruncatedText): Added this getter.
(WebPreferences::setShowsToolTipOverTruncatedText): Added this setter.
* WebPreferences.h:
* WebView.cpp:
(WebView::notifyPreferencesChanged): Added call to Settings::setShowsToolTipOverTruncatedText().

Source/WebKit2: <rdar://problem/7337717> Add an option to automatically show tooltips (with the full text) over truncated text
https://bugs.webkit.org/show_bug.cgi?id=66178

Reviewed by Simon Fraser.

* Shared/WebPreferencesStore.h:
* UIProcess/API/C/WKPreferences.cpp:
(WKPreferencesSetShowsToolTipOverTruncatedText): Added this setter.
(WKPreferencesGetShowsToolTipOverTruncatedText): Added this getter.
* UIProcess/API/C/WKPreferencesPrivate.h:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::updatePreferences): Handle the showsToolTipOverTruncatedText preference.

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

25 files changed:
Source/WebCore/ChangeLog
Source/WebCore/WebCore.exp.in
Source/WebCore/page/Chrome.cpp
Source/WebCore/page/Settings.cpp
Source/WebCore/page/Settings.h
Source/WebCore/rendering/HitTestResult.cpp
Source/WebCore/rendering/HitTestResult.h
Source/WebCore/rendering/RootInlineBox.h
Source/WebKit/mac/ChangeLog
Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h
Source/WebKit/mac/WebView/WebPreferences.mm
Source/WebKit/mac/WebView/WebPreferencesPrivate.h
Source/WebKit/mac/WebView/WebView.mm
Source/WebKit/win/ChangeLog
Source/WebKit/win/Interfaces/IWebPreferencesPrivate.idl
Source/WebKit/win/Interfaces/WebKit.idl
Source/WebKit/win/WebPreferenceKeysPrivate.h
Source/WebKit/win/WebPreferences.cpp
Source/WebKit/win/WebPreferences.h
Source/WebKit/win/WebView.cpp
Source/WebKit2/ChangeLog
Source/WebKit2/Shared/WebPreferencesStore.h
Source/WebKit2/UIProcess/API/C/WKPreferences.cpp
Source/WebKit2/UIProcess/API/C/WKPreferencesPrivate.h
Source/WebKit2/WebProcess/WebPage/WebPage.cpp

index e79ddd68dfd7e9ae5f7117cb80a82d39b8589d1f..361fd28b40e926d8aa6496949e1e98c9addc64a1 100644 (file)
@@ -1,3 +1,26 @@
+2011-08-12  Dan Bernstein  <mitz@apple.com>
+
+        <rdar://problem/7337717> Add an option to automatically show tooltips (with the full text) over truncated text
+        https://bugs.webkit.org/show_bug.cgi?id=66178
+
+        Reviewed by Simon Fraser.
+
+        * WebCore.exp.in: Export setShowsToolTipOverTruncatedText().
+        * page/Chrome.cpp:
+        (WebCore::Chrome::setToolTip): If no title is found, and the page is set to show tooltips over
+        truncated text, try to set the tooltip to the full text of the truncated text, if any.
+        * page/Settings.cpp:
+        (WebCore::Settings::Settings): Initialize new member variable.
+        (WebCore::Settings::setShowsToolTipOverTruncatedText): Added this setter.
+        * page/Settings.h:
+        (WebCore::Settings::showsToolTipOverTruncatedText): Added this getter.
+        * rendering/HitTestResult.cpp:
+        (WebCore::HitTestResult::innerTextIfTruncated): Added. If the inner node or its nearest enclosing
+        block has text-overflow: ellipsis and has truncated lines, return the node’s (full) inner text.
+        * rendering/HitTestResult.h:
+        * rendering/RootInlineBox.h:
+        (WebCore::RootInlineBox::hasEllipsisBox): Made this public.
+
 2011-08-12  Stephen White  <senorblanco@chromium.org>
 
         Ownership of canvas's GraphicsContext3D should be moved to PlatformContextSkia
index 1e12f407c2f46c64ab9cc7c57805bc65514721e5..a95dbd11397c8738f8c1b153b0ca6309105f8292 100644 (file)
@@ -925,6 +925,7 @@ __ZN7WebCore8Settings31setJavaScriptCanAccessClipboardEb
 __ZN7WebCore8Settings31setShrinksStandaloneImagesToFitEb
 __ZN7WebCore8Settings32setAcceleratedCompositingEnabledEb
 __ZN7WebCore8Settings32setNeedsAdobeFrameReloadingQuirkEb
+__ZN7WebCore8Settings32setShowsToolTipOverTruncatedTextEb
 __ZN7WebCore8Settings33setDownloadableBinaryFontsEnabledEb
 __ZN7WebCore8Settings34setLocalFileContentSniffingEnabledEb
 __ZN7WebCore8Settings35setAllowUniversalAccessFromFileURLsEb
index 5c7cb1445ac522c3445ca31018f24bdb78930b83..5b47f199e380f92c0846d78fc3ae8668ad9d0a31 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006, 2007, 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2006, 2007, 2009, 2011 Apple Inc. All rights reserved.
  * Copyright (C) 2008, 2010 Nokia Corporation and/or its subsidiary(-ies)
  *
  * This library is free software; you can redistribute it and/or
@@ -421,6 +421,9 @@ void Chrome::setToolTip(const HitTestResult& result)
     if (toolTip.isEmpty())
         toolTip = result.title(toolTipDirection);
 
+    if (toolTip.isEmpty() && m_page->settings()->showsToolTipOverTruncatedText())
+        toolTip = result.innerTextIfTruncated(toolTipDirection);
+
     // Lastly, for <input type="file"> that allow multiple files, we'll consider a tooltip for the selected filenames
     if (toolTip.isEmpty()) {
         if (Node* node = result.innerNonSharedNode()) {
index c56d01530509cf529bdaf7043041ee0bd6a55cc9..e8e66513a68870307d6006cf83d14128ecb339b1 100644 (file)
@@ -154,6 +154,7 @@ Settings::Settings(Page* page)
     , m_shrinksStandaloneImagesToFit(true)
     , m_usesPageCache(false)
     , m_showsURLsInToolTips(false)
+    , m_showsToolTipOverTruncatedText(false)
     , m_forceFTPDirectoryListings(false)
     , m_developerExtrasEnabled(false)
     , m_authorAndUserStylesEnabled(true)
@@ -559,6 +560,11 @@ void Settings::setShowsURLsInToolTips(bool showsURLsInToolTips)
     m_showsURLsInToolTips = showsURLsInToolTips;
 }
 
+void Settings::setShowsToolTipOverTruncatedText(bool showsToolTipForTruncatedText)
+{
+    m_showsToolTipOverTruncatedText = showsToolTipForTruncatedText;
+}
+
 void Settings::setFTPDirectoryTemplatePath(const String& path)
 {
     m_ftpDirectoryTemplatePath = path;
index b1d961226d76bfac876884e73c8ec76eecbe9dd0..b4a8d35b33ce398650910d2dfee2292f48d05a5d 100644 (file)
@@ -241,6 +241,9 @@ namespace WebCore {
         void setShowsURLsInToolTips(bool);
         bool showsURLsInToolTips() const { return m_showsURLsInToolTips; }
 
+        void setShowsToolTipOverTruncatedText(bool);
+        bool showsToolTipOverTruncatedText() const { return m_showsToolTipOverTruncatedText; }
+
         void setFTPDirectoryTemplatePath(const String&);
         const String& ftpDirectoryTemplatePath() const { return m_ftpDirectoryTemplatePath; }
         
@@ -523,6 +526,7 @@ namespace WebCore {
         bool m_shrinksStandaloneImagesToFit : 1;
         bool m_usesPageCache: 1;
         bool m_showsURLsInToolTips : 1;
+        bool m_showsToolTipOverTruncatedText : 1;
         bool m_forceFTPDirectoryListings : 1;
         bool m_developerExtrasEnabled : 1;
         bool m_authorAndUserStylesEnabled : 1;
index 263301756deb40fc052ce8ff4eaff785507a84d3..b2ce2260c9d436d51a7122a10106bac3fa46f139 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2006, 2008, 2011 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
@@ -32,6 +32,7 @@
 #include "HTMLMediaElement.h"
 #include "HTMLNames.h"
 #include "HTMLParserIdioms.h"
+#include "RenderBlock.h"
 #include "RenderImage.h"
 #include "RenderInline.h"
 #include "Scrollbar.h"
@@ -236,6 +237,32 @@ String HitTestResult::title(TextDirection& dir) const
     return String();
 }
 
+String HitTestResult::innerTextIfTruncated(TextDirection& dir) const
+{
+    for (Node* truncatedNode = m_innerNode.get(); truncatedNode; truncatedNode = truncatedNode->parentNode()) {
+        if (!truncatedNode->isElementNode())
+            continue;
+
+        if (RenderObject* renderer = truncatedNode->renderer()) {
+            if (renderer->isRenderBlock()) {
+                RenderBlock* block = toRenderBlock(renderer);
+                if (block->style()->textOverflow()) {
+                    for (RootInlineBox* line = block->firstRootBox(); line; line = line->nextRootBox()) {
+                        if (line->hasEllipsisBox()) {
+                            dir = block->style()->direction();
+                            return toElement(truncatedNode)->innerText();
+                        }
+                    }
+                }
+                break;
+            }
+        }
+    }
+
+    dir = LTR;
+    return String();
+}
+
 String displayString(const String& string, const Node* node)
 {
     if (!node)
index ddd6d90926990c2cf6b11380b6c878adbef8a5da..7a73637d5ebcc0fca46bd0095564caad24e27abc 100644 (file)
@@ -75,6 +75,7 @@ public:
     String spellingToolTip(TextDirection&) const;
     String replacedString() const;
     String title(TextDirection&) const;
+    String innerTextIfTruncated(TextDirection&) const;
     String altDisplayString() const;
     String titleDisplayString() const;
     Image* image() const;
index a111813966270088bf74c8276a2053a2b9f9dfc9..47bc49f43f1923d04e5a211802c87255319c3a77 100644 (file)
@@ -87,6 +87,7 @@ public:
     void placeEllipsis(const AtomicString& ellipsisStr, bool ltr, float blockLeftEdge, float blockRightEdge, float ellipsisWidth, InlineBox* markupBox = 0);
     virtual float placeEllipsisBox(bool ltr, float blockLeftEdge, float blockRightEdge, float ellipsisWidth, bool& foundBox);
 
+    bool hasEllipsisBox() const { return m_hasEllipsisBoxOrHyphen; }
     EllipsisBox* ellipsisBox() const;
 
     void paintEllipsisBox(PaintInfo&, const LayoutPoint&, LayoutUnit lineTop, LayoutUnit lineBottom) const;
@@ -172,7 +173,6 @@ public:
     virtual const char* boxName() const;
 #endif
 private:
-    bool hasEllipsisBox() const { return m_hasEllipsisBoxOrHyphen; }
     void setHasEllipsisBox(bool hasEllipsisBox) { m_hasEllipsisBoxOrHyphen = hasEllipsisBox; }
 
     int beforeAnnotationsAdjustment() const;
index cb235f35cd0c67c9705b19b00e45d0e8a882b3b6..4a31357a3f3d3c26a71446eb6bbba6da0344764b 100644 (file)
@@ -1,3 +1,20 @@
+2011-08-12  Dan Bernstein  <mitz@apple.com>
+
+        Add an option to automatically show tooltips (with the full text) over truncated text
+        https://bugs.webkit.org/show_bug.cgi?id=66178
+
+        Reviewed by Simon Fraser.
+
+        * WebView/WebPreferenceKeysPrivate.h: Defined a preference key.
+        * WebView/WebPreferences.mm:
+        (+[WebPreferences initialize]): Added a default value of NO for the
+        ShowsToolTipOverTruncatedText preference.
+        (-[WebPreferences showsToolTipOverTruncatedText]): Added this getter.
+        (-[WebPreferences setShowsToolTipOverTruncatedText:]): Added this setter.
+        * WebView/WebPreferencesPrivate.h:
+        * WebView/WebView.mm:
+        (-[WebView _preferencesChanged:]): Added call to Settings::setShowsToolTipOverTruncatedText().
+
 2011-08-12  Sam Weinig  <sam@webkit.org>
 
         Use __builtin_trap() for CRASH when building with clang
index 2775fff928e07f47c4729e15c92df7e587d6c0f2..51181d767b53951829b8ab7b459d93b57f9bb8f0 100644 (file)
 // cover methods themselves are private.
 #define WebKitRespectStandardStyleKeyEquivalentsPreferenceKey @"WebKitRespectStandardStyleKeyEquivalents"
 #define WebKitShowsURLsInToolTipsPreferenceKey @"WebKitShowsURLsInToolTips"
+#define WebKitShowsToolTipOverTruncatedTextPreferenceKey @"WebKitShowsToolTipForTruncatedText"
 #define WebKitPDFDisplayModePreferenceKey @"WebKitPDFDisplayMode"
 #define WebKitPDFScaleFactorPreferenceKey @"WebKitPDFScaleFactor"
 #define WebKitUseSiteSpecificSpoofingPreferenceKey @"WebKitUseSiteSpecificSpoofing"
index c2796f9d8fc335382d466b8caa98b096d5eacfca..84ebaac2df186d75d37e3b1200f75d65bb1c16fc 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005, 2006, 2007 Apple Inc. All rights reserved.
+ * Copyright (C) 2005, 2006, 2007, 2011 Apple Inc. All rights reserved.
  *           (C) 2006 Graham Dennis (graham.dennis@gmail.com)
  *
  * Redistribution and use in source and binary forms, with or without
@@ -337,6 +337,7 @@ static WebCacheModel cacheModelForMainBundle(void)
         [NSNumber numberWithBool:NO],   WebKitPrivateBrowsingEnabledPreferenceKey,
         [NSNumber numberWithBool:NO],   WebKitRespectStandardStyleKeyEquivalentsPreferenceKey,
         [NSNumber numberWithBool:NO],   WebKitShowsURLsInToolTipsPreferenceKey,
+        [NSNumber numberWithBool:NO],   WebKitShowsToolTipOverTruncatedTextPreferenceKey,
         @"1",                           WebKitPDFDisplayModePreferenceKey,
         @"0",                           WebKitPDFScaleFactorPreferenceKey,
         @"0",                           WebKitUseSiteSpecificSpoofingPreferenceKey,
@@ -925,6 +926,16 @@ static WebCacheModel cacheModelForMainBundle(void)
     [self _setBoolValue:flag forKey:WebKitShowsURLsInToolTipsPreferenceKey];
 }
 
+- (BOOL)showsToolTipOverTruncatedText
+{
+    return [self _boolValueForKey:WebKitShowsToolTipOverTruncatedTextPreferenceKey];
+}
+
+- (void)setShowsToolTipOverTruncatedText:(BOOL)flag
+{
+    [self _setBoolValue:flag forKey:WebKitShowsToolTipOverTruncatedTextPreferenceKey];
+}
+
 - (BOOL)textAreasAreResizable
 {
     return [self _boolValueForKey: WebKitTextAreasAreResizablePreferenceKey];
index 7bf2f33b94832e259c7bb6dfdb3384f1d848e7e1..d0446ea0f5ba38bbc0fb733d0e00f544649c2678 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005, 2007 Apple Computer, Inc.  All rights reserved.
+ * Copyright (C) 2005, 2007, 2011 Apple Computer, Inc.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -78,6 +78,9 @@ extern NSString *WebPreferencesChangedInternalNotification;
 - (BOOL)showsURLsInToolTips;
 - (void)setShowsURLsInToolTips:(BOOL)flag;
 
+- (BOOL)showsToolTipOverTruncatedText;
+- (void)setShowsToolTipOverTruncatedText:(BOOL)flag;
+
 - (BOOL)textAreasAreResizable;
 - (void)setTextAreasAreResizable:(BOOL)flag;
 
index 53e917ce511d1dbc0771bca9dc90a9e0b30cdb6d..2ec9b1886876c36c201af982cb5ef6556d0fcfc7 100644 (file)
@@ -1529,6 +1529,7 @@ static bool needsSelfRetainWhileLoadingQuirk()
     settings->setDOMPasteAllowed([preferences isDOMPasteAllowed]);
     settings->setUsesPageCache([self usesPageCache]);
     settings->setShowsURLsInToolTips([preferences showsURLsInToolTips]);
+    settings->setShowsToolTipOverTruncatedText([preferences showsToolTipOverTruncatedText]);
     settings->setDeveloperExtrasEnabled([preferences developerExtrasEnabled]);
     settings->setAuthorAndUserStylesEnabled([preferences authorAndUserStylesEnabled]);
     settings->setApplicationChromeMode([preferences applicationChromeModeEnabled]);
index 8bd75a1a53aa8bdbd015fa4ebffaf8d8adca2da0..372c3159c48922056b0d71b0bcd9dbc0a4914b51 100644 (file)
@@ -1,3 +1,21 @@
+2011-08-12  Dan Bernstein  <mitz@apple.com>
+
+        Add an option to automatically show tooltips (with the full text) over truncated text
+        https://bugs.webkit.org/show_bug.cgi?id=66178
+
+        Reviewed by Simon Fraser.
+
+        * Interfaces/IWebPreferencesPrivate.idl: Added accessors.
+        * WebPreferenceKeysPrivate.h: Defined a preference key.
+        * WebPreferences.cpp:
+        (WebPreferences::initializeDefaultSettings): Added a default value of
+        false for the ShowsToolTipOverTruncatedText preference.
+        (WebPreferences::showsToolTipOverTruncatedText): Added this getter.
+        (WebPreferences::setShowsToolTipOverTruncatedText): Added this setter.
+        * WebPreferences.h:
+        * WebView.cpp:
+        (WebView::notifyPreferencesChanged): Added call to Settings::setShowsToolTipOverTruncatedText().
+
 2011-08-05  Brent Fulgham  <bfulgham@webkit.org>
 
         WebView::performLayeredWindowUpdate() crashes with
index bdff78c8401ec8d8ea54565c0b5e8b13aef2a36e..01ace36d7881c3614cb1b64abfa988398bbb77cc 100644 (file)
@@ -136,4 +136,8 @@ interface IWebPreferencesPrivate : IUnknown
 
     HRESULT setMediaPlaybackAllowsInline([in] BOOL);
     HRESULT mediaPlaybackAllowsInline([out, retval] BOOL*);
+
+    HRESULT setShowsToolTipOverTruncatedText([in] BOOL);
+    HRESULT showsToolTipOverTruncatedText([out, retval] BOOL*);
+
 }
index 8c78696e6a5b7bf384a0da68b2e90382876b38fe..959688d07f71cc473854ec000c390d5d2b0259d6 100644 (file)
@@ -22,7 +22,7 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
+
 cpp_quote("/*")
 cpp_quote(" * Copyright (C) 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.")
 cpp_quote(" *")
index f99322e954d003a459e486e4e1ff491c41fa7903..a7796d187239ac24388d3a9c679311b10ce302a3 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc.  All rights reserved.
+ * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2011 Apple Inc.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -75,6 +75,7 @@
 // cover methods themselves are private.
 #define WebKitRespectStandardStyleKeyEquivalentsPreferenceKey "WebKitRespectStandardStyleKeyEquivalents"
 #define WebKitShowsURLsInToolTipsPreferenceKey "WebKitShowsURLsInToolTips"
+#define WebKitShowsToolTipOverTruncatedTextPreferenceKey "WebKitShowsToolTipForTruncatedText"
 #define WebKitPDFDisplayModePreferenceKey "WebKitPDFDisplayMode"
 #define WebKitPDFScaleFactorPreferenceKey "WebKitPDFScaleFactor"
 #define WebKitEditableLinkBehaviorPreferenceKey "WebKitEditableLinkBehavior"
index 1a83c7bd8e0cd3e6ec2241dd680eee6ac57e1a3e..d084714352411b8ed70c5de20bb2fb65a6c44344 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006, 2007, 2008, 2009, 2010 Apple Inc.  All rights reserved.
+ * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -225,6 +225,7 @@ void WebPreferences::initializeDefaultSettings()
     CFDictionaryAddValue(defaults, CFSTR(WebKitPrivateBrowsingEnabledPreferenceKey), kCFBooleanFalse);
     CFDictionaryAddValue(defaults, CFSTR(WebKitRespectStandardStyleKeyEquivalentsPreferenceKey), kCFBooleanFalse);
     CFDictionaryAddValue(defaults, CFSTR(WebKitShowsURLsInToolTipsPreferenceKey), kCFBooleanFalse);
+    CFDictionaryAddValue(defaults, CFSTR(WebKitShowsToolTipOverTruncatedTextPreferenceKey), kCFBooleanFalse);
     CFDictionaryAddValue(defaults, CFSTR(WebKitPDFDisplayModePreferenceKey), CFSTR("1"));
     CFDictionaryAddValue(defaults, CFSTR(WebKitPDFScaleFactorPreferenceKey), CFSTR("0"));
 
@@ -1620,6 +1621,21 @@ HRESULT WebPreferences::setAVFoundationEnabled(BOOL enabled)
 #endif
 }
 
+HRESULT WebPreferences::showsToolTipOverTruncatedText(BOOL* showsToolTip)
+{
+    if (!showsToolTip)
+        return E_POINTER;
+
+    *showsToolTip = boolValueForKey(CFSTR(WebKitShowsToolTipOverTruncatedTextPreferenceKey));
+    return S_OK;
+}
+
+HRESULT WebPreferences::setShowsToolTipOverTruncatedText(BOOL showsToolTip)
+{
+    setBoolValue(CFSTR(WebKitShowsToolTipOverTruncatedTextPreferenceKey), showsToolTip);
+    return S_OK;
+}
+
 void WebPreferences::willAddToWebView()
 {
     ++m_numWebViews;
index d16ccef798331cda2fd4a8bde69e7c9eb37d9c2b..02ef8bb3e5f89116e65e8250a909814690695780 100644 (file)
@@ -450,6 +450,9 @@ public:
     virtual HRESULT STDMETHODCALLTYPE mediaPlaybackAllowsInline(BOOL*);
     virtual HRESULT STDMETHODCALLTYPE setMediaPlaybackAllowsInline(BOOL);
 
+    virtual HRESULT STDMETHODCALLTYPE showsToolTipOverTruncatedText(BOOL*);
+    virtual HRESULT STDMETHODCALLTYPE setShowsToolTipOverTruncatedText(BOOL);
+
     // WebPreferences
 
     // This method accesses a different preference key than developerExtrasEnabled.
index 8ce00b26dc18caa6f332c53d4ef83c4a21a18457..098e56295808a6244681eb596bc04226d57c166d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006, 2007, 2008, 2009, 2010 Apple, Inc.  All rights reserved.
+ * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple, Inc.  All rights reserved.
  * Copyright (C) 2009, 2010, 2011 Appcelerator, Inc. All rights reserved.
  * Copyright (C) 2011 Brent Fulgham. All rights reserved.
  *
@@ -4718,6 +4718,13 @@ HRESULT WebView::notifyPreferencesChanged(IWebNotification* notification)
         setZoomMultiplier(m_zoomMultiplier, enabled);
 
     settings->setShowsURLsInToolTips(false);
+
+    hr = preferences->showsToolTipOverTruncatedText(&enabled);
+    if (FAILED(hr))
+        return hr;
+
+    settings->setShowsToolTipOverTruncatedText(enabled);
+
     settings->setForceFTPDirectoryListings(true);
     settings->setDeveloperExtrasEnabled(developerExtrasEnabled());
     settings->setNeedsSiteSpecificQuirks(s_allowSiteSpecificHacks);
index 4ac6b40495df67a1ef880127f64e90a5ce597cb5..3ae42c96c570ad9f7e764a7b684c2fe869a3d2c1 100644 (file)
@@ -1,3 +1,18 @@
+2011-08-12  Dan Bernstein  <mitz@apple.com>
+
+        <rdar://problem/7337717> Add an option to automatically show tooltips (with the full text) over truncated text
+        https://bugs.webkit.org/show_bug.cgi?id=66178
+
+        Reviewed by Simon Fraser.
+
+        * Shared/WebPreferencesStore.h:
+        * UIProcess/API/C/WKPreferences.cpp:
+        (WKPreferencesSetShowsToolTipOverTruncatedText): Added this setter.
+        (WKPreferencesGetShowsToolTipOverTruncatedText): Added this getter.
+        * UIProcess/API/C/WKPreferencesPrivate.h:
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::updatePreferences): Handle the showsToolTipOverTruncatedText preference.
+
 2011-08-12  Mark Rowe  <mrowe@apple.com>
 
         Be more forward-looking in the choice of compiler.
index 20d7d0ef8b21e03890f5f3a0d79dadf7279aa901..7b9555d85010718f93df822717456f3d5eb29e71 100644 (file)
@@ -85,6 +85,7 @@ namespace WebKit {
     macro(MediaPlaybackRequiresUserGesture, mediaPlaybackRequiresUserGesture, Bool, bool, false) \
     macro(MediaPlaybackAllowsInline, mediaPlaybackAllowsInline, Bool, bool, true) \
     macro(InspectorStartsAttached, inspectorStartsAttached, Bool, bool, true) \
+    macro(ShowsToolTipOverTruncatedText, showsToolTipOverTruncatedText, Bool, bool, false) \
     \
 
 #define FOR_EACH_WEBKIT_DOUBLE_PREFERENCE(macro) \
index 55a2e025855973980a55c2cc44e5d85432b86ba5..2b8f6e463c3147702f3e79ee44dc05387849bb0a 100644 (file)
@@ -601,3 +601,13 @@ bool WKPreferencesGetMediaPlaybackAllowsInline(WKPreferencesRef preferencesRef)
 {
     return toImpl(preferencesRef)->mediaPlaybackAllowsInline();
 }
+
+void WKPreferencesSetShowsToolTipOverTruncatedText(WKPreferencesRef preferencesRef, bool flag)
+{
+    toImpl(preferencesRef)->setShowsToolTipOverTruncatedText(flag);
+}
+
+bool WKPreferencesGetShowsToolTipOverTruncatedText(WKPreferencesRef preferencesRef)
+{
+    return toImpl(preferencesRef)->showsToolTipOverTruncatedText();
+}
index 7e4b6ef4681a6da94c4655b406d443ecc29dcbea..0513f5bef1b7fdd30cb6bd12a9990168dca9524e 100644 (file)
@@ -140,6 +140,10 @@ WK_EXPORT bool WKPreferencesGetMediaPlaybackRequiresUserGesture(WKPreferencesRef
 WK_EXPORT void WKPreferencesSetMediaPlaybackAllowsInline(WKPreferencesRef preferencesRef, bool flag);
 WK_EXPORT bool WKPreferencesGetMediaPlaybackAllowsInline(WKPreferencesRef preferencesRef);
 
+// Defaults to false.
+WK_EXPORT void WKPreferencesSetShowsToolTipOverTruncatedText(WKPreferencesRef preferencesRef, bool flag);
+WK_EXPORT bool WKPreferencesGetShowsToolTipOverTruncatedText(WKPreferencesRef preferencesRef);
+
 #ifdef __cplusplus
 }
 #endif
index 79083e06f8b3c03ad790ea622e137d05bef5df6a..2ee184fadc134d7dfae0daadae289901107020d5 100644 (file)
@@ -1585,6 +1585,7 @@ void WebPage::updatePreferences(const WebPreferencesStore& store)
     settings->setDeviceWidth(store.getUInt32ValueForKey(WebPreferencesKey::deviceWidthKey()));
     settings->setDeviceHeight(store.getUInt32ValueForKey(WebPreferencesKey::deviceHeightKey()));
     settings->setEditableLinkBehavior(static_cast<WebCore::EditableLinkBehavior>(store.getUInt32ValueForKey(WebPreferencesKey::editableLinkBehaviorKey())));
+    settings->setShowsToolTipOverTruncatedText(store.getBoolValueForKey(WebPreferencesKey::showsToolTipOverTruncatedTextKey()));
 
     settings->setAcceleratedCompositingEnabled(store.getBoolValueForKey(WebPreferencesKey::acceleratedCompositingEnabledKey()) && LayerTreeHost::supportsAcceleratedCompositing());
     settings->setAcceleratedDrawingEnabled(store.getBoolValueForKey(WebPreferencesKey::acceleratedDrawingEnabledKey()) && LayerTreeHost::supportsAcceleratedCompositing());