Compare commits

..

1 Commits

Author SHA1 Message Date
Ferdinand Schober
253a6d1911 improve reliability of connections 2025-11-03 16:53:47 +01:00
7 changed files with 28 additions and 75 deletions

View File

@@ -7,7 +7,7 @@ jobs:
matrix:
os:
- ubuntu-latest
- macos-15-intel
- macos-13
- macos-14
name: "Build"
runs-on: ${{ matrix.os }}
@@ -31,7 +31,7 @@ jobs:
run: nix build --print-build-logs --show-trace .#packages.x86_64-linux.lan-mouse
- name: Build lan-mouse (x86_64-darwin)
if: matrix.os == 'macos-15-intel'
if: matrix.os == 'macos-13'
run: nix build --print-build-logs --show-trace .#packages.x86_64-darwin.lan-mouse
- name: Build lan-mouse (aarch64-darwin)

View File

@@ -80,7 +80,7 @@ jobs:
path: lan-mouse-windows.zip
macos-release-build:
runs-on: macos-15-intel
runs-on: macos-13
steps:
- uses: actions/checkout@v4
- name: install dependencies

View File

@@ -94,7 +94,7 @@ jobs:
target/debug/*.dll
build-macos:
runs-on: macos-15-intel
runs-on: macos-13
steps:
- uses: actions/checkout@v4
- name: install dependencies

View File

@@ -76,7 +76,7 @@ jobs:
path: lan-mouse-windows.zip
macos-release-build:
runs-on: macos-15-intel
runs-on: macos-13
steps:
- uses: actions/checkout@v4
- name: install dependencies

View File

@@ -318,47 +318,21 @@ fn get_events(
})))
}
CGEventType::ScrollWheel => {
if ev.get_integer_value_field(EventField::SCROLL_WHEEL_EVENT_IS_CONTINUOUS) != 0 {
let v =
ev.get_integer_value_field(EventField::SCROLL_WHEEL_EVENT_POINT_DELTA_AXIS_1);
let h =
ev.get_integer_value_field(EventField::SCROLL_WHEEL_EVENT_POINT_DELTA_AXIS_2);
if v != 0 {
result.push(CaptureEvent::Input(Event::Pointer(PointerEvent::Axis {
time: 0,
axis: 0, // Vertical
value: v as f64,
})));
}
if h != 0 {
result.push(CaptureEvent::Input(Event::Pointer(PointerEvent::Axis {
time: 0,
axis: 1, // Horizontal
value: h as f64,
})));
}
} else {
// line based scrolling
const LINES_PER_STEP: i32 = 3;
const V120_STEPS_PER_LINE: i32 = 120 / LINES_PER_STEP;
let v = ev.get_integer_value_field(EventField::SCROLL_WHEEL_EVENT_DELTA_AXIS_1);
let h = ev.get_integer_value_field(EventField::SCROLL_WHEEL_EVENT_DELTA_AXIS_2);
if v != 0 {
result.push(CaptureEvent::Input(Event::Pointer(
PointerEvent::AxisDiscrete120 {
axis: 0, // Vertical
value: V120_STEPS_PER_LINE * v as i32,
},
)));
}
if h != 0 {
result.push(CaptureEvent::Input(Event::Pointer(
PointerEvent::AxisDiscrete120 {
axis: 1, // Horizontal
value: V120_STEPS_PER_LINE * h as i32,
},
)));
}
let v = ev.get_integer_value_field(EventField::SCROLL_WHEEL_EVENT_POINT_DELTA_AXIS_1);
let h = ev.get_integer_value_field(EventField::SCROLL_WHEEL_EVENT_POINT_DELTA_AXIS_2);
if v != 0 {
result.push(CaptureEvent::Input(Event::Pointer(PointerEvent::Axis {
time: 0,
axis: 0, // Vertical
value: v as f64,
})));
}
if h != 0 {
result.push(CaptureEvent::Input(Event::Pointer(PointerEvent::Axis {
time: 0,
axis: 1, // Horizontal
value: h as f64,
})));
}
}
_ => (),
@@ -453,10 +427,8 @@ fn create_event_tap<'a>(
// Returning Drop should stop the event from being processed
// but core fundation still returns the event
cg_ev.set_type(CGEventType::Null);
CallbackResult::Drop
} else {
CallbackResult::Keep
}
CallbackResult::Replace(cg_ev.to_owned())
};
let tap = CGEventTap::new(

View File

@@ -1,18 +1,18 @@
# Nix Flake Usage
## Run
## run
```bash
nix run github:feschber/lan-mouse
# With params
# with params
nix run github:feschber/lan-mouse -- --help
```
## Home-manager module
## home-manager module
Add input:
add input
```nix
inputs = {
@@ -20,27 +20,14 @@ inputs = {
}
```
Optional: add [our binary cache](https://app.cachix.org/cache/lan-mouse) to allow a faster package install.
```nix
nixConfig = {
extra-substituters = [
"https://lan-mouse.cachix.org/"
];
extra-trusted-public-keys = [
"lan-mouse.cachix.org-1:KlE2AEZUgkzNKM7BIzMQo8w9yJYqUpor1CAUNRY6OyM="
];
};
```
Enable lan-mouse:
enable lan-mouse
``` nix
{
inputs,
...
}: {
# Add the Home Manager module
# add the home manager module
imports = [inputs.lan-mouse.homeManagerModules.default];
programs.lan-mouse = {

View File

@@ -362,13 +362,7 @@ impl CaptureTask {
}
async fn release_capture(&mut self, capture: &mut InputCapture) -> Result<(), CaptureError> {
// If we have an active client, notify them we're leaving
if let Some(handle) = self.active_client.take() {
log::info!("sending Leave event to client {handle}");
if let Err(e) = self.conn.send(ProtoEvent::Leave(0), handle).await {
log::warn!("failed to send Leave to client {handle}: {e}");
}
}
self.active_client.take();
capture.release().await
}
}