Action release handlers (#8782)

This PR adds support for handling action releases — events that
are fired when the user releases all the modifier keys that were part of
an action-triggering shortcut.

If the user holds modifiers and invokes several actions sequentially via
shortcuts (same or different), only the last action is "released" when
its modifier keys released.

~The following methods were added to `Div`:~
- ~`capture_action_release()`~
- ~`on_action_release()`~
- ~`on_boxed_action_release()`~

~They work similarly to `capture_action()`, `on_action()` and
`on_boxed_action()`.~

See the implementation details in [this
comment](https://github.com/zed-industries/zed/pull/8782#issuecomment-2009154646).

Release Notes:

- Added a fast-switch mode to the file finder: hit `p` or `shift-p`
while holding down `cmd` to select a file immediately. (#8258).

Related Issues:

- Implements #8757 
- Implements #8258
- Part of #7653 

Co-authored-by: @ConradIrwin
This commit is contained in:
Andrew Lygin 2024-03-21 03:43:31 +03:00 committed by GitHub
parent 91ab95ec82
commit 5602c48136
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 260 additions and 31 deletions

View file

@ -229,4 +229,13 @@ impl Modifiers {
..Default::default()
}
}
/// Checks if this Modifiers is a subset of another Modifiers
pub fn is_subset_of(&self, other: &Modifiers) -> bool {
(other.control || !self.control)
&& (other.alt || !self.alt)
&& (other.shift || !self.shift)
&& (other.command || !self.command)
&& (other.function || !self.function)
}
}