Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1009)

Unified Diff: chrome/browser/chromeos/input_method/candidate_window.cc

Issue 10534134: Fix candidate window position issue. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fix braces Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/chromeos/input_method/candidate_window_view.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chromeos/input_method/candidate_window.cc
diff --git a/chrome/browser/chromeos/input_method/candidate_window.cc b/chrome/browser/chromeos/input_method/candidate_window.cc
index cc6343e70f711d120205b11c3fa6f1fd1b17f119..08ed88474fda37359bd5ff462013cc462954cec3 100644
--- a/chrome/browser/chromeos/input_method/candidate_window.cc
+++ b/chrome/browser/chromeos/input_method/candidate_window.cc
@@ -534,7 +534,8 @@ class CandidateWindowControllerImpl : public CandidateWindowController,
virtual void OnHideAuxiliaryText();
virtual void OnHideLookupTable();
virtual void OnHidePreeditText();
- virtual void OnSetCursorLocation(int x, int y, int width, int height);
+ virtual void OnSetCursorLocation(const gfx::Rect& cursor_position,
+ const gfx::Rect& composition_head);
virtual void OnUpdateAuxiliaryText(const std::string& utf8_text,
bool visible);
virtual void OnUpdateLookupTable(const InputMethodLookupTable& lookup_table);
@@ -782,7 +783,7 @@ CandidateWindowView::CandidateWindowView(views::Widget* parent_frame)
previous_shortcut_column_size_(0, 0),
previous_candidate_column_size_(0, 0),
previous_annotation_column_size_(0, 0),
- is_suggestion_window_location_available_(false),
+ should_show_at_composition_head_(false),
should_show_upper_side_(false),
was_candidate_window_open_(false) {
}
@@ -917,21 +918,14 @@ bool CandidateWindowView::ShouldUpdateCandidateViews(
const InputMethodLookupTable& old_table,
const InputMethodLookupTable& new_table) {
- // Check if mozc lookup table location is changed.
- if (old_table.mozc_candidates.has_window_location() ||
- new_table.mozc_candidates.has_window_location()) {
-
- if (!old_table.mozc_candidates.IsInitialized() ||
- !new_table.mozc_candidates.IsInitialized()) {
+ // Check only candidate category because other fields are not used in
+ // CandidateWindowView.
+ // TODO(nona): Remove mozc_candidates(crbug.com/129403).
+ if (old_table.mozc_candidates.has_category() ||
+ new_table.mozc_candidates.has_category()) {
+ if (old_table.mozc_candidates.category() !=
+ new_table.mozc_candidates.category())
return true;
- }
-
- std::string old_serialized_msg;
- std::string new_serialized_msg;
-
- old_table.mozc_candidates.SerializeToString(&old_serialized_msg);
- new_table.mozc_candidates.SerializeToString(&new_serialized_msg);
- return old_serialized_msg != new_serialized_msg;
}
// Check if most table contents are identical.
@@ -958,22 +952,12 @@ void CandidateWindowView::UpdateCandidates(
// Initialize candidate views if necessary.
MaybeInitializeCandidateViews(new_lookup_table);
- // Store mozc specific window location.
- if (new_lookup_table.mozc_candidates.has_window_location() &&
- new_lookup_table.mozc_candidates.window_location() ==
- mozc::commands::Candidates::COMPOSITION) {
- DCHECK(new_lookup_table.mozc_candidates.has_composition_rectangle());
- suggestion_window_location_.set_x(
- new_lookup_table.mozc_candidates.composition_rectangle().x());
- suggestion_window_location_.set_y(
- new_lookup_table.mozc_candidates.composition_rectangle().y());
- suggestion_window_location_.set_width(
- new_lookup_table.mozc_candidates.composition_rectangle().width());
- suggestion_window_location_.set_height(
- new_lookup_table.mozc_candidates.composition_rectangle().height());
- is_suggestion_window_location_available_ = true;
+ if (new_lookup_table.mozc_candidates.has_category() &&
+ new_lookup_table.mozc_candidates.category() ==
+ mozc::commands::SUGGESTION) {
+ should_show_at_composition_head_ = true;
} else {
- is_suggestion_window_location_available_ = false;
+ should_show_at_composition_head_ = false;
}
// Compute the index of the current page.
@@ -1161,7 +1145,7 @@ void CandidateWindowView::MaybeInitializeCandidateViews(
}
bool CandidateWindowView::IsCandidateWindowOpen() const {
- return !is_suggestion_window_location_available_ &&
+ return !should_show_at_composition_head_ &&
candidate_area_->visible() && candidate_area_->IsShown();
}
@@ -1219,13 +1203,13 @@ void CandidateWindowView::CommitCandidate() {
void CandidateWindowView::ResizeAndMoveParentFrame() {
// If rendering operation comes from mozc-engine, uses mozc specific location,
// otherwise lookup table is shown under the cursor.
- const int x = is_suggestion_window_location_available_ ?
- suggestion_window_location_.x() : cursor_location_.x();
+ const int x = should_show_at_composition_head_?
+ composition_head_location_.x() : cursor_location_.x();
// To avoid lookup-table overlapping, uses maximum y-position of mozc specific
// location and cursor location, because mozc-engine does not consider about
// multi-line composition.
- const int y = is_suggestion_window_location_available_ ?
- std::max(suggestion_window_location_.y(), cursor_location_.y()) :
+ const int y = should_show_at_composition_head_?
+ std::max(composition_head_location_.y(), cursor_location_.y()) :
cursor_location_.y();
const int height = cursor_location_.height();
const int horizontal_offset = GetHorizontalOffset();
@@ -1664,24 +1648,23 @@ void CandidateWindowControllerImpl::OnHidePreeditText() {
}
void CandidateWindowControllerImpl::OnSetCursorLocation(
- int x,
- int y,
- int width,
- int height) {
+ const gfx::Rect& cursor_location,
+ const gfx::Rect& composition_head) {
// A workaround for http://crosbug.com/6460. We should ignore very short Y
// move to prevent the window from shaking up and down.
const int kKeepPositionThreshold = 2; // px
const gfx::Rect& last_location =
candidate_window_->cursor_location();
- const int delta_y = abs(last_location.y() - y);
- if ((last_location.x() == x) && (delta_y <= kKeepPositionThreshold)) {
+ const int delta_y = abs(last_location.y() - cursor_location.y());
+ if ((last_location.x() == cursor_location.x()) &&
+ (delta_y <= kKeepPositionThreshold)) {
DVLOG(1) << "Ignored set_cursor_location signal to prevent window shake";
return;
}
// Remember the cursor location.
- candidate_window_->set_cursor_location(
- gfx::Rect(x, y, width, height));
+ candidate_window_->set_cursor_location(cursor_location);
+ candidate_window_->set_composition_head_location(composition_head);
// Move the window per the cursor location.
candidate_window_->ResizeAndMoveParentFrame();
infolist_window_->ResizeAndMoveParentFrame();
« no previous file with comments | « no previous file | chrome/browser/chromeos/input_method/candidate_window_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698