+static pa_source_output_flags_t get_dont_inhibit_auto_suspend_flag(pa_source *source,
+ enum inhibit_auto_suspend inhibit_auto_suspend) {
+ pa_assert(source);
+
+ switch (inhibit_auto_suspend) {
+ case INHIBIT_AUTO_SUSPEND_ALWAYS:
+ return 0;
+
+ case INHIBIT_AUTO_SUSPEND_NEVER:
+ return PA_SOURCE_OUTPUT_DONT_INHIBIT_AUTO_SUSPEND;
+
+ case INHIBIT_AUTO_SUSPEND_ONLY_WITH_NON_MONITOR_SOURCES:
+ return source->monitor_of ? 0 : PA_SOURCE_OUTPUT_DONT_INHIBIT_AUTO_SUSPEND;
+ }
+
+ pa_assert_not_reached();
+}
+
+/* Called from the main thread. */
+static void source_output_moving_cb(pa_source_output *o, pa_source *dest) {
+ struct userdata *u;
+
+ pa_assert(o);
+
+ u = o->userdata;
+
+ if (!dest)
+ return;
+
+ o->flags &= ~PA_SOURCE_OUTPUT_DONT_INHIBIT_AUTO_SUSPEND;
+ o->flags |= get_dont_inhibit_auto_suspend_flag(dest, u->inhibit_auto_suspend);
+}
+