Index: ui/views/controls/combobox/combobox.cc |
diff --git a/ui/views/controls/combobox/combobox.cc b/ui/views/controls/combobox/combobox.cc |
index 7e4585311595b7003b9d2cf6e9d2e64bc6c0a529..b2a456d49063ad04e826d677da03590e80add0ba 100644 |
--- a/ui/views/controls/combobox/combobox.cc |
+++ b/ui/views/controls/combobox/combobox.cc |
@@ -218,14 +218,6 @@ void PaintArrowButton( |
x, 0, arrow_button_images[0]->width(), height); |
} |
-// Returns the size of the disclosure arrow. |
-gfx::Size ArrowSize(const ui::NativeTheme* native_theme) { |
- ui::NativeTheme::ExtraParams ignored; |
- return native_theme->GetPartSize(ui::NativeTheme::kComboboxArrow, |
- ui::NativeTheme::kNormal, |
- ignored); |
-} |
- |
} // namespace |
// static |
@@ -361,7 +353,7 @@ void Combobox::Layout() { |
} |
case STYLE_ACTION: { |
arrow_button_width = GetDisclosureArrowLeftPadding() + |
- ArrowSize(GetNativeTheme()).width() + |
+ ArrowSize().width() + |
GetDisclosureArrowRightPadding(); |
text_button_width = width() - arrow_button_width; |
break; |
@@ -419,7 +411,7 @@ gfx::Size Combobox::GetPreferredSize() const { |
gfx::Insets insets = GetInsets(); |
int total_width = std::max(kMinComboboxWidth, content_size_.width()) + |
insets.width() + GetDisclosureArrowLeftPadding() + |
- ArrowSize(GetNativeTheme()).width() + GetDisclosureArrowRightPadding(); |
+ ArrowSize().width() + GetDisclosureArrowRightPadding(); |
return gfx::Size(total_width, content_size_.height() + insets.height()); |
} |
@@ -663,7 +655,7 @@ void Combobox::PaintText(gfx::Canvas* canvas) { |
selected_index_ = 0; |
base::string16 text = model()->GetItemAt(selected_index_); |
- gfx::Size arrow_size = ArrowSize(GetNativeTheme()); |
+ gfx::Size arrow_size = ArrowSize(); |
int disclosure_arrow_offset = width() - arrow_size.width() - |
GetDisclosureArrowLeftPadding() - GetDisclosureArrowRightPadding(); |
@@ -850,4 +842,22 @@ int Combobox::GetDisclosureArrowRightPadding() const { |
return 0; |
} |
+gfx::Size Combobox::ArrowSize() const { |
+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) |
+ // TODO(estade): hack alert! This should always use GetNativeTheme(). For now |
+ // STYLE_ACTION isn't properly themed so we have to override the NativeTheme |
+ // behavior. See crbug.com/384071 |
+ const ui::NativeTheme* native_theme_for_arrow = style_ == STYLE_ACTION ? |
+ ui::NativeTheme::instance() : |
+ GetNativeTheme(); |
+#else |
+ const ui::NativeTheme* native_theme_for_arrow = GetNativeTheme(); |
+#endif |
+ |
+ ui::NativeTheme::ExtraParams ignored; |
+ return native_theme_for_arrow->GetPartSize(ui::NativeTheme::kComboboxArrow, |
+ ui::NativeTheme::kNormal, |
+ ignored); |
+} |
+ |
} // namespace views |