Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
141 commits
Select commit Hold shift + click to select a range
ee85011
Introducing the new `KeyEvent` and renaming old stuff
ArturKovacs Nov 14, 2020
4b41fbd
Implemented physical_key on Windows
ArturKovacs Nov 15, 2020
2d9e144
Ran cargo fmt
ArturKovacs Nov 15, 2020
355692f
Progress with the keyboard's windows implementation
ArturKovacs Dec 5, 2020
62bbb46
Add proper handling of dead keys
ArturKovacs Nov 26, 2020
e6f4f37
Add translation for non-printable virtual keys
ArturKovacs Nov 28, 2020
edde42f
Run `cargo fmt`
ArturKovacs Nov 28, 2020
d851d17
Fix for AltGraph not being reported
ArturKovacs Nov 28, 2020
c9c648b
Synthesize key events when focus enters or leaves
ArturKovacs Dec 4, 2020
3ea6d14
Minor improvements
ArturKovacs Dec 5, 2020
3442c5d
Remove obsolete API
ArturKovacs Dec 5, 2020
68d229c
Fix numlock and pause not being reported correctly
ArturKovacs Dec 5, 2020
e25f35e
Ran `cargo fmt`
ArturKovacs Dec 5, 2020
ad9bf98
Fix numpad keys being reported incorrectly
ArturKovacs Dec 5, 2020
458c1be
Update examples
ArturKovacs Dec 5, 2020
217789a
Ran `cargo fmt`
ArturKovacs Dec 5, 2020
936dba8
Add documentation for `ScanCode`
ArturKovacs Dec 20, 2020
75b16a9
Add key binding example
ArturKovacs Dec 20, 2020
7bbd122
Use consistent modifier key names #1343
ArturKovacs Jan 2, 2021
e469a97
WONT COMPILE transitioning to new keyboard API
ArturKovacs Jan 3, 2021
2cb256d
WONT COMPILE Implement new keyboard layout preparation
ArturKovacs Jan 4, 2021
a94c3d8
WONT COMPILE new keyboard API progress
ArturKovacs Jan 5, 2021
ff2d7aa
Main compile errors fixed for keyboard
ArturKovacs Jan 7, 2021
eedf78e
Fix bugs in new keyboard handling
ArturKovacs Jan 8, 2021
7b67bbd
Remove obsolete code
ArturKovacs Jan 9, 2021
86f0da8
Fix examples
ArturKovacs Jan 9, 2021
bafaa9a
Merge branch 'master' into new-keyboard
ArturKovacs Jan 9, 2021
f4a3ee9
Ran `cargo fmt`
ArturKovacs Jan 9, 2021
0d43977
Fix build error with serde
ArturKovacs Jan 9, 2021
5d3b7b6
Ran `cargo fmt`
ArturKovacs Jan 9, 2021
1edbb63
Tweaks in the Windows keyboard implementation
ArturKovacs Jan 10, 2021
884e673
Add `KeyCodeExtScancode`
ArturKovacs Jan 10, 2021
5f5d87c
Add `reset_dead_keys`
ArturKovacs Jan 10, 2021
3226db1
Improve the documentation for `Key` and `KeyCode`
ArturKovacs Jan 10, 2021
b56abf1
Rename the meta key to super
ArturKovacs Jan 10, 2021
0527095
Address feedback for the keyboard API
ArturKovacs Jan 11, 2021
1ea30a7
Fix for rustdoc
ArturKovacs Jan 23, 2021
94eb458
Improve documentation
ArturKovacs Jan 23, 2021
9c3025d
Fix for arrow keys being reported as unidentified.
ArturKovacs Jan 23, 2021
d92a942
Fix media keys reporting Unidentified
ArturKovacs Jan 23, 2021
84a7ceb
Don't report text on key release events
ArturKovacs Jan 23, 2021
d3178b3
Fix for NumLock being reported as Pause in raw input
ArturKovacs Jan 23, 2021
76e7bca
Fix for strange behaviour around NumLock and Pause
ArturKovacs Jan 23, 2021
41855c9
Fix for NumLock being ineffective
ArturKovacs Jan 24, 2021
d99d6fc
Fix for location not being reported correctly
ArturKovacs Jan 24, 2021
3096e0e
`RawKeyEvent`s now report repeat
ArturKovacs Jan 24, 2021
37da87b
Don't report text for synthetic key releases
ArturKovacs Feb 4, 2021
1fbd967
Address feedback
ArturKovacs Feb 4, 2021
f857190
Filter `Unidentified` from PrtSc key device events
ArturKovacs Feb 6, 2021
ee21163
Don't report incorrect `RawKeyEvent` for shift + numpad
ArturKovacs Feb 6, 2021
df1a48d
AltGraph is not reported again
ArturKovacs Feb 6, 2021
c3e4f48
Document Windows specific behaviour for shift+numpad
ArturKovacs Feb 6, 2021
76c1ab3
Fix typo
ArturKovacs Feb 14, 2021
61775c1
Dead keys now affect characters from logical_key
ArturKovacs Feb 14, 2021
72e36b5
Prevent Pause and NumLock mappings in window events
ArturKovacs Feb 14, 2021
98246b9
Apply suggestions from code review
ArturKovacs Feb 15, 2021
37f696d
Merge branch 'new-keyboard' of https://github.com/ArturKovacs/winit i…
ArturKovacs Feb 15, 2021
0aa46fd
Ran `cargo fmt`
ArturKovacs Feb 15, 2021
ea98471
Add W3C license for `Key` and `KeyCode`
ArturKovacs Feb 15, 2021
3a94735
Extend documentation according to feedback
ArturKovacs Feb 16, 2021
70b2d6e
Ignore NumLock in `key_without_modifiers`
ArturKovacs Feb 20, 2021
0717b08
Remove unused `key_code_to_non_char_key`
ArturKovacs Feb 20, 2021
ba0bf1f
Merge branch 'master' into new-keyboard
ArturKovacs Feb 20, 2021
c88bf3d
Remove empty event.rs file
ArturKovacs Feb 20, 2021
8538486
Use space for resetting dead keys
ArturKovacs Feb 20, 2021
15cfca1
Fix reporting multiple graphemes in logical_key
ArturKovacs Feb 20, 2021
13bf3cd
Avoid incorrect synthetic keypress during setfocus
ArturKovacs Feb 28, 2021
57d550a
Fixed the AltGr keypress not being reported when the AltGr key is pre…
ArturKovacs Feb 28, 2021
0926ec7
Filter fake Ctrl events when pressing AltGr
ArturKovacs Feb 28, 2021
42055e3
Improve code quality
ArturKovacs Mar 3, 2021
c02a001
Get stuff to compile
maroider Mar 19, 2021
fd2e1ac
WIP
maroider Mar 19, 2021
46aa80a
Add some keysym mappings and move the keymap.rs file
maroider Mar 28, 2021
f13a00e
Add key location and some minor corrections
maroider Mar 29, 2021
fe38f4f
Use xkbcommon-dl rather than xkbcommon
maroider Mar 29, 2021
0369b41
Hoist keyboard handling code from sctk into Winit
maroider Mar 31, 2021
423e184
Wire up the new events properly
maroider Apr 1, 2021
2f1114f
Fix creation of key value strings
maroider Apr 1, 2021
228d1ec
Add missing keysym mapping
maroider Apr 1, 2021
7f77359
Fix `key_without_modifiers`
maroider Apr 1, 2021
61b8956
Feature-gate things which depend on memmap2
maroider Apr 1, 2021
bdde8df
Be more consistent with what `keycode` means
maroider Apr 1, 2021
3aea36f
Wire up Wayland IME again
maroider Apr 1, 2021
663969c
Improve key string handling
maroider Apr 1, 2021
03c8b0d
Remove `repeat` from `RawKeyEvent`
ArturKovacs Apr 1, 2021
166d79e
Allow fractional scroll in raw mouse events
ArturKovacs Apr 12, 2021
766c7dc
Fix typo
ArturKovacs Apr 12, 2021
37dae30
Remove unused imports
ArturKovacs Apr 12, 2021
a52f86d
Merge branch 'new-keyboard' of https://github.com/ArturKovacs/winit i…
ArturKovacs Apr 12, 2021
f0474f2
Remove unused variable
ArturKovacs Apr 12, 2021
48d43da
Merge branch 'new-keyboard' into new-keyboard-linux
maroider Apr 23, 2021
2183ea5
Remove usage of `RawKeyEvent.repeat`
maroider Apr 23, 2021
f4eb8b3
Add initial X11 support
maroider Apr 24, 2021
43e7faa
Improve debug printing of `NativeKeyCode`
maroider Apr 24, 2021
ab17bc1
New keyboard API for Windows (#1788)
ArturKovacs Apr 25, 2021
8f877dc
Merge branch 'new-keyboard' into new-keyboard-linux
maroider Apr 25, 2021
6d7cf96
Address compilation errors
maroider Apr 25, 2021
47f936b
Hook up X11 XKB modifier keys
maroider Apr 28, 2021
299f0a8
Use XInput2 for regular key events
maroider May 1, 2021
bd03ac8
Implement dead-key handling
maroider May 7, 2021
fbed8d2
Remove unused module
maroider May 7, 2021
25b3e2d
Merge branch 'master' into new-keyboard-2
ArturKovacs May 9, 2021
1ef0b49
Fix the `drag_window` example
ArturKovacs May 9, 2021
3cde525
Update xkbcommon-dl
ArturKovacs May 10, 2021
d0351ae
Update xkbcommon-dl again
maroider May 16, 2021
98e95ac
Remove accidentally included attribute
maroider May 16, 2021
26349eb
Use `as u32` to cast `i32`s to `u32`s
maroider May 16, 2021
1fabfa7
Put more things behind the "wayland" feature
maroider May 16, 2021
f86c5e9
Remove superfluous scope
maroider May 16, 2021
416d8ee
Separate out loading of the X11 keymap
maroider Jun 16, 2021
771e58e
Merge branch 'new-keyboard' into new-keyboard-linux
maroider Jun 16, 2021
7b5a309
Wire up X11 IME support
maroider Jun 16, 2021
9486ac0
Use the currently active keyboard layout on X11
ArturKovacs Jul 4, 2021
ce2cdad
fixup! Wire up X11 IME support
maroider Jul 4, 2021
575f4c9
Enable keysym mapping for "Alt Graph"
maroider Aug 3, 2021
e14070e
Actually respect keyboard layout changes
maroider Aug 4, 2021
965148b
Make `xkb_state` more internally consistent
maroider Aug 5, 2021
a48f931
Improve the safety of `KbState`
maroider Aug 5, 2021
4c1e419
Make a decision on control characters and dead keys
maroider Aug 5, 2021
cded210
Store keycodes with X11's keycode offset
maroider Aug 5, 2021
3f2509b
Log an error if we can't select XKB events
maroider Aug 5, 2021
c17707d
Remove superfluous call to `Vec::set_len`
maroider Aug 5, 2021
2ad1829
Revert change to the `window_icon` example
maroider Aug 5, 2021
d1752c4
Send a warning if the server doesn't send a keymap
maroider Aug 11, 2021
413fd17
Implement `KeyCodeExtScancode` on Wayland and X11
maroider Aug 24, 2021
bd7793c
Implement `reset_dead_keys` (poorly)
maroider Aug 24, 2021
2d78be1
Split the native XKB keycode enum variant in two
maroider Sep 9, 2021
3ae1593
Add a TODO regarding the `ModifiersChanged` event.
maroider Sep 9, 2021
9fea819
fix: meta mod key on focus handling for gnome/x11
rti Sep 9, 2021
ea59172
Remove the `XkbStateNotify` handler
maroider Oct 6, 2021
efdece5
X11: Only fetch virtual keyboard events from master devices
mahkoh Oct 21, 2021
c48a68e
Merge pull request maroider/winit#1 from rti/fix-gnome-x11-meta-mod-f…
maroider Nov 17, 2021
03f12db
Merge pull request maroider/winit#5 from mahkoh/virtual-on-virtual
maroider Nov 17, 2021
1d6adf5
X11: Rewrite input handling in terms of XInput and XKB
mahkoh Oct 22, 2021
86039d8
X11: Implement reset_dead_keys
mahkoh Nov 23, 2021
31d6261
X11: Remove IME support
mahkoh Oct 22, 2021
21cc33c
X11: Port the backend from Xlib to XCB
mahkoh Nov 18, 2021
5eef772
X11: Expose native device ids
mahkoh Nov 16, 2021
816ad7d
X11: Fix set_minimized
mahkoh Nov 16, 2021
a6ab7d4
X11: Fix run_return
mahkoh Nov 23, 2021
6f91c74
X11: Preserve restore position when switching fullscreen modes
mahkoh Dec 1, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 12 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,9 @@ targets = ["i686-pc-windows-msvc", "x86_64-pc-windows-msvc", "i686-unknown-linux
default = ["x11", "wayland"]
web-sys = ["web_sys", "wasm-bindgen", "instant/wasm-bindgen"]
stdweb = ["std_web", "instant/stdweb"]
x11 = ["x11-dl", "mio", "mio-misc", "percent-encoding", "parking_lot"]
wayland = ["wayland-client", "sctk"]
x11 = ["mio", "mio-misc", "percent-encoding", "parking_lot", "xcb-dl", "xcb-dl-util", "thiserror"]
xlib = ["x11", "x11-dl"]
wayland = ["wayland-client", "sctk", "memmap2"]

[dependencies]
instant = "0.1"
Expand All @@ -31,6 +32,7 @@ log = "0.4"
serde = { version = "1", optional = true, features = ["serde_derive"] }
raw-window-handle = "0.3"
bitflags = "1"
nameof = "1"
mint = { version = "0.5.6", optional = true }

[dev-dependencies]
Expand Down Expand Up @@ -59,6 +61,7 @@ features = ["display_link"]

[target.'cfg(target_os = "windows")'.dependencies]
parking_lot = "0.11"
unicode-segmentation = "1.7.1"

[target.'cfg(target_os = "windows")'.dependencies.winapi]
version = "0.3.6"
Expand All @@ -82,6 +85,7 @@ features = [
"winerror",
"wingdi",
"winnt",
"winnls",
"winuser",
]

Expand All @@ -90,9 +94,14 @@ wayland-client = { version = "0.28", features = [ "dlopen"] , optional = true }
sctk = { package = "smithay-client-toolkit", version = "0.12.3", optional = true }
mio = { version = "0.7", features = ["os-ext"], optional = true }
mio-misc = { version = "1.0", optional = true }
x11-dl = { version = "2.18.5", optional = true }
xcb-dl = { version = "0.2.0", optional = true }
x11-dl = { version = "2.19.1", optional = true }
xcb-dl-util = { version = "0.2.0", features = ["xcb_xfixes", "xcb_xinput", "xcb_xkb", "xcb_render", "xcb_randr"], optional = true }
thiserror = { version = "1.0.30", optional = true }
percent-encoding = { version = "2.0", optional = true }
parking_lot = { version = "0.11.0", optional = true }
memmap2 = { version = "0.2.1", optional = true }
xkbcommon-dl = { git = "https://github.com/mahkoh/xkbcommon-dl", rev = "dd6a9033b1e45a2668700f14c2d47e48aeb3194f" }

[target.'cfg(target_arch = "wasm32")'.dependencies.web_sys]
package = "web-sys"
Expand Down
25 changes: 14 additions & 11 deletions examples/control_flow.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@ use std::{thread, time};

use simple_logger::SimpleLogger;
use winit::{
event::{Event, KeyboardInput, WindowEvent},
event::{ElementState, Event, KeyEvent, WindowEvent},
event_loop::{ControlFlow, EventLoop},
keyboard::Key,
window::WindowBuilder,
};

Expand Down Expand Up @@ -38,7 +39,7 @@ fn main() {
let mut close_requested = false;

event_loop.run(move |event, _, control_flow| {
use winit::event::{ElementState, StartCause, VirtualKeyCode};
use winit::event::StartCause;
println!("{:?}", event);
match event {
Event::NewEvents(start_cause) => {
Expand All @@ -52,31 +53,33 @@ fn main() {
close_requested = true;
}
WindowEvent::KeyboardInput {
input:
KeyboardInput {
virtual_keycode: Some(virtual_code),
event:
KeyEvent {
logical_key: key,
state: ElementState::Pressed,
..
},
..
} => match virtual_code {
VirtualKeyCode::Key1 => {
} => match key {
// WARNING: Consider using `key_without_modifers()` if available on your platform.
// See the `key_binding` example
Key::Character("1") => {
mode = Mode::Wait;
println!("\nmode: {:?}\n", mode);
}
VirtualKeyCode::Key2 => {
Key::Character("2") => {
mode = Mode::WaitUntil;
println!("\nmode: {:?}\n", mode);
}
VirtualKeyCode::Key3 => {
Key::Character("3") => {
mode = Mode::Poll;
println!("\nmode: {:?}\n", mode);
}
VirtualKeyCode::R => {
Key::Character("r") => {
request_redraw = !request_redraw;
println!("\nrequest_redraw: {}\n", request_redraw);
}
VirtualKeyCode::Escape => {
Key::Escape => {
close_requested = true;
}
_ => (),
Expand Down
6 changes: 3 additions & 3 deletions examples/cursor.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use simple_logger::SimpleLogger;
use winit::{
event::{ElementState, Event, KeyboardInput, WindowEvent},
event::{ElementState, Event, KeyEvent, WindowEvent},
event_loop::{ControlFlow, EventLoop},
window::{CursorIcon, WindowBuilder},
};
Expand All @@ -21,8 +21,8 @@ fn main() {
Event::WindowEvent {
event:
WindowEvent::KeyboardInput {
input:
KeyboardInput {
event:
KeyEvent {
state: ElementState::Pressed,
..
},
Expand Down
21 changes: 13 additions & 8 deletions examples/cursor_grab.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
use simple_logger::SimpleLogger;
use winit::{
event::{DeviceEvent, ElementState, Event, KeyboardInput, ModifiersState, WindowEvent},
event::{DeviceEvent, ElementState, Event, KeyEvent, WindowEvent},
event_loop::{ControlFlow, EventLoop},
keyboard::{Key, ModifiersState},
window::WindowBuilder,
};

Expand All @@ -23,19 +24,23 @@ fn main() {
Event::WindowEvent { event, .. } => match event {
WindowEvent::CloseRequested => *control_flow = ControlFlow::Exit,
WindowEvent::KeyboardInput {
input:
KeyboardInput {
event:
KeyEvent {
logical_key: key,
state: ElementState::Released,
virtual_keycode: Some(key),
..
},
..
} => {
use winit::event::VirtualKeyCode::*;
// WARNING: Consider using `key_without_modifers()` if available on your platform.
// See the `key_binding` example
match key {
Escape => *control_flow = ControlFlow::Exit,
G => window.set_cursor_grab(!modifiers.shift()).unwrap(),
H => window.set_cursor_visible(modifiers.shift()),
Key::Escape => *control_flow = ControlFlow::Exit,
Key::Character(ch) => match ch.to_lowercase().as_str() {
"g" => window.set_cursor_grab(!modifiers.shift_key()).unwrap(),
"h" => window.set_cursor_visible(modifiers.shift_key()),
_ => (),
},
_ => (),
}
}
Expand Down
11 changes: 5 additions & 6 deletions examples/drag_window.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
use simple_logger::SimpleLogger;
use winit::{
event::{
ElementState, Event, KeyboardInput, MouseButton, StartCause, VirtualKeyCode, WindowEvent,
},
event::{ElementState, Event, KeyEvent, MouseButton, StartCause, WindowEvent},
event_loop::{ControlFlow, EventLoop},
keyboard::Key,
window::{Window, WindowBuilder, WindowId},
};

Expand Down Expand Up @@ -43,10 +42,10 @@ fn main() {
name_windows(entered_id, switched, &window_1, &window_2)
}
WindowEvent::KeyboardInput {
input:
KeyboardInput {
event:
KeyEvent {
state: ElementState::Released,
virtual_keycode: Some(VirtualKeyCode::X),
logical_key: Key::Character("x"),
..
},
..
Expand Down
26 changes: 15 additions & 11 deletions examples/fullscreen.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
use std::io::{stdin, stdout, Write};

use simple_logger::SimpleLogger;
use winit::event::{ElementState, Event, KeyboardInput, VirtualKeyCode, WindowEvent};
use winit::event::{ElementState, Event, KeyEvent, WindowEvent};
use winit::event_loop::{ControlFlow, EventLoop};
use winit::keyboard::Key;
use winit::monitor::{MonitorHandle, VideoMode};
use winit::window::{Fullscreen, WindowBuilder};

Expand Down Expand Up @@ -38,30 +39,33 @@ fn main() {
Event::WindowEvent { event, .. } => match event {
WindowEvent::CloseRequested => *control_flow = ControlFlow::Exit,
WindowEvent::KeyboardInput {
input:
KeyboardInput {
virtual_keycode: Some(virtual_code),
state,
event:
KeyEvent {
logical_key: key,
state: ElementState::Pressed,
..
},
..
} => match (virtual_code, state) {
(VirtualKeyCode::Escape, _) => *control_flow = ControlFlow::Exit,
(VirtualKeyCode::F, ElementState::Pressed) => {
} => match key {
Key::Escape => *control_flow = ControlFlow::Exit,

// WARNING: Consider using `key_without_modifers()` if available on your platform.
// See the `key_binding` example
Key::Character("f") => {
if window.fullscreen().is_some() {
window.set_fullscreen(None);
} else {
window.set_fullscreen(fullscreen.clone());
}
}
(VirtualKeyCode::S, ElementState::Pressed) => {
Key::Character("s") => {
println!("window.fullscreen {:?}", window.fullscreen());
}
(VirtualKeyCode::M, ElementState::Pressed) => {
Key::Character("m") => {
let is_maximized = window.is_maximized();
window.set_maximized(!is_maximized);
}
(VirtualKeyCode::D, ElementState::Pressed) => {
Key::Character("d") => {
decorations = !decorations;
window.set_decorations(decorations);
}
Expand Down
23 changes: 11 additions & 12 deletions examples/handling_close.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
use simple_logger::SimpleLogger;
use winit::{
event::{Event, KeyboardInput, WindowEvent},
event::{ElementState, Event, KeyEvent, WindowEvent},
event_loop::{ControlFlow, EventLoop},
keyboard::Key,
window::WindowBuilder,
};

Expand All @@ -17,10 +18,6 @@ fn main() {
let mut close_requested = false;

event_loop.run(move |event, _, control_flow| {
use winit::event::{
ElementState::Released,
VirtualKeyCode::{N, Y},
};
*control_flow = ControlFlow::Wait;

match event {
Expand All @@ -44,16 +41,18 @@ fn main() {
// the Y key.
}
WindowEvent::KeyboardInput {
input:
KeyboardInput {
virtual_keycode: Some(virtual_code),
state: Released,
event:
KeyEvent {
logical_key: key,
state: ElementState::Released,
..
},
..
} => {
match virtual_code {
Y => {
// WARNING: Consider using `key_without_modifers()` if available on your platform.
// See the `key_binding` example
match key {
Key::Character("y") => {
if close_requested {
// This is where you'll want to do any cleanup you need.
println!("Buh-bye!");
Expand All @@ -66,7 +65,7 @@ fn main() {
*control_flow = ControlFlow::Exit;
}
}
N => {
Key::Character("n") => {
if close_requested {
println!("Your window will continue to stay by your side.");
close_requested = false;
Expand Down
58 changes: 58 additions & 0 deletions examples/key_binding.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
use simple_logger::SimpleLogger;
use winit::{
dpi::LogicalSize,
event::{ElementState, Event, KeyEvent, WindowEvent},
event_loop::{ControlFlow, EventLoop},
keyboard::{Key, ModifiersState},
window::WindowBuilder,
};

/////////////////////////////////////////////////////////////////////////////
// WARNING: This is not available on all platforms (for example on the web).
use winit::platform::modifier_supplement::KeyEventExtModifierSupplement;
/////////////////////////////////////////////////////////////////////////////

fn main() {
SimpleLogger::new().init().unwrap();
let event_loop = EventLoop::new();

let _window = WindowBuilder::new()
.with_inner_size(LogicalSize::new(400.0, 200.0))
.build(&event_loop)
.unwrap();

let mut modifiers = ModifiersState::default();

event_loop.run(move |event, _, control_flow| {
*control_flow = ControlFlow::Wait;

match event {
Event::WindowEvent { event, .. } => match event {
WindowEvent::CloseRequested => *control_flow = ControlFlow::Exit,
WindowEvent::ModifiersChanged(new_state) => {
modifiers = new_state;
}
WindowEvent::KeyboardInput { event, .. } => {
handle_key_event(modifiers, event);
}
_ => (),
},
_ => (),
};
});
}

fn handle_key_event(modifiers: ModifiersState, event: KeyEvent) {
if event.state == ElementState::Pressed && !event.repeat {
match event.key_without_modifiers() {
Key::Character("1") => {
if modifiers.shift_key() {
println!("Shift + 1 | logical_key: {:?}", event.logical_key);
} else {
println!("1");
}
}
_ => (),
}
}
}
12 changes: 8 additions & 4 deletions examples/minimize.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
extern crate winit;

use simple_logger::SimpleLogger;
use winit::event::{Event, VirtualKeyCode, WindowEvent};

use winit::event::{Event, WindowEvent};
use winit::event_loop::{ControlFlow, EventLoop};
use winit::keyboard::Key;
use winit::window::WindowBuilder;

fn main() {
Expand All @@ -25,12 +27,14 @@ fn main() {

// Keyboard input event to handle minimize via a hotkey
Event::WindowEvent {
event: WindowEvent::KeyboardInput { input, .. },
event: WindowEvent::KeyboardInput { event, .. },
window_id,
} => {
if window_id == window.id() {
// Pressing the 'M' key will minimize the window
if input.virtual_keycode == Some(VirtualKeyCode::M) {
// Pressing the 'm' key will minimize the window
// WARNING: Consider using `key_without_modifers()` if available on your platform.
// See the `key_binding` example
if let Key::Character("m") = event.logical_key {
window.set_minimized(true);
}
}
Expand Down
Loading