diff --git a/atom/browser/api/atom_api_window.cc b/atom/browser/api/atom_api_window.cc index af402de077..1327d8de6f 100644 --- a/atom/browser/api/atom_api_window.cc +++ b/atom/browser/api/atom_api_window.cc @@ -606,7 +606,7 @@ bool Window::SetThumbarButtons(mate::Arguments* args) { } auto window = static_cast<NativeWindowViews*>(window_.get()); return window->taskbar_host().SetThumbarButtons( - window->GetAcceleratedWidget(), buttons); + window_->GetAcceleratedWidget(), buttons); #else return false; #endif diff --git a/atom/browser/native_window_views.cc b/atom/browser/native_window_views.cc index af793719cd..5f5ca68749 100644 --- a/atom/browser/native_window_views.cc +++ b/atom/browser/native_window_views.cc @@ -726,10 +726,12 @@ void NativeWindowViews::SetSkipTaskbar(bool skip) { CLSCTX_INPROC_SERVER)) || FAILED(taskbar->HrInit())) return; - if (skip) + if (skip) { taskbar->DeleteTab(GetAcceleratedWidget()); - else + } else { taskbar->AddTab(GetAcceleratedWidget()); + taskbar_host_.RestoreThumbarButtons(GetAcceleratedWidget()); + } #elif defined(USE_X11) SetWMSpecState(GetAcceleratedWidget(), skip, GetAtom("_NET_WM_STATE_SKIP_TASKBAR")); diff --git a/atom/browser/ui/win/taskbar_host.cc b/atom/browser/ui/win/taskbar_host.cc index fd49d28fd7..00bff1c88a 100644 --- a/atom/browser/ui/win/taskbar_host.cc +++ b/atom/browser/ui/win/taskbar_host.cc @@ -115,9 +115,17 @@ bool TaskbarHost::SetThumbarButtons( r = taskbar_->ThumbBarAddButtons(window, kMaxButtonsCount, thumb_buttons); thumbar_buttons_added_ = true; + last_buttons_ = buttons; return SUCCEEDED(r); } +void TaskbarHost::RestoreThumbarButtons(HWND window) { + if (thumbar_buttons_added_) { + thumbar_buttons_added_ = false; + SetThumbarButtons(window, last_buttons_); + } +} + bool TaskbarHost::SetProgressBar( HWND window, double value, const std::string& mode) { if (!InitializeTaskbar()) diff --git a/atom/browser/ui/win/taskbar_host.h b/atom/browser/ui/win/taskbar_host.h index c76340cd6e..a9263d9e89 100644 --- a/atom/browser/ui/win/taskbar_host.h +++ b/atom/browser/ui/win/taskbar_host.h @@ -34,6 +34,8 @@ class TaskbarHost { bool SetThumbarButtons( HWND window, const std::vector<ThumbarButton>& buttons); + void RestoreThumbarButtons(HWND window); + // Set the progress state in taskbar. bool SetProgressBar(HWND window, double value, const std::string& mode); @@ -57,6 +59,8 @@ class TaskbarHost { using CallbackMap = std::map<int, base::Closure>; CallbackMap callback_map_; + std::vector<ThumbarButton> last_buttons_; + // The COM object of taskbar. base::win::ScopedComPtr<ITaskbarList3> taskbar_;