views: Implement focus and blur event.

This commit is contained in:
Cheng Zhao 2014-07-08 12:55:33 +08:00
parent ee5312fff9
commit 4e4227aef8
3 changed files with 25 additions and 1 deletions

View file

@ -62,6 +62,8 @@ NativeWindowViews::NativeWindowViews(content::WebContents* web_contents,
options.Get(switches::kResizable, &resizable_);
options.Get(switches::kTitle, &title_);
window_->AddObserver(this);
views::Widget::InitParams params;
params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
params.delegate = this;
@ -95,6 +97,7 @@ NativeWindowViews::NativeWindowViews(content::WebContents* web_contents,
}
NativeWindowViews::~NativeWindowViews() {
window_->RemoveObserver(this);
}
void NativeWindowViews::Close() {
@ -291,6 +294,17 @@ void NativeWindowViews::UpdateDraggableRegions(
draggable_region_.reset(draggable_region);
}
void NativeWindowViews::OnWidgetActivationChanged(
views::Widget* widget, bool active) {
if (widget != window_.get())
return;
if (active)
NotifyWindowFocus();
else
NotifyWindowBlur();
}
void NativeWindowViews::DeleteDelegate() {
NotifyWindowClosed();
}

View file

@ -12,6 +12,7 @@
#include "atom/browser/ui/accelerator_util.h"
#include "ui/views/widget/widget_delegate.h"
#include "ui/views/widget/widget_observer.h"
namespace views {
class UnhandledKeyboardEventHandler;
@ -21,7 +22,8 @@ class Widget;
namespace atom {
class NativeWindowViews : public NativeWindow,
public views::WidgetDelegateView {
public views::WidgetDelegateView,
public views::WidgetObserver {
public:
explicit NativeWindowViews(content::WebContents* web_contents,
const mate::Dictionary& options);
@ -74,6 +76,10 @@ class NativeWindowViews : public NativeWindow,
virtual void UpdateDraggableRegions(
const std::vector<DraggableRegion>& regions) OVERRIDE;
// views::WidgetObserver:
virtual void OnWidgetActivationChanged(
views::Widget* widget, bool active) OVERRIDE;
// views::WidgetDelegate:
virtual void DeleteDelegate() OVERRIDE;
virtual views::View* GetInitiallyFocusedView() OVERRIDE;

View file

@ -199,7 +199,11 @@ views::View* MessageDialog::GetInitiallyFocusedView() {
}
ui::ModalType MessageDialog::GetModalType() const {
#if defined(USE_X11)
return ui::MODAL_TYPE_NONE;
#else
return ui::MODAL_TYPE_WINDOW;
#endif
}
gfx::Size MessageDialog::GetPreferredSize() {