2011-02-04 Xiaomei Ji <xji@chromium.org>
authorxji@chromium.org <xji@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 4 Feb 2011 20:30:20 +0000 (20:30 +0000)
committerxji@chromium.org <xji@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 4 Feb 2011 20:30:20 +0000 (20:30 +0000)
        Reviewed by David Levin.

        Implement "<option> should implement the dir attribute" for chromium port after r76983.
        https://bugs.webkit.org/show_bug.cgi?id=50969

        * src/ChromeClientImpl.cpp:
        (WebKit::ChromeClientImpl::selectItemAlignmentFollowsMenuWritingDirection): Override as true.
        * src/WebViewImpl.cpp: Remove directionality hint from autofill drop-down setting.
2011-02-04  Xiaomei Ji  <xji@chromium.org>

        Reviewed by David Levin.

        Implement "<option> should implement the dir attribute" for chromium port after r76983.
        https://bugs.webkit.org/show_bug.cgi?id=50969

        Use manual test Source/WebCore/manual-tests/pop-up-alignment-and-direction.html
        added in r76983.

        * platform/chromium/PopupMenuChromium.cpp: Remove directionality hint from
        <select> drop-down setting.
        (WebCore::PopupListBox::paintRow): Use <option>'s directionality to paint
        items in drop-down and pass-in bidi override flag when creating text run.
        * platform/chromium/PopupMenuChromium.h: Remove directionalityHint from
        PopupContainerSettings.

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

Source/WebCore/ChangeLog
Source/WebCore/platform/chromium/PopupMenuChromium.cpp
Source/WebCore/platform/chromium/PopupMenuChromium.h
Source/WebKit/chromium/ChangeLog
Source/WebKit/chromium/src/ChromeClientImpl.cpp
Source/WebKit/chromium/src/WebViewImpl.cpp

index 60456d6aa4a36088fe86c4a42a2acebb634f0536..1934a21e9bcf7029f3038d3acbcec27ddc81efa5 100644 (file)
@@ -1,3 +1,20 @@
+2011-02-04  Xiaomei Ji  <xji@chromium.org>
+
+        Reviewed by David Levin.
+
+        Implement "<option> should implement the dir attribute" for chromium port after r76983.
+        https://bugs.webkit.org/show_bug.cgi?id=50969
+
+        Use manual test Source/WebCore/manual-tests/pop-up-alignment-and-direction.html
+        added in r76983.
+
+        * platform/chromium/PopupMenuChromium.cpp: Remove directionality hint from
+        <select> drop-down setting.
+        (WebCore::PopupListBox::paintRow): Use <option>'s directionality to paint
+        items in drop-down and pass-in bidi override flag when creating text run.
+        * platform/chromium/PopupMenuChromium.h: Remove directionalityHint from
+        PopupContainerSettings.
+
 2011-02-04  Jeremy Orlow  <jorlow@chromium.org>
 
         Build fix from merge mistake.
index 2369a9ab13e30fd05d15989dc320635b6ff68a33..28fef5ef2b750bc9dc6bfd1f0a300c8c3ea6c2f5 100644 (file)
@@ -78,12 +78,10 @@ static const TimeStamp kTypeAheadTimeoutMs = 1000;
 // The settings used for the drop down menu.
 // This is the delegate used if none is provided.
 static const PopupContainerSettings dropDownSettings = {
-    true,   // setTextOnIndexChange
-    true,   // acceptOnAbandon
-    false,  // loopSelectionNavigation
-    false,  // restrictWidthOfListBox
-    // display item text in its first strong directional character's directionality.
-    PopupContainerSettings::FirstStrongDirectionalCharacterDirection,
+    true, // setTextOnIndexChange
+    true, // acceptOnAbandon
+    false, // loopSelectionNavigation
+    false // restrictWidthOfListBox
 };
 
 // This class uses WebCore code to paint and handle events for a drop-down list
@@ -968,13 +966,8 @@ void PopupListBox::paintRow(GraphicsContext* gc, const IntRect& rect, int rowInd
     }
 
     // Prepare the directionality to draw text.
-    bool rtl = false;
-    if (m_settings.itemTextDirectionalityHint == PopupContainerSettings::DOMElementDirection)
-        rtl = style.textDirection() == RTL;
-    else if (m_settings.itemTextDirectionalityHint ==
-             PopupContainerSettings::FirstStrongDirectionalCharacterDirection)
-        rtl = itemText.defaultWritingDirection() == WTF::Unicode::RightToLeft;
-    TextRun textRun(itemText.characters(), itemText.length(), false, 0, 0, TextRun::AllowTrailingExpansion, rtl);
+    bool rtl = style.textDirection() == RTL;
+    TextRun textRun(itemText.characters(), itemText.length(), false, 0, 0, TextRun::AllowTrailingExpansion, rtl, style.hasTextDirectionOverride());
     // If the text is right-to-left, make it right-aligned by adjusting its
     // beginning position.
     if (rightAligned)
