Skip to content

Commit ada02ad

Browse files
committed
Templating the callback used to declare a notification as ready to be deleted
1 parent 41201c5 commit ada02ad

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

src/wintoastlib.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -274,13 +274,14 @@ namespace Util {
274274
return hr;
275275
}
276276

277+
template<typename FunctorT>
277278
inline HRESULT setEventHandlers(_In_ IToastNotification* notification, _In_ std::shared_ptr<IWinToastHandler> eventHandler,
278279
_In_ INT64 expirationTime, _Out_ EventRegistrationToken& activatedToken,
279280
_Out_ EventRegistrationToken& dismissedToken, _Out_ EventRegistrationToken& failedToken,
280-
std::function<void()> processForDeletionFunc) {
281+
_In_ FunctorT&& markAsReadyForDeletionFunc) {
281282
HRESULT hr = notification->add_Activated(
282283
Callback<Implements<RuntimeClassFlags<ClassicCom>, ITypedEventHandler<ToastNotification*, IInspectable*>>>(
283-
[eventHandler, processForDeletionFunc](IToastNotification* notify, IInspectable* inspectable) {
284+
[eventHandler, markAsReadyForDeletionFunc](IToastNotification* notify, IInspectable* inspectable) {
284285
ComPtr<IToastActivatedEventArgs> activatedEventArgs;
285286
HRESULT hr = inspectable->QueryInterface(activatedEventArgs.GetAddressOf());
286287
if (SUCCEEDED(hr)) {
@@ -291,14 +292,14 @@ namespace Util {
291292
if (arguments && *arguments) {
292293
eventHandler->toastActivated(static_cast<int>(wcstol(arguments, nullptr, 10)));
293294
DllImporter::WindowsDeleteString(argumentsHandle);
294-
processForDeletionFunc();
295+
markAsReadyForDeletionFunc();
295296
return S_OK;
296297
}
297298
DllImporter::WindowsDeleteString(argumentsHandle);
298299
}
299300
}
300301
eventHandler->toastActivated();
301-
processForDeletionFunc();
302+
markAsReadyForDeletionFunc();
302303
return S_OK;
303304
})
304305
.Get(),
@@ -307,7 +308,7 @@ namespace Util {
307308
if (SUCCEEDED(hr)) {
308309
hr = notification->add_Dismissed(
309310
Callback<Implements<RuntimeClassFlags<ClassicCom>, ITypedEventHandler<ToastNotification*, ToastDismissedEventArgs*>>>(
310-
[eventHandler, expirationTime, processForDeletionFunc](IToastNotification* notify, IToastDismissedEventArgs* e) {
311+
[eventHandler, expirationTime, markAsReadyForDeletionFunc](IToastNotification* notify, IToastDismissedEventArgs* e) {
311312
ToastDismissalReason reason;
312313
if (SUCCEEDED(e->get_Reason(&reason))) {
313314
if (reason == ToastDismissalReason_UserCanceled && expirationTime &&
@@ -316,17 +317,17 @@ namespace Util {
316317
}
317318
eventHandler->toastDismissed(static_cast<IWinToastHandler::WinToastDismissalReason>(reason));
318319
}
319-
processForDeletionFunc();
320+
markAsReadyForDeletionFunc();
320321
return S_OK;
321322
})
322323
.Get(),
323324
&dismissedToken);
324325
if (SUCCEEDED(hr)) {
325326
hr = notification->add_Failed(
326327
Callback<Implements<RuntimeClassFlags<ClassicCom>, ITypedEventHandler<ToastNotification*, ToastFailedEventArgs*>>>(
327-
[eventHandler, processForDeletionFunc](IToastNotification* notify, IToastFailedEventArgs* e) {
328+
[eventHandler, markAsReadyForDeletionFunc](IToastNotification* notify, IToastFailedEventArgs* e) {
328329
eventHandler->toastFailed();
329-
processForDeletionFunc();
330+
markAsReadyForDeletionFunc();
330331
return S_OK;
331332
})
332333
.Get(),

0 commit comments

Comments
 (0)