Merge pull request #6768 from electron/felix-set-progress
Enable mode indication for setProgressBar
This commit is contained in:
commit
81244c2221
11 changed files with 72 additions and 20 deletions
|
@ -584,8 +584,12 @@ void Window::SetFocusable(bool focusable) {
|
|||
return window_->SetFocusable(focusable);
|
||||
}
|
||||
|
||||
void Window::SetProgressBar(double progress) {
|
||||
window_->SetProgressBar(progress);
|
||||
void Window::SetProgressBar(double progress, mate::Arguments* args) {
|
||||
mate::Dictionary options;
|
||||
std::string mode;
|
||||
args->GetNext(&options) && options.Get("mode", &mode);
|
||||
|
||||
window_->SetProgressBar(progress, mode);
|
||||
}
|
||||
|
||||
void Window::SetOverlayIcon(const gfx::Image& overlay,
|
||||
|
|
|
@ -155,7 +155,7 @@ class Window : public mate::TrackableObject<Window>,
|
|||
void SetIgnoreMouseEvents(bool ignore);
|
||||
void SetContentProtection(bool enable);
|
||||
void SetFocusable(bool focusable);
|
||||
void SetProgressBar(double progress);
|
||||
void SetProgressBar(double progress, mate::Arguments* args);
|
||||
void SetOverlayIcon(const gfx::Image& overlay,
|
||||
const std::string& description);
|
||||
bool SetThumbarButtons(mate::Arguments* args);
|
||||
|
|
|
@ -143,7 +143,8 @@ class NativeWindow : public base::SupportsUserData,
|
|||
virtual gfx::AcceleratedWidget GetAcceleratedWidget() = 0;
|
||||
|
||||
// Taskbar/Dock APIs.
|
||||
virtual void SetProgressBar(double progress) = 0;
|
||||
virtual void SetProgressBar(double progress,
|
||||
const std::string& mode) = 0;
|
||||
virtual void SetOverlayIcon(const gfx::Image& overlay,
|
||||
const std::string& description) = 0;
|
||||
|
||||
|
|
|
@ -85,7 +85,7 @@ class NativeWindowMac : public NativeWindow,
|
|||
void SetParentWindow(NativeWindow* parent) override;
|
||||
gfx::NativeWindow GetNativeWindow() override;
|
||||
gfx::AcceleratedWidget GetAcceleratedWidget() override;
|
||||
void SetProgressBar(double progress) override;
|
||||
void SetProgressBar(double progress, const std::string& mode) override;
|
||||
void SetOverlayIcon(const gfx::Image& overlay,
|
||||
const std::string& description) override;
|
||||
void SetVisibleOnAllWorkspaces(bool visible) override;
|
||||
|
|
|
@ -979,7 +979,7 @@ gfx::AcceleratedWidget NativeWindowMac::GetAcceleratedWidget() {
|
|||
return inspectable_web_contents()->GetView()->GetNativeView();
|
||||
}
|
||||
|
||||
void NativeWindowMac::SetProgressBar(double progress) {
|
||||
void NativeWindowMac::SetProgressBar(double progress, const std::string& mode) {
|
||||
NSDockTile* dock_tile = [NSApp dockTile];
|
||||
|
||||
// For the first time API invoked, we need to create a ContentView in DockTile.
|
||||
|
|
|
@ -904,9 +904,10 @@ gfx::NativeWindow NativeWindowViews::GetNativeWindow() {
|
|||
return window_->GetNativeWindow();
|
||||
}
|
||||
|
||||
void NativeWindowViews::SetProgressBar(double progress) {
|
||||
void NativeWindowViews::SetProgressBar(
|
||||
double progress, const std::string& mode) {
|
||||
#if defined(OS_WIN)
|
||||
taskbar_host_.SetProgressBar(GetAcceleratedWidget(), progress);
|
||||
taskbar_host_.SetProgressBar(GetAcceleratedWidget(), progress, mode);
|
||||
#elif defined(USE_X11)
|
||||
if (unity::IsRunning()) {
|
||||
unity::SetProgressFraction(progress);
|
||||
|
|
|
@ -104,7 +104,7 @@ class NativeWindowViews : public NativeWindow,
|
|||
gfx::NativeWindow GetNativeWindow() override;
|
||||
void SetOverlayIcon(const gfx::Image& overlay,
|
||||
const std::string& description) override;
|
||||
void SetProgressBar(double value) override;
|
||||
void SetProgressBar(double value, const std::string& mode) override;
|
||||
void SetAutoHideMenuBar(bool auto_hide) override;
|
||||
bool IsMenuBarAutoHide() override;
|
||||
void SetMenuBarVisibility(bool visible) override;
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue