summaryrefslogtreecommitdiff
path: root/media-video/wireplumber/files
diff options
context:
space:
mode:
authorV3n3RiX <venerix@koprulu.sector>2022-05-12 16:42:50 +0300
committerV3n3RiX <venerix@koprulu.sector>2022-05-12 16:42:50 +0300
commit752d6256e5204b958b0ef7905675a940b5e9172f (patch)
tree330d16e6362a49cbed8875a777fe641a43376cd3 /media-video/wireplumber/files
parent0c100b7dd2b30e75b799d806df4ef899fd98e1ea (diff)
gentoo resync : 12.05.2022
Diffstat (limited to 'media-video/wireplumber/files')
-rw-r--r--media-video/wireplumber/files/wireplumber-0.4.7-default-nodes-handle-nodes-without-Routes.patch51
-rw-r--r--media-video/wireplumber/files/wireplumber-0.4.8-policy-bluetooth-fix-string.find-crash-with-nil-stri.patch28
-rw-r--r--media-video/wireplumber/files/wireplumber-0.4.8-restore-stream-do-not-crash-if-config.properties-is-.patch27
-rw-r--r--media-video/wireplumber/files/wireplumber-0.4.8-si-audio-adapter-relax-format-parsing.patch44
-rw-r--r--media-video/wireplumber/files/wireplumber-0.4.8-spa-json-fix-va-list-APIs-for-different-architecture.patch214
-rw-r--r--media-video/wireplumber/files/wireplumber-0.4.9-config-document-which-options-need-to-be-turned-off-.patch87
-rw-r--r--media-video/wireplumber/files/wireplumber-0.4.9-scripts-policy-device-profile-clear-tables-when-devi.patch33
7 files changed, 120 insertions, 364 deletions
diff --git a/media-video/wireplumber/files/wireplumber-0.4.7-default-nodes-handle-nodes-without-Routes.patch b/media-video/wireplumber/files/wireplumber-0.4.7-default-nodes-handle-nodes-without-Routes.patch
deleted file mode 100644
index 3451ea73f74b..000000000000
--- a/media-video/wireplumber/files/wireplumber-0.4.7-default-nodes-handle-nodes-without-Routes.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-https://gitlab.freedesktop.org/pipewire/wireplumber/-/commit/211f1e6b6cd4898121e4c2b821fae4dea6cc3317
-https://gitlab.freedesktop.org/pipewire/wireplumber/-/issues/163
-
-From 211f1e6b6cd4898121e4c2b821fae4dea6cc3317 Mon Sep 17 00:00:00 2001
-From: Wim Taymans <wtaymans@redhat.com>
-Date: Fri, 14 Jan 2022 16:28:48 +0100
-Subject: [PATCH] default-nodes: handle nodes without Routes
-
-When a node has not part of any EnumRoute, we must assume it is
-available.
-
-Fixes selection of Pro Audio nodes as default nodes.
----
- modules/module-default-nodes.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git a/modules/module-default-nodes.c b/modules/module-default-nodes.c
-index 32b2725b..15aadeaa 100644
---- a/modules/module-default-nodes.c
-+++ b/modules/module-default-nodes.c
-@@ -108,6 +108,7 @@ node_has_available_routes (WpDefaultNodes * self, WpNode *node)
- gint dev_id = dev_id_str ? atoi (dev_id_str) : -1;
- gint cpd = cpd_str ? atoi (cpd_str) : -1;
- g_autoptr (WpDevice) device = NULL;
-+ gint found = 0;
-
- if (dev_id == -1 || cpd == -1)
- return TRUE;
-@@ -168,6 +169,7 @@ node_has_available_routes (WpDefaultNodes * self, WpNode *node)
- for (; wp_iterator_next (it, &v); g_value_unset (&v)) {
- gint32 *d = (gint32 *)g_value_get_pointer (&v);
- if (d && *d == cpd) {
-+ found++;
- if (route_avail != SPA_PARAM_AVAILABILITY_no)
- return TRUE;
- }
-@@ -175,6 +177,10 @@ node_has_available_routes (WpDefaultNodes * self, WpNode *node)
- }
- }
- }
-+ /* The node is part of a profile without routes so we assume it
-+ * is available. This can happen for Pro Audio profiles */
-+ if (found == 0)
-+ return TRUE;
-
- return FALSE;
- }
---
-GitLab
-
-https://gitlab.freedesktop.org/pipewire/wireplumber/-/commit/211f1e6b6cd4898121e4c2b821fae4dea6cc3317
diff --git a/media-video/wireplumber/files/wireplumber-0.4.8-policy-bluetooth-fix-string.find-crash-with-nil-stri.patch b/media-video/wireplumber/files/wireplumber-0.4.8-policy-bluetooth-fix-string.find-crash-with-nil-stri.patch
deleted file mode 100644
index 364f8df195cf..000000000000
--- a/media-video/wireplumber/files/wireplumber-0.4.8-policy-bluetooth-fix-string.find-crash-with-nil-stri.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-https://gitlab.freedesktop.org/pipewire/wireplumber/-/commit/c4c5ca8e2215e5fc295b39af4504c43ed3fe176f
-
-From c4c5ca8e2215e5fc295b39af4504c43ed3fe176f Mon Sep 17 00:00:00 2001
-From: George Kiagiadakis <george.kiagiadakis@collabora.com>
-Date: Mon, 14 Feb 2022 10:38:51 +0200
-Subject: [PATCH] policy-bluetooth: fix string.find crash with nil string
-
-Fixes #193
----
- src/scripts/policy-bluetooth.lua | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/scripts/policy-bluetooth.lua b/src/scripts/policy-bluetooth.lua
-index 24fbffbb..f8f69a14 100644
---- a/src/scripts/policy-bluetooth.lua
-+++ b/src/scripts/policy-bluetooth.lua
-@@ -118,7 +118,7 @@ local function isSwitched(device)
- end
-
- local function isBluez5AudioSink(sink_name)
-- if string.find(sink_name, "bluez_output.") ~= nil then
-+ if sink_name and string.find(sink_name, "bluez_output.") ~= nil then
- return true
- end
- return false
---
-GitLab
-
diff --git a/media-video/wireplumber/files/wireplumber-0.4.8-restore-stream-do-not-crash-if-config.properties-is-.patch b/media-video/wireplumber/files/wireplumber-0.4.8-restore-stream-do-not-crash-if-config.properties-is-.patch
deleted file mode 100644
index 5f4a838c36a6..000000000000
--- a/media-video/wireplumber/files/wireplumber-0.4.8-restore-stream-do-not-crash-if-config.properties-is-.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-https://gitlab.freedesktop.org/pipewire/wireplumber/-/commit/5f96f69218273573e625475846269b3914cfcecf
-
-From 5f96f69218273573e625475846269b3914cfcecf Mon Sep 17 00:00:00 2001
-From: George Kiagiadakis <george.kiagiadakis@collabora.com>
-Date: Wed, 9 Feb 2022 13:35:13 +0200
-Subject: [PATCH] restore-stream: do not crash if config.properties is nil
-
-Fixes #190
----
- src/scripts/restore-stream.lua | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/scripts/restore-stream.lua b/src/scripts/restore-stream.lua
-index 404eede5..0c17bdd7 100644
---- a/src/scripts/restore-stream.lua
-+++ b/src/scripts/restore-stream.lua
-@@ -10,6 +10,7 @@
-
- -- Receive script arguments from config.lua
- local config = ... or {}
-+config.properties = config.properties or {}
- config_restore_props = config.properties["restore-props"] or false
- config_restore_target = config.properties["restore-target"] or false
-
---
-GitLab
-
diff --git a/media-video/wireplumber/files/wireplumber-0.4.8-si-audio-adapter-relax-format-parsing.patch b/media-video/wireplumber/files/wireplumber-0.4.8-si-audio-adapter-relax-format-parsing.patch
deleted file mode 100644
index 93225b02d88b..000000000000
--- a/media-video/wireplumber/files/wireplumber-0.4.8-si-audio-adapter-relax-format-parsing.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-https://gitlab.freedesktop.org/pipewire/wireplumber/-/commit/afbc0ce57aac7aee8dc1651de4620f15c73dbace
-
-From afbc0ce57aac7aee8dc1651de4620f15c73dbace Mon Sep 17 00:00:00 2001
-From: Wim Taymans <wtaymans@redhat.com>
-Date: Mon, 21 Feb 2022 15:21:36 +0100
-Subject: [PATCH] si-audio-adapter: relax format parsing
-
-Some nodes can omit the format/rate/channels to indicate that they can
-deal with all possibilities and adapt to what they are linked to.
-
-See pipewire#876
----
- modules/module-si-audio-adapter.c | 11 ++---------
- 1 file changed, 2 insertions(+), 9 deletions(-)
-
-diff --git a/modules/module-si-audio-adapter.c b/modules/module-si-audio-adapter.c
-index f1f6218..84e393f 100644
---- a/modules/module-si-audio-adapter.c
-+++ b/modules/module-si-audio-adapter.c
-@@ -158,19 +158,12 @@ si_audio_adapter_find_format (WpSiAudioAdapter * self, WpNode * node)
- struct spa_pod *position = NULL;
- wp_spa_pod_fixate (pod);
-
-- /* defaults */
- spa_zero(raw_format);
-- raw_format.format = SPA_AUDIO_FORMAT_F32;
-- raw_format.rate = si_audio_adapter_get_default_clock_rate (self);
-- raw_format.channels = 2;
-- raw_format.position[0] = SPA_AUDIO_CHANNEL_FL;
-- raw_format.position[1] = SPA_AUDIO_CHANNEL_FR;
--
- if (spa_pod_parse_object(wp_spa_pod_get_spa_pod (pod),
- SPA_TYPE_OBJECT_Format, NULL,
-- SPA_FORMAT_AUDIO_format, SPA_POD_Id(&raw_format.format),
-+ SPA_FORMAT_AUDIO_format, SPA_POD_OPT_Id(&raw_format.format),
- SPA_FORMAT_AUDIO_rate, SPA_POD_OPT_Int(&raw_format.rate),
-- SPA_FORMAT_AUDIO_channels, SPA_POD_Int(&raw_format.channels),
-+ SPA_FORMAT_AUDIO_channels, SPA_POD_OPT_Int(&raw_format.channels),
- SPA_FORMAT_AUDIO_position, SPA_POD_OPT_Pod(&position)) < 0)
- continue;
-
---
-2.35.1
-
diff --git a/media-video/wireplumber/files/wireplumber-0.4.8-spa-json-fix-va-list-APIs-for-different-architecture.patch b/media-video/wireplumber/files/wireplumber-0.4.8-spa-json-fix-va-list-APIs-for-different-architecture.patch
deleted file mode 100644
index b77cfa3c3c6f..000000000000
--- a/media-video/wireplumber/files/wireplumber-0.4.8-spa-json-fix-va-list-APIs-for-different-architecture.patch
+++ /dev/null
@@ -1,214 +0,0 @@
-https://gitlab.freedesktop.org/pipewire/wireplumber/-/commit/e429db7e8c266045aee25e153fb2308bd61fe233
-
-From e429db7e8c266045aee25e153fb2308bd61fe233 Mon Sep 17 00:00:00 2001
-From: Julian Bouzas <julian.bouzas@collabora.com>
-Date: Wed, 9 Feb 2022 07:59:59 -0500
-Subject: [PATCH] spa-json: fix va_list APIs for different architectures
-
-The va_list type might not always be a pointer in some architectures, so we
-cannot guarantee it will be modified after using it for a second time in another
-function. This fixes the issue by using macros so args does not get copied, and
-always gets modified when using it more than once.
----
- lib/wp/spa-json.c | 156 ++++++++++++++++++++++++----------------------
- 1 file changed, 80 insertions(+), 76 deletions(-)
-
-diff --git a/lib/wp/spa-json.c b/lib/wp/spa-json.c
-index f14f395d..c5e59a3e 100644
---- a/lib/wp/spa-json.c
-+++ b/lib/wp/spa-json.c
-@@ -363,33 +363,33 @@ wp_spa_json_new_string (const gchar *value)
- wp_spa_json_builder_new_formatted ("\"%s\"", value));
- }
-
--static void
--wp_spa_json_builder_add_value (WpSpaJsonBuilder *self, const gchar *fmt,
-- va_list args)
--{
-- switch (*fmt) {
-- case 'n':
-- wp_spa_json_builder_add_null (self);
-- break;
-- case 'b':
-- wp_spa_json_builder_add_boolean (self, va_arg(args, gboolean));
-- break;
-- case 'i':
-- wp_spa_json_builder_add_int (self, va_arg(args, gint));
-- break;
-- case 'f':
-- wp_spa_json_builder_add_float (self, (float)va_arg(args, double));
-- break;
-- case 's':
-- wp_spa_json_builder_add_string (self, va_arg(args, const gchar *));
-- break;
-- case 'J':
-- wp_spa_json_builder_add_json (self, va_arg(args, WpSpaJson *));
-- break;
-- default:
-- return;
-- }
--}
-+/* Args is not a pointer in some architectures, so this needs to be a macro to
-+ * avoid args being copied */
-+#define wp_spa_json_builder_add_value(self,fmt,args) \
-+do { \
-+ switch (*fmt) { \
-+ case 'n': \
-+ wp_spa_json_builder_add_null (self); \
-+ break; \
-+ case 'b': \
-+ wp_spa_json_builder_add_boolean (self, va_arg(args, gboolean)); \
-+ break; \
-+ case 'i': \
-+ wp_spa_json_builder_add_int (self, va_arg(args, gint)); \
-+ break; \
-+ case 'f': \
-+ wp_spa_json_builder_add_float (self, (float)va_arg(args, double)); \
-+ break; \
-+ case 's': \
-+ wp_spa_json_builder_add_string (self, va_arg(args, const gchar *)); \
-+ break; \
-+ case 'J': \
-+ wp_spa_json_builder_add_json (self, va_arg(args, WpSpaJson *)); \
-+ break; \
-+ default: \
-+ break; \
-+ } \
-+} while(false)
-
- /*!
- * \brief Creates a spa json of type array
-@@ -724,48 +724,46 @@ wp_spa_json_parse_object_valist (WpSpaJson *self, va_list args)
- return res;
- }
-
--static gboolean
--wp_spa_json_parse_value (const gchar *data, int len, const gchar *fmt,
-- va_list args)
--{
-- switch (*fmt) {
-- case 'n':
-- if (!spa_json_is_null (data, len))
-- return FALSE;
-- break;
-- case 'b':
-- if (!wp_spa_json_parse_boolean_internal (data, len,
-- va_arg(args, gboolean *)))
-- return FALSE;
-- break;
-- case 'i':
-- if (spa_json_parse_int (data, len, va_arg(args, gint *)) < 0)
-- return FALSE;
-- break;
-- case 'f':
-- if (spa_json_parse_float (data, len,
-- (float *)va_arg(args, double *)) < 0)
-- return FALSE;
-- break;
-- case 's': {
-- gchar *str = wp_spa_json_parse_string_internal (data, len);
-- if (!str)
-- return FALSE;
-- *va_arg(args, gchar **) = str;
-- break;
-- }
-- case 'J': {
-- WpSpaJson *j = wp_spa_json_new (data, len);
-- if (!j)
-- return FALSE;
-- *va_arg(args, WpSpaJson **) = j;
-- break;
-- }
-- default:
-- return FALSE;
-- }
-- return TRUE;
--}
-+/* Args is not a pointer in some architectures, so this needs to be a macro to
-+ * avoid args being copied */
-+#define wp_spa_json_parse_value(data,len,fmt,args) \
-+do { \
-+ switch (*fmt) { \
-+ case 'n': \
-+ if (!spa_json_is_null (data, len)) \
-+ return FALSE; \
-+ break; \
-+ case 'b': \
-+ if (!wp_spa_json_parse_boolean_internal (data, len, \
-+ va_arg(args, gboolean *))) \
-+ return FALSE; \
-+ break; \
-+ case 'i': \
-+ if (spa_json_parse_int (data, len, va_arg(args, gint *)) < 0) \
-+ return FALSE; \
-+ break; \
-+ case 'f': \
-+ if (spa_json_parse_float (data, len, va_arg(args, float *)) < 0) \
-+ return FALSE; \
-+ break; \
-+ case 's': { \
-+ gchar *str = wp_spa_json_parse_string_internal (data, len); \
-+ if (!str) \
-+ return FALSE; \
-+ *va_arg(args, gchar **) = str; \
-+ break; \
-+ } \
-+ case 'J': { \
-+ WpSpaJson *j = wp_spa_json_new (data, len); \
-+ if (!j) \
-+ return FALSE; \
-+ *va_arg(args, WpSpaJson **) = j; \
-+ break; \
-+ } \
-+ default: \
-+ return FALSE; \
-+ } \
-+} while(false)
-
- /*!
- * \brief Parses the object property values of a spa json object
-@@ -827,8 +825,7 @@ wp_spa_json_object_get_valist (WpSpaJson *self, va_list args)
- value = g_value_get_boxed (&item);
-
- if (g_strcmp0 (key_str, lookup_key) == 0) {
-- if (!wp_spa_json_parse_value (value->data, value->size, lookup_fmt, args))
-- return FALSE;
-+ wp_spa_json_parse_value (value->data, value->size, lookup_fmt, args);
- lookup_key = va_arg(args, const gchar *);
- if (!lookup_key)
- return TRUE;
-@@ -1366,9 +1363,12 @@ gboolean
- wp_spa_json_parser_get_value (WpSpaJsonParser *self, const gchar *fmt,
- va_list args)
- {
-- return wp_spa_json_parser_advance (self) &&
-- wp_spa_json_parse_value (self->curr.cur,
-- self->curr.end - self->curr.cur, fmt, args);
-+ if (wp_spa_json_parser_advance (self)) {
-+ wp_spa_json_parse_value (self->curr.cur, self->curr.end - self->curr.cur,
-+ fmt, args);
-+ return TRUE;
-+ }
-+ return FALSE;
- }
-
- /*!
-@@ -1419,9 +1419,13 @@ wp_spa_json_parser_get_valist (WpSpaJsonParser *self, va_list args)
- if (!format)
- return TRUE;
-
-- /* parse value */
-- if (!wp_spa_json_parser_get_value (self, format, args))
-+ /* advance */
-+ if (!wp_spa_json_parser_advance (self))
- return FALSE;
-+
-+ /* parse value */
-+ wp_spa_json_parse_value (self->curr.cur, self->curr.end - self->curr.cur,
-+ format, args);
- } while (TRUE);
-
- return FALSE;
---
-GitLab
-
diff --git a/media-video/wireplumber/files/wireplumber-0.4.9-config-document-which-options-need-to-be-turned-off-.patch b/media-video/wireplumber/files/wireplumber-0.4.9-config-document-which-options-need-to-be-turned-off-.patch
new file mode 100644
index 000000000000..9e664ec56564
--- /dev/null
+++ b/media-video/wireplumber/files/wireplumber-0.4.9-config-document-which-options-need-to-be-turned-off-.patch
@@ -0,0 +1,87 @@
+https://gitlab.freedesktop.org/pipewire/wireplumber/-/commit/0da29f38181e391160fa8702623050b8544ec775
+
+From 0da29f38181e391160fa8702623050b8544ec775 Mon Sep 17 00:00:00 2001
+From: George Kiagiadakis <george.kiagiadakis@collabora.com>
+Date: Mon, 4 Apr 2022 14:38:28 +0300
+Subject: [PATCH] config: document which options need to be turned off to use
+ wp without D-Bus
+
+and actually implement an option for the logind module
+
+Related to: #237
+---
+ src/config/bluetooth.lua.d/30-bluez-monitor.lua | 4 +++-
+ src/config/bluetooth.lua.d/50-bluez-config.lua | 8 ++++++++
+ src/config/main.lua.d/50-alsa-config.lua | 4 +++-
+ src/config/main.lua.d/50-default-access-config.lua | 3 +++
+ 4 files changed, 17 insertions(+), 2 deletions(-)
+
+diff --git a/src/config/bluetooth.lua.d/30-bluez-monitor.lua b/src/config/bluetooth.lua.d/30-bluez-monitor.lua
+index 266d3e2f..ba86657f 100644
+--- a/src/config/bluetooth.lua.d/30-bluez-monitor.lua
++++ b/src/config/bluetooth.lua.d/30-bluez-monitor.lua
+@@ -8,5 +8,7 @@ function bluez_monitor.enable()
+ rules = bluez_monitor.rules,
+ })
+
+- load_optional_module("logind")
++ if bluez_monitor.properties["with-logind"] then
++ load_optional_module("logind")
++ end
+ end
+diff --git a/src/config/bluetooth.lua.d/50-bluez-config.lua b/src/config/bluetooth.lua.d/50-bluez-config.lua
+index 072504ec..dd8033ff 100644
+--- a/src/config/bluetooth.lua.d/50-bluez-config.lua
++++ b/src/config/bluetooth.lua.d/50-bluez-config.lua
+@@ -34,6 +34,14 @@ bluez_monitor.properties = {
+ -- Register dummy AVRCP player, required for AVRCP volume function.
+ -- Disable if you are running mpris-proxy or equivalent.
+ --["bluez5.dummy-avrcp-player"] = true,
++
++ -- Enable the logind module, which arbitrates which user will be allowed
++ -- to have bluetooth audio enabled at any given time (particularly useful
++ -- if you are using GDM as a display manager, as the gdm user also launches
++ -- pipewire and wireplumber).
++ -- This requires access to the D-Bus user session; disable if you are running
++ -- a system-wide instance of wireplumber.
++ ["with-logind"] = true,
+ }
+
+ bluez_monitor.rules = {
+diff --git a/src/config/main.lua.d/50-alsa-config.lua b/src/config/main.lua.d/50-alsa-config.lua
+index 6c97e8ad..d29b0b6f 100644
+--- a/src/config/main.lua.d/50-alsa-config.lua
++++ b/src/config/main.lua.d/50-alsa-config.lua
+@@ -7,6 +7,8 @@ alsa_monitor.properties = {
+ --["alsa.jack-device"] = false,
+
+ -- Reserve devices via org.freedesktop.ReserveDevice1 on D-Bus
++ -- Disable if you are running a system-wide instance, which
++ -- doesn't have access to the D-Bus user session
+ ["alsa.reserve"] = true,
+ --["alsa.reserve.priority"] = -20,
+ --["alsa.reserve.application-name"] = "WirePlumber",
+@@ -20,7 +22,7 @@ alsa_monitor.properties = {
+
+ alsa_monitor.rules = {
+ -- An array of matches/actions to evaluate.
+- --
++ --
+ -- If you want to disable some devices or nodes, you can apply properties per device as the following example.
+ -- The name can be found by running pw-cli ls Device, or pw-cli dump Device
+ --{
+diff --git a/src/config/main.lua.d/50-default-access-config.lua b/src/config/main.lua.d/50-default-access-config.lua
+index 6cf18bed..45cc5b73 100644
+--- a/src/config/main.lua.d/50-default-access-config.lua
++++ b/src/config/main.lua.d/50-default-access-config.lua
+@@ -1,4 +1,7 @@
+ default_access.properties = {
++ -- Enable the use of the flatpak portal integration.
++ -- Disable if you are running a system-wide instance, which
++ -- doesn't have access to the D-Bus user session
+ ["enable-flatpak-portal"] = true,
+ }
+
+--
+GitLab
+
diff --git a/media-video/wireplumber/files/wireplumber-0.4.9-scripts-policy-device-profile-clear-tables-when-devi.patch b/media-video/wireplumber/files/wireplumber-0.4.9-scripts-policy-device-profile-clear-tables-when-devi.patch
new file mode 100644
index 000000000000..4dc8e276fbfa
--- /dev/null
+++ b/media-video/wireplumber/files/wireplumber-0.4.9-scripts-policy-device-profile-clear-tables-when-devi.patch
@@ -0,0 +1,33 @@
+https://gitlab.freedesktop.org/pipewire/wireplumber/-/commit/da5d25acbea5ae03336bd2b4ef2b0687b380978e
+
+From da5d25acbea5ae03336bd2b4ef2b0687b380978e Mon Sep 17 00:00:00 2001
+From: Pauli Virtanen <pav@iki.fi>
+Date: Mon, 28 Mar 2022 20:16:52 +0300
+Subject: [PATCH] scripts: policy-device-profile: clear tables when devices
+ removed
+
+When device ids are invalidated, clear all local tables about them,
+because the id may be reused by different object, or the same object
+reappearing.
+---
+ src/scripts/policy-device-profile.lua | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/src/scripts/policy-device-profile.lua b/src/scripts/policy-device-profile.lua
+index d0aa2696..9daeafaa 100644
+--- a/src/scripts/policy-device-profile.lua
++++ b/src/scripts/policy-device-profile.lua
+@@ -229,4 +229,10 @@ self.om:connect("object-added", function (_, device)
+ handleProfiles (device, true)
+ end)
+
++self.om:connect("object-removed", function (_, device)
++ local dev_id = device["bound-id"]
++ self.active_profiles[dev_id] = nil
++ self.best_profiles[dev_id] = nil
++end)
++
+ self.om:activate()
+--
+GitLab
+