diff options
author | vaxerski <[email protected]> | 2023-03-20 15:23:25 +0000 |
---|---|---|
committer | vaxerski <[email protected]> | 2023-03-20 15:23:25 +0000 |
commit | 34da16b7e626be4d96c3098b5265e2c008fb2d65 (patch) | |
tree | cb4b5fc91507c2c93f76468b276f2e69aa7cd847 | |
parent | 71a95a581f86a801b1db24a417f41d9a395cab38 (diff) | |
download | Hyprland-34da16b7e626be4d96c3098b5265e2c008fb2d65.tar.gz Hyprland-34da16b7e626be4d96c3098b5265e2c008fb2d65.zip |
plugin api: add addNotificationV2
Allows for issuing fancy notifs via api
-rw-r--r-- | example/examplePlugin/main.cpp | 3 | ||||
-rw-r--r-- | src/SharedDefs.hpp | 11 | ||||
-rw-r--r-- | src/debug/HyprNotificationOverlay.hpp | 11 | ||||
-rw-r--r-- | src/plugins/PluginAPI.cpp | 48 | ||||
-rw-r--r-- | src/plugins/PluginAPI.hpp | 16 |
5 files changed, 79 insertions, 10 deletions
diff --git a/example/examplePlugin/main.cpp b/example/examplePlugin/main.cpp index 49364f59..6007a58b 100644 --- a/example/examplePlugin/main.cpp +++ b/example/examplePlugin/main.cpp @@ -77,6 +77,9 @@ APICALL EXPORT PLUGIN_DESCRIPTION_INFO PLUGIN_INIT(HANDLE handle) { g_pMouseDownHook = HyprlandAPI::createFunctionHook( PHANDLE, HyprlandAPI::getFunctionAddressFromSignature(PHANDLE, "_ZN13CInputManager22processMouseDownNormalEP24wlr_pointer_button_event"), (void*)&hkProcessMouseDownNormal); + // fancy notifications + HyprlandAPI::addNotificationV2(PHANDLE, {{"text", "Example hint"}, {"time", (uint64_t)10000}, {"color", CColor(0.2, 0.2, 0.9, 1.0)}, {"icon", ICON_HINT}}); + // Enable our hooks g_pFocusHook->hook(); g_pMotionHook->hook(); diff --git a/src/SharedDefs.hpp b/src/SharedDefs.hpp new file mode 100644 index 00000000..8ae1d0a2 --- /dev/null +++ b/src/SharedDefs.hpp @@ -0,0 +1,11 @@ +#pragma once + +enum eIcons +{ + ICON_WARNING = 0, + ICON_INFO, + ICON_HINT, + ICON_ERROR, + ICON_CONFUSED, + ICON_NONE +};
\ No newline at end of file diff --git a/src/debug/HyprNotificationOverlay.hpp b/src/debug/HyprNotificationOverlay.hpp index 9f0a85ef..fb3414da 100644 --- a/src/debug/HyprNotificationOverlay.hpp +++ b/src/debug/HyprNotificationOverlay.hpp @@ -4,6 +4,7 @@ #include "../helpers/Timer.hpp" #include "../helpers/Monitor.hpp" #include "../render/Texture.hpp" +#include "../SharedDefs.hpp" #include <deque> @@ -16,16 +17,6 @@ enum eIconBackend ICONS_BACKEND_FA }; -enum eIcons -{ - ICON_WARNING = 0, - ICON_INFO, - ICON_HINT, - ICON_ERROR, - ICON_CONFUSED, - ICON_NONE -}; - static const std::array<std::array<std::string, ICON_NONE + 1>, 3 /* backends */> ICONS_ARRAY = {std::array<std::string, ICON_NONE + 1>{"[!]", "[i]", "[Hint]", "[Err]", "[?]", ""}, std::array<std::string, ICON_NONE + 1>{"", "", "", "", "", ""}, std::array<std::string, ICON_NONE + 1>{"", "", "", "", ""}}; diff --git a/src/plugins/PluginAPI.cpp b/src/plugins/PluginAPI.cpp index 8c816546..c878516b 100644 --- a/src/plugins/PluginAPI.cpp +++ b/src/plugins/PluginAPI.cpp @@ -193,3 +193,51 @@ APICALL bool HyprlandAPI::removeDispatcher(HANDLE handle, const std::string& nam return true; } + +APICALL bool addNotificationV2(HANDLE handle, const std::unordered_map<std::string, std::any>& data) { + auto* const PLUGIN = g_pPluginSystem->getPluginByHandle(handle); + + if (!PLUGIN) + return false; + + try { + auto iterator = data.find("text"); + if (iterator == data.end()) + return false; + + // mandatory + std::string text; + try { + text = std::any_cast<std::string>(iterator->second); + } catch (std::exception& e) { + // attempt const char* + text = std::any_cast<const char*>(iterator->second); + } + + iterator = data.find("time"); + if (iterator == data.end()) + return false; + + const auto TIME = std::any_cast<uint64_t>(iterator->second); + + iterator = data.find("color"); + if (iterator == data.end()) + return false; + + const auto COLOR = std::any_cast<CColor>(iterator->second); + + // optional + eIcons icon = ICON_NONE; + iterator = data.find("icon"); + if (iterator != data.end()) + icon = std::any_cast<eIcons>(iterator->second); + + g_pHyprNotificationOverlay->addNotification(text, COLOR, TIME, icon); + + } catch (std::exception& e) { + // bad any_cast most likely, plugin error + return false; + } + + return true; +}
\ No newline at end of file diff --git a/src/plugins/PluginAPI.hpp b/src/plugins/PluginAPI.hpp index 756a5631..80744bc3 100644 --- a/src/plugins/PluginAPI.hpp +++ b/src/plugins/PluginAPI.hpp @@ -19,6 +19,7 @@ See examples/examplePlugin for an example plugin #include "../helpers/Color.hpp" #include "HookSystem.hpp" +#include "../SharedDefs.hpp" #include <any> #include <functional> @@ -214,4 +215,19 @@ namespace HyprlandAPI { returns: true on success. False otherwise. */ APICALL bool removeDispatcher(HANDLE handle, const std::string& name); + + /* + Adds a notification. + + data has to contain: + - text: std::string or const char* + - time: uint64_t + - color: CColor + + data may contain: + - icon: eIcons + + returns: true on success. False otherwise. + */ + APICALL bool addNotificationV2(HANDLE handle, const std::unordered_map<std::string, std::any>& data); };
\ No newline at end of file |