SYNERGY-1060 - Toast notifications on windows (#7052)
* SYNERGY-1060 - Add toast notification library for Windows * SYNERGY-1060 - Use unique_ptr * SYNERGY-1060 - Update changelog * SYNERGY-1061 Toast notifications on windows Co-authored-by: SerhiiGadzhilov <71632867+SerhiiGadzhilov@users.noreply.github.com> Co-authored-by: Serhii Hadzhilov <serhii-external@symless.com>
This commit is contained in:
parent
6b1761316a
commit
e317569057
5 changed files with 47 additions and 1 deletions
3
.gitmodules
vendored
3
.gitmodules
vendored
|
|
@ -1,3 +1,6 @@
|
||||||
[submodule "ext/googletest"]
|
[submodule "ext/googletest"]
|
||||||
path = ext/googletest
|
path = ext/googletest
|
||||||
url = https://github.com/google/googletest.git
|
url = https://github.com/google/googletest.git
|
||||||
|
[submodule "ext/WinToast"]
|
||||||
|
path = ext/WinToast
|
||||||
|
url = https://github.com/mohabouje/WinToast
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ Bug fixes:
|
||||||
- #7036 Fix tray icon not changing theme on Big Sur
|
- #7036 Fix tray icon not changing theme on Big Sur
|
||||||
- #7046 Fix MacOS 10.13 build
|
- #7046 Fix MacOS 10.13 build
|
||||||
- #7049 Scroll doesn't work in case of macOS is server
|
- #7049 Scroll doesn't work in case of macOS is server
|
||||||
|
- #7052 Add secure input notification on Windows
|
||||||
- #7047 Fix prevent sleep option on Mac and Windows
|
- #7047 Fix prevent sleep option on Mac and Windows
|
||||||
|
|
||||||
Enhancements:
|
Enhancements:
|
||||||
|
|
|
||||||
1
ext/WinToast
Submodule
1
ext/WinToast
Submodule
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 8abb85b44cb2100dba45c3f3f8fe981fcf300b71
|
||||||
|
|
@ -21,6 +21,8 @@ file(GLOB sources "*.cpp")
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
file(GLOB arch_headers "win32/*.h")
|
file(GLOB arch_headers "win32/*.h")
|
||||||
file(GLOB arch_sources "win32/*.cpp")
|
file(GLOB arch_sources "win32/*.cpp")
|
||||||
|
include_directories("../../../ext/WinToast/src")
|
||||||
|
list(APPEND arch_sources "../../../ext/WinToast/src/wintoastlib.cpp")
|
||||||
elseif (UNIX)
|
elseif (UNIX)
|
||||||
file(GLOB arch_headers "unix/*.h")
|
file(GLOB arch_headers "unix/*.h")
|
||||||
file(GLOB arch_sources "unix/*.cpp")
|
file(GLOB arch_sources "unix/*.cpp")
|
||||||
|
|
@ -37,4 +39,4 @@ add_library(synlib STATIC ${sources})
|
||||||
|
|
||||||
if (UNIX)
|
if (UNIX)
|
||||||
target_link_libraries(synlib arch client ipc net base platform mt server)
|
target_link_libraries(synlib arch client ipc net base platform mt server)
|
||||||
endif()
|
endif()
|
||||||
|
|
@ -31,6 +31,7 @@
|
||||||
#include "base/Event.h"
|
#include "base/Event.h"
|
||||||
#include "base/EventQueue.h"
|
#include "base/EventQueue.h"
|
||||||
#include "common/Version.h"
|
#include "common/Version.h"
|
||||||
|
#include "wintoastlib.h"
|
||||||
|
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
@ -181,8 +182,46 @@ AppUtilWindows::startNode()
|
||||||
app().startNode();
|
app().startNode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class WinToastHandler : public WinToastLib::IWinToastHandler {
|
||||||
|
public:
|
||||||
|
WinToastHandler() {}
|
||||||
|
// Public interfaces
|
||||||
|
void toastActivated() const override {}
|
||||||
|
void toastActivated(int actionIndex) const override {}
|
||||||
|
void toastDismissed(WinToastDismissalReason state) const override {}
|
||||||
|
void toastFailed() const override {}
|
||||||
|
};
|
||||||
|
|
||||||
void
|
void
|
||||||
AppUtilWindows::showNotification(const String & title, const String & text) const
|
AppUtilWindows::showNotification(const String & title, const String & text) const
|
||||||
{
|
{
|
||||||
LOG((CLOG_DEBUG "Showing notification. Title: \"%s\". Text: \"%s\"", title.c_str(), text.c_str()));
|
LOG((CLOG_DEBUG "Showing notification. Title: \"%s\". Text: \"%s\"", title.c_str(), text.c_str()));
|
||||||
|
if (!WinToastLib::WinToast::isCompatible()) {
|
||||||
|
LOG((CLOG_INFO "This system does not support toast notifications"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!WinToastLib::WinToast::instance()->isInitialized())
|
||||||
|
{
|
||||||
|
WinToastLib::WinToast::instance()->setAppName(L"Synergy");
|
||||||
|
const auto aumi = WinToastLib::WinToast::configureAUMI(L"Symless", L"Synergy", L"Synergy App", L"1.14.1+");
|
||||||
|
WinToastLib::WinToast::instance()->setAppUserModelId(aumi);
|
||||||
|
|
||||||
|
if (!WinToastLib::WinToast::instance()->initialize())
|
||||||
|
{
|
||||||
|
LOG((CLOG_DEBUG "Failed to initialize toast notifications"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
WinToastLib::WinToast::WinToastError error;
|
||||||
|
auto handler = std::make_unique<WinToastHandler>();
|
||||||
|
WinToastLib::WinToastTemplate templ = WinToastLib::WinToastTemplate(WinToastLib::WinToastTemplate::Text02);
|
||||||
|
templ.setTextField(std::wstring(title.begin(), title.end()), WinToastLib::WinToastTemplate::FirstLine);
|
||||||
|
templ.setTextField(std::wstring(text.begin(), text.end()), WinToastLib::WinToastTemplate::SecondLine);
|
||||||
|
|
||||||
|
const bool launched = WinToastLib::WinToast::instance()->showToast(templ, handler.get(), &error);
|
||||||
|
if (!launched) {
|
||||||
|
LOG((CLOG_DEBUG "Failed to show toast notification. Error code: %d", error));
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue