From a08e1cf9777b4a3766c91be2685aaf37c24fbd4e Mon Sep 17 00:00:00 2001 From: Alexander Lantsev Date: Fri, 31 Jul 2015 22:48:44 +0000 Subject: Toaster: initial commit git-svn-id: http://svn.miranda-ng.org/main/trunk@14775 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/Toaster/src/toast_event_handler.cpp | 50 +++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 plugins/Toaster/src/toast_event_handler.cpp (limited to 'plugins/Toaster/src/toast_event_handler.cpp') diff --git a/plugins/Toaster/src/toast_event_handler.cpp b/plugins/Toaster/src/toast_event_handler.cpp new file mode 100644 index 0000000000..e2ed29e165 --- /dev/null +++ b/plugins/Toaster/src/toast_event_handler.cpp @@ -0,0 +1,50 @@ +#include "stdafx.h" + +ToastEventHandler::ToastEventHandler() : _ref(1), _callback(nullptr), _arg(nullptr) +{ +} + +ToastEventHandler::ToastEventHandler(_In_ pEventHandler callback, _In_ void* arg) : _ref(1), _callback(callback), _arg(arg) +{ +} + +ToastEventHandler::~ToastEventHandler() +{ +} + +IFACEMETHODIMP_(ULONG) ToastEventHandler::AddRef() +{ + return InterlockedIncrement(&_ref); +} + +IFACEMETHODIMP_(ULONG) ToastEventHandler::Release() +{ + ULONG l = InterlockedDecrement(&_ref); + if (l == 0) delete this; + return l; +} + +IFACEMETHODIMP ToastEventHandler::QueryInterface(_In_ REFIID riid, _COM_Outptr_ void **ppv) +{ + if (IsEqualIID(riid, IID_IUnknown)) + *ppv = static_cast(static_cast(this)); + else if (IsEqualIID(riid, __uuidof(DesktopToastActivatedEventHandler))) + *ppv = static_cast(this); + else *ppv = nullptr; + + if (*ppv) + { + reinterpret_cast(*ppv)->AddRef(); + return S_OK; + } + + return E_NOINTERFACE; +} + +IFACEMETHODIMP ToastEventHandler::Invoke(_In_ ABI::Windows::UI::Notifications::IToastNotification* /* sender */, _In_::IInspectable* /* args */) +{ + if (_callback != nullptr) + _callback(_arg); + + return S_OK; +} -- cgit v1.2.3