diff --git a/atom/browser/native_window_views.cc b/atom/browser/native_window_views.cc index 5cd5a7b7ac56..9fb59d10e7f0 100644 --- a/atom/browser/native_window_views.cc +++ b/atom/browser/native_window_views.cc @@ -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(); } diff --git a/atom/browser/native_window_views.h b/atom/browser/native_window_views.h index 977f6f863e09..6fdb691d02b5 100644 --- a/atom/browser/native_window_views.h +++ b/atom/browser/native_window_views.h @@ -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& regions) OVERRIDE; + // views::WidgetObserver: + virtual void OnWidgetActivationChanged( + views::Widget* widget, bool active) OVERRIDE; + // views::WidgetDelegate: virtual void DeleteDelegate() OVERRIDE; virtual views::View* GetInitiallyFocusedView() OVERRIDE; diff --git a/atom/browser/ui/message_box_views.cc b/atom/browser/ui/message_box_views.cc index a08f18708e71..819ea97cb015 100644 --- a/atom/browser/ui/message_box_views.cc +++ b/atom/browser/ui/message_box_views.cc @@ -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() {