summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorspycrab <spycrab@users.noreply.github.com>2018-11-08 11:54:56 +0100
committerspycrab <spycrab@users.noreply.github.com>2018-11-08 11:54:56 +0100
commit1595a9bdcdf6a4eefdf3d82b5aa2001d97c26f29 (patch)
tree68adba7fb97f9eddcd308ce68456eb2b0dd036f2 /Source/Core
parent80259b019b476b4a932342ca7593799c9abdfefb (diff)
Updater: Show progress in taskbar
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Updater/Main.cpp7
-rw-r--r--Source/Core/Updater/UI.cpp22
-rw-r--r--Source/Core/Updater/UI.h2
3 files changed, 19 insertions, 12 deletions
diff --git a/Source/Core/Updater/Main.cpp b/Source/Core/Updater/Main.cpp
index 0fe78505cf..10ae9aadd4 100644
--- a/Source/Core/Updater/Main.cpp
+++ b/Source/Core/Updater/Main.cpp
@@ -656,14 +656,9 @@ bool PerformUpdate(const TodoList& todo, const std::string& install_base_path,
void FatalError(const std::string& message)
{
- auto wide_message = UTF8ToUTF16(message);
-
- MessageBox(nullptr,
- (L"A fatal error occured and the updater cannot continue:\n " + wide_message).c_str(),
- L"Error", MB_ICONERROR);
-
fprintf(log_fp, "%s\n", message.c_str());
+ UI::Error(message);
UI::Stop();
}
} // namespace
diff --git a/Source/Core/Updater/UI.cpp b/Source/Core/Updater/UI.cpp
index 7f4e5cb1b2..43abd0362a 100644
--- a/Source/Core/Updater/UI.cpp
+++ b/Source/Core/Updater/UI.cpp
@@ -5,6 +5,7 @@
#include "Updater/UI.h"
#include <CommCtrl.h>
+#include <ShObjIdl.h>
#include <string>
@@ -16,6 +17,7 @@ namespace
HWND window_handle = nullptr;
HWND label_handle = nullptr;
HWND progressbar_handle = nullptr;
+ITaskbarList3* taskbar_list = nullptr;
Common::Flag running;
Common::Flag request_stop;
@@ -44,6 +46,8 @@ bool Init()
if (!window_handle)
return false;
+ CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&taskbar_list));
+
label_handle = CreateWindow(L"STATIC", NULL, WS_VISIBLE | WS_CHILD, 5, 5, 500, 25, window_handle,
nullptr, nullptr, 0);
@@ -80,6 +84,7 @@ void SetMarquee(bool marquee)
{
SetWindowLong(progressbar_handle, GWL_STYLE, PROGRESSBAR_FLAGS | (marquee ? PBS_MARQUEE : 0));
SendMessage(progressbar_handle, PBM_SETMARQUEE, marquee, 0);
+ taskbar_list->SetProgressState(window_handle, marquee ? TBPF_INDETERMINATE : TBPF_NORMAL);
}
void ResetProgress()
@@ -88,15 +93,22 @@ void ResetProgress()
SetMarquee(true);
}
-void SetProgress(int current, int total)
+void Error(const std::string& text)
{
- SendMessage(progressbar_handle, PBM_SETRANGE32, 0, total);
- SendMessage(progressbar_handle, PBM_SETPOS, current, 0);
+ auto wide_text = UTF8ToUTF16(text);
+
+ MessageBox(nullptr,
+ (L"A fatal error occured and the updater cannot continue:\n " + wide_text).c_str(),
+ L"Error", MB_ICONERROR);
+
+ taskbar_list->SetProgressState(window_handle, TBPF_ERROR);
}
-void IncrementProgress(int amount)
+void SetProgress(int current, int total)
{
- SendMessage(progressbar_handle, PBM_DELTAPOS, amount, 0);
+ SendMessage(progressbar_handle, PBM_SETRANGE32, 0, total);
+ SendMessage(progressbar_handle, PBM_SETPOS, current, 0);
+ taskbar_list->SetProgressValue(window_handle, current, total);
}
void SetDescription(const std::string& text)
diff --git a/Source/Core/Updater/UI.h b/Source/Core/Updater/UI.h
index 3e22ceb0c8..6b892f5b27 100644
--- a/Source/Core/Updater/UI.h
+++ b/Source/Core/Updater/UI.h
@@ -9,11 +9,11 @@
namespace UI
{
void MessageLoop();
+void Error(const std::string& text);
void Stop();
void SetDescription(const std::string& text);
void SetMarquee(bool marquee);
void ResetProgress();
void SetProgress(int current, int total);
-void IncrementProgress(int amount);
} // namespace UI