diff options
author | crupest <crupest@outlook.com> | 2018-11-05 20:54:48 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2018-11-05 20:54:48 +0800 |
commit | 1dab244aaad8694ba37ef43caedd8c8ba0310c00 (patch) | |
tree | f70f6489a0f88520a0bdc095cd9713d03f83687b /src/application.cpp | |
parent | 252519effe30881825dd02e26dc41bd9cde34782 (diff) | |
download | cru-1dab244aaad8694ba37ef43caedd8c8ba0310c00.tar.gz cru-1dab244aaad8694ba37ef43caedd8c8ba0310c00.tar.bz2 cru-1dab244aaad8694ba37ef43caedd8c8ba0310c00.zip |
...
Diffstat (limited to 'src/application.cpp')
-rw-r--r-- | src/application.cpp | 17 |
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."); |