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

Side by Side Diff: ui/keyboard/content/keyboard_ui_content.cc

Issue 1323053005: Fix cropped floating gesture candidate window (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix compile Created 5 years, 2 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 unified diff | Download patch
« no previous file with comments | « ui/keyboard/content/keyboard_ui_content.h ('k') | ui/keyboard/keyboard_controller_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/keyboard/content/keyboard_ui_content.h" 5 #include "ui/keyboard/content/keyboard_ui_content.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/values.h" 8 #include "base/values.h"
9 #include "content/public/browser/render_widget_host.h" 9 #include "content/public/browser/render_widget_host.h"
10 #include "content/public/browser/render_widget_host_iterator.h" 10 #include "content/public/browser/render_widget_host_iterator.h"
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 DCHECK(keyboard_contents_); 153 DCHECK(keyboard_contents_);
154 if (keyboard_contents_->GetURL() != default_url_) { 154 if (keyboard_contents_->GetURL() != default_url_) {
155 // TODO(bshe): The height of system virtual keyboard and IME virtual 155 // TODO(bshe): The height of system virtual keyboard and IME virtual
156 // keyboard may different. The height needs to be restored too. 156 // keyboard may different. The height needs to be restored too.
157 LoadContents(default_url_); 157 LoadContents(default_url_);
158 } 158 }
159 } 159 }
160 160
161 void KeyboardUIContent::UpdateInsetsForWindow(aura::Window* window) { 161 void KeyboardUIContent::UpdateInsetsForWindow(aura::Window* window) {
162 aura::Window* keyboard_window = GetKeyboardWindow(); 162 aura::Window* keyboard_window = GetKeyboardWindow();
163 if (!ShouldWindowOverscroll(window))
164 return;
165
163 scoped_ptr<content::RenderWidgetHostIterator> widgets( 166 scoped_ptr<content::RenderWidgetHostIterator> widgets(
164 content::RenderWidgetHost::GetRenderWidgetHosts()); 167 content::RenderWidgetHost::GetRenderWidgetHosts());
165 while (content::RenderWidgetHost* widget = widgets->GetNextHost()) { 168 while (content::RenderWidgetHost* widget = widgets->GetNextHost()) {
166 content::RenderWidgetHostView* view = widget->GetView(); 169 content::RenderWidgetHostView* view = widget->GetView();
167 if (view && window->Contains(view->GetNativeView())) { 170 if (view && window->Contains(view->GetNativeView())) {
168 gfx::Rect window_bounds = view->GetNativeView()->GetBoundsInScreen(); 171 gfx::Rect window_bounds = view->GetNativeView()->GetBoundsInScreen();
169 gfx::Rect intersect = 172 gfx::Rect intersect =
170 gfx::IntersectRects(window_bounds, keyboard_window->bounds()); 173 gfx::IntersectRects(window_bounds, keyboard_window->bounds());
171 int overlap = ShouldEnableInsets(window) ? intersect.height() : 0; 174 int overlap = ShouldEnableInsets(window) ? intersect.height() : 0;
172 if (overlap > 0 && overlap < window_bounds.height()) 175 if (overlap > 0 && overlap < window_bounds.height())
(...skipping 18 matching lines...) Expand all
191 keyboard_contents_->GetNativeView()->AddObserver(this); 194 keyboard_contents_->GetNativeView()->AddObserver(this);
192 } 195 }
193 196
194 return keyboard_contents_->GetNativeView(); 197 return keyboard_contents_->GetNativeView();
195 } 198 }
196 199
197 bool KeyboardUIContent::HasKeyboardWindow() const { 200 bool KeyboardUIContent::HasKeyboardWindow() const {
198 return keyboard_contents_; 201 return keyboard_contents_;
199 } 202 }
200 203
204 bool KeyboardUIContent::ShouldWindowOverscroll(aura::Window* window) const {
205 return true;
206 }
207
201 void KeyboardUIContent::ReloadKeyboardIfNeeded() { 208 void KeyboardUIContent::ReloadKeyboardIfNeeded() {
202 DCHECK(keyboard_contents_); 209 DCHECK(keyboard_contents_);
203 if (keyboard_contents_->GetURL() != GetVirtualKeyboardUrl()) { 210 if (keyboard_contents_->GetURL() != GetVirtualKeyboardUrl()) {
204 if (keyboard_contents_->GetURL().GetOrigin() != 211 if (keyboard_contents_->GetURL().GetOrigin() !=
205 GetVirtualKeyboardUrl().GetOrigin()) { 212 GetVirtualKeyboardUrl().GetOrigin()) {
206 // Sets keyboard window rectangle to 0 and close current page before 213 // Sets keyboard window rectangle to 0 and close current page before
207 // navigate to a keyboard in a different extension. This keeps the UX the 214 // navigate to a keyboard in a different extension. This keeps the UX the
208 // same as Android. Note we need to explicitly close current page as it 215 // same as Android. Note we need to explicitly close current page as it
209 // might try to resize keyboard window in javascript on a resize event. 216 // might try to resize keyboard window in javascript on a resize event.
210 GetKeyboardWindow()->SetBounds(gfx::Rect()); 217 GetKeyboardWindow()->SetBounds(gfx::Rect());
211 keyboard_contents_->ClosePage(); 218 keyboard_contents_->ClosePage();
212 keyboard_controller()->SetKeyboardMode(FULL_WIDTH); 219 keyboard_controller()->SetKeyboardMode(FULL_WIDTH);
213 } 220 }
214 LoadContents(GetVirtualKeyboardUrl()); 221 LoadContents(GetVirtualKeyboardUrl());
215 } 222 }
216 } 223 }
217 224
218 void KeyboardUIContent::InitInsets(const gfx::Rect& new_bounds) { 225 void KeyboardUIContent::InitInsets(const gfx::Rect& new_bounds) {
219 // Adjust the height of the viewport for visible windows on the primary 226 // Adjust the height of the viewport for visible windows on the primary
220 // display. 227 // display.
221 // TODO(kevers): Add EnvObserver to properly initialize insets if a 228 // TODO(kevers): Add EnvObserver to properly initialize insets if a
222 // window is created while the keyboard is visible. 229 // window is created while the keyboard is visible.
223 scoped_ptr<content::RenderWidgetHostIterator> widgets( 230 scoped_ptr<content::RenderWidgetHostIterator> widgets(
224 content::RenderWidgetHost::GetRenderWidgetHosts()); 231 content::RenderWidgetHost::GetRenderWidgetHosts());
225 aura::Window* keyboard_window = GetKeyboardWindow();
226 aura::Window* root_window = keyboard_window->GetRootWindow();
227 while (content::RenderWidgetHost* widget = widgets->GetNextHost()) { 232 while (content::RenderWidgetHost* widget = widgets->GetNextHost()) {
228 content::RenderWidgetHostView* view = widget->GetView(); 233 content::RenderWidgetHostView* view = widget->GetView();
229 // Can be NULL, e.g. if the RenderWidget is being destroyed or 234 // Can be NULL, e.g. if the RenderWidget is being destroyed or
230 // the render process crashed. 235 // the render process crashed.
231 if (view) { 236 if (view) {
232 aura::Window* window = view->GetNativeView(); 237 aura::Window* window = view->GetNativeView();
233 // If virtual keyboard failed to load, a widget that displays error 238 if (ShouldWindowOverscroll(window)) {
234 // message will be created and adds as a child of the virtual keyboard
235 // window. We want to avoid add BoundsChangedObserver to that window.
236 if (!keyboard_window->Contains(window) &&
237 window->GetRootWindow() == root_window) {
238 gfx::Rect window_bounds = window->GetBoundsInScreen(); 239 gfx::Rect window_bounds = window->GetBoundsInScreen();
239 gfx::Rect intersect = gfx::IntersectRects(window_bounds, 240 gfx::Rect intersect = gfx::IntersectRects(window_bounds,
240 new_bounds); 241 new_bounds);
241 int overlap = intersect.height(); 242 int overlap = intersect.height();
242 if (overlap > 0 && overlap < window_bounds.height()) 243 if (overlap > 0 && overlap < window_bounds.height())
243 view->SetInsets(gfx::Insets(0, 0, overlap, 0)); 244 view->SetInsets(gfx::Insets(0, 0, overlap, 0));
244 else 245 else
245 view->SetInsets(gfx::Insets()); 246 view->SetInsets(gfx::Insets());
246 AddBoundsChangedObserver(window); 247 AddBoundsChangedObserver(window);
247 } 248 }
(...skipping 28 matching lines...) Expand all
276 shadow_->layer()); 277 shadow_->layer());
277 } 278 }
278 279
279 shadow_->SetContentBounds(new_bounds); 280 shadow_->SetContentBounds(new_bounds);
280 } 281 }
281 282
282 void KeyboardUIContent::OnWindowDestroyed(aura::Window* window) { 283 void KeyboardUIContent::OnWindowDestroyed(aura::Window* window) {
283 window->RemoveObserver(this); 284 window->RemoveObserver(this);
284 } 285 }
285 286
287 const aura::Window* KeyboardUIContent::GetKeyboardRootWindow() const {
288 if (!keyboard_contents_) {
289 return nullptr;
290 }
291 return keyboard_contents_->GetNativeView()->GetRootWindow();
292 }
293
286 void KeyboardUIContent::LoadContents(const GURL& url) { 294 void KeyboardUIContent::LoadContents(const GURL& url) {
287 if (keyboard_contents_) { 295 if (keyboard_contents_) {
288 content::OpenURLParams params( 296 content::OpenURLParams params(
289 url, 297 url,
290 content::Referrer(), 298 content::Referrer(),
291 SINGLETON_TAB, 299 SINGLETON_TAB,
292 ui::PAGE_TRANSITION_AUTO_TOPLEVEL, 300 ui::PAGE_TRANSITION_AUTO_TOPLEVEL,
293 false); 301 false);
294 keyboard_contents_->OpenURL(params); 302 keyboard_contents_->OpenURL(params);
295 } 303 }
(...skipping 16 matching lines...) Expand all
312 keyboard_controller()->keyboard_visible()); 320 keyboard_controller()->keyboard_visible());
313 } 321 }
314 322
315 void KeyboardUIContent::AddBoundsChangedObserver(aura::Window* window) { 323 void KeyboardUIContent::AddBoundsChangedObserver(aura::Window* window) {
316 aura::Window* target_window = window ? window->GetToplevelWindow() : nullptr; 324 aura::Window* target_window = window ? window->GetToplevelWindow() : nullptr;
317 if (target_window) 325 if (target_window)
318 window_bounds_observer_->AddObservedWindow(target_window); 326 window_bounds_observer_->AddObservedWindow(target_window);
319 } 327 }
320 328
321 } // namespace keyboard 329 } // namespace keyboard
OLDNEW
« no previous file with comments | « ui/keyboard/content/keyboard_ui_content.h ('k') | ui/keyboard/keyboard_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698