remove Use of libnotify and wintoast
This commit is contained in:
parent
bcfc77fde6
commit
201df59cb7
12 changed files with 9 additions and 173 deletions
14
.github/actions/install-dependencies/action.yml
vendored
14
.github/actions/install-dependencies/action.yml
vendored
|
|
@ -37,15 +37,13 @@ runs:
|
||||||
apt update -qqq > /dev/null
|
apt update -qqq > /dev/null
|
||||||
apt install -qqq cmake build-essential ninja-build \
|
apt install -qqq cmake build-essential ninja-build \
|
||||||
xorg-dev libx11-dev libxtst-dev libssl-dev \
|
xorg-dev libx11-dev libxtst-dev libssl-dev \
|
||||||
libglib2.0-dev libnotify-dev \
|
libglib2.0-dev libxkbfile-dev qt6-base-dev qt6-tools-dev \
|
||||||
libxkbfile-dev qt6-base-dev qt6-tools-dev \
|
|
||||||
libgtk-3-dev libgtest-dev libgmock-dev \
|
libgtk-3-dev libgtest-dev libgmock-dev \
|
||||||
libei-dev libportal-dev libtomlplusplus-dev libcli11-dev -y >/dev/null
|
libei-dev libportal-dev libtomlplusplus-dev libcli11-dev -y >/dev/null
|
||||||
elif [ ${{inputs.like}} == "fedora" ]; then
|
elif [ ${{inputs.like}} == "fedora" ]; then
|
||||||
dnf install -y cmake make ninja-build gcc-c++ \
|
dnf install -y cmake make ninja-build gcc-c++ \
|
||||||
rpm-build openssl-devel glib2-devel \
|
rpm-build openssl-devel glib2-devel \
|
||||||
libXtst-devel libnotify-devel \
|
libXtst-devel libxkbfile-devel qt6-qtbase-devel qt6-qttools-devel \
|
||||||
libxkbfile-devel qt6-qtbase-devel qt6-qttools-devel \
|
|
||||||
gtk3-devel gtest-devel gmock-devel \
|
gtk3-devel gtest-devel gmock-devel \
|
||||||
libei-devel libportal-devel tomlplusplus-devel \
|
libei-devel libportal-devel tomlplusplus-devel \
|
||||||
cli11-devel
|
cli11-devel
|
||||||
|
|
@ -53,14 +51,12 @@ runs:
|
||||||
zypper refresh
|
zypper refresh
|
||||||
zypper install -y --force-resolution \
|
zypper install -y --force-resolution \
|
||||||
cmake make ninja gcc-c++ rpm-build libopenssl-devel \
|
cmake make ninja gcc-c++ rpm-build libopenssl-devel \
|
||||||
glib2-devel libXtst-devel libnotify-devel \
|
glib2-devel libXtst-devel libxkbfile-devel qt6-base-devel qt6-tools-devel gtk3-devel \
|
||||||
libxkbfile-devel qt6-base-devel qt6-tools-devel gtk3-devel \
|
|
||||||
googletest-devel googlemock-devel libei-devel \
|
googletest-devel googlemock-devel libei-devel \
|
||||||
libportal-devel tomlplusplus-devel cli11-devel
|
libportal-devel tomlplusplus-devel cli11-devel
|
||||||
elif [ ${{ inputs.like }} == "arch" ]; then
|
elif [ ${{ inputs.like }} == "arch" ]; then
|
||||||
pacman -Syu --noconfirm base-devel cmake ninja \
|
pacman -Syu --noconfirm base-devel cmake ninja \
|
||||||
gcc openssl glib2 libxtst libnotify \
|
gcc openssl glib2 libxtst libxkbfile gtest libei libportal \
|
||||||
libxkbfile gtest libei libportal \
|
|
||||||
qt6-base qt6-tools gtk3 tomlplusplus cli11
|
qt6-base qt6-tools gtk3 tomlplusplus cli11
|
||||||
else
|
else
|
||||||
echo "Unknown like"
|
echo "Unknown like"
|
||||||
|
|
@ -91,7 +87,7 @@ runs:
|
||||||
id: vcpkg
|
id: vcpkg
|
||||||
uses: johnwason/vcpkg-action@v6
|
uses: johnwason/vcpkg-action@v6
|
||||||
with:
|
with:
|
||||||
pkgs: wintoast gtest pkgconf openssl
|
pkgs: gtest pkgconf openssl
|
||||||
extra-args: --classic
|
extra-args: --classic
|
||||||
triplet: x64-windows-release
|
triplet: x64-windows-release
|
||||||
token: ${{ github.token }}
|
token: ${{ github.token }}
|
||||||
|
|
|
||||||
|
|
@ -149,7 +149,7 @@ macro(configure_unix_libs)
|
||||||
configure_xorg_libs()
|
configure_xorg_libs()
|
||||||
|
|
||||||
include(FindPkgConfig)
|
include(FindPkgConfig)
|
||||||
|
find_package(PkgConfig)
|
||||||
if(PKG_CONFIG_FOUND)
|
if(PKG_CONFIG_FOUND)
|
||||||
pkg_check_modules(LIBXKBCOMMON REQUIRED xkbcommon)
|
pkg_check_modules(LIBXKBCOMMON REQUIRED xkbcommon)
|
||||||
pkg_check_modules(GLIB2 REQUIRED glib-2.0)
|
pkg_check_modules(GLIB2 REQUIRED glib-2.0)
|
||||||
|
|
@ -159,15 +159,6 @@ macro(configure_unix_libs)
|
||||||
else()
|
else()
|
||||||
message(WARNING "pkg-config not found, skipping wayland libraries")
|
message(WARNING "pkg-config not found, skipping wayland libraries")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
find_package(PkgConfig)
|
|
||||||
if(PKG_CONFIG_FOUND)
|
|
||||||
pkg_check_modules(lib_glib REQUIRED IMPORTED_TARGET glib-2.0)
|
|
||||||
pkg_check_modules(lib_notify REQUIRED IMPORTED_TARGET libnotify)
|
|
||||||
add_definitions(-DHAVE_LIBNOTIFY=1)
|
|
||||||
else()
|
|
||||||
message(WARNING "pkg-config not found, skipping libnotify")
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# For config.h, set some static values; it may be a good idea to make these
|
# For config.h, set some static values; it may be a good idea to make these
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@ depends=(
|
||||||
'libxtst'
|
'libxtst'
|
||||||
'libxinerama'
|
'libxinerama'
|
||||||
'libxkbcommon-x11'
|
'libxkbcommon-x11'
|
||||||
'libnotify'
|
|
||||||
'hicolor-icon-theme'
|
'hicolor-icon-theme'
|
||||||
'qt6-base'
|
'qt6-base'
|
||||||
'qt6-tools'
|
'qt6-tools'
|
||||||
|
|
|
||||||
|
|
@ -861,21 +861,7 @@ void ServerProxy::secureInputNotification()
|
||||||
{
|
{
|
||||||
std::string app;
|
std::string app;
|
||||||
ProtocolUtil::readf(m_stream, kMsgDSecureInputNotification + 4, &app);
|
ProtocolUtil::readf(m_stream, kMsgDSecureInputNotification + 4, &app);
|
||||||
|
LOG((CLOG_INFO "application \"%s\" is blocking the keyboard", app.c_str()));
|
||||||
// display this notification on the client
|
|
||||||
if (app != "unknown") {
|
|
||||||
AppUtil::instance().showNotification(
|
|
||||||
"The keyboard may stop working.", "'Secure input' enabled by " + app +
|
|
||||||
" on the server. "
|
|
||||||
"To fix the keyboard, " +
|
|
||||||
app + " must be closed."
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
AppUtil::instance().showNotification(
|
|
||||||
"The keyboard may stop working.", "'Secure input' enabled by an application on the server. "
|
|
||||||
"To fix the keyboard, the application must be closed."
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ServerProxy::setServerLanguages()
|
void ServerProxy::setServerLanguages()
|
||||||
|
|
|
||||||
|
|
@ -41,11 +41,6 @@ else()
|
||||||
message(STATUS "tomlplusplus INC DIR: ${tomlPP_inc_dir}")
|
message(STATUS "tomlplusplus INC DIR: ${tomlPP_inc_dir}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (WIN32)
|
|
||||||
find_package(unofficial-wintoast CONFIG REQUIRED)
|
|
||||||
set(wintoast-lib unofficial::wintoast::wintoast)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
####################Start Making Library#########################
|
####################Start Making Library#########################
|
||||||
set(lib_name app)
|
set(lib_name app)
|
||||||
|
|
||||||
|
|
@ -150,8 +145,7 @@ add_library(${lib_name} STATIC ${PLATFORM_CODE}
|
||||||
target_link_libraries(${lib_name} PUBLIC Qt6::Core Qt6::Network)
|
target_link_libraries(${lib_name} PUBLIC Qt6::Core Qt6::Network)
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
target_compile_definitions(${lib_name} PUBLIC HAVE_WINTOAST)
|
target_link_libraries(${lib_name} PRIVATE ${cli11_lib} ${tomlPP_lib})
|
||||||
target_link_libraries(${lib_name} PRIVATE ${cli11_lib} ${tomlPP_lib} ${wintoast-lib})
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
target_include_directories(
|
target_include_directories(
|
||||||
|
|
@ -178,12 +172,5 @@ if(UNIX)
|
||||||
|
|
||||||
if(NOT APPLE)
|
if(NOT APPLE)
|
||||||
target_link_libraries(${lib_name} PRIVATE Qt6::Xml)
|
target_link_libraries(${lib_name} PRIVATE Qt6::Xml)
|
||||||
|
|
||||||
find_package(PkgConfig)
|
|
||||||
if(PKG_CONFIG_FOUND)
|
|
||||||
target_link_libraries(${lib_name}
|
|
||||||
PRIVATE
|
|
||||||
PkgConfig::lib_glib PkgConfig::lib_notify)
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
|
||||||
|
|
@ -22,5 +22,4 @@ public:
|
||||||
virtual void startNode() = 0;
|
virtual void startNode() = 0;
|
||||||
virtual std::vector<std::string> getKeyboardLayoutList() = 0;
|
virtual std::vector<std::string> getKeyboardLayoutList() = 0;
|
||||||
virtual std::string getCurrentLanguageCode() = 0;
|
virtual std::string getCurrentLanguageCode() = 0;
|
||||||
virtual void showNotification(const std::string &title, const std::string &text) const = 0;
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -23,10 +23,6 @@
|
||||||
#include "base/LogOutputters.h"
|
#include "base/LogOutputters.h"
|
||||||
#include "common/Constants.h"
|
#include "common/Constants.h"
|
||||||
|
|
||||||
#if HAVE_LIBNOTIFY
|
|
||||||
#include <libnotify/notify.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
AppUtilUnix::AppUtilUnix(IEventQueue *events)
|
AppUtilUnix::AppUtilUnix(IEventQueue *events)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
@ -159,33 +155,3 @@ std::string AppUtilUnix::getCurrentLanguageCode()
|
||||||
#endif
|
#endif
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AppUtilUnix::showNotification(const std::string &title, const std::string &text) const
|
|
||||||
{
|
|
||||||
#if HAVE_LIBNOTIFY
|
|
||||||
LOG((CLOG_INFO "showing notification, title=\"%s\", text=\"%s\"", title.c_str(), text.c_str()));
|
|
||||||
if (!notify_init(kAppName)) {
|
|
||||||
LOG((CLOG_WARN "failed to initialize libnotify"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto notification = notify_notification_new(title.c_str(), text.c_str(), nullptr);
|
|
||||||
if (notification == nullptr) {
|
|
||||||
LOG((CLOG_WARN "failed to create notification"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
notify_notification_set_timeout(notification, 10000);
|
|
||||||
|
|
||||||
if (!notify_notification_show(notification, nullptr)) {
|
|
||||||
LOG((CLOG_WARN "failed to show notification"));
|
|
||||||
}
|
|
||||||
|
|
||||||
g_object_unref(G_OBJECT(notification));
|
|
||||||
notify_uninit();
|
|
||||||
|
|
||||||
#elif WINAPI_CARBON
|
|
||||||
// server and client processes are not allowed to show notifications.
|
|
||||||
// MacOS instead ask main deskflow process to show them instead.
|
|
||||||
LOG((CLOG_INFO "mac notification: %s|%s", title.c_str(), text.c_str()));
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,5 @@ public:
|
||||||
void startNode() override;
|
void startNode() override;
|
||||||
std::vector<std::string> getKeyboardLayoutList() override;
|
std::vector<std::string> getKeyboardLayoutList() override;
|
||||||
std::string getCurrentLanguageCode() override;
|
std::string getCurrentLanguageCode() override;
|
||||||
void showNotification(const std::string &title, const std::string &text) const override;
|
|
||||||
std::string m_evdev;
|
std::string m_evdev;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -25,10 +25,6 @@
|
||||||
#include <conio.h>
|
#include <conio.h>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
#if HAVE_WINTOAST
|
|
||||||
#include "wintoastlib.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
AppUtilWindows::AppUtilWindows(IEventQueue *events) : m_events(events), m_exitMode(kExitModeNormal)
|
AppUtilWindows::AppUtilWindows(IEventQueue *events) : m_events(events), m_exitMode(kExitModeNormal)
|
||||||
{
|
{
|
||||||
if (SetConsoleCtrlHandler((PHANDLER_ROUTINE)consoleHandler, TRUE) == FALSE) {
|
if (SetConsoleCtrlHandler((PHANDLER_ROUTINE)consoleHandler, TRUE) == FALSE) {
|
||||||
|
|
@ -190,75 +186,6 @@ HKL AppUtilWindows::getCurrentKeyboardLayout() const
|
||||||
return layout;
|
return layout;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if HAVE_WINTOAST
|
|
||||||
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
|
|
||||||
{
|
|
||||||
}
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void AppUtilWindows::showNotification(const std::string &title, const std::string &text) const
|
|
||||||
{
|
|
||||||
#if HAVE_WINTOAST
|
|
||||||
LOG((CLOG_INFO "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""
|
|
||||||
"Deskflow"
|
|
||||||
);
|
|
||||||
const auto aumi = WinToastLib::WinToast::configureAUMI(
|
|
||||||
L""
|
|
||||||
"Deskflow Developers",
|
|
||||||
L""
|
|
||||||
"Deskflow",
|
|
||||||
L""
|
|
||||||
"Deskflow",
|
|
||||||
L"1.14.1+"
|
|
||||||
);
|
|
||||||
WinToastLib::WinToast::instance()->setAppUserModelId(aumi);
|
|
||||||
|
|
||||||
if (!WinToastLib::WinToast::instance()->initialize()) {
|
|
||||||
LOG((CLOG_WARN "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_WARN "failed to show toast notification, error code: %d", error));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
LOG((CLOG_INFO "toast notifications are not supported"));
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void AppUtilWindows::eventLoop()
|
void AppUtilWindows::eventLoop()
|
||||||
{
|
{
|
||||||
HANDLE hCloseEvent = CreateEventA(nullptr, TRUE, FALSE, kCloseEventName);
|
HANDLE hCloseEvent = CreateEventA(nullptr, TRUE, FALSE, kCloseEventName);
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,6 @@ public:
|
||||||
std::vector<std::string> getKeyboardLayoutList() override;
|
std::vector<std::string> getKeyboardLayoutList() override;
|
||||||
std::string getCurrentLanguageCode() override;
|
std::string getCurrentLanguageCode() override;
|
||||||
HKL getCurrentKeyboardLayout() const;
|
HKL getCurrentKeyboardLayout() const;
|
||||||
void showNotification(const std::string &title, const std::string &text) const override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
AppExitMode m_exitMode;
|
AppExitMode m_exitMode;
|
||||||
|
|
|
||||||
|
|
@ -224,19 +224,7 @@ std::string PrimaryClient::getSecureInputApp() const
|
||||||
|
|
||||||
void PrimaryClient::secureInputNotification(const std::string &app) const
|
void PrimaryClient::secureInputNotification(const std::string &app) const
|
||||||
{
|
{
|
||||||
if (app != "unknown") {
|
LOG((CLOG_INFO "application \"%s\" is blocking the keyboard", app.c_str()));
|
||||||
AppUtil::instance().showNotification(
|
|
||||||
"The client keyboards may stop working.", "'Secure input' enabled by " + app +
|
|
||||||
". "
|
|
||||||
"Close " +
|
|
||||||
app + " to continue using keyboards on the clients."
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
AppUtil::instance().showNotification(
|
|
||||||
"The client keyboards may stop working.", "'Secure input' enabled by an application. "
|
|
||||||
"Close the application to continue using keyboards on the clients."
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PrimaryClient::resetOptions()
|
void PrimaryClient::resetOptions()
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@
|
||||||
"dependencies": [
|
"dependencies": [
|
||||||
"qttranslations",
|
"qttranslations",
|
||||||
"qtsvg",
|
"qtsvg",
|
||||||
"wintoast",
|
|
||||||
"gtest",
|
"gtest",
|
||||||
"pkgconf",
|
"pkgconf",
|
||||||
"openssl"
|
"openssl"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue