Commit 8a1740bc authored by Leonard Grey's avatar Leonard Grey Committed by Commit Bot

Commander: anchor widget to top container

Bug: 1014639
Change-Id: I44ca1a9b79bcb9adf079ca5a7c270dbeb0657001
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2515041Reviewed-by: default avatarElly Fong-Jones <ellyjones@chromium.org>
Commit-Queue: Leonard Grey <lgrey@chromium.org>
Cr-Commit-Position: refs/heads/master@{#823633}
parent 752fc418
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "chrome/browser/ui/commander/commander_backend.h" #include "chrome/browser/ui/commander/commander_backend.h"
#include "chrome/browser/ui/commander/commander_view_model.h" #include "chrome/browser/ui/commander/commander_view_model.h"
#include "chrome/browser/ui/views/frame/browser_view.h" #include "chrome/browser/ui/views/frame/browser_view.h"
#include "chrome/browser/ui/views/frame/top_container_view.h"
#include "chrome/browser/ui/views/theme_copying_widget.h" #include "chrome/browser/ui/views/theme_copying_widget.h"
#include "chrome/browser/ui/webui/commander/commander_ui.h" #include "chrome/browser/ui/webui/commander/commander_ui.h"
#include "chrome/common/webui_url_constants.h" #include "chrome/common/webui_url_constants.h"
...@@ -28,8 +29,21 @@ ...@@ -28,8 +29,21 @@
#endif #endif
namespace { namespace {
// TODO(lgrey): Temporary constexpr gfx::Size kDefaultSize(512, 48);
constexpr gfx::Size kDefaultSize(400, 30); constexpr int kTopContainerOverlapMargin = 12;
//
void AnchorToBrowser(gfx::Rect* bounds, Browser* browser) {
DCHECK(browser);
BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser);
gfx::Rect top_container_bounds =
browser_view->top_container()->GetBoundsInScreen();
bounds->set_x(top_container_bounds.x() +
(top_container_bounds.width() - bounds->width()) / 2);
bounds->set_y(top_container_bounds.bottom() - kTopContainerOverlapMargin);
}
} // namespace } // namespace
// A small shim to handle passing keyboard events back up to the browser. // A small shim to handle passing keyboard events back up to the browser.
...@@ -101,8 +115,9 @@ void CommanderFrontendViews::Show(Browser* browser) { ...@@ -101,8 +115,9 @@ void CommanderFrontendViews::Show(Browser* browser) {
views::View* parent = BrowserView::GetBrowserViewForBrowser(browser_); views::View* parent = BrowserView::GetBrowserViewForBrowser(browser_);
widget_delegate_ = std::make_unique<views::WidgetDelegate>(); widget_delegate_ = std::make_unique<views::WidgetDelegate>();
widget_delegate_->SetCanActivate(true); widget_delegate_->SetCanActivate(true);
views::Widget* parent_widget = parent->GetWidget();
widget_ = new ThemeCopyingWidget(parent->GetWidget()); parent_widget->AddObserver(this);
widget_ = new ThemeCopyingWidget(parent_widget);
views::Widget::InitParams params( views::Widget::InitParams params(
views::Widget::InitParams::TYPE_WINDOW_FRAMELESS); views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
params.delegate = widget_delegate_.get(); params.delegate = widget_delegate_.get();
...@@ -123,7 +138,11 @@ void CommanderFrontendViews::Show(Browser* browser) { ...@@ -123,7 +138,11 @@ void CommanderFrontendViews::Show(Browser* browser) {
web_view_ptr_ = widget_->SetContentsView(std::move(web_view_)); web_view_ptr_ = widget_->SetContentsView(std::move(web_view_));
widget_->CenterWindow(kDefaultSize); gfx::Rect bounds;
bounds.set_size(kDefaultSize);
AnchorToBrowser(&bounds, browser_);
widget_->SetBounds(bounds);
widget_->Show(); widget_->Show();
web_view_ptr_->RequestFocus(); web_view_ptr_->RequestFocus();
...@@ -133,6 +152,8 @@ void CommanderFrontendViews::Show(Browser* browser) { ...@@ -133,6 +152,8 @@ void CommanderFrontendViews::Show(Browser* browser) {
void CommanderFrontendViews::Hide() { void CommanderFrontendViews::Hide() {
DCHECK(is_showing()); DCHECK(is_showing());
BrowserView::GetBrowserViewForBrowser(browser_)->GetWidget()->RemoveObserver(
this);
BrowserList::RemoveObserver(this); BrowserList::RemoveObserver(this);
backend_->Reset(); backend_->Reset();
show_requested_ = false; show_requested_ = false;
...@@ -162,6 +183,18 @@ void CommanderFrontendViews::Observe( ...@@ -162,6 +183,18 @@ void CommanderFrontendViews::Observe(
web_view_->SetWebContents(nullptr); web_view_->SetWebContents(nullptr);
} }
void CommanderFrontendViews::OnWidgetBoundsChanged(
views::Widget* widget,
const gfx::Rect& new_bounds) {
DCHECK(browser_);
DCHECK(is_showing());
DCHECK(widget ==
BrowserView::GetBrowserViewForBrowser(browser_)->GetWidget());
gfx::Rect bounds = widget_->GetWindowBoundsInScreen();
AnchorToBrowser(&bounds, browser_);
widget_->SetBounds(bounds);
}
void CommanderFrontendViews::OnTextChanged(const base::string16& text) { void CommanderFrontendViews::OnTextChanged(const base::string16& text) {
DCHECK(is_showing()); DCHECK(is_showing());
backend_->OnTextChanged(text, browser_); backend_->OnTextChanged(text, browser_);
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "chrome/browser/ui/webui/commander/commander_handler.h" #include "chrome/browser/ui/webui/commander/commander_handler.h"
#include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h" #include "content/public/browser/notification_registrar.h"
#include "ui/views/widget/widget_observer.h"
class CommanderWebView; class CommanderWebView;
...@@ -35,7 +36,8 @@ struct CommanderViewModel; ...@@ -35,7 +36,8 @@ struct CommanderViewModel;
class CommanderFrontendViews : public commander::CommanderFrontend, class CommanderFrontendViews : public commander::CommanderFrontend,
public CommanderHandler::Delegate, public CommanderHandler::Delegate,
public BrowserListObserver, public BrowserListObserver,
public content::NotificationObserver { public content::NotificationObserver,
public views::WidgetObserver {
public: public:
explicit CommanderFrontendViews(commander::CommanderBackend* backend); explicit CommanderFrontendViews(commander::CommanderBackend* backend);
~CommanderFrontendViews() override; ~CommanderFrontendViews() override;
...@@ -60,6 +62,10 @@ class CommanderFrontendViews : public commander::CommanderFrontend, ...@@ -60,6 +62,10 @@ class CommanderFrontendViews : public commander::CommanderFrontend,
const content::NotificationSource& source, const content::NotificationSource& source,
const content::NotificationDetails& details) override; const content::NotificationDetails& details) override;
// views::WidgetObserver overrides
void OnWidgetBoundsChanged(views::Widget* widget,
const gfx::Rect& new_bounds) override;
private: private:
// Receives view model updates from |backend_|. // Receives view model updates from |backend_|.
void OnViewModelUpdated(commander::CommanderViewModel view_model); void OnViewModelUpdated(commander::CommanderViewModel view_model);
......
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