diff --git a/shell/browser/native_window_views.cc b/shell/browser/native_window_views.cc index f73347ffad510..66d778eee3020 100644 --- a/shell/browser/native_window_views.cc +++ b/shell/browser/native_window_views.cc @@ -234,6 +234,10 @@ NativeWindowViews::NativeWindowViews(const gin_helper::Dictionary& options, if (title_bar_style_ != TitleBarStyle::kNormal) set_has_frame(false); + + // If the taskbar is re-created after we start up, we have to rebuild all of + // our buttons. + taskbar_created_message_ = RegisterWindowMessage(TEXT("TaskbarCreated")); #endif if (enable_larger_than_screen()) diff --git a/shell/browser/native_window_views.h b/shell/browser/native_window_views.h index a2cba9ced7fd2..72008ba2f55a1 100644 --- a/shell/browser/native_window_views.h +++ b/shell/browser/native_window_views.h @@ -315,6 +315,10 @@ class NativeWindowViews : public NativeWindow, // Controls Overlay if enabled on Windows. SkColor overlay_button_color_; SkColor overlay_symbol_color_; + + // The message ID of the "TaskbarCreated" message, sent to us when we need to + // reset our thumbar buttons. + UINT taskbar_created_message_ = 0; #endif // Handles unhandled keyboard messages coming back from the renderer process. diff --git a/shell/browser/native_window_views_win.cc b/shell/browser/native_window_views_win.cc index e4288d047c304..f782dbbbad310 100644 --- a/shell/browser/native_window_views_win.cc +++ b/shell/browser/native_window_views_win.cc @@ -221,6 +221,12 @@ bool NativeWindowViews::PreHandleMSG(UINT message, return true; } + if (message == taskbar_created_message_) { + // We need to reset all of our buttons because the taskbar went away. + taskbar_host_.RestoreThumbarButtons(GetAcceleratedWidget()); + return true; + } + switch (message) { // Screen readers send WM_GETOBJECT in order to get the accessibility // object, so take this opportunity to push Chromium into accessible