aboutsummaryrefslogtreecommitdiff
path: root/src/application.cpp
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2018-11-05 20:54:48 +0800
committercrupest <crupest@outlook.com>2018-11-05 20:54:48 +0800
commit1dab244aaad8694ba37ef43caedd8c8ba0310c00 (patch)
treef70f6489a0f88520a0bdc095cd9713d03f83687b /src/application.cpp
parent252519effe30881825dd02e26dc41bd9cde34782 (diff)
downloadcru-1dab244aaad8694ba37ef43caedd8c8ba0310c00.tar.gz
cru-1dab244aaad8694ba37ef43caedd8c8ba0310c00.tar.bz2
cru-1dab244aaad8694ba37ef43caedd8c8ba0310c00.zip
...
Diffstat (limited to 'src/application.cpp')
-rw-r--r--src/application.cpp17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/application.cpp b/src/application.cpp
index 2adab7c6..7be56f56 100644
--- a/src/application.cpp
+++ b/src/application.cpp
@@ -1,7 +1,5 @@
#include "application.h"
-#include <fmt/format.h>
-
#include "exception.h"
#include "timer.h"
#include "ui/window.h"
@@ -58,17 +56,20 @@ namespace cru {
{
case invoke_later_message_id:
{
- const auto p_action = reinterpret_cast<InvokeLaterAction*>(w_param);
+ const auto p_action = reinterpret_cast<std::function<void()>*>(w_param);
(*p_action)();
delete p_action;
return 0;
}
case WM_TIMER:
{
- const auto action = application_->GetTimerManager()->GetAction(static_cast<UINT_PTR>(w_param));
- if (action)
+ const auto id = static_cast<UINT_PTR>(w_param);
+ const auto action = application_->GetTimerManager()->GetAction(id);
+ if (action.has_value())
{
- (*action)();
+ (action.value().second)();
+ if (!action.value().first)
+ Application::GetInstance()->GetTimerManager()->KillTimer(id);
return 0;
}
break;
@@ -159,9 +160,9 @@ namespace cru {
::PostQuitMessage(quit_code);
}
- void InvokeLater(InvokeLaterAction&& action) {
+ void InvokeLater(const std::function<void()>& action) {
//copy the action to a safe place
- auto p_action_copy = new InvokeLaterAction(std::move(action));
+ auto p_action_copy = new std::function<void()>(action);
if (PostMessageW(Application::GetInstance()->GetGodWindow()->GetHandle(), invoke_later_message_id, reinterpret_cast<WPARAM>(p_action_copy), 0) == 0)
throw Win32Error(::GetLastError(), "InvokeLater failed to post message.");