mirror of
https://github.com/hyprwm/Hyprland
synced 2024-12-22 13:29:49 +01:00
plugin api: add addNotificationV2
Allows for issuing fancy notifs via api
This commit is contained in:
parent
71a95a581f
commit
34da16b7e6
5 changed files with 79 additions and 10 deletions
|
@ -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();
|
||||
|
|
11
src/SharedDefs.hpp
Normal file
11
src/SharedDefs.hpp
Normal file
|
@ -0,0 +1,11 @@
|
|||
#pragma once
|
||||
|
||||
enum eIcons
|
||||
{
|
||||
ICON_WARNING = 0,
|
||||
ICON_INFO,
|
||||
ICON_HINT,
|
||||
ICON_ERROR,
|
||||
ICON_CONFUSED,
|
||||
ICON_NONE
|
||||
};
|
|
@ -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>{"", "", "", "", ""}};
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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);
|
||||
};
|
Loading…
Reference in a new issue