Commit c2327d0e authored by Mitsuru Oshima's avatar Mitsuru Oshima Committed by Commit Bot

Don't process event in immersive wide frame unless it's revealed

Bug: b/33693796
Test: manually tested with spinly app.
Change-Id: Id9214a318892bce97fa7290e69dd467d8fa7ce6c
Reviewed-on: https://chromium-review.googlesource.com/1033341
Commit-Queue: Mitsuru Oshima (OOO 4/30 - 5/9) <oshima@chromium.org>
Reviewed-by: default avatarJun Mukai <mukai@chromium.org>
Cr-Commit-Position: refs/heads/master@{#554939}
parent 912416a2
......@@ -98,6 +98,7 @@ class ASH_EXPORT HeaderView : public views::View,
views::View* avatar_icon() const;
bool in_immersive_mode() const { return in_immersive_mode_; }
bool is_revealed() const { return fullscreen_visible_fraction_ > 0.0; }
void set_title(const base::string16& title) {
frame_header_->set_title(title);
......
......@@ -11,11 +11,39 @@
#include "ash/public/cpp/immersive/immersive_fullscreen_controller.h"
#include "ash/public/cpp/window_properties.h"
#include "ui/aura/window.h"
#include "ui/aura/window_targeter.h"
#include "ui/display/display.h"
#include "ui/display/screen.h"
#include "ui/views/widget/widget.h"
namespace ash {
namespace {
class WideFrameTargeter : public aura::WindowTargeter {
public:
WideFrameTargeter(HeaderView* header_view) : header_view_(header_view) {}
~WideFrameTargeter() override = default;
// aura::WindowTargeter:
bool GetHitTestRects(aura::Window* target,
gfx::Rect* hit_test_rect_mouse,
gfx::Rect* hit_test_rect_touch) const override {
if (header_view_->in_immersive_mode() && !header_view_->is_revealed()) {
*hit_test_rect_mouse = target->bounds();
hit_test_rect_mouse->set_height(1);
hit_test_rect_mouse->SetRect(0, 0, 0, 0);
return true;
}
return aura::WindowTargeter::GetHitTestRects(target, hit_test_rect_mouse,
hit_test_rect_touch);
}
private:
HeaderView* header_view_;
DISALLOW_COPY_AND_ASSIGN(WideFrameTargeter);
};
} // namespace
// static
WideFrameView* WideFrameView::Create(views::Widget* target) {
......@@ -31,6 +59,9 @@ WideFrameView* WideFrameView::Create(views::Widget* target) {
params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW;
widget->Init(params);
aura::Window* window = widget->GetNativeWindow();
window->SetEventTargeter(
std::make_unique<WideFrameTargeter>(frame_view->header_view()));
return frame_view;
}
......
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