diff options
Diffstat (limited to 'third_party/WinToast/upstream-add-toast-scenario.patch')
-rw-r--r-- | third_party/WinToast/upstream-add-toast-scenario.patch | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/third_party/WinToast/upstream-add-toast-scenario.patch b/third_party/WinToast/upstream-add-toast-scenario.patch new file mode 100644 index 0000000000..0be8bf878d --- /dev/null +++ b/third_party/WinToast/upstream-add-toast-scenario.patch @@ -0,0 +1,123 @@ +diff --git a/src/wintoastlib.cpp b/src/wintoastlib.cpp +index 3cf5f21..1adfe19 100644 +--- a/src/wintoastlib.cpp ++++ b/src/wintoastlib.cpp +@@ -677,6 +677,10 @@ INT64 WinToast::showToast(_In_ const WinToastTemplate& toast, _In_ IWinToastHan + (toast.duration() == WinToastTemplate::Duration::Short) ? L"short" : L"long"); + } + ++ if (SUCCEEDED(hr)) { ++ hr = addScenarioHelper(xmlDocument.Get(), toast.scenario()); ++ } ++ + } else { + DEBUG_MSG("Modern features (Actions/Sounds/Attributes) not supported in this os version"); + } +@@ -828,6 +832,28 @@ HRESULT WinToast::addDurationHelper(_In_ IXmlDocument *xml, _In_ const std::wstr + return hr; + } + ++HRESULT WinToast::addScenarioHelper(_In_ IXmlDocument* xml, _In_ const std::wstring& scenario) { ++ ComPtr<IXmlNodeList> nodeList; ++ HRESULT hr = xml->GetElementsByTagName(WinToastStringWrapper(L"toast").Get(), &nodeList); ++ if (SUCCEEDED(hr)) { ++ UINT32 length; ++ hr = nodeList->get_Length(&length); ++ if (SUCCEEDED(hr)) { ++ ComPtr<IXmlNode> toastNode; ++ hr = nodeList->Item(0, &toastNode); ++ if (SUCCEEDED(hr)) { ++ ComPtr<IXmlElement> toastElement; ++ hr = toastNode.As(&toastElement); ++ if (SUCCEEDED(hr)) { ++ hr = toastElement->SetAttribute(WinToastStringWrapper(L"scenario").Get(), ++ WinToastStringWrapper(scenario).Get()); ++ } ++ } ++ } ++ } ++ return hr; ++} ++ + HRESULT WinToast::setTextFieldHelper(_In_ IXmlDocument *xml, _In_ const std::wstring& text, _In_ UINT32 pos) { + ComPtr<IXmlNodeList> nodeList; + HRESULT hr = xml->GetElementsByTagName(WinToastStringWrapper(L"text").Get(), &nodeList); +@@ -1065,6 +1091,15 @@ void WinToastTemplate::setExpiration(_In_ INT64 millisecondsFromNow) { + _expiration = millisecondsFromNow; + } + ++void WinToastLib::WinToastTemplate::setScenario(Scenario scenario) { ++ switch (scenario) { ++ case Scenario::Default: _scenario = L"Default"; break; ++ case Scenario::Alarm: _scenario = L"Alarm"; break; ++ case Scenario::IncomingCall: _scenario = L"IncomingCall"; break; ++ case Scenario::Reminder: _scenario = L"Reminder"; break; ++ } ++} ++ + void WinToastTemplate::setAttributionText(_In_ const std::wstring& attributionText) { + _attributionText = attributionText; + } +@@ -1112,6 +1147,10 @@ const std::wstring& WinToastTemplate::attributionText() const { + return _attributionText; + } + ++const std::wstring& WinToastLib::WinToastTemplate::scenario() const { ++ return _scenario; ++} ++ + INT64 WinToastTemplate::expiration() const { + return _expiration; + } +diff --git a/src/wintoastlib.h b/src/wintoastlib.h +index d028994..291e15f 100644 +--- a/src/wintoastlib.h ++++ b/src/wintoastlib.h +@@ -63,6 +63,7 @@ namespace WinToastLib { + + class WinToastTemplate { + public: ++ enum class Scenario { Default, Alarm, IncomingCall, Reminder }; + enum Duration { System, Short, Long }; + enum AudioOption { Default = 0, Silent, Loop }; + enum TextField { FirstLine = 0, SecondLine, ThirdLine }; +@@ -114,13 +115,14 @@ namespace WinToastLib { + void setSecondLine(_In_ const std::wstring& text); + void setThirdLine(_In_ const std::wstring& text); + void setTextField(_In_ const std::wstring& txt, _In_ TextField pos); +- void setAttributionText(_In_ const std::wstring & attributionText); ++ void setAttributionText(_In_ const std::wstring& attributionText); + void setImagePath(_In_ const std::wstring& imgPath); + void setAudioPath(_In_ WinToastTemplate::AudioSystemFile audio); + void setAudioPath(_In_ const std::wstring& audioPath); + void setAudioOption(_In_ WinToastTemplate::AudioOption audioOption); + void setDuration(_In_ Duration duration); + void setExpiration(_In_ INT64 millisecondsFromNow); ++ void setScenario(_In_ Scenario scenario); + void addAction(_In_ const std::wstring& label); + + std::size_t textFieldsCount() const; +@@ -132,6 +134,7 @@ namespace WinToastLib { + const std::wstring& imagePath() const; + const std::wstring& audioPath() const; + const std::wstring& attributionText() const; ++ const std::wstring& scenario() const; + INT64 expiration() const; + WinToastTemplateType type() const; + WinToastTemplate::AudioOption audioOption() const; +@@ -142,6 +145,7 @@ namespace WinToastLib { + std::wstring _imagePath{}; + std::wstring _audioPath{}; + std::wstring _attributionText{}; ++ std::wstring _scenario{L"Default"}; + INT64 _expiration{0}; + AudioOption _audioOption{WinToastTemplate::AudioOption::Default}; + WinToastTemplateType _type{WinToastTemplateType::Text01}; +@@ -210,6 +214,7 @@ namespace WinToastLib { + HRESULT setAttributionTextFieldHelper(_In_ IXmlDocument *xml, _In_ const std::wstring& text); + HRESULT addActionHelper(_In_ IXmlDocument *xml, _In_ const std::wstring& action, _In_ const std::wstring& arguments); + HRESULT addDurationHelper(_In_ IXmlDocument *xml, _In_ const std::wstring& duration); ++ HRESULT addScenarioHelper(_In_ IXmlDocument *xml, _In_ const std::wstring& scenario); + ComPtr<IToastNotifier> notifier(_In_ bool* succeded) const; + void setError(_Out_opt_ WinToastError* error, _In_ WinToastError value); + }; |