--- a/widget/cocoa/nsNativeThemeCocoa.mm
+++ b/widget/cocoa/nsNativeThemeCocoa.mm
@@ -2643,17 +2643,27 @@ nsNativeThemeCocoa::DrawWidgetBackground
DrawStatusBar(cgContext, macRect, aFrame);
break;
case NS_THEME_MENULIST:
case NS_THEME_MENULIST_TEXTFIELD:
DrawDropdown(cgContext, macRect, eventState, aWidgetType, aFrame);
break;
- case NS_THEME_MENULIST_BUTTON:
+ case NS_THEME_MENULIST_BUTTON: {
+ if (mozilla::Preferences::GetBool("layout.css.webkit-appearance.enabled")) {
+ DrawDropdown(cgContext, macRect, eventState, aWidgetType, aFrame);
+ } else {
+ DrawButton(cgContext, kThemeArrowButton, macRect, false, kThemeButtonOn,
+ kThemeAdornmentArrowDownArrow, eventState, aFrame);
+ }
+ break;
+ }
+
+ case NS_THEME_MENULIST_BUTTON_ORIG:
DrawButton(cgContext, kThemeArrowButton, macRect, false, kThemeButtonOn,
kThemeAdornmentArrowDownArrow, eventState, aFrame);
break;
case NS_THEME_GROUPBOX: {
HIThemeGroupBoxDrawInfo gdi = { 0, kThemeStateActive, kHIThemeGroupBoxKindPrimary };
HIThemeDrawGroupBox(&macRect, &gdi, cgContext, HITHEME_ORIENTATION);
break;
@@ -3063,16 +3073,17 @@ nsNativeThemeCocoa::CreateWebRenderComma
case NS_THEME_TOOLBARBUTTON:
case NS_THEME_SEPARATOR:
case NS_THEME_TOOLBAR:
case NS_THEME_WINDOW_TITLEBAR:
case NS_THEME_STATUSBAR:
case NS_THEME_MENULIST:
case NS_THEME_MENULIST_TEXTFIELD:
case NS_THEME_MENULIST_BUTTON:
+ case NS_THEME_MENULIST_BUTTON_ORIG:
case NS_THEME_GROUPBOX:
case NS_THEME_TEXTFIELD:
case NS_THEME_NUMBER_INPUT:
case NS_THEME_SEARCHFIELD:
case NS_THEME_PROGRESSBAR:
case NS_THEME_PROGRESSBAR_VERTICAL:
case NS_THEME_METERBAR:
case NS_THEME_TREETWISTY:
@@ -3228,16 +3239,17 @@ nsNativeThemeCocoa::GetWidgetBorder(nsDe
// nsCheckboxRadioFrame::GetIntrinsicWidth and nsCheckboxRadioFrame::GetIntrinsicHeight
// assume a border width of 2px.
aResult->SizeTo(2, 2, 2, 2);
break;
}
case NS_THEME_MENULIST:
case NS_THEME_MENULIST_BUTTON:
+ case NS_THEME_MENULIST_BUTTON_ORIG:
*aResult = DirectionAwareMargin(kAquaDropdownBorder, aFrame);
break;
case NS_THEME_MENULIST_TEXTFIELD:
*aResult = DirectionAwareMargin(kAquaComboboxBorder, aFrame);
break;
case NS_THEME_NUMBER_INPUT:
@@ -3352,16 +3364,17 @@ nsNativeThemeCocoa::GetWidgetOverflow(ns
case NS_THEME_TOOLBARBUTTON:
case NS_THEME_NUMBER_INPUT:
case NS_THEME_TEXTFIELD:
case NS_THEME_TEXTFIELD_MULTILINE:
case NS_THEME_SEARCHFIELD:
case NS_THEME_LISTBOX:
case NS_THEME_MENULIST:
case NS_THEME_MENULIST_BUTTON:
+ case NS_THEME_MENULIST_BUTTON_ORIG:
case NS_THEME_MENULIST_TEXTFIELD:
case NS_THEME_CHECKBOX:
case NS_THEME_RADIO:
case NS_THEME_TAB:
case NS_THEME_FOCUS_OUTLINE:
{
overflow.SizeTo(kMaxFocusRingWidth,
kMaxFocusRingWidth,
@@ -3480,16 +3493,17 @@ nsNativeThemeCocoa::GetMinimumWidgetSize
}
aResult->SizeTo(buttonWidth, buttonHeight);
*aIsOverridable = true;
break;
}
case NS_THEME_MENULIST:
case NS_THEME_MENULIST_BUTTON:
+ case NS_THEME_MENULIST_BUTTON_ORIG:
{
SInt32 popupHeight = 0;
::GetThemeMetric(kThemeMetricPopupButtonHeight, &popupHeight);
aResult->SizeTo(0, popupHeight);
break;
}
case NS_THEME_NUMBER_INPUT:
@@ -3795,26 +3809,29 @@ nsNativeThemeCocoa::ThemeChanged()
return NS_OK;
}
bool
nsNativeThemeCocoa::ThemeSupportsWidget(nsPresContext* aPresContext, nsIFrame* aFrame,
uint8_t aWidgetType)
{
// if this is a dropdown button in a combobox the answer is always no
- if (aWidgetType == NS_THEME_MENULIST_BUTTON) {
+ if ((aWidgetType == NS_THEME_MENULIST_BUTTON &&
+ !mozilla::Preferences::GetBool("layout.css.webkit-appearance.enabled")) ||
+ (aWidgetType == NS_THEME_MENULIST_BUTTON_ORIG)) {
nsIFrame* parentFrame = aFrame->GetParent();
if (parentFrame && parentFrame->IsComboboxControlFrame())
return false;
}
switch (aWidgetType) {
// Combobox dropdowns don't support native theming in vertical mode.
case NS_THEME_MENULIST:
case NS_THEME_MENULIST_BUTTON:
+ case NS_THEME_MENULIST_BUTTON_ORIG:
case NS_THEME_MENULIST_TEXT:
case NS_THEME_MENULIST_TEXTFIELD:
if (aFrame && aFrame->GetWritingMode().IsVertical()) {
return false;
}
MOZ_FALLTHROUGH;
case NS_THEME_LISTBOX:
@@ -3928,26 +3945,32 @@ nsNativeThemeCocoa::ThemeSupportsWidget(
return false;
}
bool
nsNativeThemeCocoa::WidgetIsContainer(uint8_t aWidgetType)
{
// flesh this out at some point
switch (aWidgetType) {
- case NS_THEME_MENULIST_BUTTON:
- case NS_THEME_RADIO:
- case NS_THEME_CHECKBOX:
- case NS_THEME_PROGRESSBAR:
- case NS_THEME_METERBAR:
- case NS_THEME_RANGE:
- case NS_THEME_MAC_HELP_BUTTON:
- case NS_THEME_MAC_DISCLOSURE_BUTTON_OPEN:
- case NS_THEME_MAC_DISCLOSURE_BUTTON_CLOSED:
- return false;
+ case NS_THEME_MENULIST_BUTTON: {
+ if (mozilla::Preferences::GetBool("layout.css.webkit-appearance.enabled")) {
+ return true;
+ }
+ MOZ_FALLTHROUGH;
+ }
+ case NS_THEME_MENULIST_BUTTON_ORIG:
+ case NS_THEME_RADIO:
+ case NS_THEME_CHECKBOX:
+ case NS_THEME_PROGRESSBAR:
+ case NS_THEME_METERBAR:
+ case NS_THEME_RANGE:
+ case NS_THEME_MAC_HELP_BUTTON:
+ case NS_THEME_MAC_DISCLOSURE_BUTTON_OPEN:
+ case NS_THEME_MAC_DISCLOSURE_BUTTON_CLOSED:
+ return false;
}
return true;
}
bool
nsNativeThemeCocoa::ThemeDrawsFocusForWidget(uint8_t aWidgetType)
{
if (aWidgetType == NS_THEME_MENULIST ||