mirror of
https://github.com/feschber/lan-mouse.git
synced 2026-03-07 11:59:59 +03:00
Add rustfmt.toml for explicit styling (#348)
* Propose an explicit .rustfnt.toml Use 2024 style, 4 spaces for tabs and epand the default width a tad * Auto-format the existing code with new rules
This commit is contained in:
4
.rustfmt.toml
Normal file
4
.rustfmt.toml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
style_edition = "2024"
|
||||||
|
|
||||||
|
max_width = 100
|
||||||
|
tab_spaces = 4
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
use std::f64::consts::PI;
|
use std::f64::consts::PI;
|
||||||
use std::pin::Pin;
|
use std::pin::Pin;
|
||||||
use std::task::{ready, Context, Poll};
|
use std::task::{Context, Poll, ready};
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ pub enum InputCaptureError {
|
|||||||
use std::io;
|
use std::io;
|
||||||
#[cfg(all(unix, feature = "layer_shell", not(target_os = "macos")))]
|
#[cfg(all(unix, feature = "layer_shell", not(target_os = "macos")))]
|
||||||
use wayland_client::{
|
use wayland_client::{
|
||||||
|
ConnectError, DispatchError,
|
||||||
backend::WaylandError,
|
backend::WaylandError,
|
||||||
globals::{BindError, GlobalError},
|
globals::{BindError, GlobalError},
|
||||||
ConnectError, DispatchError,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#[cfg(all(unix, feature = "libei", not(target_os = "macos")))]
|
#[cfg(all(unix, feature = "libei", not(target_os = "macos")))]
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ use std::{
|
|||||||
io::{self, ErrorKind},
|
io::{self, ErrorKind},
|
||||||
os::fd::{AsFd, RawFd},
|
os::fd::{AsFd, RawFd},
|
||||||
pin::Pin,
|
pin::Pin,
|
||||||
task::{ready, Context, Poll},
|
task::{Context, Poll, ready},
|
||||||
};
|
};
|
||||||
use tokio::io::unix::AsyncFd;
|
use tokio::io::unix::AsyncFd;
|
||||||
|
|
||||||
@@ -45,9 +45,10 @@ use wayland_protocols_wlr::layer_shell::v1::client::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
use wayland_client::{
|
use wayland_client::{
|
||||||
|
Connection, Dispatch, DispatchError, EventQueue, QueueHandle, WEnum,
|
||||||
backend::{ReadEventsGuard, WaylandError},
|
backend::{ReadEventsGuard, WaylandError},
|
||||||
delegate_noop,
|
delegate_noop,
|
||||||
globals::{registry_queue_init, Global, GlobalList, GlobalListContents},
|
globals::{Global, GlobalList, GlobalListContents, registry_queue_init},
|
||||||
protocol::{
|
protocol::{
|
||||||
wl_buffer, wl_compositor,
|
wl_buffer, wl_compositor,
|
||||||
wl_keyboard::{self, WlKeyboard},
|
wl_keyboard::{self, WlKeyboard},
|
||||||
@@ -58,7 +59,6 @@ use wayland_client::{
|
|||||||
wl_seat, wl_shm, wl_shm_pool,
|
wl_seat, wl_shm, wl_shm_pool,
|
||||||
wl_surface::WlSurface,
|
wl_surface::WlSurface,
|
||||||
},
|
},
|
||||||
Connection, Dispatch, DispatchError, EventQueue, QueueHandle, WEnum,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
use input_event::{Event, KeyboardEvent, PointerEvent};
|
use input_event::{Event, KeyboardEvent, PointerEvent};
|
||||||
@@ -66,8 +66,8 @@ use input_event::{Event, KeyboardEvent, PointerEvent};
|
|||||||
use crate::{CaptureError, CaptureEvent};
|
use crate::{CaptureError, CaptureEvent};
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
error::{LayerShellCaptureCreationError, WaylandBindError},
|
|
||||||
Capture, Position,
|
Capture, Position,
|
||||||
|
error::{LayerShellCaptureCreationError, WaylandBindError},
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Globals {
|
struct Globals {
|
||||||
|
|||||||
@@ -2,14 +2,14 @@ use std::{
|
|||||||
collections::{HashMap, HashSet, VecDeque},
|
collections::{HashMap, HashSet, VecDeque},
|
||||||
fmt::Display,
|
fmt::Display,
|
||||||
mem::swap,
|
mem::swap,
|
||||||
task::{ready, Poll},
|
task::{Poll, ready},
|
||||||
};
|
};
|
||||||
|
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
use futures::StreamExt;
|
use futures::StreamExt;
|
||||||
use futures_core::Stream;
|
use futures_core::Stream;
|
||||||
|
|
||||||
use input_event::{scancode, Event, KeyboardEvent};
|
use input_event::{Event, KeyboardEvent, scancode};
|
||||||
|
|
||||||
pub use error::{CaptureCreationError, CaptureError, InputCaptureError};
|
pub use error::{CaptureCreationError, CaptureError, InputCaptureError};
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
use ashpd::{
|
use ashpd::{
|
||||||
desktop::{
|
desktop::{
|
||||||
|
Session,
|
||||||
input_capture::{
|
input_capture::{
|
||||||
Activated, ActivatedBarrier, Barrier, BarrierID, Capabilities, InputCapture, Region,
|
Activated, ActivatedBarrier, Barrier, BarrierID, Capabilities, InputCapture, Region,
|
||||||
Zones,
|
Zones,
|
||||||
},
|
},
|
||||||
Session,
|
|
||||||
},
|
},
|
||||||
enumflags2::BitFlags,
|
enumflags2::BitFlags,
|
||||||
};
|
};
|
||||||
@@ -28,8 +28,8 @@ use std::{
|
|||||||
};
|
};
|
||||||
use tokio::{
|
use tokio::{
|
||||||
sync::{
|
sync::{
|
||||||
mpsc::{self, Receiver, Sender},
|
|
||||||
Notify,
|
Notify,
|
||||||
|
mpsc::{self, Receiver, Sender},
|
||||||
},
|
},
|
||||||
task::JoinHandle,
|
task::JoinHandle,
|
||||||
};
|
};
|
||||||
@@ -42,8 +42,8 @@ use input_event::Event;
|
|||||||
use crate::CaptureEvent;
|
use crate::CaptureEvent;
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
error::{CaptureError, LibeiCaptureCreationError},
|
|
||||||
Capture as LanMouseInputCapture, Position,
|
Capture as LanMouseInputCapture, Position,
|
||||||
|
error::{CaptureError, LibeiCaptureCreationError},
|
||||||
};
|
};
|
||||||
|
|
||||||
/* there is a bug in xdg-remote-desktop-portal-gnome / mutter that
|
/* there is a bug in xdg-remote-desktop-portal-gnome / mutter that
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
use super::{error::MacosCaptureCreationError, Capture, CaptureError, CaptureEvent, Position};
|
use super::{Capture, CaptureError, CaptureEvent, Position, error::MacosCaptureCreationError};
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
use bitflags::bitflags;
|
use bitflags::bitflags;
|
||||||
use core_foundation::{
|
use core_foundation::{
|
||||||
base::{kCFAllocatorDefault, CFRelease},
|
base::{CFRelease, kCFAllocatorDefault},
|
||||||
date::CFTimeInterval,
|
date::CFTimeInterval,
|
||||||
number::{kCFBooleanTrue, CFBooleanRef},
|
number::{CFBooleanRef, kCFBooleanTrue},
|
||||||
runloop::{kCFRunLoopCommonModes, CFRunLoop, CFRunLoopSource},
|
runloop::{CFRunLoop, CFRunLoopSource, kCFRunLoopCommonModes},
|
||||||
string::{kCFStringEncodingUTF8, CFStringCreateWithCString, CFStringRef},
|
string::{CFStringCreateWithCString, CFStringRef, kCFStringEncodingUTF8},
|
||||||
};
|
};
|
||||||
use core_graphics::{
|
use core_graphics::{
|
||||||
base::{kCGErrorSuccess, CGError},
|
base::{CGError, kCGErrorSuccess},
|
||||||
display::{CGDisplay, CGPoint},
|
display::{CGDisplay, CGPoint},
|
||||||
event::{
|
event::{
|
||||||
CGEvent, CGEventFlags, CGEventTap, CGEventTapLocation, CGEventTapOptions,
|
CGEvent, CGEventFlags, CGEventTap, CGEventTapLocation, CGEventTapOptions,
|
||||||
@@ -18,21 +18,22 @@ use core_graphics::{
|
|||||||
event_source::{CGEventSource, CGEventSourceStateID},
|
event_source::{CGEventSource, CGEventSourceStateID},
|
||||||
};
|
};
|
||||||
use futures_core::Stream;
|
use futures_core::Stream;
|
||||||
use input_event::{Event, KeyboardEvent, PointerEvent, BTN_LEFT, BTN_MIDDLE, BTN_RIGHT};
|
use input_event::{BTN_LEFT, BTN_MIDDLE, BTN_RIGHT, Event, KeyboardEvent, PointerEvent};
|
||||||
use keycode::{KeyMap, KeyMapping};
|
use keycode::{KeyMap, KeyMapping};
|
||||||
use libc::c_void;
|
use libc::c_void;
|
||||||
use once_cell::unsync::Lazy;
|
use once_cell::unsync::Lazy;
|
||||||
use std::{
|
use std::{
|
||||||
collections::HashSet,
|
collections::HashSet,
|
||||||
ffi::{c_char, CString},
|
ffi::{CString, c_char},
|
||||||
pin::Pin,
|
pin::Pin,
|
||||||
sync::Arc,
|
sync::Arc,
|
||||||
task::{ready, Context, Poll},
|
task::{Context, Poll, ready},
|
||||||
thread::{self},
|
thread::{self},
|
||||||
};
|
};
|
||||||
use tokio::sync::{
|
use tokio::sync::{
|
||||||
|
Mutex,
|
||||||
mpsc::{self, Receiver, Sender},
|
mpsc::{self, Receiver, Sender},
|
||||||
oneshot, Mutex,
|
oneshot,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Debug, Default)]
|
#[derive(Debug, Default)]
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ use futures::Stream;
|
|||||||
use std::pin::Pin;
|
use std::pin::Pin;
|
||||||
|
|
||||||
use std::task::ready;
|
use std::task::ready;
|
||||||
use tokio::sync::mpsc::{channel, Receiver};
|
use tokio::sync::mpsc::{Receiver, channel};
|
||||||
|
|
||||||
use super::{Capture, CaptureError, CaptureEvent, Position};
|
use super::{Capture, CaptureError, CaptureEvent, Position};
|
||||||
|
|
||||||
|
|||||||
@@ -6,33 +6,32 @@ use std::default::Default;
|
|||||||
use std::sync::atomic::{AtomicBool, AtomicI32, Ordering};
|
use std::sync::atomic::{AtomicBool, AtomicI32, Ordering};
|
||||||
use std::sync::{Arc, Condvar, Mutex};
|
use std::sync::{Arc, Condvar, Mutex};
|
||||||
use std::thread;
|
use std::thread;
|
||||||
use tokio::sync::mpsc::error::TrySendError;
|
|
||||||
use tokio::sync::mpsc::Sender;
|
use tokio::sync::mpsc::Sender;
|
||||||
use windows::core::{w, PCWSTR};
|
use tokio::sync::mpsc::error::TrySendError;
|
||||||
use windows::Win32::Foundation::{FALSE, HWND, LPARAM, LRESULT, RECT, WPARAM};
|
use windows::Win32::Foundation::{FALSE, HWND, LPARAM, LRESULT, RECT, WPARAM};
|
||||||
use windows::Win32::Graphics::Gdi::{
|
use windows::Win32::Graphics::Gdi::{
|
||||||
EnumDisplayDevicesW, EnumDisplaySettingsW, DEVMODEW, DISPLAY_DEVICEW,
|
DEVMODEW, DISPLAY_DEVICE_ATTACHED_TO_DESKTOP, DISPLAY_DEVICEW, ENUM_CURRENT_SETTINGS,
|
||||||
DISPLAY_DEVICE_ATTACHED_TO_DESKTOP, ENUM_CURRENT_SETTINGS,
|
EnumDisplayDevicesW, EnumDisplaySettingsW,
|
||||||
};
|
};
|
||||||
use windows::Win32::System::LibraryLoader::GetModuleHandleW;
|
use windows::Win32::System::LibraryLoader::GetModuleHandleW;
|
||||||
use windows::Win32::System::Threading::GetCurrentThreadId;
|
use windows::Win32::System::Threading::GetCurrentThreadId;
|
||||||
|
use windows::core::{PCWSTR, w};
|
||||||
|
|
||||||
use windows::Win32::UI::WindowsAndMessaging::{
|
use windows::Win32::UI::WindowsAndMessaging::{
|
||||||
CallNextHookEx, CreateWindowExW, DispatchMessageW, GetMessageW, PostThreadMessageW,
|
CallNextHookEx, CreateWindowExW, DispatchMessageW, EDD_GET_DEVICE_INTERFACE_NAME, GetMessageW,
|
||||||
RegisterClassW, SetWindowsHookExW, TranslateMessage, EDD_GET_DEVICE_INTERFACE_NAME, HOOKPROC,
|
HOOKPROC, KBDLLHOOKSTRUCT, LLKHF_EXTENDED, MSG, MSLLHOOKSTRUCT, PostThreadMessageW,
|
||||||
KBDLLHOOKSTRUCT, LLKHF_EXTENDED, MSG, MSLLHOOKSTRUCT, WH_KEYBOARD_LL, WH_MOUSE_LL,
|
RegisterClassW, SetWindowsHookExW, TranslateMessage, WH_KEYBOARD_LL, WH_MOUSE_LL, WINDOW_STYLE,
|
||||||
WINDOW_STYLE, WM_DISPLAYCHANGE, WM_KEYDOWN, WM_KEYUP, WM_LBUTTONDOWN, WM_LBUTTONUP,
|
WM_DISPLAYCHANGE, WM_KEYDOWN, WM_KEYUP, WM_LBUTTONDOWN, WM_LBUTTONUP, WM_MBUTTONDOWN,
|
||||||
WM_MBUTTONDOWN, WM_MBUTTONUP, WM_MOUSEHWHEEL, WM_MOUSEMOVE, WM_MOUSEWHEEL, WM_RBUTTONDOWN,
|
WM_MBUTTONUP, WM_MOUSEHWHEEL, WM_MOUSEMOVE, WM_MOUSEWHEEL, WM_RBUTTONDOWN, WM_RBUTTONUP,
|
||||||
WM_RBUTTONUP, WM_SYSKEYDOWN, WM_SYSKEYUP, WM_USER, WM_XBUTTONDOWN, WM_XBUTTONUP, WNDCLASSW,
|
WM_SYSKEYDOWN, WM_SYSKEYUP, WM_USER, WM_XBUTTONDOWN, WM_XBUTTONUP, WNDCLASSW, WNDPROC,
|
||||||
WNDPROC,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
use input_event::{
|
use input_event::{
|
||||||
|
BTN_BACK, BTN_FORWARD, BTN_LEFT, BTN_MIDDLE, BTN_RIGHT, Event, KeyboardEvent, PointerEvent,
|
||||||
scancode::{self, Linux},
|
scancode::{self, Linux},
|
||||||
Event, KeyboardEvent, PointerEvent, BTN_BACK, BTN_FORWARD, BTN_LEFT, BTN_MIDDLE, BTN_RIGHT,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::{display_util, CaptureEvent, Position};
|
use super::{CaptureEvent, Position, display_util};
|
||||||
|
|
||||||
pub(crate) struct EventThread {
|
pub(crate) struct EventThread {
|
||||||
request_buffer: Arc<Mutex<Vec<ClientUpdate>>>,
|
request_buffer: Arc<Mutex<Vec<ClientUpdate>>>,
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ use std::task::Poll;
|
|||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
use futures_core::Stream;
|
use futures_core::Stream;
|
||||||
|
|
||||||
use super::{error::X11InputCaptureCreationError, Capture, CaptureError, CaptureEvent, Position};
|
use super::{Capture, CaptureError, CaptureEvent, Position, error::X11InputCaptureCreationError};
|
||||||
|
|
||||||
pub struct X11InputCapture {}
|
pub struct X11InputCapture {}
|
||||||
|
|
||||||
|
|||||||
@@ -11,15 +11,15 @@ pub enum InputEmulationError {
|
|||||||
any(feature = "remote_desktop_portal", feature = "libei"),
|
any(feature = "remote_desktop_portal", feature = "libei"),
|
||||||
not(target_os = "macos")
|
not(target_os = "macos")
|
||||||
))]
|
))]
|
||||||
use ashpd::{desktop::ResponseError, Error::Response};
|
use ashpd::{Error::Response, desktop::ResponseError};
|
||||||
use std::io;
|
use std::io;
|
||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
|
|
||||||
#[cfg(all(unix, feature = "wlroots", not(target_os = "macos")))]
|
#[cfg(all(unix, feature = "wlroots", not(target_os = "macos")))]
|
||||||
use wayland_client::{
|
use wayland_client::{
|
||||||
|
ConnectError, DispatchError,
|
||||||
backend::WaylandError,
|
backend::WaylandError,
|
||||||
globals::{BindError, GlobalError},
|
globals::{BindError, GlobalError},
|
||||||
ConnectError, DispatchError,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Debug, Error)]
|
#[derive(Debug, Error)]
|
||||||
|
|||||||
@@ -1,25 +1,25 @@
|
|||||||
use futures::{future, StreamExt};
|
use futures::{StreamExt, future};
|
||||||
use std::{
|
use std::{
|
||||||
io,
|
io,
|
||||||
os::{fd::OwnedFd, unix::net::UnixStream},
|
os::{fd::OwnedFd, unix::net::UnixStream},
|
||||||
sync::{
|
sync::{
|
||||||
atomic::{AtomicBool, Ordering},
|
|
||||||
Arc, Mutex, RwLock,
|
Arc, Mutex, RwLock,
|
||||||
|
atomic::{AtomicBool, Ordering},
|
||||||
},
|
},
|
||||||
time::{SystemTime, UNIX_EPOCH},
|
time::{SystemTime, UNIX_EPOCH},
|
||||||
};
|
};
|
||||||
use tokio::task::JoinHandle;
|
use tokio::task::JoinHandle;
|
||||||
|
|
||||||
use ashpd::desktop::{
|
use ashpd::desktop::{
|
||||||
remote_desktop::{DeviceType, RemoteDesktop},
|
|
||||||
PersistMode, Session,
|
PersistMode, Session,
|
||||||
|
remote_desktop::{DeviceType, RemoteDesktop},
|
||||||
};
|
};
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
|
|
||||||
use reis::{
|
use reis::{
|
||||||
ei::{
|
ei::{
|
||||||
self, button::ButtonState, handshake::ContextType, keyboard::KeyState, Button, Keyboard,
|
self, Button, Keyboard, Pointer, Scroll, button::ButtonState, handshake::ContextType,
|
||||||
Pointer, Scroll,
|
keyboard::KeyState,
|
||||||
},
|
},
|
||||||
event::{self, Connection, DeviceCapability, DeviceEvent, EiEvent, SeatEvent},
|
event::{self, Connection, DeviceCapability, DeviceEvent, EiEvent, SeatEvent},
|
||||||
tokio::EiConvertEventStream,
|
tokio::EiConvertEventStream,
|
||||||
@@ -29,7 +29,7 @@ use input_event::{Event, KeyboardEvent, PointerEvent};
|
|||||||
|
|
||||||
use crate::error::EmulationError;
|
use crate::error::EmulationError;
|
||||||
|
|
||||||
use super::{error::LibeiEmulationCreationError, Emulation, EmulationHandle};
|
use super::{Emulation, EmulationHandle, error::LibeiEmulationCreationError};
|
||||||
|
|
||||||
#[derive(Clone, Default)]
|
#[derive(Clone, Default)]
|
||||||
struct Devices {
|
struct Devices {
|
||||||
@@ -50,8 +50,8 @@ pub(crate) struct LibeiEmulation<'a> {
|
|||||||
session: Session<'a, RemoteDesktop<'a>>,
|
session: Session<'a, RemoteDesktop<'a>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn get_ei_fd<'a>(
|
async fn get_ei_fd<'a>()
|
||||||
) -> Result<(RemoteDesktop<'a>, Session<'a, RemoteDesktop<'a>>, OwnedFd), ashpd::Error> {
|
-> Result<(RemoteDesktop<'a>, Session<'a, RemoteDesktop<'a>>, OwnedFd), ashpd::Error> {
|
||||||
let remote_desktop = RemoteDesktop::new().await?;
|
let remote_desktop = RemoteDesktop::new().await?;
|
||||||
|
|
||||||
log::debug!("creating session ...");
|
log::debug!("creating session ...");
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
use super::{error::EmulationError, Emulation, EmulationHandle};
|
use super::{Emulation, EmulationHandle, error::EmulationError};
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
use bitflags::bitflags;
|
use bitflags::bitflags;
|
||||||
use core_graphics::base::CGFloat;
|
use core_graphics::base::CGFloat;
|
||||||
@@ -10,7 +10,7 @@ use core_graphics::event::{
|
|||||||
ScrollEventUnit,
|
ScrollEventUnit,
|
||||||
};
|
};
|
||||||
use core_graphics::event_source::{CGEventSource, CGEventSourceStateID};
|
use core_graphics::event_source::{CGEventSource, CGEventSourceStateID};
|
||||||
use input_event::{scancode, Event, KeyboardEvent, PointerEvent, BTN_LEFT, BTN_MIDDLE, BTN_RIGHT};
|
use input_event::{BTN_LEFT, BTN_MIDDLE, BTN_RIGHT, Event, KeyboardEvent, PointerEvent, scancode};
|
||||||
use keycode::{KeyMap, KeyMapping};
|
use keycode::{KeyMap, KeyMapping};
|
||||||
use std::cell::Cell;
|
use std::cell::Cell;
|
||||||
use std::ops::{Index, IndexMut};
|
use std::ops::{Index, IndexMut};
|
||||||
|
|||||||
@@ -1,22 +1,22 @@
|
|||||||
use super::error::{EmulationError, WindowsEmulationCreationError};
|
use super::error::{EmulationError, WindowsEmulationCreationError};
|
||||||
use input_event::{
|
use input_event::{
|
||||||
scancode, Event, KeyboardEvent, PointerEvent, BTN_BACK, BTN_FORWARD, BTN_LEFT, BTN_MIDDLE,
|
BTN_BACK, BTN_FORWARD, BTN_LEFT, BTN_MIDDLE, BTN_RIGHT, Event, KeyboardEvent, PointerEvent,
|
||||||
BTN_RIGHT,
|
scancode,
|
||||||
};
|
};
|
||||||
|
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
use std::ops::BitOrAssign;
|
use std::ops::BitOrAssign;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use tokio::task::AbortHandle;
|
use tokio::task::AbortHandle;
|
||||||
use windows::Win32::UI::Input::KeyboardAndMouse::{
|
|
||||||
SendInput, INPUT_0, KEYEVENTF_EXTENDEDKEY, MOUSEEVENTF_XDOWN, MOUSEEVENTF_XUP,
|
|
||||||
};
|
|
||||||
use windows::Win32::UI::Input::KeyboardAndMouse::{
|
use windows::Win32::UI::Input::KeyboardAndMouse::{
|
||||||
INPUT, INPUT_KEYBOARD, INPUT_MOUSE, KEYBDINPUT, KEYEVENTF_KEYUP, KEYEVENTF_SCANCODE,
|
INPUT, INPUT_KEYBOARD, INPUT_MOUSE, KEYBDINPUT, KEYEVENTF_KEYUP, KEYEVENTF_SCANCODE,
|
||||||
MOUSEEVENTF_HWHEEL, MOUSEEVENTF_LEFTDOWN, MOUSEEVENTF_LEFTUP, MOUSEEVENTF_MIDDLEDOWN,
|
MOUSEEVENTF_HWHEEL, MOUSEEVENTF_LEFTDOWN, MOUSEEVENTF_LEFTUP, MOUSEEVENTF_MIDDLEDOWN,
|
||||||
MOUSEEVENTF_MIDDLEUP, MOUSEEVENTF_MOVE, MOUSEEVENTF_RIGHTDOWN, MOUSEEVENTF_RIGHTUP,
|
MOUSEEVENTF_MIDDLEUP, MOUSEEVENTF_MOVE, MOUSEEVENTF_RIGHTDOWN, MOUSEEVENTF_RIGHTUP,
|
||||||
MOUSEEVENTF_WHEEL, MOUSEINPUT,
|
MOUSEEVENTF_WHEEL, MOUSEINPUT,
|
||||||
};
|
};
|
||||||
|
use windows::Win32::UI::Input::KeyboardAndMouse::{
|
||||||
|
INPUT_0, KEYEVENTF_EXTENDEDKEY, MOUSEEVENTF_XDOWN, MOUSEEVENTF_XUP, SendInput,
|
||||||
|
};
|
||||||
use windows::Win32::UI::WindowsAndMessaging::{XBUTTON1, XBUTTON2};
|
use windows::Win32::UI::WindowsAndMessaging::{XBUTTON1, XBUTTON2};
|
||||||
|
|
||||||
use super::{Emulation, EmulationHandle};
|
use super::{Emulation, EmulationHandle};
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
use crate::error::EmulationError;
|
use crate::error::EmulationError;
|
||||||
|
|
||||||
use super::{error::WlrootsEmulationCreationError, Emulation};
|
use super::{Emulation, error::WlrootsEmulationCreationError};
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
use bitflags::bitflags;
|
use bitflags::bitflags;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
@@ -8,8 +8,8 @@ use std::io;
|
|||||||
use std::os::fd::{AsFd, OwnedFd};
|
use std::os::fd::{AsFd, OwnedFd};
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
use std::time::{SystemTime, UNIX_EPOCH};
|
use std::time::{SystemTime, UNIX_EPOCH};
|
||||||
use wayland_client::backend::WaylandError;
|
|
||||||
use wayland_client::WEnum;
|
use wayland_client::WEnum;
|
||||||
|
use wayland_client::backend::WaylandError;
|
||||||
|
|
||||||
use wayland_client::protocol::wl_keyboard::{self, WlKeyboard};
|
use wayland_client::protocol::wl_keyboard::{self, WlKeyboard};
|
||||||
use wayland_client::protocol::wl_pointer::{Axis, AxisSource, ButtonState};
|
use wayland_client::protocol::wl_pointer::{Axis, AxisSource, ButtonState};
|
||||||
@@ -25,16 +25,15 @@ use wayland_protocols_misc::zwp_virtual_keyboard_v1::client::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
use wayland_client::{
|
use wayland_client::{
|
||||||
delegate_noop,
|
Connection, Dispatch, EventQueue, QueueHandle, delegate_noop,
|
||||||
globals::{registry_queue_init, GlobalListContents},
|
globals::{GlobalListContents, registry_queue_init},
|
||||||
protocol::{wl_registry, wl_seat},
|
protocol::{wl_registry, wl_seat},
|
||||||
Connection, Dispatch, EventQueue, QueueHandle,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
use input_event::{scancode, Event, KeyboardEvent, PointerEvent};
|
use input_event::{Event, KeyboardEvent, PointerEvent, scancode};
|
||||||
|
|
||||||
use super::error::WaylandBindError;
|
|
||||||
use super::EmulationHandle;
|
use super::EmulationHandle;
|
||||||
|
use super::error::WaylandBindError;
|
||||||
|
|
||||||
struct State {
|
struct State {
|
||||||
keymap: Option<(u32, OwnedFd, u32)>,
|
keymap: Option<(u32, OwnedFd, u32)>,
|
||||||
|
|||||||
@@ -6,12 +6,12 @@ use x11::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
use input_event::{
|
use input_event::{
|
||||||
Event, KeyboardEvent, PointerEvent, BTN_BACK, BTN_FORWARD, BTN_LEFT, BTN_MIDDLE, BTN_RIGHT,
|
BTN_BACK, BTN_FORWARD, BTN_LEFT, BTN_MIDDLE, BTN_RIGHT, Event, KeyboardEvent, PointerEvent,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::error::EmulationError;
|
use crate::error::EmulationError;
|
||||||
|
|
||||||
use super::{error::X11EmulationCreationError, Emulation, EmulationHandle};
|
use super::{Emulation, EmulationHandle, error::X11EmulationCreationError};
|
||||||
|
|
||||||
pub(crate) struct X11Emulation {
|
pub(crate) struct X11Emulation {
|
||||||
display: *mut xlib::Display,
|
display: *mut xlib::Display,
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
use ashpd::{
|
use ashpd::{
|
||||||
desktop::{
|
desktop::{
|
||||||
remote_desktop::{Axis, DeviceType, KeyState, RemoteDesktop},
|
|
||||||
PersistMode, Session,
|
PersistMode, Session,
|
||||||
|
remote_desktop::{Axis, DeviceType, KeyState, RemoteDesktop},
|
||||||
},
|
},
|
||||||
zbus::AsyncDrop,
|
zbus::AsyncDrop,
|
||||||
};
|
};
|
||||||
@@ -15,7 +15,7 @@ use input_event::{
|
|||||||
|
|
||||||
use crate::error::EmulationError;
|
use crate::error::EmulationError;
|
||||||
|
|
||||||
use super::{error::XdpEmulationCreationError, Emulation, EmulationHandle};
|
use super::{Emulation, EmulationHandle, error::XdpEmulationCreationError};
|
||||||
|
|
||||||
pub(crate) struct DesktopPortalEmulation<'a> {
|
pub(crate) struct DesktopPortalEmulation<'a> {
|
||||||
proxy: RemoteDesktop<'a>,
|
proxy: RemoteDesktop<'a>,
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ use std::{net::IpAddr, time::Duration};
|
|||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
|
|
||||||
use lan_mouse_ipc::{
|
use lan_mouse_ipc::{
|
||||||
connect_async, ClientHandle, ConnectionError, FrontendEvent, FrontendRequest, IpcError,
|
ClientHandle, ConnectionError, FrontendEvent, FrontendRequest, IpcError, Position,
|
||||||
Position,
|
connect_async,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Debug, Error)]
|
#[derive(Debug, Error)]
|
||||||
|
|||||||
@@ -4,8 +4,9 @@ use adw::prelude::*;
|
|||||||
use adw::subclass::prelude::*;
|
use adw::subclass::prelude::*;
|
||||||
use glib::subclass::InitializingObject;
|
use glib::subclass::InitializingObject;
|
||||||
use gtk::{
|
use gtk::{
|
||||||
|
Button, CompositeTemplate, Label,
|
||||||
glib::{self, subclass::Signal},
|
glib::{self, subclass::Signal},
|
||||||
template_callbacks, Button, CompositeTemplate, Label,
|
template_callbacks,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(CompositeTemplate, Default)]
|
#[derive(CompositeTemplate, Default)]
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ use adw::prelude::*;
|
|||||||
use adw::subclass::prelude::*;
|
use adw::subclass::prelude::*;
|
||||||
use gtk::glib::{self, Object};
|
use gtk::glib::{self, Object};
|
||||||
|
|
||||||
use lan_mouse_ipc::{Position, DEFAULT_PORT};
|
use lan_mouse_ipc::{DEFAULT_PORT, Position};
|
||||||
|
|
||||||
use super::ClientObject;
|
use super::ClientObject;
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
|
|
||||||
use adw::subclass::prelude::*;
|
use adw::subclass::prelude::*;
|
||||||
use adw::{prelude::*, ActionRow, ComboRow};
|
use adw::{ActionRow, ComboRow, prelude::*};
|
||||||
use glib::{subclass::InitializingObject, Binding};
|
use glib::{Binding, subclass::InitializingObject};
|
||||||
use gtk::glib::subclass::Signal;
|
use gtk::glib::subclass::Signal;
|
||||||
use gtk::glib::{clone, SignalHandlerId};
|
use gtk::glib::{SignalHandlerId, clone};
|
||||||
use gtk::{glib, Button, CompositeTemplate, Entry, Switch};
|
use gtk::{Button, CompositeTemplate, Entry, Switch, glib};
|
||||||
use lan_mouse_ipc::Position;
|
use lan_mouse_ipc::Position;
|
||||||
use std::sync::OnceLock;
|
use std::sync::OnceLock;
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,9 @@ use adw::prelude::*;
|
|||||||
use adw::subclass::prelude::*;
|
use adw::subclass::prelude::*;
|
||||||
use glib::subclass::InitializingObject;
|
use glib::subclass::InitializingObject;
|
||||||
use gtk::{
|
use gtk::{
|
||||||
|
Button, CompositeTemplate, Text,
|
||||||
glib::{self, subclass::Signal},
|
glib::{self, subclass::Signal},
|
||||||
template_callbacks, Button, CompositeTemplate, Text,
|
template_callbacks,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(CompositeTemplate, Default)]
|
#[derive(CompositeTemplate, Default)]
|
||||||
@@ -51,9 +52,11 @@ impl ObjectImpl for FingerprintWindow {
|
|||||||
fn signals() -> &'static [Signal] {
|
fn signals() -> &'static [Signal] {
|
||||||
static SIGNALS: OnceLock<Vec<Signal>> = OnceLock::new();
|
static SIGNALS: OnceLock<Vec<Signal>> = OnceLock::new();
|
||||||
SIGNALS.get_or_init(|| {
|
SIGNALS.get_or_init(|| {
|
||||||
vec![Signal::builder("confirm-clicked")
|
vec![
|
||||||
.param_types([String::static_type(), String::static_type()])
|
Signal::builder("confirm-clicked")
|
||||||
.build()]
|
.param_types([String::static_type(), String::static_type()])
|
||||||
|
.build(),
|
||||||
|
]
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
|
|
||||||
use adw::subclass::prelude::*;
|
use adw::subclass::prelude::*;
|
||||||
use adw::{prelude::*, ActionRow};
|
use adw::{ActionRow, prelude::*};
|
||||||
use glib::{subclass::InitializingObject, Binding};
|
use glib::{Binding, subclass::InitializingObject};
|
||||||
use gtk::glib::clone;
|
use gtk::glib::clone;
|
||||||
use gtk::glib::subclass::Signal;
|
use gtk::glib::subclass::Signal;
|
||||||
use gtk::{glib, Button, CompositeTemplate};
|
use gtk::{Button, CompositeTemplate, glib};
|
||||||
use std::sync::OnceLock;
|
use std::sync::OnceLock;
|
||||||
|
|
||||||
#[derive(CompositeTemplate, Default)]
|
#[derive(CompositeTemplate, Default)]
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ use window::Window;
|
|||||||
use lan_mouse_ipc::FrontendEvent;
|
use lan_mouse_ipc::FrontendEvent;
|
||||||
|
|
||||||
use adw::Application;
|
use adw::Application;
|
||||||
use gtk::{gdk::Display, glib::clone, prelude::*, IconTheme};
|
use gtk::{IconTheme, gdk::Display, glib::clone, prelude::*};
|
||||||
use gtk::{gio, glib, prelude::ApplicationExt};
|
use gtk::{gio, glib, prelude::ApplicationExt};
|
||||||
|
|
||||||
use self::client_object::ClientObject;
|
use self::client_object::ClientObject;
|
||||||
|
|||||||
@@ -4,16 +4,15 @@ use std::collections::HashMap;
|
|||||||
|
|
||||||
use adw::prelude::*;
|
use adw::prelude::*;
|
||||||
use adw::subclass::prelude::*;
|
use adw::subclass::prelude::*;
|
||||||
use glib::{clone, Object};
|
use glib::{Object, clone};
|
||||||
use gtk::{
|
use gtk::{
|
||||||
gio,
|
NoSelection, gio,
|
||||||
glib::{self, closure_local},
|
glib::{self, closure_local},
|
||||||
NoSelection,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
use lan_mouse_ipc::{
|
use lan_mouse_ipc::{
|
||||||
ClientConfig, ClientHandle, ClientState, FrontendRequest, FrontendRequestWriter, Position,
|
ClientConfig, ClientHandle, ClientState, DEFAULT_PORT, FrontendRequest, FrontendRequestWriter,
|
||||||
DEFAULT_PORT,
|
Position,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
use std::cell::{Cell, RefCell};
|
use std::cell::{Cell, RefCell};
|
||||||
|
|
||||||
use adw::subclass::prelude::*;
|
use adw::subclass::prelude::*;
|
||||||
use adw::{prelude::*, ActionRow, PreferencesGroup, ToastOverlay};
|
use adw::{ActionRow, PreferencesGroup, ToastOverlay, prelude::*};
|
||||||
use glib::subclass::InitializingObject;
|
use glib::subclass::InitializingObject;
|
||||||
use gtk::glib::clone;
|
use gtk::glib::clone;
|
||||||
use gtk::{gdk, gio, glib, Button, CompositeTemplate, Entry, Image, Label, ListBox};
|
use gtk::{Button, CompositeTemplate, Entry, Image, Label, ListBox, gdk, gio, glib};
|
||||||
|
|
||||||
use lan_mouse_ipc::{FrontendRequestWriter, DEFAULT_PORT};
|
use lan_mouse_ipc::{DEFAULT_PORT, FrontendRequestWriter};
|
||||||
|
|
||||||
use crate::authorization_window::AuthorizationWindow;
|
use crate::authorization_window::AuthorizationWindow;
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
use crate::{ConnectionError, FrontendEvent, FrontendRequest, IpcError};
|
use crate::{ConnectionError, FrontendEvent, FrontendRequest, IpcError};
|
||||||
use std::{
|
use std::{
|
||||||
cmp::min,
|
cmp::min,
|
||||||
io::{self, prelude::*, BufReader, LineWriter, Lines},
|
io::{self, BufReader, LineWriter, Lines, prelude::*},
|
||||||
thread,
|
thread,
|
||||||
time::Duration,
|
time::Duration,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
use crate::{ConnectionError, FrontendEvent, FrontendRequest, IpcError};
|
use crate::{ConnectionError, FrontendEvent, FrontendRequest, IpcError};
|
||||||
use std::{
|
use std::{
|
||||||
cmp::min,
|
cmp::min,
|
||||||
task::{ready, Poll},
|
task::{Poll, ready},
|
||||||
time::Duration,
|
time::Duration,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -20,8 +20,8 @@ mod connect;
|
|||||||
mod connect_async;
|
mod connect_async;
|
||||||
mod listen;
|
mod listen;
|
||||||
|
|
||||||
pub use connect::{connect, FrontendEventReader, FrontendRequestWriter};
|
pub use connect::{FrontendEventReader, FrontendRequestWriter, connect};
|
||||||
pub use connect_async::{connect_async, AsyncFrontendEventReader, AsyncFrontendRequestWriter};
|
pub use connect_async::{AsyncFrontendEventReader, AsyncFrontendRequestWriter, connect_async};
|
||||||
pub use listen::AsyncFrontendListener;
|
pub use listen::AsyncFrontendListener;
|
||||||
|
|
||||||
#[derive(Debug, Error)]
|
#[derive(Debug, Error)]
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
use futures::{stream::SelectAll, Stream, StreamExt};
|
use futures::{Stream, StreamExt, stream::SelectAll};
|
||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::{
|
use std::{
|
||||||
@@ -63,7 +63,7 @@ impl AsyncFrontendListener {
|
|||||||
Ok(ls) => ls,
|
Ok(ls) => ls,
|
||||||
// some other lan-mouse instance has bound the socket in the meantime
|
// some other lan-mouse instance has bound the socket in the meantime
|
||||||
Err(e) if e.kind() == ErrorKind::AddrInUse => {
|
Err(e) if e.kind() == ErrorKind::AddrInUse => {
|
||||||
return Err(IpcListenerCreationError::AlreadyRunning)
|
return Err(IpcListenerCreationError::AlreadyRunning);
|
||||||
}
|
}
|
||||||
Err(e) => return Err(IpcListenerCreationError::Bind(e)),
|
Err(e) => return Err(IpcListenerCreationError::Bind(e)),
|
||||||
};
|
};
|
||||||
@@ -75,7 +75,7 @@ impl AsyncFrontendListener {
|
|||||||
Ok(ls) => ls,
|
Ok(ls) => ls,
|
||||||
// some other lan-mouse instance has bound the socket in the meantime
|
// some other lan-mouse instance has bound the socket in the meantime
|
||||||
Err(e) if e.kind() == ErrorKind::AddrInUse => {
|
Err(e) if e.kind() == ErrorKind::AddrInUse => {
|
||||||
return Err(IpcListenerCreationError::AlreadyRunning)
|
return Err(IpcListenerCreationError::AlreadyRunning);
|
||||||
}
|
}
|
||||||
Err(e) => return Err(IpcListenerCreationError::Bind(e)),
|
Err(e) => return Err(IpcListenerCreationError::Bind(e)),
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ use input_capture::{
|
|||||||
};
|
};
|
||||||
use input_event::scancode;
|
use input_event::scancode;
|
||||||
use lan_mouse_proto::ProtoEvent;
|
use lan_mouse_proto::ProtoEvent;
|
||||||
use local_channel::mpsc::{channel, Receiver, Sender};
|
use local_channel::mpsc::{Receiver, Sender, channel};
|
||||||
use tokio::task::{spawn_local, JoinHandle};
|
use tokio::task::{JoinHandle, spawn_local};
|
||||||
use tokio_util::sync::CancellationToken;
|
use tokio_util::sync::CancellationToken;
|
||||||
|
|
||||||
use crate::connect::LanMouseConnection;
|
use crate::connect::LanMouseConnection;
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ use thiserror::Error;
|
|||||||
use toml;
|
use toml;
|
||||||
|
|
||||||
use lan_mouse_cli::CliArgs;
|
use lan_mouse_cli::CliArgs;
|
||||||
use lan_mouse_ipc::{Position, DEFAULT_PORT};
|
use lan_mouse_ipc::{DEFAULT_PORT, Position};
|
||||||
|
|
||||||
use input_event::scancode::{
|
use input_event::scancode::{
|
||||||
self,
|
self,
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
use crate::client::ClientManager;
|
use crate::client::ClientManager;
|
||||||
use lan_mouse_ipc::{ClientHandle, DEFAULT_PORT};
|
use lan_mouse_ipc::{ClientHandle, DEFAULT_PORT};
|
||||||
use lan_mouse_proto::{ProtoEvent, MAX_EVENT_SIZE};
|
use lan_mouse_proto::{MAX_EVENT_SIZE, ProtoEvent};
|
||||||
use local_channel::mpsc::{channel, Receiver, Sender};
|
use local_channel::mpsc::{Receiver, Sender, channel};
|
||||||
use std::{
|
use std::{
|
||||||
cell::RefCell,
|
cell::RefCell,
|
||||||
collections::{HashMap, HashSet},
|
collections::{HashMap, HashSet},
|
||||||
@@ -15,7 +15,7 @@ use thiserror::Error;
|
|||||||
use tokio::{
|
use tokio::{
|
||||||
net::UdpSocket,
|
net::UdpSocket,
|
||||||
sync::Mutex,
|
sync::Mutex,
|
||||||
task::{spawn_local, JoinSet},
|
task::{JoinSet, spawn_local},
|
||||||
};
|
};
|
||||||
use webrtc_dtls::{
|
use webrtc_dtls::{
|
||||||
config::{Config, ExtendedMasterSecretType},
|
config::{Config, ExtendedMasterSecretType},
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
use std::{collections::HashMap, net::IpAddr};
|
use std::{collections::HashMap, net::IpAddr};
|
||||||
|
|
||||||
use local_channel::mpsc::{channel, Receiver, Sender};
|
use local_channel::mpsc::{Receiver, Sender, channel};
|
||||||
use tokio::task::{spawn_local, JoinHandle};
|
use tokio::task::{JoinHandle, spawn_local};
|
||||||
|
|
||||||
use hickory_resolver::{ResolveError, TokioResolver};
|
use hickory_resolver::{ResolveError, TokioResolver};
|
||||||
use tokio_util::sync::CancellationToken;
|
use tokio_util::sync::CancellationToken;
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ use futures::StreamExt;
|
|||||||
use input_emulation::{EmulationHandle, InputEmulation, InputEmulationError};
|
use input_emulation::{EmulationHandle, InputEmulation, InputEmulationError};
|
||||||
use input_event::Event;
|
use input_event::Event;
|
||||||
use lan_mouse_proto::{Position, ProtoEvent};
|
use lan_mouse_proto::{Position, ProtoEvent};
|
||||||
use local_channel::mpsc::{channel, Receiver, Sender};
|
use local_channel::mpsc::{Receiver, Sender, channel};
|
||||||
use std::{
|
use std::{
|
||||||
cell::Cell,
|
cell::Cell,
|
||||||
collections::HashMap,
|
collections::HashMap,
|
||||||
@@ -13,7 +13,7 @@ use std::{
|
|||||||
};
|
};
|
||||||
use tokio::{
|
use tokio::{
|
||||||
select,
|
select,
|
||||||
task::{spawn_local, JoinHandle},
|
task::{JoinHandle, spawn_local},
|
||||||
};
|
};
|
||||||
|
|
||||||
/// emulation handling events received from a listener
|
/// emulation handling events received from a listener
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
use futures::{Stream, StreamExt};
|
use futures::{Stream, StreamExt};
|
||||||
use lan_mouse_proto::{ProtoEvent, MAX_EVENT_SIZE};
|
use lan_mouse_proto::{MAX_EVENT_SIZE, ProtoEvent};
|
||||||
use local_channel::mpsc::{channel, Receiver, Sender};
|
use local_channel::mpsc::{Receiver, Sender, channel};
|
||||||
use rustls::pki_types::CertificateDer;
|
use rustls::pki_types::CertificateDer;
|
||||||
use std::{
|
use std::{
|
||||||
collections::{HashMap, VecDeque},
|
collections::{HashMap, VecDeque},
|
||||||
@@ -12,7 +12,7 @@ use std::{
|
|||||||
use thiserror::Error;
|
use thiserror::Error;
|
||||||
use tokio::{
|
use tokio::{
|
||||||
sync::Mutex as AsyncMutex,
|
sync::Mutex as AsyncMutex,
|
||||||
task::{spawn_local, JoinHandle},
|
task::{JoinHandle, spawn_local},
|
||||||
};
|
};
|
||||||
use webrtc_dtls::{
|
use webrtc_dtls::{
|
||||||
config::{ClientAuthType::RequireAnyClientCert, Config, ExtendedMasterSecretType},
|
config::{ClientAuthType::RequireAnyClientCert, Config, ExtendedMasterSecretType},
|
||||||
@@ -20,7 +20,7 @@ use webrtc_dtls::{
|
|||||||
crypto::Certificate,
|
crypto::Certificate,
|
||||||
listener::listen,
|
listener::listen,
|
||||||
};
|
};
|
||||||
use webrtc_util::{conn::Listener, Conn, Error};
|
use webrtc_util::{Conn, Error, conn::Listener};
|
||||||
|
|
||||||
use crate::crypto;
|
use crate::crypto;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user