summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón <hector0193@gmail.com>2023-08-02 22:27:38 +0200
committerLibravatar GitHub <noreply@github.com>2023-08-02 22:27:38 +0200
commit1b355f528a95e9d12cc2c3f9349715514d0b9d63 (patch)
treec863a0fe79793b03e885f20e831ce45678db9cd0
parentf7ca420817a2d3f892534bc7bd21f74ed77132e2 (diff)
parent983764db6a65cad673d35d3112145a8e40e82be0 (diff)
downloadiced-1b355f528a95e9d12cc2c3f9349715514d0b9d63.tar.gz
iced-1b355f528a95e9d12cc2c3f9349715514d0b9d63.tar.bz2
iced-1b355f528a95e9d12cc2c3f9349715514d0b9d63.zip
Merge pull request #1991 from casperstorm/feat/comobox-cycle
cycle `combo_box` with keybinds
-rw-r--r--CHANGELOG.md1
-rw-r--r--widget/src/combo_box.rs43
2 files changed, 35 insertions, 9 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c94c5de3..b2ffbed4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -41,6 +41,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Nix instructions to `DEPENDENCIES.md`. [#1859](https://github.com/iced-rs/iced/pull/1859)
- Loading spinners example. [#1902](https://github.com/iced-rs/iced/pull/1902)
- Workflow that verifies `CHANGELOG` is always up-to-date. [#1970](https://github.com/iced-rs/iced/pull/1970)
+- Keybinds to cycle `ComboBox` options. [#1991](https://github.com/iced-rs/iced/pull/1991)
### Changed
- Updated `wgpu` to `0.16`. [#1807](https://github.com/iced-rs/iced/pull/1807)
diff --git a/widget/src/combo_box.rs b/widget/src/combo_box.rs
index 93fc92b9..5e36ec57 100644
--- a/widget/src/combo_box.rs
+++ b/widget/src/combo_box.rs
@@ -468,11 +468,13 @@ where
if let Event::Keyboard(keyboard::Event::KeyPressed {
key_code,
+ modifiers,
..
}) = event
{
- match key_code {
- keyboard::KeyCode::Enter => {
+ let shift_modifer = modifiers.shift();
+ match (key_code, shift_modifer) {
+ (keyboard::KeyCode::Enter, _) => {
if let Some(index) = &menu.hovered_option {
if let Some(option) =
state.filtered_options.options.get(*index)
@@ -483,9 +485,19 @@ where
event_status = event::Status::Captured;
}
- keyboard::KeyCode::Up => {
+
+ (keyboard::KeyCode::Up, _)
+ | (keyboard::KeyCode::Tab, true) => {
if let Some(index) = &mut menu.hovered_option {
- *index = index.saturating_sub(1);
+ if *index == 0 {
+ *index = state
+ .filtered_options
+ .options
+ .len()
+ .saturating_sub(1);
+ } else {
+ *index = index.saturating_sub(1);
+ }
} else {
menu.hovered_option = Some(0);
}
@@ -511,15 +523,28 @@ where
event_status = event::Status::Captured;
}
- keyboard::KeyCode::Down => {
+ (keyboard::KeyCode::Down, _)
+ | (keyboard::KeyCode::Tab, false)
+ if !modifiers.shift() =>
+ {
if let Some(index) = &mut menu.hovered_option {
- *index = index.saturating_add(1).min(
- state
+ if *index
+ >= state
.filtered_options
.options
.len()
- .saturating_sub(1),
- );
+ .saturating_sub(1)
+ {
+ *index = 0;
+ } else {
+ *index = index.saturating_add(1).min(
+ state
+ .filtered_options
+ .options
+ .len()
+ .saturating_sub(1),
+ );
+ }
} else {
menu.hovered_option = Some(0);
}