summaryrefslogtreecommitdiffstats
path: root/widget/src
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 /widget/src
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
Diffstat (limited to '')
-rw-r--r--widget/src/combo_box.rs43
1 files changed, 34 insertions, 9 deletions
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);
}