Commit Graph

11130 Commits

Author SHA1 Message Date
mike 5661cc0d95 deps: bump uuid 3.0.7 -> 4.5.3 to satisfy flutter_rust_bridge 1.82.6
build-linux / build-linux-x64 (push) Failing after 3m51s
build-windows / build-windows-x64 (push) Failing after 1h5m9s
2026-05-05 20:11:35 +02:00
mike 6caad726b2 deps: bump flutter_rust_bridge 1.80.1 -> 1.82.6 (fixes Linux codegen bugs)
build-linux / build-linux-x64 (push) Failing after 28s
build-windows / build-windows-x64 (push) Failing after 1h0m48s
2026-05-05 20:07:01 +02:00
mike 159daf7964 ci(linux): fix Pointer<bool> and store_dart_post_cobject override types
build-linux / build-linux-x64 (push) Failing after 4m11s
build-windows / build-windows-x64 (push) Has been cancelled
2026-05-05 19:57:45 +02:00
mike 6fceac39d5 ci(linux): also prefix Int/Pointer inside NativeFunction<> template args
build-linux / build-linux-x64 (push) Failing after 4m21s
build-windows / build-windows-x64 (push) Successful in 1h9m40s
2026-05-05 19:43:32 +02:00
mike 72770c513c ci(linux): strip stray 'typedef bool = ...' that flutter_rust_bridge emits on Linux
build-linux / build-linux-x64 (push) Failing after 4m24s
build-windows / build-windows-x64 (push) Successful in 1h9m47s
2026-05-05 19:31:43 +02:00
mike f8cbd4c492 ci(linux): diagnostic dump of generated bridge files
build-linux / build-linux-x64 (push) Failing after 4m15s
build-windows / build-windows-x64 (push) Successful in 1h10m0s
2026-05-05 19:15:58 +02:00
mike d9bbc86507 ci(linux): keep extended_text downgrade until after bridge codegen completes
build-windows / build-windows-x64 (push) Has been cancelled
build-linux / build-linux-x64 (push) Failing after 3m59s
2026-05-05 19:06:00 +02:00
mike feb48fb9cb ci(linux): use Flutter 3.22.3 for bridge gen (mirrors upstream); 3.24.5 for build
build-linux / build-linux-x64 (push) Failing after 21s
build-windows / build-windows-x64 (push) Successful in 1h9m38s
2026-05-05 18:58:26 +02:00
mike 1bde1f27b4 ci(linux): sed-patch ffi.Int/ffi.Pointer prefix in generated_bridge.freezed.dart
build-linux / build-linux-x64 (push) Failing after 4m16s
build-windows / build-windows-x64 (push) Has been cancelled
2026-05-05 14:54:22 +02:00
mike effb0e05c2 ci(linux): explicitly regen .freezed.dart with build_runner --delete-conflicting-outputs
build-linux / build-linux-x64 (push) Failing after 4m18s
build-windows / build-windows-x64 (push) Successful in 1h9m29s
2026-05-05 14:44:00 +02:00
mike 56fae560dd vcpkg(mfx-dispatch): run explicit autotools chain; skip vcpkg AUTOCONFIG
build-linux / build-linux-x64 (push) Failing after 4m18s
build-windows / build-windows-x64 (push) Successful in 1h11m59s
2026-05-05 14:31:20 +02:00
mike 33524ad2b1 vcpkg(mfx-dispatch): pre-run libtoolize before autoreconf for autotools 1.17+
build-linux / build-linux-x64 (push) Failing after 27s
build-windows / build-windows-x64 (push) Successful in 1h11m39s
2026-05-05 14:16:36 +02:00
mike e087770238 vcpkg(mfx-dispatch): rewrite AC_PROG_LIBTOOL → LT_INIT for autotools 1.17+
build-linux / build-linux-x64 (push) Failing after 28s
build-windows / build-windows-x64 (push) Has been cancelled
2026-05-05 14:11:35 +02:00
mike f6753c66cc ci: add Linux runner provisioning + build-linux workflow
build-windows / build-windows-x64 (push) Successful in 1h9m35s
build-linux / build-linux-x64 (push) Failing after 30s
2026-05-05 13:48:06 +02:00
mike d046577c8e ci(windows): make provision.ps1 self-sufficient (dedicated user, parser-bug fix); refresh stale workflow comments
build-windows / build-windows-x64 (push) Successful in 1h20m4s
2026-05-05 10:52:08 +02:00
mike e252c720eb ci(windows): suppress WiX ICE validation; msiserver service unreachable as runner user
build-windows / build-windows-x64 (push) Successful in 1h32m47s
2026-05-05 08:57:27 +02:00
mike 1aacf16c0a ci(windows): robust MSBuild discovery via vswhere with fallbacks
build-windows / build-windows-x64 (push) Failing after 1h35m15s
2026-05-05 08:13:55 +02:00
mike 0ce35da650 ci(windows): enable Developer Mode + system-wide git safe.directory
build-windows / build-windows-x64 (push) Failing after 1h34m10s
2026-05-05 07:27:32 +02:00
mike ba3851f875 ci(windows): trust git ownership; flutter SDK was provisioned by a different user
build-windows / build-windows-x64 (push) Failing after 1h2m24s
2026-05-05 07:23:09 +02:00
mike b19f8b59ba ci(windows): stage git.exe next to dart.exe; show all git matches
build-windows / build-windows-x64 (push) Failing after 1h0m49s
2026-05-05 07:19:33 +02:00
mike 8850a01b0c ci(windows): switch bridge codegen step to pwsh to dodge msys path conversion
build-windows / build-windows-x64 (push) Failing after 1h0m27s
2026-05-05 07:13:31 +02:00
mike 34a83b2b40 ci(windows): print PATH visibility, force Git on bash PATH explicitly
build-windows / build-windows-x64 (push) Failing after 1h0m52s
2026-05-05 07:09:38 +02:00
mike fa725b4846 ci(windows): atomic restore+build to close inter-step deletion window
build-windows / build-windows-x64 (push) Failing after 1h0m29s
2026-05-04 22:27:13 +02:00
mike 9f131e7113 ci(windows): split build into cargo + flutter; restore flutter/windows between
build-windows / build-windows-x64 (push) Failing after 1h20m26s
2026-05-04 22:00:39 +02:00
mike 8bf82833f0 ci(windows): self-heal missing flutter/windows before build
build-windows / build-windows-x64 (push) Failing after 1h20m33s
2026-05-04 21:31:08 +02:00
mike e6b5b6c336 ci(windows): diagnose flutter/windows state before build
build-windows / build-windows-x64 (push) Failing after 1h20m32s
2026-05-04 21:00:00 +02:00
mike f831ff38b8 ci(windows): pass --llvm-path to bridge codegen so ffigen finds libclang
build-windows / build-windows-x64 (push) Failing after 1h44m8s
2026-05-04 20:02:23 +02:00
mike 571798c953 ci(windows): bootstrap rust toolchain for runner user; install rust machine-wide in future provisions
build-windows / build-windows-x64 (push) Failing after 1h9m50s
2026-05-04 19:46:47 +02:00
mike 919966a9a7 ci(windows): support custom version suffix (default 'cst')
build-windows / build-windows-x64 (push) Failing after 1h1m9s
2026-05-04 19:14:25 +02:00
mike 7ffe6da639 ci(windows): build MSI by default; install dotnet-sdk for WiX 4, report signing status of build artifacts 2026-05-04 19:04:58 +02:00
mike a99aeb843f ci(windows): require node on runner; add toolchain preflight
build-windows / build-windows-x64 (push) Failing after 1h0m19s
2026-05-04 18:53:06 +02:00
mike e1ca674a54 ci: add Gitea Actions workflow for Windows pro-features build
build-windows / build-windows-x64 (push) Failing after 1h0m36s
2026-05-04 18:46:01 +02:00
mike 54c031fad8 ci: add Gitea Actions Windows runner provisioning + initial docs 2026-05-04 16:58:01 +02:00
bovirus 5abae617dc Italian language update (#14949)
Full Flutter CI / run-ci (push) Has been skipped
CI / x86_64-unknown-linux-gnu (ubuntu-24.04) (push) Has been cancelled
2026-05-04 16:50:42 +08:00
bilimiyorum 52d62da002 Update tr.rs (#14948)
1- New string entry
2- A minor improvement for terminological consistency
2026-05-04 16:50:23 +08:00
solokot 253d632709 Update ru.rs (#14947) 2026-05-04 16:49:49 +08:00
fufesou 383a5c3478 feat: option, enable-privacy-mode & enable-perm-change-in-accept-window (#14875)
* feat: option, privacy mode

Signed-off-by: fufesou <linlong1266@gmail.com>

* feat(privacy mode): update libs/hbb_common

Signed-off-by: fufesou <linlong1266@gmail.com>

* feat(privacy mode): turn off on disable privacy mode

Signed-off-by: fufesou <linlong1266@gmail.com>

* feat(privacy mode): better check if supported

Signed-off-by: fufesou <linlong1266@gmail.com>

* feat(option): enable perm change in accept window

Signed-off-by: fufesou <linlong1266@gmail.com>

---------

Signed-off-by: fufesou <linlong1266@gmail.com>
2026-05-02 00:44:22 +08:00
orbisai0security d4a1430c27 fix: V-002 security vulnerability (#14924)
CI / x86_64-unknown-linux-gnu (ubuntu-24.04) (push) Has been cancelled
Full Flutter CI / run-ci (push) Has been cancelled
Automated security fix generated by Orbis Security AI
2026-04-29 13:15:21 +08:00
KaneBarns bfd31d21e4 Update build.py (#11341) 2026-04-28 15:08:10 +08:00
Amirhosein Akhlaghpoor 590296b297 fix: iPad mouse down detection for physical mouse input (#14515)
* fix: iPad mouse down detection

Signed-off-by: Amirhossein Akhlaghpour <m9.akhlaghpoor@gmail.com>

* fix(ipad): remove redundant check

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix(ipad): Simple refactor

Signed-off-by: fufesou <linlong1266@gmail.com>

---------

Signed-off-by: Amirhossein Akhlaghpour <m9.akhlaghpoor@gmail.com>
Signed-off-by: fufesou <linlong1266@gmail.com>
Co-authored-by: fufesou <linlong1266@gmail.com>
2026-04-28 15:03:41 +08:00
eason ee8cc0c06b fix(linux): prevent X11 BadWindow crash in get_focused_display (#14561)
* fix(linux): prevent X11 BadWindow crash in get_focused_display

When the active window is destroyed between xdo_get_active_window and
xdo_get_window_location/xdo_get_window_size calls, the default X11
error handler terminates the process with a BadWindow error. This
causes the rustdesk --server process to crash and the remote session
to disconnect and reconnect every time the user closes a window.

Install a custom X error handler around the xdo calls that catches
BadWindow errors and returns gracefully instead of crashing.

Fixes: https://github.com/rustdesk/rustdesk/issues/9003

Co-Authored-By: Claude (claude-opus-4-6) <noreply@anthropic.com>
Signed-off-by: easonysliu <easonysliu@tencent.com>

* fix(linux): prevent BadWindow crash in focus display lookup

Signed-off-by: fufesou <linlong1266@gmail.com>

---------

Signed-off-by: easonysliu <easonysliu@tencent.com>
Signed-off-by: fufesou <linlong1266@gmail.com>
Co-authored-by: easonysliu <easonysliu@tencent.com>
Co-authored-by: Claude (claude-opus-4-6) <noreply@anthropic.com>
Co-authored-by: fufesou <linlong1266@gmail.com>
2026-04-28 11:04:29 +08:00
s1korrrr 99b565ef40 fix(iOS): preserve local pasteboard sync from Windows hosts (#14659)
* fix(ios): accept windows clipboard updates locally

Signed-off-by: Rafal <mrsikorarafal@gmail.com>

* docs: document clipboard text helpers

* fix(iOS): sync clipboard, debug

Signed-off-by: fufesou <linlong1266@gmail.com>

---------

Signed-off-by: Rafal <mrsikorarafal@gmail.com>
Signed-off-by: fufesou <linlong1266@gmail.com>
Co-authored-by: fufesou <linlong1266@gmail.com>
2026-04-28 10:55:28 +08:00
fufesou 1e6a3dc644 fix(android): waiting for image, one cause (#14919)
Signed-off-by: fufesou <linlong1266@gmail.com>
2026-04-27 22:37:22 +08:00
s1korrrr 5b7ad339b8 fix(iPad): keep touch gestures with external mouse (#14652)
* fix(ipad): keep touch gestures with external mouse

Signed-off-by: Rafal <mrsikorarafal@gmail.com>

* fix(mobile): touch gesture on physical mouse connected

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix(ipad): revert 9ee100b53e7a3f336122f827c814b363f7a9f9dc

keep touch gestures with external mouse

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix(mobile): align view camera page with remote page

Signed-off-by: fufesou <linlong1266@gmail.com>

---------

Signed-off-by: Rafal <mrsikorarafal@gmail.com>
Signed-off-by: fufesou <linlong1266@gmail.com>
Co-authored-by: fufesou <linlong1266@gmail.com>
2026-04-27 19:44:35 +08:00
Sergiusz Michalik 7308c448f1 fix(client): serialize X11 keyboard grab and debounce focus feedback (#14836)
* fix(client): serialize X11 keyboard grab and debounce focus feedback

When two RustDesk sessions run fullscreen on separate monitors on
Linux/X11, keyboard input gets stuck on the wrong session or stops
working entirely. This happens because each Flutter isolate calls
change_grab_status concurrently, racing on KEYBOARD_HOOKED and the
rdev grab channel.

Additionally, XGrabKeyboard causes a focus-change feedback loop:
grab shifts focus away from the Flutter window, triggering PointerExit,
which releases the grab, restoring focus, triggering PointerEnter,
which re-grabs -- cycling at ~10 Hz and blocking keyboard input.

Fix by:
- Serializing grab transitions with a mutex and tracking the owning
  session (by lc.session_id), so a stale Wait from session A cannot
  clobber session B's freshly acquired grab.
- Debouncing Wait events (300 ms) from the same session that just
  acquired the grab, breaking the X11 focus feedback loop.
- Refreshing the debounce timer on idempotent Run calls (enterView
  while already owner), keeping the grab stable during normal use.

Signed-off-by: Sergiusz Michalik <github@latens.me>

* fix(client): add deferred release and dedup for debounced Wait

When a Wait is debounced (within 300ms of grab acquisition), schedule
a deferred release thread that re-checks after the debounce window.
If no new Run refreshed the grab, the deferred thread releases it,
ensuring a genuine leave within the debounce window is not lost.

Add a deferred_pending flag to GrabOwnerState to prevent spawning
redundant threads during the X11 focus feedback loop.

Signed-off-by: Sergiusz Michalik <github@latens.me>

* fix(client): use window-scoped ID and fix deferred-release re-arming

Address PR review feedback:
- Use per-window UUID instead of connection-scoped lc.session_id so two
  windows viewing the same peer get distinct grab owners
- Reset deferred_pending on both idempotent Run refresh and owner
  handoff, so a subsequent Wait can always spawn a fresh timer
- Replace manual Default impl with derive

* fix(client): recover from poisoned mutex instead of panicking

* docs: clarify cross-platform rationale for GrabOwnerState

* fix(client): only clear deferred_pending when timer snapshot matches

* fix(client): use full u128 window ID, downgrade grab logs to debug

- Widen GrabOwnerState.owner to u128 to avoid theoretical collision
  from truncating a 128-bit UUID to 64 bits
- Downgrade all grab transition log::info! to log::debug! to reduce
  log noise during routine window switches
- Clear deferred_pending on post-debounce release path to maintain
  the "deferred_pending => timer in flight" invariant

* fix(client): gate GRAB_DEBOUNCE_MS with cfg(target_os = "linux")

* fix(grab): release grabbed keys without clobbering new owner state

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix(keyboard): Simple refactor

Signed-off-by: fufesou <linlong1266@gmail.com>

---------

Signed-off-by: Sergiusz Michalik <github@latens.me>
Signed-off-by: fufesou <linlong1266@gmail.com>
Co-authored-by: fufesou <linlong1266@gmail.com>
2026-04-26 22:46:41 +08:00
Amirhosein Akhlaghpoor c8ba99d1a1 flutter: shift after one shot IME capitalization (#14695)
* flutter: shift after one shot IME capitalization

Signed-off-by: Amirhossein Akhlaghpour <m9.akhlaghpoor@gmail.com>

* flutter: clarify stale mobile shift handling

Signed-off-by: Amirhossein Akhlaghpour <m9.akhlaghpoor@gmail.com>

* fix(android): gboard shift stuck

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix(android): gboard shift stuck, remove unused param

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix(android): gboard shift stuck, release shift before sending events

Signed-off-by: fufesou <linlong1266@gmail.com>

* chore(flutter): document stale mobile shift release flow

Signed-off-by: Amirhossein Akhlaghpour <m9.akhlaghpoor@gmail.com>

---------

Signed-off-by: Amirhossein Akhlaghpour <m9.akhlaghpoor@gmail.com>
Signed-off-by: fufesou <linlong1266@gmail.com>
Co-authored-by: fufesou <linlong1266@gmail.com>
2026-04-26 22:44:26 +08:00
Azhar 5ea6714db8 Fix: replace unwrap() with proper error handling in CLI password prompt (#14910)
Signed-off-by: bunnysayzz <stfuazzo@gmail.com>
2026-04-26 21:28:05 +08:00
fufesou 3a1622e8b5 refact(AGENTS.md): code rules, tokio (#14911)
* refact(AGENTS.md): code rules, tokio

Signed-off-by: fufesou <linlong1266@gmail.com>

* Update AGENTS.md

* Update AGENTS.md

* Update AGENTS.md

* Update AGENTS.md

---------

Signed-off-by: fufesou <linlong1266@gmail.com>
Co-authored-by: RustDesk <71636191+rustdesk@users.noreply.github.com>
2026-04-26 21:25:31 +08:00
Sergiusz Michalik 38f1300717 fix(linux): enable mouse side buttons in remote sessions (#14848)
* fix(linux): enable mouse side buttons in remote sessions

Flutter's Linux embedder never delivers X11 button 8/9 (back/forward)
events to Dart, so mouse side buttons were silently dropped in remote
sessions.

Intercept these buttons at the GDK level via button-press/release-event
handlers on all windows (main + sub-windows) and forward them through
a dedicated platform channel to the active InputModel session.

Also add a defensive XSetPointerMapping call during enigo init to
extend the X11 core pointer button map to 9 buttons on servers where
it is smaller (e.g. minimal X server configurations).

* fix: address review feedback for side button support

- Use XOpenDisplay/XCloseDisplay instead of reading Display* from
  xdo_t's private struct layout at offset 0 (fragile ABI assumption)
- Track side button down ownership per button via a Map instead of a
  single slot, preventing cross-button mismatch on overlapping presses

* fix: gate side buttons on view-only and fix teardown

- Skip side button events in view-only sessions (consistent with
  other mouse entry points)
- Release held side buttons on session close to avoid stuck buttons
  on the remote
- Drop unpaired 'up' events instead of falling back to the active
  model, which could send to the wrong session

* docs: add clarifying comments from review feedback

- Note global scope of XSetPointerMapping and that it runs once
  via lazy_static singleton
- Clarify sub-window callback is safe on X11-only builds
- Document per-isolate design of initSideButtonChannel

* fix: replace broken XSetPointerMapping with diagnostic check

XSetPointerMapping requires the length to match XGetPointerMapping's
return value - it cannot extend the button count. The previous code
would trigger a BadValue X error on servers with fewer than 9 buttons.

Replace with a diagnostic-only check that logs whether the core
pointer has enough buttons for side button simulation. RustDesk's
uinput "Mouse passthrough" device already provides the needed buttons
in practice.

Also add .catchError to fire-and-forget side button releases during
session teardown to prevent unhandled async errors.

* fix: ensure side button releases bypass permission checks

If permissions change between button down and up (e.g. keyboardPerm
revoked, view-only toggled), sendMouse's early return would suppress
the release, leaving a stuck button on the remote.

Add _sendMouseUnchecked that bypasses permission checks, used for:
- Side button 'up' events (matching a recorded 'down')
- Forced releases during session teardown

Gate all permission checks (isViewOnly, keyboardPerm, isViewCamera)
at the 'down' entry point before recording in _sideButtonDownModels.

* fix: add NULL guards and avoid blocking platform channel handler

- Add NULL checks for FL_VIEW cast and channel creation in
  on_subwindow_created (review feedback from fufesou)
- Use fire-and-forget (unawaited) for _sendMouseUnchecked calls
  inside the platform channel handler to avoid blocking platform
  messages when sessionSendMouse is slow (review feedback from Copilot)

* fix: remove circular import and skip X11 check on Wayland

- Move initSideButtonChannel() call from initEnv() in main.dart to
  the InputModel constructor, removing the circular import between
  main.dart and input_model.dart
- Skip check_x11_button_map() when DISPLAY is not set to avoid
  noisy warnings on pure Wayland environments
2026-04-25 12:46:05 +08:00
Nawer 03e351ac61 feat(i18n): Complete and fix french translations (#14890) 2026-04-24 18:38:34 +08:00