@@ -1002,7 +995,7 @@ void PopupListBox::paintRow(GraphicsContext* gc, const IntRect& rect, int rowInd
     // Draw the the label if applicable.
     if (itemLabel.isEmpty())
         return;
-    TextRun labelTextRun(itemLabel.characters(), itemLabel.length(), false, 0, 0, TextRun::AllowTrailingExpansion, rtl);
+    TextRun labelTextRun(itemLabel.characters(), itemLabel.length(), false, 0, 0, TextRun::AllowTrailingExpansion, rtl, style.hasTextDirectionOverride());
     if (rightAligned)
         textX = max(0, m_popupClient->clientPaddingLeft() - m_popupClient->clientInsetLeft());
     else
index 84810c7af1fcfa4a0042f329b1b0e2c6e5a0e54a..40fae5201656240cf5c63cf59477313d222ecc46 100644 (file)
@@ -97,22 +97,6 @@ struct PopupContainerSettings {
     // Whether we should restrict the width of the PopupListBox or not.
     // Autocomplete popups are restricted, combo-boxes (select tags) aren't.
     bool restrictWidthOfListBox;
-
-    // A hint on the display directionality of the item text in popup menu.
-    //
-    // We could either display the items in the drop-down using its DOM element's
-    // directionality, or we could display the items in the drop-down using heuristics:
-    // such as in its first strong directionality character's direction.
-    // Please refer to the discussion (especially comment #7 and #10) in
-    // https://bugs.webkit.org/show_bug.cgi?id=27889 for details.
-    enum DirectionalityHint {
-        // Use the DOM element's directionality to display the item text in popup menu.
-        DOMElementDirection,
-        // Use the item text's first strong-directional character's directionality
-        // to display the item text in popup menu.
-        FirstStrongDirectionalCharacterDirection,
-    };
-    DirectionalityHint itemTextDirectionalityHint;
 };
 
 class PopupContainer : public FramelessScrollView {
index ef92a7fb0e5a1bc50105ac2ce267289f325a11b2..cb438cc5e64f60fccae2695515c46dfb15ed647f 100644 (file)
@@ -1,3 +1,14 @@
+2011-02-04  Xiaomei Ji  <xji@chromium.org>
+
+        Reviewed by David Levin.
+
+        Implement "<option> should implement the dir attribute" for chromium port after r76983.
+        https://bugs.webkit.org/show_bug.cgi?id=50969
+
+        * src/ChromeClientImpl.cpp:
+        (WebKit::ChromeClientImpl::selectItemAlignmentFollowsMenuWritingDirection): Override as true.
+        * src/WebViewImpl.cpp: Remove directionality hint from autofill drop-down setting.
+
 2011-02-01  Jeremy Orlow  <jorlow@chromium.org>
 
         Reviewed by Nate Chapin.
index 47f2eab808d6b1a5e043e18ea69975acfc6e41ac..067ec64b886ffd80f6896496e152a29ed94edb14 100644 (file)
@@ -862,7 +862,7 @@ bool ChromeClientImpl::selectItemWritingDirectionIsNatural()
 
 bool ChromeClientImpl::selectItemAlignmentFollowsMenuWritingDirection()
 {
-    return false;
+    return true;
 }
 
 PassRefPtr<PopupMenu> ChromeClientImpl::createPopupMenu(PopupMenuClient* client) const
index 0b21f5f63f0a21daab067d795beca0988cb0522e..b259b2cbdd9b1a8281301e0467bef2cf749d9872 100644 (file)
@@ -201,13 +201,9 @@ COMPILE_ASSERT_MATCHING_ENUM(DragOperationEvery);
 static const PopupContainerSettings autoFillPopupSettings = {
     false, // setTextOnIndexChange
     false, // acceptOnAbandon
-    true,  // loopSelectionNavigation
-    false, // restrictWidthOfListBox (For security reasons show the entire entry
-           // so the user doesn't enter information he did not intend to.)
-    // For suggestions, we use the direction of the input field as the direction
-    // of the popup items. The main reason is to keep the display of items in
-    // drop-down the same as the items in the input field.
-    PopupContainerSettings::DOMElementDirection,
+    true, // loopSelectionNavigation
+    false // restrictWidthOfListBox (For security reasons show the entire entry
+          // so the user doesn't enter information he did not intend to.)
 };
 
 static bool shouldUseExternalPopupMenus = false;