Skip to content

Conversation

@ReenigneArcher
Copy link
Member

@ReenigneArcher ReenigneArcher commented Jan 24, 2026

Description

This PR adds support for cursor_mode in XDG portal grab capture.

Note: This is fully AI generated.

Screenshot

Issues Fixed or Closed

Roadmap Issues

Type of Change

  • feat: New feature (non-breaking change which adds functionality)
  • fix: Bug fix (non-breaking change which fixes an issue)
  • docs: Documentation only changes
  • style: Changes that do not affect the meaning of the code (white-space, formatting, missing semicolons, etc.)
  • refactor: Code change that neither fixes a bug nor adds a feature
  • perf: Code change that improves performance
  • test: Adding missing tests or correcting existing tests
  • build: Changes that affect the build system or external dependencies
  • ci: Changes to CI configuration files and scripts
  • chore: Other changes that don't modify src or test files
  • revert: Reverts a previous commit
  • BREAKING CHANGE: Introduces a breaking change (can be combined with any type above)

Checklist

  • Code follows the style guidelines of this project
  • Code has been self-reviewed
  • Code has been commented, particularly in hard-to-understand areas
  • Code docstring/documentation-blocks for new or existing methods/components have been added or updated
  • Unit tests have been added or updated for any new or modified functionality

AI Usage

  • None: No AI tools were used in creating this PR
  • Light: AI provided minor assistance (formatting, simple suggestions)
  • Moderate: AI helped with code generation or debugging specific parts
  • Heavy: AI generated most or all of the code changes

garnacho and others added 19 commits January 22, 2026 19:38
This is not present in the glad version imported in Sunshine,
plug the holes so that these functions may be used.
Add a new portal "grab" implementation that will request the necessary
permissions over XDG portals and use Pipewire for video data streaming.
This supports DMA-Buf buffer exchange for hardware accelerated encoding
(VAAPI, nvenc), software encoding will only work with memory buffers.
Require GIO and PIPEWIRE packages for portal support and use SYSTEM include directories. Also, clarify the fatal error message order for missing dependencies.
Pipewire has been added to the dependency lists for FreeBSD, Arch, Fedora, Homebrew, and Debian-based packaging and build scripts. This ensures proper support and integration for systems using Pipewire.
A value of 2 indicates "Remember this Selection".

Co-authored-by: Carson Katri <[email protected]>
…ystems (#4510)

Co-authored-by: Carlos Garnacho <[email protected]>
Co-authored-by: Carson Katri <[email protected]>
Co-authored-by: d.bondarev <[email protected]>
Corrects the installation path for sunshine-kms to use %{buildroot}%{_bindir} instead of %{_bindir}, ensuring proper packaging for RPM builds.
Replaced raw arrays with std::array for type safety and clarity in buffer and struct allocations throughout portalgrab.cpp. Updated related code to use .data() and .size() where appropriate, improving maintainability and reducing potential for errors.
Changed C-style string constants to array declarations for REQUEST_PREFIX and SESSION_PREFIX. Updated function calls to use std::array::data() for params. Split spa_pod_frame variable declarations for clarity.
Updated path string construction in portalgrab.cpp to use std::format instead of g_strdup_printf, improving type safety and readability.
Applied minor refactoring for improved code clarity and consistency: added [[maybe_unused]] to unused parameters, replaced C-style casts with static_cast, removed unnecessary semicolon, and simplified std::fill_n usage.
Refactored parameter assignment to avoid post-increment in array indexing and improve clarity. Updated token check to use direct character comparison. Replaced enum class usage with 'using enum' for mem_type_e. Improved logging for unrecognized capture status by using std::to_underlying.
Updated function parameters and local variables to use const qualifiers where appropriate. Replaced C-style casts with C++ static_cast for improved type safety and clarity. Minor code cleanups and style improvements.
Added the -DSUNSHINE_ENABLE_PORTAL=ON flag to FreeBSD CI, COPR spec, Flatpak, and linux_build.sh scripts to ensure the portal feature is enabled across all build targets. Also reordered some CMake flags for consistency.
@ReenigneArcher ReenigneArcher added the ai PR has signs of heavy ai usage (either indicated by user or assumed) label Jan 24, 2026
@ReenigneArcher ReenigneArcher added this to the xdg portal grab milestone Jan 24, 2026
@ReenigneArcher ReenigneArcher force-pushed the fix/xdg-portal/add-support-for-cursor_mode branch from a72c887 to dcc11f7 Compare January 24, 2026 00:19
@ReenigneArcher ReenigneArcher force-pushed the fix/xdg-portal/add-support-for-cursor_mode branch from dcc11f7 to dd56d99 Compare January 24, 2026 00:27
@sonarqubecloud
Copy link

Quality Gate Failed Quality Gate failed

Failed conditions
1 New issue
1 New Code Smells (required ≤ 0)

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

@codecov
Copy link

codecov bot commented Jan 24, 2026

Bundle Report

Bundle size has no change ✅

@codecov
Copy link

codecov bot commented Jan 24, 2026

Codecov Report

❌ Patch coverage is 5.71429% with 33 lines in your changes missing coverage. Please review.
✅ Project coverage is 16.05%. Comparing base (ac222ae) to head (dd56d99).
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
src/platform/linux/portalgrab.cpp 5.71% 33 Missing ⚠️
Additional details and impacted files
@@                        Coverage Diff                         @@
##           feat/linux/add-xdg-portal-grab    #4620      +/-   ##
==================================================================
+ Coverage                           15.13%   16.05%   +0.92%     
==================================================================
  Files                                  95       72      -23     
  Lines                               19708    14571    -5137     
  Branches                             9067     6925    -2142     
==================================================================
- Hits                                 2982     2340     -642     
+ Misses                              13221    11339    -1882     
+ Partials                             3505      892    -2613     
Flag Coverage Δ
Archlinux 11.08% <6.06%> (-0.02%) ⬇️
FreeBSD-14.3-amd64 13.20% <5.71%> (-0.04%) ⬇️
Homebrew-ubuntu-22.04 13.32% <6.06%> (-0.03%) ⬇️
Linux-AppImage 11.48% <6.06%> (-0.02%) ⬇️
Windows-AMD64 ?

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
src/platform/linux/portalgrab.cpp 4.50% <5.71%> (-0.05%) ⬇️

... and 71 files with indirect coverage changes

@ReenigneArcher ReenigneArcher force-pushed the feat/linux/add-xdg-portal-grab branch 2 times, most recently from 4821198 to a10aed4 Compare January 30, 2026 17:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ai PR has signs of heavy ai usage (either indicated by user or assumed)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants