struct HookContext {
state: Arc<AppState>,
source_label: String,
dragged_label: String,
tab_id: String,
source_ws_id: String,
dest_ws_id: String,
original_tab_index: usize,
was_pinned: bool,
current_target: RefCell<Option<String>>,
finalized: RefCell<bool>,
}Fields§
§state: Arc<AppState>§source_label: StringLabel of the source window (the one the tab originated from).
Used to skip self-detection during cursor tracking, and as the
destination for the tearoff:finalize event.
dragged_label: StringLabel of the dragged-window-now-following-the-cursor. Also excluded from candidate detection — landing on the dragged window’s own strip would be a no-op.
tab_id: StringThe tab being torn off. Echoed back in the finalize payload so the source frontend doesn’t have to track per-drag state.
source_ws_id: StringSource workspace ID. Echoed back so the frontend can call
MoveTabToWorkspace from a different window context if needed.
dest_ws_id: StringDestination workspace ID (the new workspace TearOffTab created).
Cancel-back uses this as the fromWsId when restoring.
original_tab_index: usizePhase 5 — tab’s original index in the source workspace at the
moment of tear-off. Used by cancel-back (ESC or drop on source
strip) to reinsert the tab where it was, not at the end.
Index is into pinnedtabids if was_pinned, else into tabids.
was_pinned: boolPhase 5 — true if the tab was pinned in its source workspace.
Threaded through to the cancel-back payload so the backend can
restore into pinnedtabids and preserve pinned status. Without
this, a pinned tab torn off + cancel-backed would silently
come back unpinned. (gemini PR #567 round-6 MEDIUM)
current_target: RefCell<Option<String>>Last-known candidate target label, or None when over a non- AgentMux window or the desktop. Used to emit hover-clear events when the cursor leaves a candidate.
finalized: RefCell<bool>Set true the moment a finalisation event has been emitted (cancel-back via ESC, merge, or standalone). Subsequent hook callbacks bail without emitting — without this guard, a post-ESC mouseup would fire a second redundant event.
Auto Trait Implementations§
impl !Freeze for HookContext
impl !RefUnwindSafe for HookContext
impl Send for HookContext
impl !Sync for HookContext
impl Unpin for HookContext
impl !UnwindSafe for HookContext
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T, U> ConvertReturnValue<U> for Twhere
T: Into<U>,
impl<T, U> ConvertReturnValue<U> for Twhere
T: Into<U>,
fn wrap_result(self) -> U
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.