diff --git a/include/config/rcxml.h b/include/config/rcxml.h index 8243f2cb..a5e14b49 100644 --- a/include/config/rcxml.h +++ b/include/config/rcxml.h @@ -71,6 +71,7 @@ struct rcxml { enum tearing_mode allow_tearing; bool auto_enable_outputs; bool reuse_output_mode; + uint32_t default_permissions; bool xwayland_persistence; bool primary_selection; char *prompt_command; diff --git a/src/config/rcxml.c b/src/config/rcxml.c index ef092dbf..95a80f17 100644 --- a/src/config/rcxml.c +++ b/src/config/rcxml.c @@ -31,6 +31,7 @@ #include "config/touch.h" #include "labwc.h" #include "osd.h" +#include "permissions.h" #include "regions.h" #include "ssd.h" #include "translate.h" @@ -1095,6 +1096,8 @@ entry(xmlNode *node, char *nodename, char *content) set_bool(content, &rc.auto_enable_outputs); } else if (!strcasecmp(nodename, "reuseOutputMode.core")) { set_bool(content, &rc.reuse_output_mode); + } else if (!strcasecmp(nodename, "permission.core")) { + rc.default_permissions |= permissions_from_interface_name(content); } else if (!strcasecmp(nodename, "xwaylandPersistence.core")) { set_bool(content, &rc.xwayland_persistence); } else if (!strcasecmp(nodename, "primarySelection.core")) { @@ -1390,6 +1393,7 @@ rcxml_init(void) rc.allow_tearing = LAB_TEARING_DISABLED; rc.auto_enable_outputs = true; rc.reuse_output_mode = false; + rc.default_permissions = 0; rc.xwayland_persistence = false; rc.primary_selection = true; diff --git a/src/permissions.c b/src/permissions.c index 914e9963..a0f9b00a 100644 --- a/src/permissions.c +++ b/src/permissions.c @@ -133,7 +133,7 @@ permissions_context_create(struct wl_display *display, uint32_t permissions) bool permissions_check(const struct wl_client *client, const struct wl_interface *iface) { - uint32_t permissions = permissions_get(client); + uint32_t permissions = permissions_get(client) | rc.default_permissions; uint32_t required = permissions_from_interface_name(iface->name); return (permissions & required) == required; }