diff --git a/atom/browser/ui/win/atom_desktop_native_widget_aura.cc b/atom/browser/ui/win/atom_desktop_native_widget_aura.cc index e0cd68608a33..f9f0d1e86100 100644 --- a/atom/browser/ui/win/atom_desktop_native_widget_aura.cc +++ b/atom/browser/ui/win/atom_desktop_native_widget_aura.cc @@ -3,12 +3,16 @@ // found in the LICENSE file. #include "atom/browser/ui/win/atom_desktop_native_widget_aura.h" +#include "ui/views/corewm/tooltip_controller.h" +#include "ui/wm/public/tooltip_client.h" namespace atom { AtomDesktopNativeWidgetAura::AtomDesktopNativeWidgetAura( views::internal::NativeWidgetDelegate* delegate) : views::DesktopNativeWidgetAura(delegate) { + // This is to enable the override of OnWindowActivated + wm::SetActivationChangeObserver(GetNativeWindow(), this); } void AtomDesktopNativeWidgetAura::Activate() { @@ -19,4 +23,23 @@ void AtomDesktopNativeWidgetAura::Activate() { views::DesktopNativeWidgetAura::Activate(); } +void AtomDesktopNativeWidgetAura::OnWindowActivated( + wm::ActivationChangeObserver::ActivationReason reason, + aura::Window* gained_active, + aura::Window* lost_active) { + views::DesktopNativeWidgetAura::OnWindowActivated( + reason, gained_active, lost_active); + if (lost_active != nullptr) { + auto* tooltip_controller = static_cast( + wm::GetTooltipClient(lost_active->GetRootWindow())); + + // This will cause the tooltip to be hidden when a window is deactivated, + // as it should be. + // TODO(brenca): Remove this fix when the chromium issue is fixed. + // crbug.com/724538 + if (tooltip_controller != nullptr) + tooltip_controller->OnCancelMode(nullptr); + } +} + } // namespace atom diff --git a/atom/browser/ui/win/atom_desktop_native_widget_aura.h b/atom/browser/ui/win/atom_desktop_native_widget_aura.h index b5a6c0933d5b..8aca097d9f73 100644 --- a/atom/browser/ui/win/atom_desktop_native_widget_aura.h +++ b/atom/browser/ui/win/atom_desktop_native_widget_aura.h @@ -19,6 +19,10 @@ class AtomDesktopNativeWidgetAura : public views::DesktopNativeWidgetAura { void Activate() override; private: + void OnWindowActivated( + wm::ActivationChangeObserver::ActivationReason reason, + aura::Window* gained_active, + aura::Window* lost_active) override; DISALLOW_COPY_AND_ASSIGN(AtomDesktopNativeWidgetAura); };