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

Side by Side Diff: ui/keyboard/keyboard_controller.cc

Issue 1323053005: Fix cropped floating gesture candidate window (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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
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/keyboard_controller.h" 5 #include "ui/keyboard/keyboard_controller.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 FOR_EACH_OBSERVER(KeyboardControllerObserver, 264 FOR_EACH_OBSERVER(KeyboardControllerObserver,
265 observer_list_, 265 observer_list_,
266 OnKeyboardBoundsChanging(new_bounds)); 266 OnKeyboardBoundsChanging(new_bounds));
267 if (keyboard::IsKeyboardOverscrollEnabled()) { 267 if (keyboard::IsKeyboardOverscrollEnabled()) {
268 // Adjust the height of the viewport for visible windows on the primary 268 // Adjust the height of the viewport for visible windows on the primary
269 // display. 269 // display.
270 // TODO(kevers): Add EnvObserver to properly initialize insets if a 270 // TODO(kevers): Add EnvObserver to properly initialize insets if a
271 // window is created while the keyboard is visible. 271 // window is created while the keyboard is visible.
272 scoped_ptr<content::RenderWidgetHostIterator> widgets( 272 scoped_ptr<content::RenderWidgetHostIterator> widgets(
273 content::RenderWidgetHost::GetRenderWidgetHosts()); 273 content::RenderWidgetHost::GetRenderWidgetHosts());
274 aura::Window* keyboard_window = proxy_->GetKeyboardWindow(); 274 aura::Window* root_window = proxy_->GetKeyboardWindow()->GetRootWindow();
275 aura::Window* root_window = keyboard_window->GetRootWindow();
276 while (content::RenderWidgetHost* widget = widgets->GetNextHost()) { 275 while (content::RenderWidgetHost* widget = widgets->GetNextHost()) {
277 content::RenderWidgetHostView* view = widget->GetView(); 276 content::RenderWidgetHostView* view = widget->GetView();
278 // Can be NULL, e.g. if the RenderWidget is being destroyed or 277 // Can be NULL, e.g. if the RenderWidget is being destroyed or
279 // the render process crashed. 278 // the render process crashed.
280 if (view) { 279 if (view) {
281 aura::Window* window = view->GetNativeView(); 280 aura::Window* window = view->GetNativeView();
282 // If virtual keyboard failed to load, a widget that displays error 281 if (proxy_->ShouldWindowOverscroll(window) &&
283 // message will be created and adds as a child of the virtual keyboard
284 // window. We want to avoid add BoundsChangedObserver to that window.
285 if (!keyboard_window->Contains(window) &&
286 window->GetRootWindow() == root_window) { 282 window->GetRootWindow() == root_window) {
oshima 2015/09/23 19:57:27 looks like this check is a dup?
bshe 2015/09/24 11:56:15 I think this check preventing overscoll on windows
oshima 2015/09/24 17:28:07 Yeah,that sounds better because it's checking agai
bshe 2015/09/28 14:42:40 Done.
287 gfx::Rect window_bounds = window->GetBoundsInScreen(); 283 gfx::Rect window_bounds = window->GetBoundsInScreen();
288 gfx::Rect intersect = gfx::IntersectRects(window_bounds, 284 gfx::Rect intersect = gfx::IntersectRects(window_bounds,
289 new_bounds); 285 new_bounds);
290 int overlap = intersect.height(); 286 int overlap = intersect.height();
291 if (overlap > 0 && overlap < window_bounds.height()) 287 if (overlap > 0 && overlap < window_bounds.height())
292 view->SetInsets(gfx::Insets(0, 0, overlap, 0)); 288 view->SetInsets(gfx::Insets(0, 0, overlap, 0));
293 else 289 else
294 view->SetInsets(gfx::Insets()); 290 view->SetInsets(gfx::Insets());
295 AddBoundsChangedObserver(window); 291 AddBoundsChangedObserver(window);
296 } 292 }
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 465
470 bool KeyboardController::ShouldEnableInsets(aura::Window* window) { 466 bool KeyboardController::ShouldEnableInsets(aura::Window* window) {
471 aura::Window* keyboard_window = proxy_->GetKeyboardWindow(); 467 aura::Window* keyboard_window = proxy_->GetKeyboardWindow();
472 return (keyboard_window->GetRootWindow() == window->GetRootWindow() && 468 return (keyboard_window->GetRootWindow() == window->GetRootWindow() &&
473 keyboard::IsKeyboardOverscrollEnabled() && 469 keyboard::IsKeyboardOverscrollEnabled() &&
474 keyboard_window->IsVisible() && keyboard_visible_); 470 keyboard_window->IsVisible() && keyboard_visible_);
475 } 471 }
476 472
477 void KeyboardController::UpdateWindowInsets(aura::Window* window) { 473 void KeyboardController::UpdateWindowInsets(aura::Window* window) {
478 aura::Window* keyboard_window = proxy_->GetKeyboardWindow(); 474 aura::Window* keyboard_window = proxy_->GetKeyboardWindow();
479 if (window == keyboard_window) 475 if (!proxy_->ShouldWindowOverscroll(window))
480 return; 476 return;
481 477
482 scoped_ptr<content::RenderWidgetHostIterator> widgets( 478 scoped_ptr<content::RenderWidgetHostIterator> widgets(
483 content::RenderWidgetHost::GetRenderWidgetHosts()); 479 content::RenderWidgetHost::GetRenderWidgetHosts());
484 while (content::RenderWidgetHost* widget = widgets->GetNextHost()) { 480 while (content::RenderWidgetHost* widget = widgets->GetNextHost()) {
485 content::RenderWidgetHostView* view = widget->GetView(); 481 content::RenderWidgetHostView* view = widget->GetView();
486 if (view && window->Contains(view->GetNativeView())) { 482 if (view && window->Contains(view->GetNativeView())) {
487 gfx::Rect window_bounds = view->GetNativeView()->GetBoundsInScreen(); 483 gfx::Rect window_bounds = view->GetNativeView()->GetBoundsInScreen();
488 gfx::Rect intersect = 484 gfx::Rect intersect =
489 gfx::IntersectRects(window_bounds, keyboard_window->bounds()); 485 gfx::IntersectRects(window_bounds, keyboard_window->bounds());
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
602 proxy_->HideKeyboardContainer(container_.get()); 598 proxy_->HideKeyboardContainer(container_.get());
603 } 599 }
604 600
605 void KeyboardController::AddBoundsChangedObserver(aura::Window* window) { 601 void KeyboardController::AddBoundsChangedObserver(aura::Window* window) {
606 aura::Window* target_window = window ? window->GetToplevelWindow() : nullptr; 602 aura::Window* target_window = window ? window->GetToplevelWindow() : nullptr;
607 if (target_window) 603 if (target_window)
608 window_bounds_observer_->AddObservedWindow(target_window); 604 window_bounds_observer_->AddObservedWindow(target_window);
609 } 605 }
610 606
611 } // namespace keyboard 607 } // namespace keyboard
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698