.: If select element in Windows is off screen horizontally,
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 24 Jul 2012 00:48:06 +0000 (00:48 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 24 Jul 2012 00:48:06 +0000 (00:48 +0000)
menu is either inappropriately resized or positioned offscreen.
https://bugs.webkit.org/show_bug.cgi?id=91913
<rdar://problem/7611229>

Patch by Roger Fong <roger_fong@apple.com> on 2012-07-23
Reviewed by Tim Horton.

Add a manual test to verify that popup menus render in the correct place.

* ManualTests/win/select-menu-off-screen.html: Added.

Source/WebCore: On Windows, if select element is off screen horizontally,
menu is either inappropriately resized or positioned offscreen.
https://bugs.webkit.org/show_bug.cgi?id=91913
<rdar://problem/7611229>

Patch by Roger Fong <roger_fong@apple.com> on 2012-07-23
Reviewed by Tim Horton.

If the select element is positioned off the edge of the screen to the left,
the menu is resized. It should not be resized, just shifted to remain on the screen.
If the select element is positioned off the edge of the screen to the right,
the menu goes off screen instead of being shifted over to appear on screen.
This problem only occurs on Windows.

Test: ManualTests/win/select-menu-off-screen.html

* platform/win/PopupMenuWin.cpp:
(WebCore::PopupMenuWin::calculatePositionAndSize):
Modified final horizontal position calculation code to position
popup menu on screen if it would otherwise go off.

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

ChangeLog
ManualTests/win/select-menu-off-screen.html [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/platform/win/PopupMenuWin.cpp

index fed2be2..c9fa818 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2012-07-23  Roger Fong  <roger_fong@apple.com>
+
+        If select element in Windows is off screen horizontally, 
+        menu is either inappropriately resized or positioned offscreen.
+        https://bugs.webkit.org/show_bug.cgi?id=91913
+        <rdar://problem/7611229>
+
+        Reviewed by Tim Horton.
+
+        Add a manual test to verify that popup menus render in the correct place.
+        
+        * ManualTests/win/select-menu-off-screen.html: Added.
+
 2012-07-23  Simon Fraser  <simon.fraser@apple.com>
 
         Implement sticky positioning
diff --git a/ManualTests/win/select-menu-off-screen.html b/ManualTests/win/select-menu-off-screen.html
new file mode 100644 (file)
index 0000000..6711b0e
--- /dev/null
@@ -0,0 +1,22 @@
+<html>
+<body>
+    <ol>
+    <li>Maximize window.</li>
+    <li>Click on left menu and make sure whole menu (all of the entries should be completely visible) appears on screen against the left edge of the screen.</li>
+    <li>Click on right menuand make sure whole menu (all of the entries should be completely visible) appears on screen against the right edge of the screen.</li>
+    </ol>
+    <select id="left-select-over" style="margin-left:-50px;">
+      <option value="first">First</option>
+      <option value="second">Second</option>
+      <option value="third">Third</option>
+      <option value="fourth">Fourth</option>
+    </select>
+    <select id="right-select-over" style="float:right; margin-right:-50px;">
+      <option value="first">First</option>
+      <option value="second">Second</option>
+      <option value="third">Third</option>
+      <option value="fourth">Fourth</option>
+    </select>
+</body>
+<html>
+
index f683a35..761f9b8 100644 (file)
@@ -1,3 +1,25 @@
+2012-07-23  Roger Fong  <roger_fong@apple.com>
+
+        On Windows, if select element is off screen horizontally, 
+        menu is either inappropriately resized or positioned offscreen.
+        https://bugs.webkit.org/show_bug.cgi?id=91913
+        <rdar://problem/7611229>
+
+        Reviewed by Tim Horton.
+
+        If the select element is positioned off the edge of the screen to the left, 
+        the menu is resized. It should not be resized, just shifted to remain on the screen.
+        If the select element is positioned off the edge of the screen to the right, 
+        the menu goes off screen instead of being shifted over to appear on screen.
+        This problem only occurs on Windows.
+        
+        Test: ManualTests/win/select-menu-off-screen.html
+
+        * platform/win/PopupMenuWin.cpp:
+        (WebCore::PopupMenuWin::calculatePositionAndSize):
+        Modified final horizontal position calculation code to position
+        popup menu on screen if it would otherwise go off.
+        
 2012-07-23  David Dorwin  <ddorwin@chromium.org>
 
         Fixed crash in webkitAddKey() when key parameter is null.
index b18c53f..eb5c5b1 100644 (file)
@@ -378,10 +378,11 @@ void PopupMenuWin::calculatePositionAndSize(const IntRect& r, FrameView* v)
     }
 
     // Check that we don't go off the screen horizontally
-    if (popupRect.x() < screen.x()) {
-        popupRect.setWidth(popupRect.width() - (screen.x() - popupRect.x()));
+    if (popupRect.x() + popupRect.width() > screen.width())
+        popupRect.setX(screen.x() + screen.width() - popupRect.width());
+    if (popupRect.x() < screen.x())
         popupRect.setX(screen.x());
-    }
+
     m_windowRect = popupRect;
     return;
 }