Index: ash/ime/candidate_view.cc |
diff --git a/ash/ime/candidate_view.cc b/ash/ime/candidate_view.cc |
index 83c930f4b7465b5b68877f1ebb3fca16278e4a02..4071071255427cd0160e57c5d4e7ee5a6c52364f 100644 |
--- a/ash/ime/candidate_view.cc |
+++ b/ash/ime/candidate_view.cc |
@@ -140,7 +140,10 @@ CandidateView::CandidateView( |
shortcut_label_(NULL), |
candidate_label_(NULL), |
annotation_label_(NULL), |
- infolist_icon_(NULL) { |
+ infolist_icon_(NULL), |
+ shortcut_width_(0), |
+ candidate_width_(0), |
+ highlighted_(false) { |
SetBorder(views::Border::CreateEmptyBorder(1, 1, 1, 1)); |
const ui::NativeTheme& theme = *GetNativeTheme(); |
@@ -188,9 +191,12 @@ void CandidateView::SetInfolistIcon(bool enable) { |
SchedulePaint(); |
} |
-void CandidateView::StateChanged() { |
- shortcut_label_->SetEnabled(state() != STATE_DISABLED); |
- if (state() == STATE_PRESSED) { |
+void CandidateView::SetHighlighted(bool highlighted) { |
+ if (highlighted_ == highlighted) |
+ return; |
+ |
+ highlighted_ = highlighted; |
+ if (highlighted) { |
ui::NativeTheme* theme = GetNativeTheme(); |
set_background( |
views::Background::CreateSolidBackground(theme->GetSystemColor( |
@@ -203,13 +209,20 @@ void CandidateView::StateChanged() { |
for (int i = 0; i < parent()->child_count(); ++i) { |
CandidateView* view = |
static_cast<CandidateView*>((parent()->child_at(i))); |
- if (view != this && view->state() == STATE_PRESSED) |
- view->SetState(STATE_NORMAL); |
+ if (view != this) |
+ view->SetHighlighted(false); |
} |
} else { |
set_background(NULL); |
SetBorder(views::Border::CreateEmptyBorder(1, 1, 1, 1)); |
} |
+ SchedulePaint(); |
+} |
+ |
+void CandidateView::StateChanged() { |
+ shortcut_label_->SetEnabled(state() != STATE_DISABLED); |
+ if (state() == STATE_PRESSED) |
+ SetHighlighted(true); |
} |
bool CandidateView::OnMouseDragged(const ui::MouseEvent& event) { |
@@ -218,14 +231,16 @@ bool CandidateView::OnMouseDragged(const ui::MouseEvent& event) { |
gfx::Point location_in_widget(event.location()); |
ConvertPointToWidget(this, &location_in_widget); |
for (int i = 0; i < parent()->child_count(); ++i) { |
- views::View* sibling = parent()->child_at(i); |
+ CandidateView* sibling = |
+ static_cast<CandidateView*>(parent()->child_at(i)); |
if (sibling == this) |
continue; |
gfx::Point location_in_sibling(location_in_widget); |
ConvertPointFromWidget(sibling, &location_in_sibling); |
if (sibling->HitTestPoint(location_in_sibling)) { |
GetWidget()->GetRootView()->SetMouseHandler(sibling); |
- return sibling->OnMouseDragged(event); |
+ sibling->SetHighlighted(true); |
+ return sibling->OnMouseDragged(ui::MouseEvent(event, this, sibling)); |
} |
} |