diff options
| author | Vaxry <vaxry@vaxry.net> | 2025-04-27 00:03:32 +0100 |
|---|---|---|
| committer | Vaxry <vaxry@vaxry.net> | 2025-04-27 13:28:06 +0100 |
| commit | 0302bfdc2207f9b5482fb07aa6052e7f6cb237ca (patch) | |
| tree | c2039f2d4f01327b23b39493bc03b90d195fa6d3 /src/managers/permissions/DynamicPermissionManager.hpp | |
| parent | 4f868a1f3c1edfc1f5998f7d21e46e7c23aeb02f (diff) | |
async: add Promise and use it for AsyncDialogBox
Diffstat (limited to 'src/managers/permissions/DynamicPermissionManager.hpp')
| -rw-r--r-- | src/managers/permissions/DynamicPermissionManager.hpp | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/src/managers/permissions/DynamicPermissionManager.hpp b/src/managers/permissions/DynamicPermissionManager.hpp index 681cbc1c..79dc56a6 100644 --- a/src/managers/permissions/DynamicPermissionManager.hpp +++ b/src/managers/permissions/DynamicPermissionManager.hpp @@ -5,7 +5,7 @@ #include "../../helpers/AsyncDialogBox.hpp" #include <vector> #include <wayland-server-core.h> -#include <optional> +#include "../../helpers/defer/Promise.hpp" // NOLINTNEXTLINE namespace re2 { @@ -15,6 +15,7 @@ namespace re2 { enum eDynamicPermissionType : uint8_t { PERMISSION_TYPE_UNKNOWN = 0, PERMISSION_TYPE_SCREENCOPY, + PERMISSION_TYPE_PLUGIN, }; enum eDynamicPermissionRuleSource : uint8_t { @@ -50,16 +51,18 @@ class CDynamicPermissionRule { // user rule CDynamicPermissionRule(wl_client* const client, eDynamicPermissionType type, eDynamicPermissionAllowMode defaultAllowMode = PERMISSION_RULE_ALLOW_MODE_ASK); - const eDynamicPermissionType m_type = PERMISSION_TYPE_UNKNOWN; - const eDynamicPermissionRuleSource m_source = PERMISSION_RULE_SOURCE_UNKNOWN; - wl_client* const m_client = nullptr; - std::string m_binaryPath = ""; - UP<re2::RE2> m_binaryRegex; + const eDynamicPermissionType m_type = PERMISSION_TYPE_UNKNOWN; + const eDynamicPermissionRuleSource m_source = PERMISSION_RULE_SOURCE_UNKNOWN; + wl_client* const m_client = nullptr; + std::string m_binaryPath = ""; + UP<re2::RE2> m_binaryRegex; - eDynamicPermissionAllowMode m_allowMode = PERMISSION_RULE_ALLOW_MODE_ASK; - SP<CAsyncDialogBox> m_dialogBox; // for pending + eDynamicPermissionAllowMode m_allowMode = PERMISSION_RULE_ALLOW_MODE_ASK; + SP<CAsyncDialogBox> m_dialogBox; // for pending + SP<CPromise<std::string>> m_promise; // for pending + SP<CPromiseResolver<eDynamicPermissionAllowMode>> m_promiseResolverForExternal; // for external promise - SDynamicPermissionRuleDestroyWrapper m_destroyWrapper; + SDynamicPermissionRuleDestroyWrapper m_destroyWrapper; friend class CDynamicPermissionManager; }; @@ -73,7 +76,11 @@ class CDynamicPermissionManager { // (will continue returning false if the user does not agree, of course.) eDynamicPermissionAllowMode clientPermissionMode(wl_client* client, eDynamicPermissionType permission); - void removeRulesForClient(wl_client* client); + // get a promise for the result. Returns null if there already was one requested for the client. + // Returns null if state is not pending + SP<CPromise<eDynamicPermissionAllowMode>> promiseFor(wl_client* client, eDynamicPermissionType permission); + + void removeRulesForClient(wl_client* client); private: void askForPermission(wl_client* client, const std::string& binaryName, eDynamicPermissionType type); |
