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 e0cd68608a3..3263ae103b8 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 + aura::client::SetActivationChangeObserver(GetNativeWindow(), this); } void AtomDesktopNativeWidgetAura::Activate() { @@ -19,4 +23,22 @@ void AtomDesktopNativeWidgetAura::Activate() { views::DesktopNativeWidgetAura::Activate(); } +void AtomDesktopNativeWidgetAura::OnWindowActivated( + aura::client::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( + aura::client::GetTooltipClient(lost_active->GetRootWindow()) + ); + + // This will cause the tooltip to be hidden when a window is deactivated, + // as it should be. Remove this fix when the chromium issue is fixed. + // https://bugs.chromium.org/p/chromium/issues/detail?id=724538 + 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 b5a6c0933d5..79ce3dd5cd4 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( + aura::client::ActivationChangeObserver::ActivationReason reason, + aura::Window* gained_active, + aura::Window* lost_active) override; DISALLOW_COPY_AND_ASSIGN(AtomDesktopNativeWidgetAura); };