Chromium Code Reviews| Index: chrome/browser/ui/views/keyboard_overlay_delegate.cc |
| diff --git a/chrome/browser/ui/views/keyboard_overlay_delegate.cc b/chrome/browser/ui/views/keyboard_overlay_delegate.cc |
| index 56bcd6dab69a0441ad3b9b42ebc8e7d2fabf94a9..75e9c0986030befbff1fd039aaf3ae521820c072 100644 |
| --- a/chrome/browser/ui/views/keyboard_overlay_delegate.cc |
| +++ b/chrome/browser/ui/views/keyboard_overlay_delegate.cc |
| @@ -7,8 +7,13 @@ |
| #include <algorithm> |
| #include "base/utf_string_conversions.h" |
| -#include "chrome/browser/ui/views/web_dialog_view.h" |
| +#include "chrome/browser/ui/views/keyboard_overlay_dialog_view.h" |
| #include "chrome/common/url_constants.h" |
| +#include "content/public/browser/notification_source.h" |
| +#include "content/public/browser/notification_types.h" |
| +#include "content/public/browser/render_view_host.h" |
| +#include "content/public/browser/render_widget_host.h" |
| +#include "content/public/browser/web_contents.h" |
| #include "googleurl/src/gurl.h" |
| #include "grit/generated_resources.h" |
| #include "ui/base/l10n/l10n_util.h" |
| @@ -28,12 +33,39 @@ const int kHorizontalMargin = 28; |
| KeyboardOverlayDelegate::KeyboardOverlayDelegate(const string16& title) |
| : title_(title), |
| - view_(NULL) { |
| + view_(NULL), |
| + loaded_(false) { |
| } |
| KeyboardOverlayDelegate::~KeyboardOverlayDelegate() { |
| } |
| +void KeyboardOverlayDelegate::Show(KeyboardOverlayDialogView* view) { |
| + view_ = view; |
| + |
| + views::Widget* widget = new views::Widget; |
| + views::Widget::InitParams params( |
| + views::Widget::InitParams::TYPE_WINDOW_FRAMELESS); |
| + params.delegate = view; |
| + widget->Init(params); |
| + |
| + // Show the widget at the bottom of the work area. |
| + gfx::Size size; |
| + GetDialogSize(&size); |
| + gfx::Rect rect = gfx::Screen::GetMonitorNearestWindow( |
|
oshima
2012/05/25 22:33:20
const gfx::Rect&
mazda
2012/05/25 23:30:37
Done.
|
| + widget->GetNativeView()).work_area(); |
| + gfx::Rect bounds((rect.width() - size.width()) / 2, |
| + rect.height() - size.height(), |
| + size.width(), |
| + size.height()); |
| + widget->SetBounds(bounds); |
| + |
| + widget->Show(); |
| + |
| + // Make the widget invisible until the web contents gets ready to display. |
| + widget->SetOpacity(0); |
| +} |
| + |
| ui::ModalType KeyboardOverlayDelegate::GetDialogModalType() const { |
| return ui::MODAL_TYPE_SYSTEM; |
| } |
| @@ -66,6 +98,18 @@ std::string KeyboardOverlayDelegate::GetDialogArgs() const { |
| return "[]"; |
| } |
| +void KeyboardOverlayDelegate::OnDialogShown( |
| + content::WebUI* webui, |
| + content::RenderViewHost* render_view_host) { |
| + registrar_.Add(this, |
| + content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME, |
| + content::Source<content::WebContents>( |
| + webui->GetWebContents())); |
| + registrar_.Add(this, |
| + content::NOTIFICATION_RENDER_WIDGET_HOST_DID_PAINT, |
| + content::Source<content::RenderWidgetHost>(render_view_host)); |
| +} |
| + |
| void KeyboardOverlayDelegate::OnDialogClosed( |
| const std::string& json_retval) { |
| delete this; |
| @@ -84,3 +128,27 @@ bool KeyboardOverlayDelegate::HandleContextMenu( |
| const content::ContextMenuParams& params) { |
| return true; |
| } |
| + |
| +void KeyboardOverlayDelegate::Observe( |
| + int type, |
| + const content::NotificationSource& source, |
| + const content::NotificationDetails& details) { |
| + switch (type) { |
| + case content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME: |
| + registrar_.Remove(this, |
| + content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME, |
| + source); |
| + loaded_ = true; |
| + break; |
| + case content::NOTIFICATION_RENDER_WIDGET_HOST_DID_PAINT: |
|
oshima
2012/05/25 22:33:20
I wonder if we can rely on this notification when
mazda
2012/05/25 23:30:37
Thanks. I'll ask backer.
|
| + if (!loaded_) |
| + break; |
| + registrar_.Remove(this, |
| + content::NOTIFICATION_RENDER_WIDGET_HOST_DID_PAINT, |
| + source); |
| + view_->GetWidget()->SetOpacity(255); |
| + break; |
| + default: |
| + NOTREACHED() << "Unknown type: " << type; |
| + } |
| +} |