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
impl Hook
Sourcepub fn start(
cb: impl Fn(MouseEvent) -> EventDisposition + Send + Sync + 'static,
) -> Result<Self, HookError>
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.
Sourcepub fn stop(self)
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.
Sourcepub fn has_accessibility() -> bool
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.
Sourcepub fn prompt_accessibility()
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.