David Griswold
9d56d26d45
Make virtual display presentable
...
With this flag, apps with baked in two-screen support can see the
virtual display as an external display they can present to.
PR #6344 <https://github.com/Genymobile/scrcpy/pull/6344 >
Signed-off-by: Romain Vimont <rom@rom1v.com >
2025-09-11 21:02:13 +02:00
Romain Vimont
f663bbec12
Update links to 3.3.2
v3.3.2
2025-09-06 14:54:36 +02:00
Romain Vimont
2506d1768b
Bump version to 3.3.2
2025-09-06 14:36:37 +02:00
Romain Vimont
4ee94cb845
Workaround clipboard issue on Samsung devices
...
Fixes #6224 <https://github.com/Genymobile/scrcpy/issues/6224 >
Co-authored-by: Simon Chan <1330321+yume-chan@users.noreply.github.com >
2025-09-06 14:36:33 +02:00
Romain Vimont
afaca80b37
Fix virtual display after Android 16 upgrade
...
Several methods have been added upstream to IDisplayWindowListener.aidl,
causing an AbstractMethodError when they are called on the listener
instance implemented by scrcpy.
Fixes #6234 <https://github.com/Genymobile/scrcpy/issues/6234 >
Fixes #6331 <https://github.com/Genymobile/scrcpy/issues/6331 >
2025-09-06 14:19:43 +02:00
Filip Buda
8057835a0d
Catch CTRL_BREAK_EVENT signal on Windows
...
This ensures the process can terminate properly when a CTRL_BREAK_EVENT
signal is sent programmatically.
PR #6244 <https://github.com/Genymobile/scrcpy/pull/6244 >
Signed-off-by: Romain Vimont <rom@rom1v.com >
2025-08-12 18:17:32 +02:00
Yan
e47529ab9c
Fix gl_context declared type
...
The field gl_context is initialized from SDL_GL_CreateContext(), which
returns a raw SDL_GLContext, not a pointer.
The type mismatch was silently ignored by SDL2 because SDL_GLContext
was defined as an alias to `void *` (in SDL3, it is instead an alias to
`struct SDL_GLContextState *`, so compilation fails).
Refs #3895 <https://github.com/Genymobile/scrcpy/pull/3895 >
PR #6259 <https://github.com/Genymobile/scrcpy/pull/6259 >
Signed-off-by: Romain Vimont <rom@rom1v.com >
2025-08-12 18:08:22 +02:00
Romain Vimont
939c8e7f68
Simplify settings access
...
For Android >= 12, scrcpy executed "settings" commands (in a new
process) rather than using the ContentProvider directly, due to
permission issues [1].
However, these permission issues were resolved by introducing
FakeContext.getContentResolver() [2].
Therefore, remove the use of "settings" commands and use the
ContentProvider directly in all cases.
Refs [1] cc0902b13c
Refs [2] 91373d906b
Refs #6224 comment <https://github.com/Genymobile/scrcpy/issues/6224#issuecomment-3078418268 >
2025-07-17 18:27:21 +02:00
Romain Vimont
eb576c44f8
Replace __WINDOWS__ by _WIN32
...
Replace the SDL2-specific preprocessor macro __WINDOWS__ by the
"standard" _WIN32 macro.
2025-07-17 18:23:25 +02:00
Romain Vimont
0522d02d40
Add missing includes
...
The headers were implicitly included recursively, but include them
explicitly.
2025-07-17 18:23:12 +02:00
Romain Vimont
30bfc80f9b
Fix style for 80-char limit
2025-07-17 13:20:45 +02:00
Romain Vimont
c3d2ef1b1f
Remove redundant ninja install for GA macOS runner
...
The ninja package is already installed, so this triggered a warning:
> ninja 1.13.0 is already installed and up-to-date. To reinstall 1.13.0,
> run: brew reinstall ninja
2025-07-17 13:20:45 +02:00
Romain Vimont
a79ddc35a7
Update platform-tools checksums
...
The release binaries of platform-tools_r36.0.0 have changed upstream.
Both releases versions are referenced from
<https://dl.google.com/android/repository/repository2-2.xml >
Refs #6214 <https://github.com/Genymobile/scrcpy/issues/6214 >
Refs <https://issuetracker.google.com/issues/431119334 >
2025-07-17 13:20:45 +02:00
Romain Vimont
04542a9f58
Fix window leak on icon error
2025-07-17 13:19:15 +02:00
Romain Vimont
8761dcb7a8
Fix SDL dependency script error message
...
Commit 360936248c mistakenly left an
additional 'H' when replacing $HOST with $DIRNAME.
Refs <https://github.com/Genymobile/scrcpy/pull/6216#issuecomment-3076069802 >
2025-07-16 19:09:47 +02:00
Romain Vimont
f01231dff8
Update links to 3.3.1
v3.3.1
2025-06-20 20:14:42 +02:00
Romain Vimont
5b18ce0d2e
Bump version to 3.3.1
2025-06-20 19:54:16 +02:00
Romain Vimont
4841fdd1ef
Add horizontal scrolling support for HID mouse
...
PR #6172 <https://github.com/Genymobile/scrcpy/pull/6172 >
2025-06-20 19:54:16 +02:00
Romain Vimont
fc75319bb2
Fix HID mouse support with SDL precise scrolling
...
Over HID, only integral scroll values can be sent. When SDL precise
scrolling is active, scroll events may include fractional values (e.g.,
0.05), which are truncated to 0 in the HID event.
To fix the problem, use the integral scroll value reported by SDL, which
internally accumulates fractional deltas.
Fixes #6156 <https://github.com/Genymobile/scrcpy/issues/6156 >
PR #6172 <https://github.com/Genymobile/scrcpy/pull/6172 >
2025-06-20 19:54:16 +02:00
Romain Vimont
7c8bdccbdc
Extend value range for SDK mouse scrolling
...
SDL precise scrolling can sometimes produce values greater than 1 or
less than -1.
On the wire, the value is encoded as a 16-bit fixed-point number.
Previously, the range was interpreted as [-1, 1], using 1 bit for the
integral part (the sign) and 15 bits for the fractional part.
To support larger values, interpret the range as [-16, 16] instead,
using 5 bits for the integral part and 11 bits for the fractional part
(which is more than enough).
PR #6172 <https://github.com/Genymobile/scrcpy/pull/6172 >
2025-06-20 19:54:16 +02:00
Romain Vimont
9787fe5d26
Preserve original scroll values in mouse event
...
Clamp scroll values to [-1, 1] only for the SDK mouse.
HID mouse implementations perform their own clamping to [-127, 127] (in
hid_mouse.c).
PR #6172 <https://github.com/Genymobile/scrcpy/pull/6172 >
2025-06-20 18:30:50 +02:00
Romain Vimont
98d30288f7
Prepare the main looper earlier
...
The looper must be initialized before listing apps, to avoid the
following error:
> Can't create handler inside thread that has not called
> Looper.prepare()
Refs 283326b2f6
Fixes #6165 <https://github.com/Genymobile/scrcpy/issues/6165 >
2025-06-17 21:08:54 +02:00
Romain Vimont
d74cfd5711
Silence DiscouragedPrivateApi lint warning
2025-06-13 09:40:45 +02:00
Romain Vimont
cd3a5d50b6
Create ClipboardManager from the main thread
...
The ClipboardManager is instantiated by the first call to
ServiceManager.getClipboardManager().
Now that scrcpy uses android.content.ClipboardManager directly, it must
ensure that it is created on the main thread (or at least on a thread
with a Looper), to avoid the following error:
> Can't create handler inside thread that has not called
> Looper.prepare()
Refs 8a02e3c2f5
Fixes #6151 <https://github.com/Genymobile/scrcpy/issues/6151 >
2025-06-13 09:37:32 +02:00
Romain Vimont
772f42134a
Use Context.CLIPBOARD_SERVICE directly
...
The constant is defined in Context, not FakeContext.
2025-06-13 09:37:32 +02:00
berk ziya
38256d8ff9
Fix deprecated brew command
...
`brew cask` is an outdated command, replaced by `brew install --cask`.
Refs #5398 <https://github.com/Genymobile/scrcpy/pull/5398 >
PR #6149 <https://github.com/Genymobile/scrcpy/pull/6149 >
Signed-off-by: Romain Vimont <rom@rom1v.com >
2025-06-12 15:30:04 +02:00
Romain Vimont
4e1cf13a50
Run a main looper in the cleanup process
...
Since a main looper is explicitly run in the main process, the
initialization of workarounds no longer calls
Looper.prepareMainLooper(), leading to a crash:
java.lang.RuntimeException: Can't create handler inside thread
Thread[main,5,main] that has not called Looper.prepare()
As a result, --power-off-on-close was broken.
Refs 283326b2f6
Fixes #6146 <https://github.com/Genymobile/scrcpy/issues/6146 >
2025-06-12 09:10:11 +02:00
Romain Vimont
696402c68c
Update links to 3.3
2025-06-11 22:15:30 +02:00
Romain Vimont
dc169e425e
Bump version to 3.3
v3.3
2025-06-11 19:39:48 +02:00
Romain Vimont
13fc75902a
Merge branch 'master' into release
2025-06-11 19:39:09 +02:00
Romain Vimont
454beaa757
Upgrade libusb (1.0.29)
2025-06-11 19:39:02 +02:00
Romain Vimont
1a9ffb3814
Upgrade SDL (2.32.8)
2025-06-11 19:38:29 +02:00
Romain Vimont
ac16be54c8
Upgrade platform-tools (36.0.0)
2025-06-11 19:36:22 +02:00
Romain Vimont
8a02e3c2f5
Simplify ClipboardManager wrapper
...
Use the public ClipboardManager API, with the FakeContext as context.
This requires a running main looper, otherwise clipboard changes are not
processed.
Refs #6009 <https://github.com/Genymobile/scrcpy/pull/6009 >
PR #6129 <https://github.com/Genymobile/scrcpy/pull/6129 >
Suggested by: Simon Chan <1330321+yume-chan@users.noreply.github.com >
2025-06-11 17:47:37 +02:00
Romain Vimont
283326b2f6
Run a main looper
...
Instead of blocking the main thread until completion, run a looper.
This will allow the main thread to process any event posted to the main
looper.
Refs #6009 comment <https://github.com/Genymobile/scrcpy/pull/6009#issuecomment-2940810736 >
PR #6129 <https://github.com/Genymobile/scrcpy/pull/6129 >
2025-06-11 17:47:07 +02:00
Simon Chan
ca4f50c5ef
Associate UHID devices to virtual displays
...
This allows the mouse pointer to appear on the correct display (only for
devices running Android 15+).
Fixes #5547 <https://github.com/Genymobile/scrcpy/issues/5547 >
PR #6009 <https://github.com/Genymobile/scrcpy/pull/6009 >
Signed-off-by: Romain Vimont <rom@rom1v.com >
2025-06-05 20:34:11 +02:00
Romain Vimont
7a3fe830d4
Synchronize access to DisplayManager
...
The DisplayManager and its method getDisplayInfo() may be used from both
the Controller thread and the video (main) thread.
PR #6009 <https://github.com/Genymobile/scrcpy/pull/6009 >
2025-06-05 20:34:11 +02:00
Romain Vimont
ee414231ed
Cache getDisplayInfo method
...
Do not use reflection to retrieve the method for every call.
PR #6009 <https://github.com/Genymobile/scrcpy/pull/6009 >
2025-06-05 20:34:11 +02:00
Simon Chan
41ed40f5f9
Simplify InputManager wrapper
...
Use the public InputManager API.
PR #6009 <https://github.com/Genymobile/scrcpy/pull/6009 >
Signed-off-by: Romain Vimont <rom@rom1v.com >
2025-06-05 20:34:11 +02:00
Colin Kinloch
d2cc930975
Add app name SDL hint
...
This allows pulseaudio to label the audio stream "scrcpy" rather than
"SDL Application".
PR #6107 <https://github.com/Genymobile/scrcpy/pull/6107 >
Signed-off-by: Romain Vimont <rom@rom1v.com >
2025-06-05 19:59:59 +02:00
Romain Vimont
52f5d08d1f
Avoid calling wait(0)
...
Calling wait(0) results in waiting without a timeout, which is
unintended.
Refs #6009 comment <https://github.com/Genymobile/scrcpy/pull/6009#issuecomment-2935930294 >
2025-06-03 21:15:11 +02:00
Romain Vimont
70bfa2cf39
Remove useless flag in zsh completion script
...
The -N flag is only useful after a pattern section (-p) to switch back
to listing command names.
Refs <https://zsh.sourceforge.io/Doc/Release/Completion-System.html >
2025-05-22 20:00:58 +02:00
hltdev8642
38f779d9d3
Escape parentheses in zsh completion script
...
PR #6079 <https://github.com/Genymobile/scrcpy/pull/6079 >
Co-authored-by: Romain Vimont <rom@rom1v.com >
Signed-off-by: Romain Vimont <rom@rom1v.com >
2025-05-22 20:00:53 +02:00
Romain Vimont
8cd63cb63e
Report specific error for INJECT_EVENT permission
...
Some devices require a specific option to be enabled in Developer
Options to avoid a permission issue when injecting input events.
When this error occurs, hide the stack trace and print a human-readable
message explaining how to fix the issue.
PR #6080 <https://github.com/Genymobile/scrcpy/pull/6080 >
2025-05-15 19:52:52 +02:00
Romain Vimont
cc309a2b34
Build static linux binary on Ubuntu 22.04
...
Ubuntu 20.04 is no longer available on GitHub Actions.
Refs <https://github.com/actions/runner-images/issues/11101 >
Refs #6050 <https://github.com/Genymobile/scrcpy/pull/6050 >
This reverts commit 69858c6f43 .
2025-05-02 11:39:47 +02:00
Romain Vimont
91a4a74641
Move regex pattern initialization
...
If text == null, then the Pattern is not used.
2025-04-25 10:24:07 +02:00
Romain Vimont
48f38c4bb6
Fix default locked capture orientation
...
The default landscape locked orientation was reversed.
Fixes #6010 <https://github.com/Genymobile/scrcpy/issues/6010 >
2025-04-24 16:12:28 +02:00
Romain Vimont
6875e9aa88
Revert "Fix AudioRecord package name for Android 16"
...
This reverts commit c27d116a66 .
This commit breaks audio on Android 16 beta 4.
Refs #5960 comment <https://github.com/Genymobile/scrcpy/issues/5960#issuecomment-2816608015 >
Fixes #6021 <https://github.com/Genymobile/scrcpy/issues/6021 >
2025-04-24 16:05:13 +02:00
Nicholas Wilson
c5ed2cfc28
Replace "licence" with "license" in README
...
Although "licence" is correct in British English, the rest of the
statement uses "license," so change it for consistency.
PR #6017 <https://github.com/Genymobile/scrcpy/pull/6017 >
Signed-off-by: Romain Vimont <rom@rom1v.com >
2025-04-19 10:30:29 +02:00
Romain Vimont
1a0d300786
Add missing --screen-off-timeout doc in manpage
...
Refs eff5b4b219
2025-04-14 18:07:37 +02:00