Bug 649849, part 1 - Make -moz-appearance:none on a combobox remove the dropdown button (for WebKit compat). r=roc
authorMats Palmgren <matspal@gmail.com>
Thu, 02 Oct 2014 13:05:15 +0000 (2014-10-02)
changeset 208387 161e4dbfff7d2d4e9e2fb593433fc3f5f5f23eff
parent 208386 e845072de8df4b3e0341f4a1b1537d769bba5421
child 208388 e2d1b98b34e6f367ed6a8f14db2aca191c480f7e
push id27582
push userryanvm@gmail.com
push dateThu, 02 Oct 2014 16:20:06 +0000 (2014-10-02)
treeherdermozilla-central@5d6ec4dddf14 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersroc
bugs649849
milestone35.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 649849, part 1 - Make -moz-appearance:none on a combobox remove the dropdown button (for WebKit compat). r=roc
layout/forms/nsComboboxControlFrame.cpp
layout/reftests/native-theme/combobox-nonnative-when-styled-ref.html
layout/reftests/native-theme/combobox-nonnative-when-styled.html
layout/reftests/text-overflow/combobox-zoom-ref.html
layout/reftests/text-overflow/combobox-zoom.html
--- a/layout/forms/nsComboboxControlFrame.cpp
+++ b/layout/forms/nsComboboxControlFrame.cpp
@@ -26,16 +26,17 @@
 #include "nsListControlFrame.h"
 #include "nsAutoPtr.h"
 #include "nsStyleSet.h"
 #include "nsNodeInfoManager.h"
 #include "nsContentCreatorFunctions.h"
 #include "nsLayoutUtils.h"
 #include "nsDisplayList.h"
 #include "nsITheme.h"
+#include "nsThemeConstants.h"
 #include "nsRenderingContext.h"
 #include "mozilla/Likely.h"
 #include <algorithm>
 #include "nsTextNode.h"
 #include "mozilla/AsyncEventDispatcher.h"
 #include "mozilla/EventStates.h"
 #include "mozilla/LookAndFeel.h"
 #include "mozilla/MouseEvents.h"
@@ -729,18 +730,21 @@ nsComboboxControlFrame::GetIntrinsicISiz
     dropdownContentWidth = NSCoordSaturatingSubtract(dropdownContentWidth,
                                                      scrollbarWidth,
                                                      nscoord_MAX);
 
     displayWidth = std::max(dropdownContentWidth, displayWidth);
   }
 
   // add room for the dropmarker button if there is one
-  if (!IsThemed() || presContext->GetTheme()->ThemeNeedsComboboxDropmarker())
+  if ((!IsThemed() ||
+       presContext->GetTheme()->ThemeNeedsComboboxDropmarker()) &&
+      StyleDisplay()->mAppearance != NS_THEME_NONE) {
     displayWidth += scrollbarWidth;
+  }
 
   return displayWidth;
 
 }
 
 nscoord
 nsComboboxControlFrame::GetMinISize(nsRenderingContext *aRenderingContext)
 {
@@ -808,17 +812,18 @@ nsComboboxControlFrame::Reflow(nsPresCon
     // it's released in its ReflowFinished / ReflowCallbackCanceled.
     unused << resize.forget();
   }
 
   // Get the width of the vertical scrollbar.  That will be the width of the
   // dropdown button.
   nscoord buttonWidth;
   const nsStyleDisplay *disp = StyleDisplay();
-  if (IsThemed(disp) && !aPresContext->GetTheme()->ThemeNeedsComboboxDropmarker()) {
+  if ((IsThemed(disp) && !aPresContext->GetTheme()->ThemeNeedsComboboxDropmarker()) ||
+      StyleDisplay()->mAppearance == NS_THEME_NONE) {
     buttonWidth = 0;
   }
   else {
     nsIScrollableFrame* scrollable = do_QueryFrame(mListControlFrame);
     NS_ASSERTION(scrollable, "List must be a scrollable frame");
     buttonWidth = scrollable->GetNondisappearingScrollbarWidth(
       PresContext(), aReflowState.rendContext);
     if (buttonWidth > aReflowState.ComputedWidth()) {
--- a/layout/reftests/native-theme/combobox-nonnative-when-styled-ref.html
+++ b/layout/reftests/native-theme/combobox-nonnative-when-styled-ref.html
@@ -1,17 +1,21 @@
 <!DOCTYPE HTML>
+<div style="position:relative">
+<!-- mask the dropdown button -->
+<div style="position:absolute; width:50px; left:7px; top:0; bottom:0; background:black;"></div>
 <!-- these should make the select non-native -->
-<select size="1" style="-moz-appearance: none; border-width: 0"></select>
-<select size="1" style="-moz-appearance: none; border-width: 1px"></select>
-<select size="1" style="-moz-appearance: none; border-width: 2px"></select>
-<select size="1" style="-moz-appearance: none; border-width: 3px"></select>
-<select size="1" style="-moz-appearance: none; border-width: 4px"></select>
-<select size="1" style="-moz-appearance: none; border-width: 5px"></select>
-<select size="1" style="-moz-appearance: none; border-width: 6px"></select>
-<select size="1" style="-moz-appearance: none; border-style: dotted"></select>
-<select size="1" style="-moz-appearance: none; border-color: green"></select>
-<select size="1" style="-moz-appearance: none; background-color: transparent"></select>
-<select size="1" style="-moz-appearance: none; background-color: white"></select>
+<select size="1" style="-moz-appearance: none; border-width: 0"></select><br>
+<select size="1" style="-moz-appearance: none; border-width: 1px"></select><br>
+<select size="1" style="-moz-appearance: none; border-width: 2px"></select><br>
+<select size="1" style="-moz-appearance: none; border-width: 3px"></select><br>
+<select size="1" style="-moz-appearance: none; border-width: 4px"></select><br>
+<select size="1" style="-moz-appearance: none; border-width: 5px"></select><br>
+<select size="1" style="-moz-appearance: none; border-width: 6px"></select><br>
+<select size="1" style="-moz-appearance: none; border-style: dotted"></select><br>
+<select size="1" style="-moz-appearance: none; border-color: green"></select><br>
+<select size="1" style="-moz-appearance: none; background-color: transparent"></select><br>
+<select size="1" style="-moz-appearance: none; background-color: white"></select><br>
+</div>
 
 <!-- these should let it stay native -->
 <select size="1"></select>
 <select size="1"></select>
--- a/layout/reftests/native-theme/combobox-nonnative-when-styled.html
+++ b/layout/reftests/native-theme/combobox-nonnative-when-styled.html
@@ -1,17 +1,21 @@
 <!DOCTYPE HTML>
+<div style="position:relative">
+<!-- mask the dropdown button -->
+<div style="position:absolute; width:50px; left:7px; top:0; bottom:0; background:black;"></div>
 <!-- these should make the select non-native -->
-<select size="1" style="border-width: 0"></select>
-<select size="1" style="border-width: 1px"></select>
-<select size="1" style="border-width: 2px"></select>
-<select size="1" style="border-width: 3px"></select>
-<select size="1" style="border-width: 4px"></select>
-<select size="1" style="border-width: 5px"></select>
-<select size="1" style="border-width: 6px"></select>
-<select size="1" style="border-style: dotted"></select>
-<select size="1" style="border-color: green"></select>
-<select size="1" style="background-color: transparent"></select>
-<select size="1" style="background-color: white"></select>
+<select size="1" style="border-width: 0"></select><br>
+<select size="1" style="border-width: 1px"></select><br>
+<select size="1" style="border-width: 2px"></select><br>
+<select size="1" style="border-width: 3px"></select><br>
+<select size="1" style="border-width: 4px"></select><br>
+<select size="1" style="border-width: 5px"></select><br>
+<select size="1" style="border-width: 6px"></select><br>
+<select size="1" style="border-style: dotted"></select><br>
+<select size="1" style="border-color: green"></select><br>
+<select size="1" style="background-color: transparent"></select><br>
+<select size="1" style="background-color: white"></select><br>
+</div>
 
 <!-- these should let it stay native -->
 <select size="1" style="color: black"></select>
 <select size="1" style="font-weight: normal"></select>
--- a/layout/reftests/text-overflow/combobox-zoom-ref.html
+++ b/layout/reftests/text-overflow/combobox-zoom-ref.html
@@ -14,21 +14,21 @@ html,body {
   color:black; background-color:white; padding:0; margin:0;
 }
 * {
   font-family:DejaVuSansMono!important;
   font-size:16px!important;
 }
 select {
   width: 200px;
-  padding-right: 7px;
+  padding-right: 8px;
 
   -moz-appearance: none;
 }
 </style>
 </head>
 <body>
 <select></select><br>
 
-<select><option>long string long </option></select>
+<select><option>long string long s</option></select>
 
 </body>
 </html>
--- a/layout/reftests/text-overflow/combobox-zoom.html
+++ b/layout/reftests/text-overflow/combobox-zoom.html
@@ -14,17 +14,17 @@ html,body {
   color:black; background-color:white; padding:0; margin:0;
 }
 * {
   font-family:DejaVuSansMono!important;
   font-size:16px!important;
 }
 select {
   width: 200px;
-  padding-right: 7px;
+  padding-right: 8px;
   text-overflow: " ";
   -moz-appearance: none;
 }
 </style>
 </head>
 <body>
 <select></select><br>