Merge pull request #6768 from electron/felix-set-progress

Enable mode indication for setProgressBar
This commit is contained in:
Cheng Zhao 2016-08-09 20:58:07 +09:00 committed by GitHub
commit 81244c2221
11 changed files with 72 additions and 20 deletions

View file

@ -117,18 +117,40 @@ bool TaskbarHost::SetThumbarButtons(
return SUCCEEDED(r);
}
bool TaskbarHost::SetProgressBar(HWND window, double value) {
bool TaskbarHost::SetProgressBar(
HWND window, double value, const std::string& mode) {
if (!InitializeTaskbar())
return false;
HRESULT r;
if (value > 1.0)
r = taskbar_->SetProgressState(window, TBPF_INDETERMINATE);
else if (value < 0)
r = taskbar_->SetProgressState(window, TBPF_NOPROGRESS);
else
r = taskbar_->SetProgressValue(window, static_cast<int>(value * 100), 100);
return SUCCEEDED(r);
HRESULT barR;
HRESULT stateR;
if (value > 1.0 || mode == "indeterminate") {
barR = taskbar_->SetProgressState(window, TBPF_INDETERMINATE);
} else if (value < 0 || mode == "none") {
barR = taskbar_->SetProgressState(window, TBPF_NOPROGRESS);
} else {
// Unless SetProgressState set a blocking state (TBPF_ERROR, TBPF_PAUSED)
// for the window, a call to SetProgressValue assumes the TBPF_NORMAL
// state even if it is not explicitly set.
// SetProgressValue overrides and clears the TBPF_INDETERMINATE state.
if (mode == "error") {
stateR = taskbar_->SetProgressState(window, TBPF_ERROR);
} else if (mode == "paused") {
stateR = taskbar_->SetProgressState(window, TBPF_PAUSED);
} else {
stateR = taskbar_->SetProgressState(window, TBPF_NORMAL);
}
if (SUCCEEDED(stateR)) {
int val = static_cast<int>(value * 100);
barR = taskbar_->SetProgressValue(window, val, 100);
} else {
return SUCCEEDED(stateR);
}
}
return SUCCEEDED(barR);
}
bool TaskbarHost::SetOverlayIcon(

View file

@ -35,7 +35,7 @@ class TaskbarHost {
HWND window, const std::vector<ThumbarButton>& buttons);
// Set the progress state in taskbar.
bool SetProgressBar(HWND window, double value);
bool SetProgressBar(HWND window, double value, const std::string& mode);
// Set the overlay icon in taskbar.
bool SetOverlayIcon(