Projects
Multimedia
obs-studio
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 136
View file
obs-studio.changes
Changed
@@ -1,4 +1,33 @@ ------------------------------------------------------------------- +Thu Apr 02 22:56:15 UTC 2026 - darix <packman@nordisch.org> + +- Update to version 32.1.1: + * libobs: Update version to 32.1.1 + * obs-websocket: Update version to 5.7.3 + * libobs: Monitoring deduplication fix for 'Desktop Audio' on monitor_only + * frontend: Fix muted colors + * frontend: Add toolbar actions to mixer menu + * frontend: Fix audio mixer light theme colors + * frontend: Improve VolumeMeter size calculation + * frontend: Fix audio mixer sorting weight + * frontend: Fix disabled sources appearing in audio mixer + * frontend: Improve VolumeName size calculations + * frontend: Adjust mixer horizontal layout + * frontend: Add missing tooltips to audio mixer + * CI: Update Signing action commit + * CI: Pin Homebrew/actions/setup-homebrew to commit hash + * CI: Pin github/codeql-action/upload-sarif to commit hash + * CI: Pin actions/upload-artifact/merge to commit hash + * CI: Pin actions/upload-artifact to commit hash + * CI: Pin actions/download-artifact to commit hash + * CI: Pin actions/checkout to commit hash + * CI: Pin actions/cache/save to commit hash + * CI: Pin actions/cache/restore to commit hash + * CI: Pin actions/cache to commit hash + * CI: Pin actions/attest-build-provenance to commit hash + * Add SECURITY.md + +------------------------------------------------------------------- Wed Mar 11 21:37:36 UTC 2026 - darix <packman@nordisch.org> - Update to version 32.1.0:
View file
obs-studio.spec
Changed
@@ -50,7 +50,7 @@ %endif Name: obs-studio -Version: 32.1.0 +Version: 32.1.1 Release: 0 Summary: A recording/broadcasting program Group: Productivity/Multimedia/Video/Editors and Convertors
View file
_service
Changed
@@ -1,7 +1,7 @@ <services> <service name="tar_scm" mode="manual"> <param name="versionformat">@PARENT_TAG@</param> - <param name="revision">32.1.0</param> + <param name="revision">32.1.1</param> <param name="url">https://github.com/obsproject/obs-studio.git</param> <param name="versionrewrite-pattern">(\.\d+)-(a-z.*)</param>
View file
_servicedata
Changed
@@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/obsproject/obs-studio.git</param> - <param name="changesrevision">5533a277e4400203b50114c993f89878d50a27b9</param> + <param name="changesrevision">7272af1375b38bc3cf4e0f98a5d999e8b76e9309</param> </service> </servicedata> \ No newline at end of file
View file
obs-studio-32.1.0.tar.xz/.github/actions/generate-docs/action.yaml -> obs-studio-32.1.1.tar.xz/.github/actions/generate-docs/action.yaml
Changed
@@ -66,7 +66,7 @@ target_branch: master target_path: '../home/_build' - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 with: name: ${{ steps.setup.outputs.artifactName }} ${{ steps.setup.outputs.commitHash }} path: |
View file
obs-studio-32.1.0.tar.xz/.github/actions/services-validator/action.yaml -> obs-studio-32.1.1.tar.xz/.github/actions/services-validator/action.yaml
Changed
@@ -88,7 +88,7 @@ - name: Restore Timestamp Cache ⏳ if: fromJSON(inputs.runServiceChecks) - uses: actions/cache@v4 + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 with: path: ${{ github.workspace }}/other key: service-check-${{ github.run_id }} @@ -111,7 +111,7 @@ source .venv/bin/activate python3 -u .github/scripts/utils.py/check-services.py - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 if: fromJSON(inputs.runServiceChecks) with: name: timestamps
View file
obs-studio-32.1.0.tar.xz/.github/actions/steam-upload/action.yaml -> obs-studio-32.1.1.tar.xz/.github/actions/steam-upload/action.yaml
Changed
@@ -70,7 +70,7 @@ - name: Download Nightly Assets 🌙 id: asset-info-nightly - uses: actions/download-artifact@v4 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 if: github.event_name == 'schedule' - name: Download Assets 📥 @@ -285,7 +285,7 @@ popd - name: Upload Steam build logs - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 with: name: steam-build-logs path: ${{ github.workspace }}/steam/build/*.log
View file
obs-studio-32.1.0.tar.xz/.github/actions/windows-analysis/action.yaml -> obs-studio-32.1.1.tar.xz/.github/actions/windows-analysis/action.yaml
Changed
@@ -76,7 +76,7 @@ Invoke-External "C:\Program Files (x86)\PVS-Studio\PlogConverter.exe" @conversionParams - name: Upload PVS-Studio Logs - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 with: name: 'pvs-analysis-log' path: | @@ -84,7 +84,7 @@ ${{ github.workspace }}/analysis.plog.sarif - name: Upload PVS-Studio Report - uses: github/codeql-action/upload-sarif@v3 + uses: github/codeql-action/upload-sarif@ebcb5b36ded6beda4ceefea6a8bc4cc885255bb3 with: sarif_file: "${{ github.workspace }}/analysis.plog.sarif" category: 'PVS-Studio (Windows)'
View file
obs-studio-32.1.0.tar.xz/.github/actions/windows-patches/action.yaml -> obs-studio-32.1.1.tar.xz/.github/actions/windows-patches/action.yaml
Changed
@@ -25,7 +25,7 @@ runs: using: composite steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with: path: "repo" fetch-depth: 0 @@ -113,7 +113,7 @@ Invoke-External "${{ github.workspace }}\bouf\bin\bouf.exe" @boufArgs - name: Upload Outputs - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 with: name: windows-updater-files compression-level: 0
View file
obs-studio-32.1.0.tar.xz/.github/workflows/analyze-project.yaml -> obs-studio-32.1.1.tar.xz/.github/workflows/analyze-project.yaml
Changed
@@ -10,7 +10,7 @@ run: shell: pwsh steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with: submodules: recursive fetch-depth: 0 @@ -46,7 +46,7 @@ run: shell: zsh --no-rcs --errexit --pipefail {0} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with: submodules: recursive fetch-depth: 0 @@ -129,7 +129,7 @@ popd - name: Upload SARIF report files 📦 - uses: github/codeql-action/upload-sarif@v3 + uses: github/codeql-action/upload-sarif@ebcb5b36ded6beda4ceefea6a8bc4cc885255bb3 with: sarif_file: "${{ github.workspace }}/analytics/merged.sarif" category: 'clang-analyze (macOS Apple Silicon)'
View file
obs-studio-32.1.0.tar.xz/.github/workflows/build-project.yaml -> obs-studio-32.1.1.tar.xz/.github/workflows/build-project.yaml
Changed
@@ -15,7 +15,7 @@ config: ${{ steps.setup.outputs.config }} commitHash: ${{ steps.setup.outputs.commitHash }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with: fetch-depth: 0 - name: Check Event Data ☑️ @@ -69,7 +69,7 @@ run: shell: zsh --no-rcs --errexit --pipefail {0} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with: submodules: recursive fetch-depth: 0 @@ -103,7 +103,7 @@ print "xcodeCasPath=${xcode_cas_path}" >> $GITHUB_OUTPUT - - uses: actions/cache/restore@v4 + - uses: actions/cache/restore@0057852bfaa89a56745cba8c7296529d2fc39830 id: xcode-cache with: path: ${{ steps.setup.outputs.xcodeCasPath }} @@ -157,19 +157,19 @@ codesignPass: ${{ secrets.MACOS_NOTARIZATION_PASSWORD }} - name: Upload Artifacts 📡 - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 with: name: obs-studio-macos-${{ matrix.target }}-${{ needs.check-event.outputs.commitHash }} path: ${{ github.workspace }}/build_macos/obs-studio-*-macos-${{ steps.setup.outputs.cpuName }}.* - name: Upload Debug Symbol Artifacts 🪲 - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 if: ${{ needs.check-event.outputs.config == 'Release' }} with: name: obs-studio-macos-${{ matrix.target }}-${{ needs.check-event.outputs.commitHash }}-dSYMs path: ${{ github.workspace }}/build_macos/obs-studio-*-macos-${{ steps.setup.outputs.cpuName }}-dSYMs.tar.xz - - uses: actions/cache/save@v4 + - uses: actions/cache/save@0057852bfaa89a56745cba8c7296529d2fc39830 if: github.event_name != 'pull_request' && steps.xcode-cache.outputs.cache-hit != 'true' with: path: ${{ steps.setup.outputs.xcodeCasPath }} @@ -186,12 +186,12 @@ run: shell: bash steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with: submodules: recursive fetch-depth: 0 - - uses: actions/cache/restore@v4 + - uses: actions/cache/restore@0057852bfaa89a56745cba8c7296529d2fc39830 id: ccache-cache with: path: ${{ github.workspace }}/.ccache @@ -222,25 +222,25 @@ package: ${{ fromJSON(needs.check-event.outputs.package) }} - name: Upload Source Tarball 🗜️ - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 with: name: obs-studio-${{ matrix.os }}-sources-${{ needs.check-event.outputs.commitHash }} path: ${{ github.workspace }}/build_ubuntu/obs-studio-*-sources.* - name: Upload Artifacts 📡 - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 with: name: obs-studio-${{ matrix.os }}-x86_64-${{ needs.check-event.outputs.commitHash }} path: ${{ github.workspace }}/build_ubuntu/obs-studio-*-x86_64-ubuntu-gnu.* - name: Upload Debug Symbol Artifacts 🪲 - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 if: ${{ fromJSON(needs.check-event.outputs.package) }} with: name: obs-studio-${{ matrix.os }}-x86_64-${{ needs.check-event.outputs.commitHash }}-dbgsym path: ${{ github.workspace }}/build_ubuntu/obs-studio-*-x86_64-ubuntu-gnu-dbgsym.ddeb - - uses: actions/cache/save@v4 + - uses: actions/cache/save@0057852bfaa89a56745cba8c7296529d2fc39830 if: github.event_name != 'pull_request' && steps.ccache-cache.outputs.cache-hit != 'true' with: path: ${{ github.workspace }}/.ccache @@ -303,7 +303,7 @@ df -h echo ::endgroup:: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with: submodules: recursive fetch-depth: 0 @@ -385,7 +385,7 @@ run: shell: pwsh steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with: submodules: recursive fetch-depth: 0 @@ -414,7 +414,7 @@ package: ${{ fromJSON(needs.check-event.outputs.package) }} - name: Upload Artifacts 📡 - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 with: name: obs-studio-windows-${{ matrix.architecture }}-${{ needs.check-event.outputs.commitHash }} path: ${{ github.workspace }}/build_${{ matrix.architecture }}/obs-studio-*-windows-${{ matrix.architecture }}.zip
View file
obs-studio-32.1.0.tar.xz/.github/workflows/check-format.yaml -> obs-studio-32.1.1.tar.xz/.github/workflows/check-format.yaml
Changed
@@ -5,7 +5,7 @@ clang-format: runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with: fetch-depth: 0 - name: clang-format Check 🐉 @@ -17,7 +17,7 @@ swift-format: runs-on: macos-15 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with: fetch-depth: 0 - name: swift-format Check 🔥 @@ -29,7 +29,7 @@ gersemi: runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with: fetch-depth: 0 - name: gersemi Check 🎛️ @@ -41,7 +41,7 @@ flatpak-validator: runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with: fetch-depth: 0 - name: Flatpak Manifest Check 📦 @@ -53,7 +53,7 @@ qt-xml-validator: runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with: fetch-depth: 0 - name: Qt XML Check 🖼️
View file
obs-studio-32.1.0.tar.xz/.github/workflows/dispatch.yaml -> obs-studio-32.1.1.tar.xz/.github/workflows/dispatch.yaml
Changed
@@ -45,7 +45,7 @@ contents: write pull-requests: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 - name: Check for Defunct Services 📉 uses: ./.github/actions/services-validator with: @@ -63,7 +63,7 @@ env: CROWDIN_PAT: ${{ secrets.CROWDIN_SYNC_CROWDIN_PAT }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with: submodules: recursive token: ${{ secrets.CROWDIN_SYNC_GITHUB_PAT }} @@ -75,7 +75,7 @@ if: github.repository_owner == 'obsproject' && inputs.job == 'steam' runs-on: macos-15 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 - uses: ./.github/actions/steam-upload with: steamSecret: ${{ secrets.STEAM_SHARED_SECRET }} @@ -93,7 +93,7 @@ if: github.repository_owner == 'obsproject' && inputs.job == 'documentation' runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 - uses: ./.github/actions/generate-docs update-documentation-cloudflare: @@ -101,7 +101,7 @@ if: github.repository_owner == 'obsproject' && inputs.job == 'documentation' runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 - uses: ./.github/actions/generate-docs with: disableLinkExtensions: true @@ -123,7 +123,7 @@ : Get Commit Hash 🆔 echo "commitHash=${GITHUB_SHA:0:9}" >> $GITHUB_OUTPUT - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 with: name: OBS Studio Docs (No Extensions) ${{ steps.setup.outputs.commitHash }} path: docs @@ -141,7 +141,7 @@ if: github.repository_owner == 'obsproject' && inputs.job == 'patches' runs-on: windows-2022 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 - uses: ./.github/actions/windows-patches with: tagName: ${{ inputs.ref }}
View file
obs-studio-32.1.0.tar.xz/.github/workflows/pr-pull.yaml -> obs-studio-32.1.1.tar.xz/.github/workflows/pr-pull.yaml
Changed
@@ -33,7 +33,7 @@ permissions: checks: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with: fetch-depth: 0 @@ -55,7 +55,7 @@ permissions: checks: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with: fetch-depth: 0 @@ -79,7 +79,7 @@ if: github.repository_owner == 'obsproject' && github.base_ref == 'master' runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with: fetch-depth: 0
View file
obs-studio-32.1.0.tar.xz/.github/workflows/publish.yaml -> obs-studio-32.1.1.tar.xz/.github/workflows/publish.yaml
Changed
@@ -22,7 +22,7 @@ flatpakMatrix: ${{ steps.check.outputs.flatpakMatrix }} updateChannel: ${{ steps.check.outputs.updateChannel }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with: submodules: recursive fetch-depth: 0 @@ -137,7 +137,7 @@ df -h echo ::endgroup:: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with: submodules: recursive fetch-depth: 0 @@ -232,7 +232,7 @@ if: github.repository_owner == 'obsproject' && fromJSON(needs.check-tag.outputs.validTag) runs-on: macos-15 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 - uses: ./.github/actions/steam-upload with: steamSecret: ${{ secrets.STEAM_SHARED_SECRET }} @@ -248,7 +248,7 @@ if: github.repository_owner == 'obsproject' && fromJSON(needs.check-tag.outputs.validTag) runs-on: windows-2022 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 - uses: ./.github/actions/windows-patches with: tagName: ${{ github.ref_name }}
View file
obs-studio-32.1.0.tar.xz/.github/workflows/push.yaml -> obs-studio-32.1.1.tar.xz/.github/workflows/push.yaml
Changed
@@ -33,7 +33,7 @@ permissions: checks: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with: fetch-depth: 0 @@ -57,7 +57,7 @@ permissions: checks: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with: fetch-depth: 0 @@ -81,7 +81,7 @@ if: github.repository_owner == 'obsproject' && (github.ref_name == 'master' || github.ref_type == 'tag') runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with: fetch-depth: 0 @@ -115,7 +115,7 @@ : Get Commit Hash 🆔 echo "commitHash=${GITHUB_SHA:0:9}" >> $GITHUB_OUTPUT - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 with: name: OBS Studio Docs (No Extensions) ${{ steps.setup.outputs.commitHash }} path: docs @@ -149,7 +149,7 @@ run: shell: zsh --no-rcs --errexit --pipefail {0} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with: submodules: recursive fetch-depth: 0 @@ -172,7 +172,7 @@ print "channel=${channel}" >> $GITHUB_OUTPUT - name: Download Artifact 📥 - uses: actions/download-artifact@v4 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 with: name: obs-studio-macos-${{ matrix.target }}-${{ steps.setup.outputs.commitHash }} @@ -189,7 +189,7 @@ customLink: 'https://obsproject.com/' - name: Upload Artifacts 📡 - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 with: name: macos-sparkle-update-${{ matrix.target }} path: ${{ github.workspace }}/output @@ -199,7 +199,7 @@ needs: create-appcast steps: - name: Merge Appcasts - uses: actions/upload-artifact/merge@v4 + uses: actions/upload-artifact/merge@ea165f8d65b6e75b540449e92b4886f43607fa02 with: name: macos-sparkle-update pattern: macos-sparkle-update-* @@ -207,7 +207,7 @@ sign-windows-build: name: Windows Signing ✍️ - uses: obsproject/obs-studio/.github/workflows/sign-windows.yaml@1933c9e3205d67068f2c858a52ec06b68e3e65ee + uses: obsproject/obs-studio/.github/workflows/sign-windows.yaml@434f8156847412e4db53287f6286d9230c8e940a if: github.repository_owner == 'obsproject' && github.ref_type == 'tag' needs: build-project permissions: @@ -247,7 +247,7 @@ esac - name: Download Build Artifacts 📥 - uses: actions/download-artifact@v4 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 if: ${{ fromJSON(steps.check.outputs.validTag) }} - name: Rename Files 🏷️
View file
obs-studio-32.1.0.tar.xz/.github/workflows/scheduled.yaml -> obs-studio-32.1.1.tar.xz/.github/workflows/scheduled.yaml
Changed
@@ -19,11 +19,11 @@ contents: write pull-requests: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with: fetch-depth: 0 - name: Set Up Homebrew 🍺 - uses: Homebrew/actions/setup-homebrew@master + uses: Homebrew/actions/setup-homebrew@4ebd32341e5b59ae7e1581111aa99d5d34cef962 - name: Check for Defunct Services 📉 uses: ./.github/actions/services-validator with: @@ -111,7 +111,7 @@ if: github.repository_owner == 'obsproject' && github.ref_name == 'master' runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with: submodules: recursive fetch-depth: 0 @@ -168,7 +168,7 @@ run: shell: zsh --no-rcs --errexit --pipefail {0} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 - name: Check Nightly Runs ☑️ id: checks
View file
obs-studio-32.1.0.tar.xz/.github/workflows/sign-windows.yaml -> obs-studio-32.1.1.tar.xz/.github/workflows/sign-windows.yaml
Changed
@@ -27,7 +27,7 @@ Write-Output "Workflow SHA: ${sha}" "workflow_sha=${sha}" >> $env:GITHUB_OUTPUT - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 with: path: "repo" fetch-depth: 0 @@ -42,7 +42,7 @@ "commitHash=${shortHash}" >> $env:GITHUB_OUTPUT - name: Download Artifact 📥 - uses: actions/download-artifact@v4 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 with: name: obs-studio-windows-${{ matrix.architecture }}-${{ steps.setup.outputs.commitHash }} path: ${{ github.workspace }}/build @@ -57,26 +57,26 @@ architecture: ${{ matrix.architecture }} - name: Generate artifact attestation - uses: actions/attest-build-provenance@v1 + uses: actions/attest-build-provenance@ef244123eb79f2f7a7e75d99086184180e6d0018 with: subject-path: ${{ github.workspace }}/output/*-${{ matrix.architecture }}.zip - name: Upload Signed Build - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 with: name: obs-studio-windows-${{ matrix.architecture }}-${{ github.ref_name }}-signed compression-level: 0 path: ${{ github.workspace }}/output/*-${{ matrix.architecture }}.zip - name: Upload PDBs - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 with: name: obs-studio-windows-${{ matrix.architecture }}-${{ github.ref_name }}-pdbs compression-level: 0 path: ${{ github.workspace }}/output/*-pdbs.zip - name: Upload Installer - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 if: matrix.architecture == 'x64' with: name: obs-studio-windows-${{ matrix.architecture }}-${{ github.ref_name }}-installer
View file
obs-studio-32.1.1.tar.xz/SECURITY.md
Added
@@ -0,0 +1,70 @@ +## Introduction +The OBS Project is an open source project, which develops and distributes the open source application OBS Studio + +Official Channels are our Discord Server(https://obsproject.com/discord) or security@obsproject.com email address. + +## Guidelines +We require all security researchers to: + +- Act in good faith to avoid privacy violations; +- Perform research only within the scope set out below; +- Be clear and succinct, a short proof-of-concept link is invaluable; and +- Keep information about any vulnerabilities you’ve discovered confidential between us until we’ve had 120 days to resolve the issue. + +If you follow these guidelines when reporting an issue to us, we commit to: + +- Not pursue or support any legal action related to your research; +- Work with you to understand and resolve the issue quickly (including an initial confirmation of your report within 72 hours of submission); + +## Expectations +When working with us according to this policy, you can expect us to: + +- Work with you to understand and validate your report, including a timely initial response to the submission; +- Work to remediate discovered vulnerabilities in a timely manner; and +- Recognize your contribution to improving our security if you are the first to report a unique vulnerability, and your report triggers a code or configuration change. + +## In-Scope Vulnerabilities +The vulnerabilities listed here are explicitly eligible for our security program. Any design or implementation issue that substantially affects the confidentiality or integrity of user data is likely to be in scope for the program. Common examples include: + +- Remote Code Execution (RCE) + +While this list represents areas we focus on, we are interested in reports for all of our software and dependencies especially if it impacts reasonably sensitive user data. + +This can include any open source libraries, software, or third-party components. We do, however, recommend reporting dependency vulnerabilities to the dependency vendor. + +## Out-of-Scope Vulnerabilities +The following are considered out of scope for our security program and should not be submitted: + +- Password, email and account policies, such as email id verification, reset link expiration, and password complexity. +- Attacks requiring physical access to a user's device. +- Vulnerabilities that require a potential victim to install non-standard software or otherwise take active steps to make themselves susceptible (this includes “DLL planting”). +- Reports from automated tools or scans that haven't been manually verified. +- UI and UX bugs and spelling mistakes. +- Web server “security headers”, TLS cipher choices, email SPF / DKIM / DMARC or similar (lack of) best practices that do not actively lead to a vulnerability. + +## Ground Rules +To encourage vulnerability research and to avoid any confusion between legitimate research and malicious attack, we ask that you attempt, in good faith, to: + +- Play by the rules. This includes following this policy and any other relevant agreements; +- Report any vulnerability you’ve discovered promptly; +- Avoid violating the privacy of others, disrupting our systems, destroying data, and/or harming user experience; +- Use only the Official Channels to discuss vulnerability information with us; +- Handle the confidentiality of details of any discovered vulnerabilities according to our Disclosure Policy; +- Perform testing only on in-scope systems, and respect systems and activities which are out-of-scope; +- Do not run crawlers or other automated tools against our infrastructure; and +- Do not engage in extortion. + +## Safe Harbor +When conducting vulnerability research according to this policy, we consider this research conducted under this policy to be: + +- Authorized in view of any applicable anti-hacking laws, and we will not initiate or support legal action against you for accidental, good faith violations of this policy; +- Authorized in view of relevant anti-circumvention laws, and we will not bring a claim against you for circumvention of technology controls; +- Exempt from restrictions in our Acceptable Usage Policy that would interfere with conducting security research, and we waive those restrictions on a limited basis; and +- Lawful, helpful to the overall security of the Internet, and conducted in good faith. + +You are expected, as always, to comply with all applicable laws. If legal action is initiated by a third party against you and you have complied with this policy, we will take steps to make it known that your actions were conducted in compliance with this policy. + +If at any time you have concerns or are uncertain whether your security research is consistent with this policy, please submit a report through one of our Official Channels before going any further. + +## Bug Bounty +The OBS Project does not have the resources to maintain an active bug bounty program, and all reports are made in good faith, for responsible disclosure and the overall safety of the application and our community. Requests for payment or refusal to provide details until a payment is provided are unwelcome.
View file
obs-studio-32.1.0.tar.xz/frontend/components/VolumeControl.cpp -> obs-studio-32.1.1.tar.xz/frontend/components/VolumeControl.cpp
Changed
@@ -80,6 +80,7 @@ utils->addClass(monitorButton, "btn-monitor"); volumeLabel = new QLabel(this); + volumeLabel->setIndent(0); volumeLabel->setObjectName("volLabel"); slider = new VolumeSlider(obs_fader, Qt::Horizontal, this); @@ -203,7 +204,7 @@ void VolumeControl::setLayoutVertical(bool vertical) { - QBoxLayout *newLayout = new QBoxLayout(vertical ? QBoxLayout::TopToBottom : QBoxLayout::LeftToRight); + QBoxLayout *newLayout = new QBoxLayout(QBoxLayout::TopToBottom); newLayout->setContentsMargins(0, 0, 0, 0); newLayout->setSpacing(0); @@ -281,7 +282,7 @@ setMaximumWidth(QWIDGETSIZE_MAX); setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum); - QVBoxLayout *textLayout = new QVBoxLayout; + QHBoxLayout *textLayout = new QHBoxLayout; QHBoxLayout *controlLayout = new QHBoxLayout; QFrame *meterFrame = new QFrame; QVBoxLayout *meterLayout = new QVBoxLayout; @@ -294,18 +295,21 @@ slider->setLayoutDirection(Qt::LeftToRight); slider->setDisplayTicks(true); - nameButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + nameButton->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred); categoryLabel->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred); volumeLabel->setAlignment(Qt::AlignRight); - QHBoxLayout *textTopLayout = new QHBoxLayout; - textTopLayout->setContentsMargins(0, 0, 0, 0); - textTopLayout->addWidget(categoryLabel); - textTopLayout->addWidget(volumeLabel); - + QHBoxLayout *textSubLayout = new QHBoxLayout; + textSubLayout->setContentsMargins(0, 0, 0, 0); textLayout->setContentsMargins(0, 0, 0, 0); - textLayout->addItem(textTopLayout); + textLayout->addWidget(nameButton); + textLayout->addItem(textSubLayout); + + textSubLayout->addSpacerItem( + new QSpacerItem(0, 0, QSizePolicy::MinimumExpanding, QSizePolicy::Preferred)); + textSubLayout->addWidget(categoryLabel); + textSubLayout->addWidget(volumeLabel); meterFrame->setObjectName("volMeterFrame"); meterFrame->setLayout(meterLayout); @@ -594,6 +598,7 @@ utils->toggleClass("volume-unassigned", styleUnassigned); categoryLabel->setText(labelText); + categoryLabel->setAlignment(Qt::AlignCenter); utils->polishChildren(); @@ -720,7 +725,7 @@ bool showAsUnassigned = !muted && unassigned; volumeMeter->setMuted((showAsMuted || showAsUnassigned) && !showAsMonitored); - setUseDisabledColors(showAsMuted); + setUseDisabledColors(showAsMuted || !isActive); // Qt doesn't support overriding the QPushButton icon using pseudo state selectors like :checked // in QSS so we set a checked class selector on the button to be used instead. @@ -732,6 +737,13 @@ muteButton->setChecked(showAsMuted); monitorButton->setChecked(showAsMonitored); + QString muteTooltip = showAsMuted ? QTStr("Unmute") : QTStr("Mute"); + muteButton->setToolTip(muteTooltip); + + QString monitorTooltip = showAsMonitored ? QTStr("Basic.AudioMixer.Monitoring.Disable") + : QTStr("Basic.AudioMixer.Monitoring.Enable"); + monitorButton->setToolTip(monitorTooltip); + if (showAsUnassigned) { QIcon unassignedIcon; unassignedIcon.addFile(QString::fromUtf8(":/res/images/unassigned.svg"), QSize(16, 16),
View file
obs-studio-32.1.0.tar.xz/frontend/components/VolumeMeter.cpp -> obs-studio-32.1.1.tar.xz/frontend/components/VolumeMeter.cpp
Changed
@@ -16,6 +16,9 @@ constexpr int CLIP_FLASH_DURATION_MS = 1000; constexpr int TICK_SIZE = 2; constexpr int TICK_DB_INTERVAL = 6; + +constexpr const char *TICK_LABEL_TOKEN = "-88"; +constexpr float TICK_LABEL_HEIGHT_SCALE_FACTOR = 0.8f; } // namespace static inline QColor color_from_int(long long val) @@ -318,7 +321,6 @@ peakHoldDuration = 20.0; // 20 seconds inputPeakHoldDuration = 1.0; // 1 second meterThickness = 3; // Bar thickness in pixels - meterFontScaling = 0.8; // Font size for numbers is 80% of Widget's font size channels = (int)audio_output_get_channels(obs_get_audio()); obs_volmeter_add_callback(obsVolumeMeter, obsVolMeterChanged, this); @@ -327,8 +329,6 @@ destroyedSignal = OBSSignal(obs_source_get_signal_handler(source), "destroy", &VolumeMeter::obsSourceDestroyed, this); - doLayout(); - if (!updateTimer) { updateTimer = new QTimer(qApp); updateTimer->setTimerType(Qt::PreciseTimer); @@ -344,7 +344,15 @@ } }); - connect(App(), &OBSApp::StyleChanged, this, &VolumeMeter::doLayout); + connect(App(), &OBSApp::StyleChanged, this, this() { + updateTickLabelTokenSize(); + updateBackgroundCache(true); + doLayout(); + }); + + style()->polish(this); + updateTickLabelTokenSize(); + doLayout(); } VolumeMeter::~VolumeMeter() @@ -489,14 +497,6 @@ meterThickness = std::clamp(meterSize, 3, 6); } - tickFont = font(); - QFontInfo info(tickFont); - tickFont.setPointSizeF(info.pointSizeF() * meterFontScaling); - - QFontMetrics metrics(tickFont); - // This is a quick and naive assumption for widest potential tick label. - tickTextTokenRect = metrics.boundingRect(" -88 "); - updateBackgroundCache(); resetLevels(); @@ -605,8 +605,8 @@ { qreal scale = width / minimumLevel; - painter.setFont(tickFont); - QFontMetrics metrics(tickFont); + painter.setFont(font()); + QFontMetrics metrics(font()); painter.setPen(majorTickColor); // Draw major tick lines and numeric indicators. @@ -635,8 +635,8 @@ { qreal scale = height / minimumLevel; - painter.setFont(tickFont); - QFontMetrics metrics(tickFont); + painter.setFont(font()); + QFontMetrics metrics(font()); painter.setPen(majorTickColor); // Draw major tick lines and numeric indicators. @@ -655,6 +655,13 @@ } } +void VolumeMeter::updateTickLabelTokenSize() +{ + QFontMetrics metrics(font()); + // This is a quick and naive assumption for widest potential tick label. + tickTextTokenRect = metrics.size(Qt::TextSingleLine, TICK_LABEL_TOKEN); +} + void VolumeMeter::updateBackgroundCache(bool force) { if (!force && size().isEmpty()) { @@ -888,13 +895,14 @@ if (vertical) { int width = meterRect.width() + tickTextTokenRect.width() + TICK_SIZE + 10; - int height = (labelTotal * tickTextTokenRect.height()) + INDICATOR_THICKNESS; + int height = (labelTotal * (tickTextTokenRect.height() * TICK_LABEL_HEIGHT_SCALE_FACTOR)) + + INDICATOR_THICKNESS; - return QSize(width, height * 1.1); + return QSize(width, height); } else { int width = (labelTotal * tickTextTokenRect.width()) + INDICATOR_THICKNESS; int height = meterRect.height() + tickTextTokenRect.height(); - return QSize(width * 1.1, height); + return QSize(width, height); } }
View file
obs-studio-32.1.0.tar.xz/frontend/components/VolumeMeter.hpp -> obs-studio-32.1.1.tar.xz/frontend/components/VolumeMeter.hpp
Changed
@@ -82,11 +82,12 @@ float displayInputPeakHoldMAX_AUDIO_CHANNELS; uint64_t displayInputPeakHoldLastUpdateTimeMAX_AUDIO_CHANNELS; + void updateTickLabelTokenSize(); + QPixmap backgroundCache; void updateBackgroundCache(bool force = false); - QFont tickFont; - QRect tickTextTokenRect; + QSize tickTextTokenRect; QColor backgroundNominalColor; QColor backgroundWarningColor;
View file
obs-studio-32.1.0.tar.xz/frontend/components/VolumeName.cpp -> obs-studio-32.1.1.tar.xz/frontend/components/VolumeName.cpp
Changed
@@ -26,6 +26,20 @@ #include "moc_VolumeName.cpp" +namespace { +QString getPlainText(const QString &text) +{ + if (Qt::mightBeRichText(text)) { + QTextDocument doc; + doc.setHtml(text); + + return doc.toPlainText(); + } + + return text; +} +} // namespace + VolumeName::VolumeName(obs_source_t *source, QWidget *parent) : QAbstractButton(parent), indicatorWidth(style()->pixelMetric(QStyle::PM_MenuButtonIndicator, nullptr, this)) @@ -39,6 +53,7 @@ setLayout(layout); label = new QLabel(this); + label->setIndent(0); layout->addWidget(label); layout->setContentsMargins(0, 0, indicatorWidth, 0); @@ -57,13 +72,15 @@ } } -QSize VolumeName::sizeHint() const +QSize VolumeName::minimumSizeHint() const { QStyleOptionButton opt; opt.initFrom(this); - const QFontMetrics metrics(font()); - QSize textSize = metrics.size(Qt::TextSingleLine, text()); + QString plainText = getPlainText(fullText); + + QFontMetrics metrics(label->font()); + QSize textSize = metrics.size(Qt::TextSingleLine, plainText); int width = textSize.width(); int height = textSize.height(); @@ -72,13 +89,32 @@ height = std::max(height, indicatorWidth); } - const int spacing = style()->pixelMetric(QStyle::PM_ButtonMargin, &opt, this) / 2; - width += indicatorWidth + spacing; - QSize contentsSize = style()->sizeFromContents(QStyle::CT_PushButton, &opt, QSize(width, height), this); + + contentsSize.rwidth() += indicatorWidth; + return contentsSize; } +QSize VolumeName::sizeHint() const +{ + QString plainText = getPlainText(fullText); + + QFontMetrics metrics(label->font()); + + int textWidth = metrics.horizontalAdvance(plainText); + int textHeight = metrics.height(); + + int width = textWidth + indicatorWidth; + + // Account for label margins if needed + QMargins margins = label->contentsMargins(); + width += margins.left() + margins.right(); + int height = textHeight + margins.top() + margins.bottom(); + + return QSize(width, height); +} + void VolumeName::obsSourceRenamed(void *data, calldata_t *params) { VolumeName *widget = static_cast<VolumeName *>(data); @@ -139,27 +175,36 @@ void VolumeName::setText(const QString &text) { QAbstractButton::setText(text); + updateGeometry(); updateLabelText(text); } void VolumeName::updateLabelText(const QString &name) { - QString plainText = name; - // Handle source names that use rich text. - if (name.contains("<") && name.contains(">")) { - QTextDocument doc; - doc.setHtml(name); + QString plainText = getPlainText(name); + + QFontMetrics metrics(label->font()); - plainText = doc.toPlainText(); + int availableWidth = label->contentsRect().width(); + if (availableWidth <= 0) { + label->clear(); + fullText = name; + return; } - QFontMetrics metrics(label->font()); - QString elidedText = metrics.elidedText(plainText, Qt::ElideMiddle, width() - indicatorWidth * 2); + int textWidth = metrics.horizontalAdvance(plainText); + + bool isRichText = (plainText != name); + bool needsElide = textWidth > availableWidth; - bool useElidedText = metrics.boundingRect(plainText).width() > width() - indicatorWidth; + if (needsElide && !isRichText) { + QString elided = metrics.elidedText(plainText, Qt::ElideMiddle, availableWidth); + label->setText(elided); + } else { + label->setText(name); + } - bool isRichText = name != plainText; - label->setText(useElidedText && !isRichText ? elidedText : name); + fullText = name; } void VolumeName::onRemoved()
View file
obs-studio-32.1.0.tar.xz/frontend/components/VolumeName.hpp -> obs-studio-32.1.1.tar.xz/frontend/components/VolumeName.hpp
Changed
@@ -29,6 +29,7 @@ QPointer<QLabel> label{}; int indicatorWidth; + QString fullText{}; public: VolumeName(obs_source_t *source, QWidget *parent = nullptr); @@ -37,6 +38,7 @@ void setAlignment(Qt::Alignment alignment); Qt::Alignment alignment() const { return textAlignment; } + QSize minimumSizeHint() const override; QSize sizeHint() const override; void updateLabelText(const QString &name);
View file
obs-studio-32.1.0.tar.xz/frontend/data/locale/en-US.ini -> obs-studio-32.1.1.tar.xz/frontend/data/locale/en-US.ini
Changed
@@ -1347,6 +1347,7 @@ Basic.AudioMixer.Unhide="Unhide" Basic.AudioMixer.HiddenTotal="%1 hidden" Basic.AudioMixer.ShowHidden="Show hidden sources" +Basic.AudioMixer.HideHidden="Hide hidden sources" Basic.AudioMixer.KeepHiddenRight="Keep hidden sources to the right" Basic.AudioMixer.KeepHiddenBottom="Keep hidden sources at the bottom" Basic.AudioMixer.ShowInactive="Show inactive sources" @@ -1359,8 +1360,10 @@ Basic.AudioMixer.Category.Preview="Preview" Basic.AudioMixer.Category.Hidden="Hidden" Basic.AudioMixer.Category.Unassigned="Unassigned" -Basic.AudioMixer.Layout.Horizontal="Horizontal" -Basic.AudioMixer.Layout.Vertical="Vertical" +Basic.AudioMixer.Layout.Horizontal="Horizontal Layout" +Basic.AudioMixer.Layout.Vertical="Vertical Layout" +Basic.AudioMixer.Monitoring.Enable="Enable Monitoring" +Basic.AudioMixer.Monitoring.Disable="Disable Monitoring" # advanced audio properties Basic.AdvAudio="Advanced Audio Properties"
View file
obs-studio-32.1.0.tar.xz/frontend/data/themes/Light/headphones.svg -> obs-studio-32.1.1.tar.xz/frontend/data/themes/Light/headphones.svg
Changed
@@ -1,1 +1,1 @@ -<svg version="1.2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><style>.a{fill:#202020}</style><path class="a" d="m8 0c-1.2 0-2.4 0.3-3.5 0.9-2.2 1.3-3.5 3.6-3.5 6.1v6c0 0 0 2 2 2h1c0.6 0 1-0.4 1-1v-4c0-0.6-0.5-1-1-1 0 0-1 0-1-1v-1c0-1.8 1-3.4 2.5-4.3 1.5-0.9 3.5-0.9 5 0 1.5 0.9 2.5 2.5 2.5 4.3v1c0 1-1 1-1 1-0.5 0-1 0.4-1 1v4c0 0.6 0.4 1 1 1h1c2 0 2-2 2-2v-6c0-2.5-1.3-4.8-3.5-6.1-1.1-0.6-2.3-0.9-3.5-0.9z"/></svg> \ No newline at end of file +<svg version="1.2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><style>.a{fill:#fefefe}</style><path class="a" d="m8 0c-1.2 0-2.4 0.3-3.5 0.9-2.2 1.3-3.5 3.6-3.5 6.1v6c0 0 0 2 2 2h1c0.6 0 1-0.4 1-1v-4c0-0.6-0.5-1-1-1 0 0-1 0-1-1v-1c0-1.8 1-3.4 2.5-4.3 1.5-0.9 3.5-0.9 5 0 1.5 0.9 2.5 2.5 2.5 4.3v1c0 1-1 1-1 1-0.5 0-1 0.4-1 1v4c0 0.6 0.4 1 1 1h1c2 0 2-2 2-2v-6c0-2.5-1.3-4.8-3.5-6.1-1.1-0.6-2.3-0.9-3.5-0.9z"/></svg> \ No newline at end of file
View file
obs-studio-32.1.0.tar.xz/frontend/data/themes/Yami.obt -> obs-studio-32.1.1.tar.xz/frontend/data/themes/Yami.obt
Changed
@@ -66,16 +66,16 @@ --grey8: #13141A; --white1: #FFFFFF; - --white2: #EBEBEB; - --white3: #D6D6D6; - --white4: #C2C2C2; - --white5: #ADADAD; + --white2: #E1E1E1; + --white3: #D2D2D2; + --white4: #B4B4B4; + --white5: #969696; --black1: #0A0A0A; --black2: #1F1F1F; - --black3: #333333; - --black4: #474747; - --black5: #5C5C5C; + --black3: #414141; + --black4: #646464; + --black5: #828282; /* Base Theme Colors */ --bg_window: var(--grey7); @@ -92,8 +92,8 @@ --danger: var(--red3); --text: var(--white1); - --text_light: rgb(214, 214, 214); - --text_muted: rgb(153, 153, 153); + --text_light: var(--white1); + --text_muted: var(--white5); --text_disabled: var(--text_muted); --text_inactive: rgb(255, 254, 255); @@ -1677,25 +1677,20 @@ .btn-monitor.checked { background: var(--green4); + color: var(--text_light); qproperty-icon: url(theme:Dark/headphones.svg); } .btn-monitor.checked:focus, .btn-monitor:checked:focus { + color: var(--text_light); border-color: var(--green1); } .btn-monitor.checked:hover { background: var(--green3); border-color: var(--green1); -} - -.volume-inactive .btn-monitor.checked { - background: var(--grey7); -} - -.volume-inactive .btn-monitor.checked:hover { - background-color: var(--button_bg_hover); + color: var(--text_light); } /* Toggle hidden button */ @@ -1717,7 +1712,7 @@ VolumeMeter { color: var(--grey3); - font-size: 7.5pt; + font-size: 6pt; font-weight: bold; qproperty-backgroundNominalColor: var(--green5); @@ -1729,11 +1724,19 @@ qproperty-magnitudeColor: rgb(0, 0, 0); qproperty-majorTickColor: var(--white5); qproperty-minorTickColor: var(--grey1); + + qproperty-backgroundNominalColorDisabled: var(--black4); + qproperty-backgroundWarningColorDisabled: var(--black5); + qproperty-backgroundErrorColorDisabled: var(--black3); + qproperty-foregroundNominalColorDisabled: var(--white3); + qproperty-foregroundWarningColorDisabled: var(--white3); + qproperty-foregroundErrorColorDisabled: var(--white4); } VolumeName { background: transparent; - padding: var(--padding_base); + padding: var(--padding_base) 0; + border: 1px solid transparent; } VolumeName QLabel { @@ -1750,9 +1753,10 @@ } VolumeControl #volLabel { + min-width: 48px; padding: var(--padding_base) 0px var(--padding_base); text-align: center; - font-size: var(--font_base); + font-size: var(--font_small); color: var(--text_muted); } @@ -1764,26 +1768,30 @@ } #hVolumeWidgets .mixer-category { - min-width: 72px; margin: var(--spacing_base); + padding: 0px var(--padding_xlarge); border-radius: var(--border_radius); } +#hVolumeWidgets VolumeName { + padding-right: var(--padding_large); +} + #hVolumeWidgets VolumeName QLabel { - margin: 0px var(--spacing_base) var(--spacing_base); + margin: 0 var(--padding_large); } #hVolumeWidgets #volLabel { - margin: var(--spacing_base); + margin: 0 var(--spacing_base); border-radius: var(--border_radius); } #hVolumeWidgets #volMeterFrame { - margin-bottom: var(--padding_xlarge); + margin-bottom: var(--padding_large); } #hVolumeWidgets VolumeControl QSlider { - margin: var(--padding_large) 0px var(--padding_xlarge); + margin: var(--padding_large) 0px var(--padding_large); } #hVolumeWidgets VolumeControl QSlider::groove:horizontal { @@ -1792,7 +1800,7 @@ } #hVolumeWidgets VolumeControl QPushButton { - margin-left: var(--padding_xlarge); + margin-left: var(--padding_large); } #hVolumeWidgets VolumeControl #volMeterFrame { @@ -1834,11 +1842,8 @@ padding: 0px var(--padding_large); } -/* Hidden Volume Controls */ -VolumeControl.volume-hidden, -VolumeControl.volume-hidden VolumeMeter, -VolumeControl.volume-inactive VolumeMeter, -VolumeControl.volume-inactive { +VolumeControl.volume-inactive, +VolumeControl.volume-inactive VolumeMeter { background: var(--grey7); } @@ -1855,7 +1860,7 @@ VolumeControl.volume-pinned .mixer-category { background: var(--blue5); - color: var(--text); + color: var(--text_light); } VolumeControl.volume-hidden .mixer-category {
View file
obs-studio-32.1.0.tar.xz/frontend/data/themes/Yami_Light.ovt -> obs-studio-32.1.1.tar.xz/frontend/data/themes/Yami_Light.ovt
Changed
@@ -25,7 +25,6 @@ --bg_preview: var(--grey8); --text: var(--black1); - --text_light: var(--black3); --text_muted: var(--black4); --text_disabled: var(--text_muted); @@ -61,9 +60,15 @@ } .btn-monitor.checked { + color: var(--text_light); qproperty-icon: url(theme:Light/headphones.svg); } +VolumeControl.volume-inactive, +VolumeControl.volume-inactive VolumeMeter { + background: var(--grey8); +} + VolumeMeter { qproperty-backgroundNominalColor: var(--green4); qproperty-backgroundWarningColor: var(--yellow4); @@ -74,6 +79,48 @@ qproperty-magnitudeColor: rgb(0,0,0); qproperty-majorTickColor: var(--black1); qproperty-minorTickColor: var(--black5); + + qproperty-backgroundNominalColorDisabled: var(--black3); + qproperty-backgroundWarningColorDisabled: var(--black4); + qproperty-backgroundErrorColorDisabled: var(--black3); + qproperty-foregroundNominalColorDisabled: var(--black5); + qproperty-foregroundWarningColorDisabled: var(--white5); + qproperty-foregroundErrorColorDisabled: var(--white4); +} + +.toggle-hidden:checked { + background: var(--purple1); + border-color: var(--purple5); + color: var(--purple6); +} + +VolumeControl .mixer-category { + background: var(--blue1); + color: var(--text_light); +} + +VolumeControl.volume-pinned .mixer-category { + background: var(--blue2); +} + +VolumeControl.volume-hidden .mixer-category { + background: var(--purple1); + color: var(--purple6); +} + +VolumeControl.volume-unassigned .mixer-category { + background: var(--yellow1); + color: var(--yellow6); +} + +VolumeControl.volume-inactive .mixer-category { + background: var(--grey8); + color: var(--text_muted); +} + +VolumeControl.volume-preview .mixer-category { + background: var(--green3); + color: var(--text_light); } QMenu::right-arrow {
View file
obs-studio-32.1.0.tar.xz/frontend/widgets/AudioMixer.cpp -> obs-studio-32.1.1.tar.xz/frontend/widgets/AudioMixer.cpp
Changed
@@ -179,6 +179,9 @@ toggleHiddenButton->setCheckable(true); toggleHiddenButton->setChecked(showHidden); toggleHiddenButton->setText(QTStr("Basic.AudioMixer.HiddenTotal").arg(0)); + QString hiddenTooltip = showHidden ? QTStr("Basic.AudioMixer.HideHidden") + : QTStr("Basic.AudioMixer.ShowHidden"); + toggleHiddenButton->setToolTip(hiddenTooltip); toggleHiddenButton->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred); idian::Utils::addClass(toggleHiddenButton, "toolbar-button"); idian::Utils::addClass(toggleHiddenButton, "toggle-hidden"); @@ -487,6 +490,11 @@ return true; } + bool audioActive = obs_source_audio_active(source); + if (!audioActive) { + return true; + } + auto uuidPointer = obs_source_get_uuid(source); if (!uuidPointer || !*uuidPointer) { return true; @@ -644,27 +652,27 @@ hiddenCount += 1; } - if (!isGlobal) { - sortingWeight += 20; - } - - if (!isPinned) { - sortingWeight += 20; + if (isGlobal) { + sortingWeight = 0; + } else if (isPinned) { + sortingWeight = 20; + } else { + sortingWeight = 40; } if (isHidden && keepHiddenLast) { - sortingWeight += 20; + sortingWeight += 5; if (isPreviewed) { - sortingWeight -= 10; + sortingWeight -= 1; } } if (!isAudioActive && keepInactiveLast) { - sortingWeight += 50; + sortingWeight += 5; if (isPreviewed) { - sortingWeight -= 10; + sortingWeight -= 1; } } @@ -821,6 +829,13 @@ inactiveLastCheckBox->setChecked(keepInactiveLast); inactiveLastAction->setDefaultWidget(inactiveLastCheckBox); + QAction *layoutToggleAction = new QAction(QTStr("Basic.AudioMixer.Layout.Vertical"), mixerMenu); + if (mixerVertical) { + layoutToggleAction->setText(QTStr("Basic.AudioMixer.Layout.Horizontal")); + } + + QAction *openAdvancedProperties = new QAction(QTStr("Basic.AdvAudio"), mixerMenu); + // Connect menu actions connect(unhideAllAction, &QAction::triggered, this, &AudioMixer::unhideAllAudioControls, Qt::DirectConnection); @@ -831,6 +846,11 @@ connect(inactiveLastCheckBox, &QCheckBox::toggled, this, &AudioMixer::toggleKeepInactiveLast, Qt::DirectConnection); + OBSBasic *main = OBSBasic::Get(); + connect(layoutToggleAction, &QAction::triggered, main, &OBSBasic::toggleMixerLayout, Qt::DirectConnection); + connect(openAdvancedProperties, &QAction::triggered, main, &OBSBasic::on_actionAdvAudioProperties_triggered, + Qt::DirectConnection); + // Build menu and show mixerMenu->addAction(unhideAllAction); mixerMenu->addSeparator(); @@ -838,6 +858,10 @@ mixerMenu->addAction(showInactiveAction); mixerMenu->addAction(hiddenLastAction); mixerMenu->addAction(inactiveLastAction); + mixerMenu->addSeparator(); + mixerMenu->addAction(layoutToggleAction); + mixerMenu->addSeparator(); + mixerMenu->addAction(openAdvancedProperties); optionsButton->setMenu(mixerMenu); } @@ -951,6 +975,9 @@ showHidden = settingShowHidden; toggleHiddenButton->setText(QTStr("Basic.AudioMixer.HiddenTotal").arg(hiddenCount)); + QString tooltip = showHidden ? QTStr("Basic.AudioMixer.HideHidden") : QTStr("Basic.AudioMixer.ShowHidden"); + toggleHiddenButton->setToolTip(tooltip); + toggleHiddenButton->setChecked(showHidden); showHiddenCheckBox->setChecked(showHidden);
View file
obs-studio-32.1.0.tar.xz/libobs/obs-audio.c -> obs-studio-32.1.1.tar.xz/libobs/obs-audio.c
Changed
@@ -517,6 +517,9 @@ if (!dup_src || !obs_source_active(dup_src)) return false; + if (dup_src->monitoring_type == OBS_MONITORING_TYPE_MONITOR_ONLY) + return false; + bool fader_muted = close_float(audio->monitoring_duplicating_source->volume, 0.0f, 0.0001f); bool output_capture_unmuted = !audio->monitoring_duplicating_source->muted && !fader_muted;
View file
obs-studio-32.1.0.tar.xz/libobs/obs-config.h -> obs-studio-32.1.1.tar.xz/libobs/obs-config.h
Changed
@@ -41,7 +41,7 @@ * * Reset to zero each major or minor version */ -#define LIBOBS_API_PATCH_VER 0 +#define LIBOBS_API_PATCH_VER 1 #define MAKE_SEMANTIC_VERSION(major, minor, patch) ((major << 24) | (minor << 16) | patch)
View file
obs-studio-32.1.0.tar.xz/plugins/obs-websocket/CMakeLists.txt -> obs-studio-32.1.1.tar.xz/plugins/obs-websocket/CMakeLists.txt
Changed
@@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.28...3.30) -set(obs-websocket_VERSION 5.7.2) +set(obs-websocket_VERSION 5.7.3) set(OBS_WEBSOCKET_RPC_VERSION 1) include(cmake/obs-websocket-api.cmake)
View file
obs-studio-32.1.0.tar.xz/plugins/obs-websocket/src/forms/SettingsDialog.cpp -> obs-studio-32.1.1.tar.xz/plugins/obs-websocket/src/forms/SettingsDialog.cpp
Changed
@@ -17,7 +17,7 @@ with this program. If not, see <https://www.gnu.org/licenses/> */ -#include <QtWidgets/QMessageBox> +#include <QMessageBox> #include <QDateTime> #include <QTime> #include <obs-module.h>
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.