Skip to main content

Hook

Struct Hook 

Source
pub struct Hook { /* private fields */ }
Expand description

A running OS-level mouse hook. Call Hook::stop to tear down.

Internally on macOS, a dedicated std::thread runs a CFRunLoop that drains the CGEventTap queue. stop signals that run loop and joins the thread so the process exits cleanly. Dropping a Hook without calling stop has the same effect via Drop.

Implementations§

Source§

impl Hook

Source

pub fn start( cb: impl Fn(MouseEvent) -> EventDisposition + Send + Sync + 'static, ) -> Result<Self, HookError>

Install the mouse hook and start delivering events to cb.

The callback runs on a private background thread (not the GPUI thread) for every mouse button or scroll event at the OS HID tap. It must return EventDisposition quickly — blocking it stalls input delivery system-wide.

On macOS, returns HookError::AccessibilityDenied when the process has not been granted Accessibility permission. On Linux and Windows, returns HookError::Unsupported.

Source

pub fn stop(self)

Stop the hook and release OS resources.

Signals the background run loop to exit and blocks until the thread joins. Calling this explicitly is preferred over relying on Drop when errors in cleanup should be visible. Drop calls this automatically.

Source

pub fn has_accessibility() -> bool

Returns true when the process has the macOS Accessibility entitlement required to install an active CGEventTap.

On Linux and Windows this always returns true; those platforms handle permissions at a higher layer.

Source

pub fn prompt_accessibility()

Show the macOS Accessibility permission dialog and register this process in System Settings → Privacy & Security → Accessibility.

Unlike Self::has_accessibility, this passes the kAXTrustedCheckOptionPrompt option, so macOS surfaces the native “open System Settings” dialog the first time and lists the app there (otherwise the user would have to add the binary by hand). Called for its side effect; the resulting trust state is observed separately via Self::has_accessibility. No-op on non-macOS.

Trait Implementations§

Source§

impl Drop for Hook

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more

Auto Trait Implementations§

§

impl Freeze for Hook

§

impl RefUnwindSafe for Hook

§

impl Send for Hook

§

impl Sync for Hook

§

impl Unpin for Hook

§

impl UnsafeUnpin for Hook

§

impl UnwindSafe for Hook

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more