Commit e8e29424 authored by calamity@chromium.org's avatar calamity@chromium.org

Make NativeViewHostAura clipping window non-focusable.

This CL fixes an issue where the clipping window would get a focus event
when the SadTab was displayed causing the focus to be set to nothing,
disabling all keyboard shortcuts.

This is fixed by making the clipping window nonfocusable.

BUG=393119

Review URL: https://codereview.chromium.org/397493005

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@284177 0039d316-1c4b-4281-b951-d872f2087c98
parent b794b3fa
......@@ -8,16 +8,58 @@
#include "ui/aura/client/aura_constants.h"
#include "ui/aura/client/focus_client.h"
#include "ui/aura/window.h"
#include "ui/aura/window_delegate.h"
#include "ui/base/cursor/cursor.h"
#include "ui/base/hit_test.h"
#include "ui/views/controls/native/native_view_host.h"
#include "ui/views/view_constants_aura.h"
#include "ui/views/widget/widget.h"
namespace views {
class NativeViewHostAura::ClippingWindowDelegate : public aura::WindowDelegate {
public:
explicit ClippingWindowDelegate(const NativeViewHost* host) : host_(host) {}
virtual ~ClippingWindowDelegate() {}
virtual gfx::Size GetMinimumSize() const OVERRIDE { return gfx::Size(); }
virtual gfx::Size GetMaximumSize() const OVERRIDE { return gfx::Size(); }
virtual void OnBoundsChanged(const gfx::Rect& old_bounds,
const gfx::Rect& new_bounds) OVERRIDE {}
virtual gfx::NativeCursor GetCursor(const gfx::Point& point) OVERRIDE {
return gfx::kNullCursor;
}
virtual int GetNonClientComponent(const gfx::Point& point) const OVERRIDE {
return HTCLIENT;
}
virtual bool ShouldDescendIntoChildForEventHandling(
aura::Window* child,
const gfx::Point& location) OVERRIDE { return true; }
virtual bool CanFocus() OVERRIDE {
// Ask the hosted native view's delegate because directly calling
// aura::Window::CanFocus() will call back into this when checking whether
// parents can focus.
return host_->native_view() && host_->native_view()->delegate()
? host_->native_view()->delegate()->CanFocus()
: true;
}
virtual void OnCaptureLost() OVERRIDE {}
virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE {}
virtual void OnDeviceScaleFactorChanged(float device_scale_factor) OVERRIDE {}
virtual void OnWindowDestroying(aura::Window* window) OVERRIDE {}
virtual void OnWindowDestroyed(aura::Window* window) OVERRIDE {}
virtual void OnWindowTargetVisibilityChanged(bool visible) OVERRIDE {}
virtual bool HasHitTestMask() const OVERRIDE { return false; }
virtual void GetHitTestMask(gfx::Path* mask) const OVERRIDE {}
private:
const NativeViewHost* host_;
};
NativeViewHostAura::NativeViewHostAura(NativeViewHost* host)
: host_(host),
clipping_window_(NULL) {
clipping_window_delegate_(new ClippingWindowDelegate(host)),
clipping_window_(clipping_window_delegate_.get()) {
clipping_window_.Init(aura::WINDOW_LAYER_NOT_DRAWN);
clipping_window_.set_owned_by_parent(false);
clipping_window_.SetName("NativeViewHostAuraClip");
......
......@@ -40,6 +40,8 @@ class VIEWS_EXPORT NativeViewHostAura : public NativeViewHostWrapper,
private:
friend class NativeViewHostAuraTest;
class ClippingWindowDelegate;
// Overridden from aura::WindowObserver:
virtual void OnWindowDestroyed(aura::Window* window) OVERRIDE;
......@@ -54,6 +56,8 @@ class VIEWS_EXPORT NativeViewHostAura : public NativeViewHostWrapper,
// Our associated NativeViewHost.
NativeViewHost* host_;
scoped_ptr<ClippingWindowDelegate> clipping_window_delegate_;
// Window that exists between the native view and the parent that allows for
// clipping to occur. This is positioned in the coordinate space of
// host_->GetWidget().
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment