From 938ef8dbd6763b95c6cae469f1564106fa9d8c6b Mon Sep 17 00:00:00 2001 From: Kirill Chibisov Date: Tue, 7 Jun 2022 21:12:50 +0300 Subject: [PATCH] Run clippy on CI Fixes #1402. --- .github/workflows/ci.yml | 11 +- examples/fullscreen.rs | 7 +- examples/handling_close.rs | 91 ++++++++-------- examples/min_max_size.rs | 12 +-- examples/mouse_wheel.rs | 7 +- examples/multithreaded.rs | 8 +- examples/multiwindow.rs | 43 ++++---- examples/request_redraw_threaded.rs | 7 +- examples/resizable.rs | 9 +- examples/transparent.rs | 12 +-- examples/web.rs | 1 + examples/window_debug.rs | 102 +++++++++--------- src/event_loop.rs | 8 ++ src/lib.rs | 3 + src/platform_impl/android/mod.rs | 9 +- src/platform_impl/ios/app_state.rs | 47 ++++---- src/platform_impl/ios/event_loop.rs | 2 +- src/platform_impl/ios/ffi.rs | 17 ++- src/platform_impl/ios/mod.rs | 5 +- src/platform_impl/ios/monitor.rs | 6 +- src/platform_impl/ios/view.rs | 42 ++++---- src/platform_impl/ios/window.rs | 50 ++++----- src/platform_impl/linux/mod.rs | 15 +-- src/platform_impl/linux/wayland/output.rs | 2 +- .../linux/wayland/seat/pointer/handlers.rs | 16 +-- .../linux/wayland/seat/pointer/mod.rs | 2 +- .../linux/wayland/window/shim.rs | 3 +- .../linux/x11/event_processor.rs | 76 ++++++------- src/platform_impl/linux/x11/ime/context.rs | 10 +- src/platform_impl/linux/x11/mod.rs | 17 ++- src/platform_impl/linux/x11/monitor.rs | 4 +- src/platform_impl/linux/x11/util/geometry.rs | 12 ++- src/platform_impl/linux/x11/util/hint.rs | 8 +- src/platform_impl/linux/x11/util/icon.rs | 2 + src/platform_impl/linux/x11/util/randr.rs | 8 +- src/platform_impl/linux/x11/util/wm.rs | 4 +- src/platform_impl/macos/app_state.rs | 2 +- src/platform_impl/macos/event_loop.rs | 6 +- src/platform_impl/macos/mod.rs | 1 + src/platform_impl/macos/util/async.rs | 1 - src/platform_impl/macos/util/mod.rs | 6 +- src/platform_impl/macos/view.rs | 18 ++-- src/platform_impl/macos/window.rs | 6 +- src/platform_impl/macos/window_delegate.rs | 13 +-- src/platform_impl/web/event_loop/mod.rs | 2 +- src/platform_impl/web/event_loop/runner.rs | 7 +- src/platform_impl/web/event_loop/state.rs | 5 +- src/platform_impl/web/web_sys/canvas.rs | 14 ++- .../web/web_sys/canvas/mouse_handler.rs | 8 +- .../web/web_sys/media_query_handle.rs | 2 +- src/platform_impl/web/web_sys/mod.rs | 2 +- src/platform_impl/web/web_sys/scaling.rs | 4 +- src/platform_impl/web/web_sys/timeout.rs | 4 +- src/platform_impl/web/window.rs | 10 +- src/platform_impl/windows/event_loop.rs | 2 +- src/platform_impl/windows/ime.rs | 15 ++- src/window.rs | 6 +- 57 files changed, 407 insertions(+), 405 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 10eabd8f74c..218f49cd3ec 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,7 +6,8 @@ on: branches: [master] jobs: - Check_Formatting: + check-formatting: + name: Check formatting runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 @@ -17,7 +18,8 @@ jobs: - name: Check Formatting run: cargo +stable fmt --all -- --check - Tests: + tests: + name: Tests strategy: fail-fast: false matrix: @@ -62,6 +64,7 @@ jobs: with: rust-version: ${{ matrix.rust_version }}${{ matrix.platform.host }} targets: ${{ matrix.platform.target }} + components: clippy - name: Install Linux dependencies if: (matrix.platform.os == 'ubuntu-latest') @@ -93,6 +96,10 @@ jobs: !contains(matrix.platform.target, 'wasm32')) run: cargo $CMD test --verbose --target ${{ matrix.platform.target }} $OPTIONS --features $FEATURES + - name: Lint with clippy + shell: bash + if: matrix.rust_version != 'nightly' + run: echo $FEATURES && cargo clippy --all-targets --target ${{ matrix.platform.target }} $OPTIONS --features $FEATURES - name: Build with serde enabled shell: bash diff --git a/examples/fullscreen.rs b/examples/fullscreen.rs index b5a9ebb2de2..6300a8a7955 100644 --- a/examples/fullscreen.rs +++ b/examples/fullscreen.rs @@ -34,8 +34,8 @@ fn main() { event_loop.run(move |event, _, control_flow| { control_flow.set_wait(); - match event { - Event::WindowEvent { event, .. } => match event { + if let Event::WindowEvent { event, .. } = event { + match event { WindowEvent::CloseRequested => control_flow.set_exit(), WindowEvent::KeyboardInput { input: @@ -68,8 +68,7 @@ fn main() { _ => (), }, _ => (), - }, - _ => {} + } } }); } diff --git a/examples/handling_close.rs b/examples/handling_close.rs index 2fd2d084b7f..173774249b4 100644 --- a/examples/handling_close.rs +++ b/examples/handling_close.rs @@ -23,62 +23,59 @@ fn main() { }; control_flow.set_wait(); - match event { - Event::WindowEvent { event, .. } => { - match event { - WindowEvent::CloseRequested => { - // `CloseRequested` is sent when the close button on the window is pressed (or - // through whatever other mechanisms the window manager provides for closing a - // window). If you don't handle this event, the close button won't actually do - // anything. + if let Event::WindowEvent { event, .. } = event { + match event { + WindowEvent::CloseRequested => { + // `CloseRequested` is sent when the close button on the window is pressed (or + // through whatever other mechanisms the window manager provides for closing a + // window). If you don't handle this event, the close button won't actually do + // anything. - // A common thing to do here is prompt the user if they have unsaved work. - // Creating a proper dialog box for that is far beyond the scope of this - // example, so here we'll just respond to the Y and N keys. - println!("Are you ready to bid your window farewell? [Y/N]"); - close_requested = true; + // A common thing to do here is prompt the user if they have unsaved work. + // Creating a proper dialog box for that is far beyond the scope of this + // example, so here we'll just respond to the Y and N keys. + println!("Are you ready to bid your window farewell? [Y/N]"); + close_requested = true; - // In applications where you can safely close the window without further - // action from the user, this is generally where you'd handle cleanup before - // closing the window. How to close the window is detailed in the handler for - // the Y key. - } - WindowEvent::KeyboardInput { - input: - KeyboardInput { - virtual_keycode: Some(virtual_code), - state: Released, - .. - }, - .. - } => { - match virtual_code { - Y => { - if close_requested { - // This is where you'll want to do any cleanup you need. - println!("Buh-bye!"); + // In applications where you can safely close the window without further + // action from the user, this is generally where you'd handle cleanup before + // closing the window. How to close the window is detailed in the handler for + // the Y key. + } + WindowEvent::KeyboardInput { + input: + KeyboardInput { + virtual_keycode: Some(virtual_code), + state: Released, + .. + }, + .. + } => { + match virtual_code { + Y => { + if close_requested { + // This is where you'll want to do any cleanup you need. + println!("Buh-bye!"); - // For a single-window application like this, you'd normally just - // break out of the event loop here. If you wanted to keep running the - // event loop (i.e. if it's a multi-window application), you need to - // drop the window. That closes it, and results in `Destroyed` being - // sent. - control_flow.set_exit(); - } + // For a single-window application like this, you'd normally just + // break out of the event loop here. If you wanted to keep running the + // event loop (i.e. if it's a multi-window application), you need to + // drop the window. That closes it, and results in `Destroyed` being + // sent. + control_flow.set_exit(); } - N => { - if close_requested { - println!("Your window will continue to stay by your side."); - close_requested = false; - } + } + N => { + if close_requested { + println!("Your window will continue to stay by your side."); + close_requested = false; } - _ => (), } + _ => (), } - _ => (), } + _ => (), } - _ => (), } }); } diff --git a/examples/min_max_size.rs b/examples/min_max_size.rs index 56877999e0b..1973b0c8469 100644 --- a/examples/min_max_size.rs +++ b/examples/min_max_size.rs @@ -19,12 +19,12 @@ fn main() { control_flow.set_wait(); println!("{:?}", event); - match event { - Event::WindowEvent { - event: WindowEvent::CloseRequested, - .. - } => control_flow.set_exit(), - _ => (), + if let Event::WindowEvent { + event: WindowEvent::CloseRequested, + .. + } = event + { + control_flow.set_exit() } }); } diff --git a/examples/mouse_wheel.rs b/examples/mouse_wheel.rs index d6e665b1a28..9e063586dea 100644 --- a/examples/mouse_wheel.rs +++ b/examples/mouse_wheel.rs @@ -32,8 +32,8 @@ In other words, the deltas indicate the direction in which to move the content ( event_loop.run(move |event, _, control_flow| { control_flow.set_wait(); - match event { - Event::WindowEvent { event, .. } => match event { + if let Event::WindowEvent { event, .. } = event { + match event { WindowEvent::CloseRequested => control_flow.set_exit(), WindowEvent::MouseWheel { delta, .. } => match delta { winit::event::MouseScrollDelta::LineDelta(x, y) => { @@ -53,8 +53,7 @@ In other words, the deltas indicate the direction in which to move the content ( } }, _ => (), - }, - _ => (), + } } }); } diff --git a/examples/multithreaded.rs b/examples/multithreaded.rs index 9ed28cdbd69..40eb5f3d42f 100644 --- a/examples/multithreaded.rs +++ b/examples/multithreaded.rs @@ -147,8 +147,9 @@ fn main() { true => control_flow.set_wait(), false => control_flow.set_exit(), }; - match event { - Event::WindowEvent { event, window_id } => match event { + + if let Event::WindowEvent { event, window_id } = event { + match event { WindowEvent::CloseRequested | WindowEvent::Destroyed | WindowEvent::KeyboardInput { @@ -169,8 +170,7 @@ fn main() { } } } - }, - _ => {} + } } }) } diff --git a/examples/multiwindow.rs b/examples/multiwindow.rs index c6bff90afc1..34f783d2fac 100644 --- a/examples/multiwindow.rs +++ b/examples/multiwindow.rs @@ -20,34 +20,31 @@ fn main() { event_loop.run(move |event, event_loop, control_flow| { control_flow.set_wait(); - match event { - Event::WindowEvent { event, window_id } => { - match event { - WindowEvent::CloseRequested => { - println!("Window {:?} has received the signal to close", window_id); + if let Event::WindowEvent { event, window_id } = event { + match event { + WindowEvent::CloseRequested => { + println!("Window {:?} has received the signal to close", window_id); - // This drops the window, causing it to close. - windows.remove(&window_id); + // This drops the window, causing it to close. + windows.remove(&window_id); - if windows.is_empty() { - control_flow.set_exit(); - } + if windows.is_empty() { + control_flow.set_exit(); } - WindowEvent::KeyboardInput { - input: - KeyboardInput { - state: ElementState::Pressed, - .. - }, - .. - } => { - let window = Window::new(event_loop).unwrap(); - windows.insert(window.id(), window); - } - _ => (), } + WindowEvent::KeyboardInput { + input: + KeyboardInput { + state: ElementState::Pressed, + .. + }, + .. + } => { + let window = Window::new(event_loop).unwrap(); + windows.insert(window.id(), window); + } + _ => (), } - _ => (), } }) } diff --git a/examples/request_redraw_threaded.rs b/examples/request_redraw_threaded.rs index f6fba32afb5..ac5c495718b 100644 --- a/examples/request_redraw_threaded.rs +++ b/examples/request_redraw_threaded.rs @@ -28,10 +28,9 @@ fn main() { control_flow.set_wait(); match event { - Event::WindowEvent { event, .. } => match event { - WindowEvent::CloseRequested => control_flow.set_exit(), - _ => (), - }, + Event::WindowEvent { event, .. } if event == WindowEvent::CloseRequested => { + control_flow.set_exit() + } Event::RedrawRequested(_) => { println!("\nredrawing!\n"); } diff --git a/examples/resizable.rs b/examples/resizable.rs index 07678756b9f..8485b242185 100644 --- a/examples/resizable.rs +++ b/examples/resizable.rs @@ -22,8 +22,8 @@ fn main() { event_loop.run(move |event, _, control_flow| { control_flow.set_wait(); - match event { - Event::WindowEvent { event, .. } => match event { + if let Event::WindowEvent { event, .. } = event { + match event { WindowEvent::CloseRequested => control_flow.set_exit(), WindowEvent::KeyboardInput { input: @@ -39,8 +39,7 @@ fn main() { window.set_resizable(resizable); } _ => (), - }, - _ => (), - }; + } + } }); } diff --git a/examples/transparent.rs b/examples/transparent.rs index bed8de72b02..51b994bc27c 100644 --- a/examples/transparent.rs +++ b/examples/transparent.rs @@ -21,12 +21,12 @@ fn main() { control_flow.set_wait(); println!("{:?}", event); - match event { - Event::WindowEvent { - event: WindowEvent::CloseRequested, - .. - } => control_flow.set_exit(), - _ => (), + if let Event::WindowEvent { + event: WindowEvent::CloseRequested, + .. + } = event + { + control_flow.set_exit() } }); } diff --git a/examples/web.rs b/examples/web.rs index 600a3d8d743..59f27d35ee6 100644 --- a/examples/web.rs +++ b/examples/web.rs @@ -43,6 +43,7 @@ mod wasm { pub fn run() { console_log::init_with_level(log::Level::Debug).expect("error initializing logger"); + #[allow(clippy::main_recursion)] super::main(); } diff --git a/examples/window_debug.rs b/examples/window_debug.rs index 8c4f42c366c..01606b5a6a0 100644 --- a/examples/window_debug.rs +++ b/examples/window_debug.rs @@ -58,61 +58,63 @@ fn main() { _ => (), }, Event::WindowEvent { - event: WindowEvent::KeyboardInput { input, .. }, + event: + WindowEvent::KeyboardInput { + input: + KeyboardInput { + virtual_keycode: Some(key), + state: ElementState::Pressed, + .. + }, + .. + }, .. - } => match input { - KeyboardInput { - virtual_keycode: Some(key), - state: ElementState::Pressed, - .. - } => match key { - VirtualKeyCode::E => { - fn area(size: PhysicalSize) -> u32 { - size.width * size.height - } - - let monitor = window.current_monitor().unwrap(); - if let Some(mode) = monitor - .video_modes() - .max_by(|a, b| area(a.size()).cmp(&area(b.size()))) - { - window.set_fullscreen(Some(Fullscreen::Exclusive(mode))); - } else { - eprintln!("no video modes available"); - } - } - VirtualKeyCode::F => { - if window.fullscreen().is_some() { - window.set_fullscreen(None); - } else { - let monitor = window.current_monitor(); - window.set_fullscreen(Some(Fullscreen::Borderless(monitor))); - } - } - VirtualKeyCode::P => { - if window.fullscreen().is_some() { - window.set_fullscreen(None); - } else { - window.set_fullscreen(Some(Fullscreen::Borderless(None))); - } - } - VirtualKeyCode::M => { - minimized = !minimized; - window.set_minimized(minimized); + } => match key { + VirtualKeyCode::E => { + fn area(size: PhysicalSize) -> u32 { + size.width * size.height } - VirtualKeyCode::Q => { - control_flow.set_exit(); + + let monitor = window.current_monitor().unwrap(); + if let Some(mode) = monitor + .video_modes() + .max_by(|a, b| area(a.size()).cmp(&area(b.size()))) + { + window.set_fullscreen(Some(Fullscreen::Exclusive(mode))); + } else { + eprintln!("no video modes available"); } - VirtualKeyCode::V => { - visible = !visible; - window.set_visible(visible); + } + VirtualKeyCode::F => { + if window.fullscreen().is_some() { + window.set_fullscreen(None); + } else { + let monitor = window.current_monitor(); + window.set_fullscreen(Some(Fullscreen::Borderless(monitor))); } - VirtualKeyCode::X => { - let is_maximized = window.is_maximized(); - window.set_maximized(!is_maximized); + } + VirtualKeyCode::P => { + if window.fullscreen().is_some() { + window.set_fullscreen(None); + } else { + window.set_fullscreen(Some(Fullscreen::Borderless(None))); } - _ => (), - }, + } + VirtualKeyCode::M => { + minimized = !minimized; + window.set_minimized(minimized); + } + VirtualKeyCode::Q => { + control_flow.set_exit(); + } + VirtualKeyCode::V => { + visible = !visible; + window.set_visible(visible); + } + VirtualKeyCode::X => { + let is_maximized = window.is_maximized(); + window.set_maximized(!is_maximized); + } _ => (), }, Event::WindowEvent { diff --git a/src/event_loop.rs b/src/event_loop.rs index d6a15cfa9a4..73af34233f0 100644 --- a/src/event_loop.rs +++ b/src/event_loop.rs @@ -94,6 +94,8 @@ impl EventLoopBuilder { /// will fall back on X11. If this variable is set with any other value, winit will panic. #[inline] pub fn build(&mut self) -> EventLoop { + // Certain platforms accept mutable reference in their API. + #[allow(clippy::unnecessary_mut_passed)] EventLoop { event_loop: platform_impl::EventLoop::new(&mut self.platform_specific), _marker: PhantomData, @@ -221,6 +223,12 @@ impl EventLoop<()> { } } +impl Default for EventLoop<()> { + fn default() -> Self { + Self::new() + } +} + impl EventLoop { #[deprecated = "Use `EventLoopBuilder::::with_user_event().build()` instead."] pub fn with_user_event() -> EventLoop { diff --git a/src/lib.rs b/src/lib.rs index a74586f850d..20c4df561b0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -132,6 +132,9 @@ #![deny(rust_2018_idioms)] #![deny(rustdoc::broken_intra_doc_links)] +#![deny(clippy::all)] +#![cfg_attr(feature = "cargo-clippy", deny(warnings))] +#![allow(clippy::missing_safety_doc)] #[allow(unused_imports)] #[macro_use] diff --git a/src/platform_impl/android/mod.rs b/src/platform_impl/android/mod.rs index 27d9984b1db..d0f68631763 100644 --- a/src/platform_impl/android/mod.rs +++ b/src/platform_impl/android/mod.rs @@ -237,7 +237,7 @@ pub struct EventLoop { running: bool, } -#[derive(Default, Debug, Copy, Clone, PartialEq, Hash)] +#[derive(Default, Debug, Copy, Clone, PartialEq, Eq, Hash)] pub(crate) struct PlatformSpecificEventLoopAttributes {} macro_rules! call_event_handler { @@ -845,18 +845,17 @@ impl MonitorHandle { pub fn video_modes(&self) -> impl Iterator { let size = self.size().into(); - let mut v = Vec::new(); // FIXME this is not the real refresh rate // (it is guarunteed to support 32 bit color though) - v.push(monitor::VideoMode { + vec![monitor::VideoMode { video_mode: VideoMode { size, bit_depth: 32, refresh_rate: 60, monitor: self.clone(), }, - }); - v.into_iter() + }] + .into_iter() } } diff --git a/src/platform_impl/ios/app_state.rs b/src/platform_impl/ios/app_state.rs index 6d1d2069420..0bf42e8dd38 100644 --- a/src/platform_impl/ios/app_state.rs +++ b/src/platform_impl/ios/app_state.rs @@ -52,11 +52,7 @@ enum UserCallbackTransitionResult<'a> { impl Event<'static, Never> { fn is_redraw(&self) -> bool { - if let Event::RedrawRequested(_) = self { - true - } else { - false - } + matches!(self, Event::RedrawRequested(_)) } } @@ -119,7 +115,7 @@ impl Drop for AppState { } => { for &mut window in queued_windows { unsafe { - let () = msg_send![window, release]; + let _: () = msg_send![window, release]; } } } @@ -200,10 +196,10 @@ impl AppState { } fn has_launched(&self) -> bool { - match self.state() { - &AppStateImpl::NotLaunched { .. } | &AppStateImpl::Launching { .. } => false, - _ => true, - } + !matches!( + self.state(), + &AppStateImpl::NotLaunched { .. } | &AppStateImpl::Launching { .. } + ) } fn will_launch_transition(&mut self, queued_event_handler: Box) { @@ -528,7 +524,9 @@ pub unsafe fn queue_gl_or_metal_redraw(window: id) { | &mut AppStateImpl::InUserCallback { ref mut queued_gpu_redraws, .. - } => drop(queued_gpu_redraws.insert(window)), + } => { + let _ = queued_gpu_redraws.insert(window); + } s @ &mut AppStateImpl::ProcessingRedraws { .. } | s @ &mut AppStateImpl::Waiting { .. } | s @ &mut AppStateImpl::PollFinished { .. } => bug!("unexpected state {:?}", s), @@ -536,6 +534,7 @@ pub unsafe fn queue_gl_or_metal_redraw(window: id) { panic!("Attempt to create a `Window` after the app has terminated") } } + drop(this); } @@ -548,7 +547,7 @@ pub unsafe fn will_launch(queued_event_handler: Box) { pub unsafe fn did_finish_launching() { let mut this = AppState::get_mut(); let windows = match this.state_mut() { - AppStateImpl::Launching { queued_windows, .. } => mem::replace(queued_windows, Vec::new()), + AppStateImpl::Launching { queued_windows, .. } => mem::take(queued_windows), s => bug!("unexpected state {:?}", s), }; @@ -578,15 +577,15 @@ pub unsafe fn did_finish_launching() { // ``` let screen: id = msg_send![window, screen]; let _: id = msg_send![screen, retain]; - let () = msg_send![window, setScreen:0 as id]; - let () = msg_send![window, setScreen: screen]; - let () = msg_send![screen, release]; + let _: () = msg_send![window, setScreen:0 as id]; + let _: () = msg_send![window, setScreen: screen]; + let _: () = msg_send![screen, release]; let controller: id = msg_send![window, rootViewController]; - let () = msg_send![window, setRootViewController:ptr::null::<()>()]; - let () = msg_send![window, setRootViewController: controller]; - let () = msg_send![window, makeKeyAndVisible]; + let _: () = msg_send![window, setRootViewController:ptr::null::<()>()]; + let _: () = msg_send![window, setRootViewController: controller]; + let _: () = msg_send![window, makeKeyAndVisible]; } - let () = msg_send![window, release]; + let _: () = msg_send![window, release]; } let (windows, events) = AppState::get_mut().did_finish_launching_transition(); @@ -603,9 +602,9 @@ pub unsafe fn did_finish_launching() { let count: NSUInteger = msg_send![window, retainCount]; // make sure the window is still referenced if count > 1 { - let () = msg_send![window, makeKeyAndVisible]; + let _: () = msg_send![window, makeKeyAndVisible]; } - let () = msg_send![window, release]; + let _: () = msg_send![window, release]; } } @@ -670,7 +669,7 @@ pub unsafe fn handle_nonuser_events>(events &mut AppStateImpl::InUserCallback { ref mut queued_events, queued_gpu_redraws: _, - } => mem::replace(queued_events, Vec::new()), + } => mem::take(queued_events), s => bug!("unexpected state {:?}", s), }; if queued_events.is_empty() { @@ -751,7 +750,7 @@ unsafe fn handle_user_events() { &mut AppStateImpl::InUserCallback { ref mut queued_events, queued_gpu_redraws: _, - } => mem::replace(queued_events, Vec::new()), + } => mem::take(queued_events), s => bug!("unexpected state {:?}", s), }; if queued_events.is_empty() { @@ -875,7 +874,7 @@ fn handle_hidpi_proxy( let size = CGSize::new(logical_size); let new_frame: CGRect = CGRect::new(screen_frame.origin, size); unsafe { - let () = msg_send![view, setFrame: new_frame]; + let _: () = msg_send![view, setFrame: new_frame]; } } diff --git a/src/platform_impl/ios/event_loop.rs b/src/platform_impl/ios/event_loop.rs index feb6b7ea535..1a32fe56b29 100644 --- a/src/platform_impl/ios/event_loop.rs +++ b/src/platform_impl/ios/event_loop.rs @@ -69,7 +69,7 @@ pub struct EventLoop { window_target: RootEventLoopWindowTarget, } -#[derive(Default, Debug, Copy, Clone, PartialEq, Hash)] +#[derive(Default, Debug, Copy, Clone, PartialEq, Eq, Hash)] pub(crate) struct PlatformSpecificEventLoopAttributes {} impl EventLoop { diff --git a/src/platform_impl/ios/ffi.rs b/src/platform_impl/ios/ffi.rs index 726723f30bc..7f560514d18 100644 --- a/src/platform_impl/ios/ffi.rs +++ b/src/platform_impl/ios/ffi.rs @@ -88,7 +88,7 @@ pub enum UITouchPhase { Cancelled, } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] #[allow(dead_code)] #[repr(isize)] pub enum UIForceTouchCapability { @@ -97,7 +97,7 @@ pub enum UIForceTouchCapability { Available, } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] #[allow(dead_code)] #[repr(isize)] pub enum UITouchType { @@ -144,10 +144,9 @@ impl From for UIUserInterfaceIdiom { } } } - -impl Into for UIUserInterfaceIdiom { - fn into(self) -> Idiom { - match self { +impl From for Idiom { + fn from(ui_idiom: UIUserInterfaceIdiom) -> Idiom { + match ui_idiom { UIUserInterfaceIdiom::Unspecified => Idiom::Unspecified, UIUserInterfaceIdiom::Phone => Idiom::Phone, UIUserInterfaceIdiom::Pad => Idiom::Pad, @@ -230,9 +229,9 @@ impl From for UIRectEdge { } } -impl Into for UIRectEdge { - fn into(self) -> ScreenEdge { - let bits: u8 = self.0.try_into().expect("invalid `UIRectEdge`"); +impl From for ScreenEdge { + fn from(ui_rect_edge: UIRectEdge) -> ScreenEdge { + let bits: u8 = ui_rect_edge.0.try_into().expect("invalid `UIRectEdge`"); ScreenEdge::from_bits(bits).expect("invalid `ScreenEdge`") } } diff --git a/src/platform_impl/ios/mod.rs b/src/platform_impl/ios/mod.rs index 53c230f3f08..f6fcedaed95 100644 --- a/src/platform_impl/ios/mod.rs +++ b/src/platform_impl/ios/mod.rs @@ -56,6 +56,7 @@ //! Also note that app may not receive the LoopDestroyed event if suspended; it might be SIGKILL'ed. #![cfg(target_os = "ios")] +#![allow(clippy::let_unit_value)] // TODO: (mtak-) UIKit requires main thread for virtually all function/method calls. This could be // worked around in the future by using GCD (grand central dispatch) and/or caching of values like @@ -109,8 +110,6 @@ pub enum OsError {} impl fmt::Display for OsError { fn fmt(&self, _: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - _ => unreachable!(), - } + unreachable!() } } diff --git a/src/platform_impl/ios/monitor.rs b/src/platform_impl/ios/monitor.rs index 4ba3a3dbb35..26f4af06b35 100644 --- a/src/platform_impl/ios/monitor.rs +++ b/src/platform_impl/ios/monitor.rs @@ -30,7 +30,7 @@ unsafe impl Send for NativeDisplayMode {} impl Drop for NativeDisplayMode { fn drop(&mut self) { unsafe { - let () = msg_send![self.0, release]; + let _: () = msg_send![self.0, release]; } } } @@ -115,7 +115,7 @@ pub struct Inner { impl Drop for Inner { fn drop(&mut self) { unsafe { - let () = msg_send![self.uiscreen, release]; + let _: () = msg_send![self.uiscreen, release]; } } } @@ -193,7 +193,7 @@ impl MonitorHandle { pub fn retained_new(uiscreen: id) -> MonitorHandle { unsafe { assert_main_thread!("`MonitorHandle` can only be cloned on the main thread on iOS"); - let () = msg_send![uiscreen, retain]; + let _: () = msg_send![uiscreen, retain]; } MonitorHandle { inner: Inner { uiscreen }, diff --git a/src/platform_impl/ios/view.rs b/src/platform_impl/ios/view.rs index ccdec6bfbf8..e92b119b617 100644 --- a/src/platform_impl/ios/view.rs +++ b/src/platform_impl/ios/view.rs @@ -112,14 +112,14 @@ unsafe fn get_view_class(root_view_class: &'static Class) -> &'static Class { ))), ); let superclass: &'static Class = msg_send![object, superclass]; - let () = msg_send![super(object, superclass), drawRect: rect]; + let _: () = msg_send![super(object, superclass), drawRect: rect]; } } extern "C" fn layout_subviews(object: &Object, _: Sel) { unsafe { let superclass: &'static Class = msg_send![object, superclass]; - let () = msg_send![super(object, superclass), layoutSubviews]; + let _: () = msg_send![super(object, superclass), layoutSubviews]; let window: id = msg_send![object, window]; assert!(!window.is_null()); @@ -133,14 +133,14 @@ unsafe fn get_view_class(root_view_class: &'static Class) -> &'static Class { width: screen_frame.size.width as f64, height: screen_frame.size.height as f64, } - .to_physical(scale_factor.into()); + .to_physical(scale_factor as f64); // If the app is started in landscape, the view frame and window bounds can be mismatched. // The view frame will be in portrait and the window bounds in landscape. So apply the // window bounds to the view frame to make it consistent. let view_frame: CGRect = msg_send![object, frame]; if view_frame != window_bounds { - let () = msg_send![object, setFrame: window_bounds]; + let _: () = msg_send![object, setFrame: window_bounds]; } app_state::handle_nonuser_event(EventWrapper::StaticEvent(Event::WindowEvent { @@ -157,7 +157,7 @@ unsafe fn get_view_class(root_view_class: &'static Class) -> &'static Class { ) { unsafe { let superclass: &'static Class = msg_send![object, superclass]; - let () = msg_send![ + let _: () = msg_send![ super(object, superclass), setContentScaleFactor: untrusted_scale_factor ]; @@ -180,7 +180,7 @@ unsafe fn get_view_class(root_view_class: &'static Class) -> &'static Class { && scale_factor > 0.0, "invalid scale_factor set on UIView", ); - let scale_factor: f64 = scale_factor.into(); + let scale_factor = scale_factor as f64; let bounds: CGRect = msg_send![object, bounds]; let screen: id = msg_send![window, screen]; let screen_space: id = msg_send![screen, coordinateSpace]; @@ -340,7 +340,7 @@ unsafe fn get_view_controller_class() -> &'static Class { prefers_status_bar_hidden: BOOL, setPrefersStatusBarHidden: |object| { unsafe { - let () = msg_send![object, setNeedsStatusBarAppearanceUpdate]; + let _: () = msg_send![object, setNeedsStatusBarAppearanceUpdate]; } }, prefersStatusBarHidden, @@ -353,7 +353,7 @@ unsafe fn get_view_controller_class() -> &'static Class { OSCapabilities::home_indicator_hidden_err_msg; |object| { unsafe { - let () = msg_send![object, setNeedsUpdateOfHomeIndicatorAutoHidden]; + let _: () = msg_send![object, setNeedsUpdateOfHomeIndicatorAutoHidden]; } }, prefersHomeIndicatorAutoHidden, @@ -363,7 +363,7 @@ unsafe fn get_view_controller_class() -> &'static Class { supported_orientations: UIInterfaceOrientationMask, setSupportedInterfaceOrientations: |object| { unsafe { - let () = msg_send![class!(UIViewController), attemptRotationToDeviceOrientation]; + let _: () = msg_send![class!(UIViewController), attemptRotationToDeviceOrientation]; } }, supportedInterfaceOrientations, @@ -376,7 +376,7 @@ unsafe fn get_view_controller_class() -> &'static Class { OSCapabilities::defer_system_gestures_err_msg; |object| { unsafe { - let () = msg_send![object, setNeedsUpdateOfScreenEdgesDeferringSystemGestures]; + let _: () = msg_send![object, setNeedsUpdateOfScreenEdgesDeferringSystemGestures]; } }, preferredScreenEdgesDeferringSystemGestures, @@ -398,7 +398,7 @@ unsafe fn get_window_class() -> &'static Class { window_id: RootWindowId(object.into()), event: WindowEvent::Focused(true), })); - let () = msg_send![super(object, class!(UIWindow)), becomeKeyWindow]; + let _: () = msg_send![super(object, class!(UIWindow)), becomeKeyWindow]; } } @@ -408,7 +408,7 @@ unsafe fn get_window_class() -> &'static Class { window_id: RootWindowId(object.into()), event: WindowEvent::Focused(false), })); - let () = msg_send![super(object, class!(UIWindow)), resignKeyWindow]; + let _: () = msg_send![super(object, class!(UIWindow)), resignKeyWindow]; } } @@ -440,9 +440,9 @@ pub unsafe fn create_view( assert!(!view.is_null(), "Failed to create `UIView` instance"); let view: id = msg_send![view, initWithFrame: frame]; assert!(!view.is_null(), "Failed to initialize `UIView` instance"); - let () = msg_send![view, setMultipleTouchEnabled: YES]; + let _: () = msg_send![view, setMultipleTouchEnabled: YES]; if let Some(scale_factor) = platform_attributes.scale_factor { - let () = msg_send![view, setContentScaleFactor: scale_factor as CGFloat]; + let _: () = msg_send![view, setContentScaleFactor: scale_factor as CGFloat]; } view @@ -484,23 +484,23 @@ pub unsafe fn create_view_controller( let edges: UIRectEdge = platform_attributes .preferred_screen_edges_deferring_system_gestures .into(); - let () = msg_send![ + let _: () = msg_send![ view_controller, setPrefersStatusBarHidden: status_bar_hidden ]; - let () = msg_send![ + let _: () = msg_send![ view_controller, setSupportedInterfaceOrientations: supported_orientations ]; - let () = msg_send![ + let _: () = msg_send![ view_controller, setPrefersHomeIndicatorAutoHidden: prefers_home_indicator_hidden ]; - let () = msg_send![ + let _: () = msg_send![ view_controller, setPreferredScreenEdgesDeferringSystemGestures: edges ]; - let () = msg_send![view_controller, setView: view]; + let _: () = msg_send![view_controller, setView: view]; view_controller } @@ -520,11 +520,11 @@ pub unsafe fn create_window( !window.is_null(), "Failed to initialize `UIWindow` instance" ); - let () = msg_send![window, setRootViewController: view_controller]; + let _: () = msg_send![window, setRootViewController: view_controller]; match window_attributes.fullscreen { Some(Fullscreen::Exclusive(ref video_mode)) => { let uiscreen = video_mode.monitor().ui_screen() as id; - let () = msg_send![uiscreen, setCurrentMode: video_mode.video_mode.screen_mode.0]; + let _: () = msg_send![uiscreen, setCurrentMode: video_mode.video_mode.screen_mode.0]; msg_send![window, setScreen:video_mode.monitor().ui_screen()] } Some(Fullscreen::Borderless(ref monitor)) => { diff --git a/src/platform_impl/ios/window.rs b/src/platform_impl/ios/window.rs index 5df7734a348..af5be019098 100644 --- a/src/platform_impl/ios/window.rs +++ b/src/platform_impl/ios/window.rs @@ -37,9 +37,9 @@ pub struct Inner { impl Drop for Inner { fn drop(&mut self) { unsafe { - let () = msg_send![self.view, release]; - let () = msg_send![self.view_controller, release]; - let () = msg_send![self.window, release]; + let _: () = msg_send![self.view, release]; + let _: () = msg_send![self.view_controller, release]; + let _: () = msg_send![self.window, release]; } } } @@ -52,10 +52,10 @@ impl Inner { pub fn set_visible(&self, visible: bool) { match visible { true => unsafe { - let () = msg_send![self.window, setHidden: NO]; + let _: () = msg_send![self.window, setHidden: NO]; }, false => unsafe { - let () = msg_send![self.window, setHidden: YES]; + let _: () = msg_send![self.window, setHidden: YES]; }, } } @@ -78,7 +78,7 @@ impl Inner { // https://developer.apple.com/documentation/uikit/uiview/1622437-setneedsdisplay?language=objc app_state::queue_gl_or_metal_redraw(self.window); } else { - let () = msg_send![self.view, setNeedsDisplay]; + let _: () = msg_send![self.view, setNeedsDisplay]; } } } @@ -119,8 +119,8 @@ impl Inner { }, size: screen_frame.size, }; - let bounds = self.from_screen_space(new_screen_frame); - let () = msg_send![self.window, setBounds: bounds]; + let bounds = self.rect_from_screen_space(new_screen_frame); + let _: () = msg_send![self.window, setBounds: bounds]; } } @@ -218,7 +218,7 @@ impl Inner { let uiscreen = match monitor { Some(Fullscreen::Exclusive(video_mode)) => { let uiscreen = video_mode.video_mode.monitor.ui_screen() as id; - let () = + let _: () = msg_send![uiscreen, setCurrentMode: video_mode.video_mode.screen_mode.0]; uiscreen } @@ -234,16 +234,16 @@ impl Inner { // this is pretty slow on iOS, so avoid doing it if we can let current: id = msg_send![self.window, screen]; if uiscreen != current { - let () = msg_send![self.window, setScreen: uiscreen]; + let _: () = msg_send![self.window, setScreen: uiscreen]; } let bounds: CGRect = msg_send![uiscreen, bounds]; - let () = msg_send![self.window, setFrame: bounds]; + let _: () = msg_send![self.window, setFrame: bounds]; // For external displays, we must disable overscan compensation or // the displayed image will have giant black bars surrounding it on // each side - let () = msg_send![ + let _: () = msg_send![ uiscreen, setOverscanCompensation: UIScreenOverscanCompensation::None ]; @@ -380,10 +380,10 @@ impl Window { window_attributes: WindowAttributes, platform_attributes: PlatformSpecificWindowBuilderAttributes, ) -> Result { - if let Some(_) = window_attributes.min_inner_size { + if window_attributes.min_inner_size.is_some() { warn!("`WindowAttributes::min_inner_size` is ignored on iOS"); } - if let Some(_) = window_attributes.max_inner_size { + if window_attributes.max_inner_size.is_some() { warn!("`WindowAttributes::max_inner_size` is ignored on iOS"); } if window_attributes.always_on_top { @@ -419,7 +419,7 @@ impl Window { None => screen_bounds, }; - let view = view::create_view(&window_attributes, &platform_attributes, frame.clone()); + let view = view::create_view(&window_attributes, &platform_attributes, frame); let gl_or_metal_backed = { let view_class: id = msg_send![view, class]; @@ -452,7 +452,7 @@ impl Window { // Like the Windows and macOS backends, we send a `ScaleFactorChanged` and `Resized` // event on window creation if the DPI factor != 1.0 let scale_factor: CGFloat = msg_send![view, contentScaleFactor]; - let scale_factor: f64 = scale_factor.into(); + let scale_factor: f64 = scale_factor as _; if scale_factor != 1.0 { let bounds: CGRect = msg_send![view, bounds]; let screen: id = msg_send![window, screen]; @@ -502,7 +502,7 @@ impl Inner { "`WindowExtIOS::set_scale_factor` received an invalid hidpi factor" ); let scale_factor = scale_factor as CGFloat; - let () = msg_send![self.view, setContentScaleFactor: scale_factor]; + let _: () = msg_send![self.view, setContentScaleFactor: scale_factor]; } } @@ -523,7 +523,7 @@ impl Inner { pub fn set_prefers_home_indicator_hidden(&self, hidden: bool) { unsafe { let prefers_home_indicator_hidden = if hidden { YES } else { NO }; - let () = msg_send![ + let _: () = msg_send![ self.view_controller, setPrefersHomeIndicatorAutoHidden: prefers_home_indicator_hidden ]; @@ -533,7 +533,7 @@ impl Inner { pub fn set_preferred_screen_edges_deferring_system_gestures(&self, edges: ScreenEdge) { let edges: UIRectEdge = edges.into(); unsafe { - let () = msg_send![ + let _: () = msg_send![ self.view_controller, setPreferredScreenEdgesDeferringSystemGestures: edges ]; @@ -543,7 +543,7 @@ impl Inner { pub fn set_prefers_status_bar_hidden(&self, hidden: bool) { unsafe { let status_bar_hidden = if hidden { YES } else { NO }; - let () = msg_send![ + let _: () = msg_send![ self.view_controller, setPrefersStatusBarHidden: status_bar_hidden ]; @@ -554,11 +554,11 @@ impl Inner { impl Inner { // requires main thread unsafe fn screen_frame(&self) -> CGRect { - self.to_screen_space(msg_send![self.window, bounds]) + self.rect_to_screen_space(msg_send![self.window, bounds]) } // requires main thread - unsafe fn to_screen_space(&self, rect: CGRect) -> CGRect { + unsafe fn rect_to_screen_space(&self, rect: CGRect) -> CGRect { let screen: id = msg_send![self.window, screen]; if !screen.is_null() { let screen_space: id = msg_send![screen, coordinateSpace]; @@ -569,7 +569,7 @@ impl Inner { } // requires main thread - unsafe fn from_screen_space(&self, rect: CGRect) -> CGRect { + unsafe fn rect_from_screen_space(&self, rect: CGRect) -> CGRect { let screen: id = msg_send![self.window, screen]; if !screen.is_null() { let screen_space: id = msg_send![screen, coordinateSpace]; @@ -594,9 +594,9 @@ impl Inner { height: bounds.size.height - safe_area.top - safe_area.bottom, }, }; - self.to_screen_space(safe_bounds) + self.rect_to_screen_space(safe_bounds) } else { - let screen_frame = self.to_screen_space(bounds); + let screen_frame = self.rect_to_screen_space(bounds); let status_bar_frame: CGRect = { let app: id = msg_send![class!(UIApplication), sharedApplication]; assert!( diff --git a/src/platform_impl/linux/mod.rs b/src/platform_impl/linux/mod.rs index 6552a8227d6..731c696578a 100644 --- a/src/platform_impl/linux/mod.rs +++ b/src/platform_impl/linux/mod.rs @@ -52,7 +52,7 @@ pub mod x11; /// If this variable is set with any other value, winit will panic. const BACKEND_PREFERENCE_ENV_VAR: &str = "WINIT_UNIX_BACKEND"; -#[derive(Debug, Copy, Clone, PartialEq, Hash)] +#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] pub(crate) enum Backend { #[cfg(feature = "x11")] X, @@ -60,22 +60,13 @@ pub(crate) enum Backend { Wayland, } -#[derive(Debug, Copy, Clone, PartialEq, Hash)] +#[derive(Debug, Default, Copy, Clone, PartialEq, Eq, Hash)] pub(crate) struct PlatformSpecificEventLoopAttributes { pub(crate) forced_backend: Option, pub(crate) any_thread: bool, } -impl Default for PlatformSpecificEventLoopAttributes { - fn default() -> Self { - Self { - forced_backend: None, - any_thread: false, - } - } -} - -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, PartialEq, Eq)] pub struct ApplicationName { pub general: String, pub instance: String, diff --git a/src/platform_impl/linux/wayland/output.rs b/src/platform_impl/linux/wayland/output.rs index 79cc523f04a..a01b0d83dc7 100644 --- a/src/platform_impl/linux/wayland/output.rs +++ b/src/platform_impl/linux/wayland/output.rs @@ -175,7 +175,7 @@ impl MonitorHandle { #[inline] pub fn video_modes(&self) -> impl Iterator { let modes = sctk::output::with_output_info(&self.proxy, |info| info.modes.clone()) - .unwrap_or_else(Vec::new); + .unwrap_or_default(); let monitor = self.clone(); diff --git a/src/platform_impl/linux/wayland/seat/pointer/handlers.rs b/src/platform_impl/linux/wayland/seat/pointer/handlers.rs index 1967861dd03..54ca19394fc 100644 --- a/src/platform_impl/linux/wayland/seat/pointer/handlers.rs +++ b/src/platform_impl/linux/wayland/seat/pointer/handlers.rs @@ -300,17 +300,17 @@ pub(super) fn handle_pointer( #[inline] pub(super) fn handle_relative_pointer(event: RelativePointerEvent, winit_state: &mut WinitState) { - match event { - RelativePointerEvent::RelativeMotion { - dx_unaccel, - dy_unaccel, - .. - } => winit_state.event_sink.push_device_event( + if let RelativePointerEvent::RelativeMotion { + dx_unaccel, + dy_unaccel, + .. + } = event + { + winit_state.event_sink.push_device_event( DeviceEvent::MouseMotion { delta: (dx_unaccel, dy_unaccel), }, DeviceId, - ), - _ => (), + ) } } diff --git a/src/platform_impl/linux/wayland/seat/pointer/mod.rs b/src/platform_impl/linux/wayland/seat/pointer/mod.rs index 7ec116405b5..e1b34a5e80f 100644 --- a/src/platform_impl/linux/wayland/seat/pointer/mod.rs +++ b/src/platform_impl/linux/wayland/seat/pointer/mod.rs @@ -243,7 +243,7 @@ pub(super) fn init_relative_pointer( relative_pointer_manager: &ZwpRelativePointerManagerV1, pointer: &WlPointer, ) -> ZwpRelativePointerV1 { - let relative_pointer = relative_pointer_manager.get_relative_pointer(&*pointer); + let relative_pointer = relative_pointer_manager.get_relative_pointer(pointer); relative_pointer.quick_assign(move |_, event, mut dispatch_data| { let winit_state = dispatch_data.get::().unwrap(); handlers::handle_relative_pointer(event, winit_state); diff --git a/src/platform_impl/linux/wayland/window/shim.rs b/src/platform_impl/linux/wayland/window/shim.rs index 9789d5dbf53..84d511f9fda 100644 --- a/src/platform_impl/linux/wayland/window/shim.rs +++ b/src/platform_impl/linux/wayland/window/shim.rs @@ -406,7 +406,8 @@ pub fn handle_window_requests(winit_state: &mut WinitState) { // Process the rest of the events. for (window_id, window_handle) in window_map.iter_mut() { let mut requests = window_handle.pending_window_requests.lock().unwrap(); - for request in requests.drain(..) { + let requests = requests.drain(..); + for request in requests { match request { WindowRequest::Fullscreen(fullscreen) => { window_handle.window.set_fullscreen(fullscreen.as_ref()); diff --git a/src/platform_impl/linux/x11/event_processor.rs b/src/platform_impl/linux/x11/event_processor.rs index 0db198bbab7..49832322fe1 100644 --- a/src/platform_impl/linux/x11/event_processor.rs +++ b/src/platform_impl/linux/x11/event_processor.rs @@ -414,7 +414,7 @@ impl EventProcessor { // resizing by dragging across monitors *without* dropping the window. let (width, height) = shared_state_lock .dpi_adjusted - .unwrap_or_else(|| (xev.width as u32, xev.height as u32)); + .unwrap_or((xev.width as u32, xev.height as u32)); let last_scale_factor = shared_state_lock.last_monitor.scale_factor; let new_scale_factor = { @@ -1253,46 +1253,48 @@ impl EventProcessor { } } - match self.ime_event_receiver.try_recv() { - Ok((window, event)) => match event { - ImeEvent::Enabled => { - callback(Event::WindowEvent { - window_id: mkwid(window), - event: WindowEvent::Ime(Ime::Enabled), - }); - } - ImeEvent::Start => { - self.is_composing = true; - callback(Event::WindowEvent { - window_id: mkwid(window), - event: WindowEvent::Ime(Ime::Preedit("".to_owned(), None)), - }); - } - ImeEvent::Update(text, position) => { - if self.is_composing { - callback(Event::WindowEvent { - window_id: mkwid(window), - event: WindowEvent::Ime(Ime::Preedit(text, Some((position, position)))), - }); - } - } - ImeEvent::End => { - self.is_composing = false; - // Issue empty preedit on `Done`. - callback(Event::WindowEvent { - window_id: mkwid(window), - event: WindowEvent::Ime(Ime::Preedit(String::new(), None)), - }); - } - ImeEvent::Disabled => { - self.is_composing = false; + let (window, event) = match self.ime_event_receiver.try_recv() { + Ok((window, event)) => (window, event), + Err(_) => return, + }; + + match event { + ImeEvent::Enabled => { + callback(Event::WindowEvent { + window_id: mkwid(window), + event: WindowEvent::Ime(Ime::Enabled), + }); + } + ImeEvent::Start => { + self.is_composing = true; + callback(Event::WindowEvent { + window_id: mkwid(window), + event: WindowEvent::Ime(Ime::Preedit("".to_owned(), None)), + }); + } + ImeEvent::Update(text, position) => { + if self.is_composing { callback(Event::WindowEvent { window_id: mkwid(window), - event: WindowEvent::Ime(Ime::Disabled), + event: WindowEvent::Ime(Ime::Preedit(text, Some((position, position)))), }); } - }, - Err(_) => (), + } + ImeEvent::End => { + self.is_composing = false; + // Issue empty preedit on `Done`. + callback(Event::WindowEvent { + window_id: mkwid(window), + event: WindowEvent::Ime(Ime::Preedit(String::new(), None)), + }); + } + ImeEvent::Disabled => { + self.is_composing = false; + callback(Event::WindowEvent { + window_id: mkwid(window), + event: WindowEvent::Ime(Ime::Disabled), + }); + } } } diff --git a/src/platform_impl/linux/x11/ime/context.rs b/src/platform_impl/linux/x11/ime/context.rs index 2fdfc6f3202..bd7ce437ee7 100644 --- a/src/platform_impl/linux/x11/ime/context.rs +++ b/src/platform_impl/linux/x11/ime/context.rs @@ -65,12 +65,10 @@ extern "C" fn preedit_done_callback( .expect("failed to send preedit end event"); } -fn calc_byte_position(text: &Vec, pos: usize) -> usize { - let mut byte_pos = 0; - for i in 0..pos { - byte_pos += text[i].len_utf8(); - } - byte_pos +fn calc_byte_position(text: &[char], pos: usize) -> usize { + text.iter() + .take(pos) + .fold(0, |byte_pos, text| byte_pos + text.len_utf8()) } /// Preedit text information to be drawn inline by the client. diff --git a/src/platform_impl/linux/x11/mod.rs b/src/platform_impl/linux/x11/mod.rs index 491e37d6d9c..7b184345141 100644 --- a/src/platform_impl/linux/x11/mod.rs +++ b/src/platform_impl/linux/x11/mod.rs @@ -76,15 +76,16 @@ impl PeekableReceiver { if self.first.is_some() { return true; } + match self.recv.try_recv() { Ok(v) => { self.first = Some(v); - return true; + true } - Err(TryRecvError::Empty) => return false, + Err(TryRecvError::Empty) => false, Err(TryRecvError::Disconnected) => { warn!("Channel was disconnected when checking incoming"); - return false; + false } } } @@ -407,11 +408,12 @@ impl EventLoop { deadline = Some(*wait_deadline); } } - return IterationResult { + + IterationResult { wait_start: start, deadline, timeout, - }; + } } let mut control_flow = ControlFlow::default(); @@ -638,10 +640,7 @@ struct GenericEventCookie<'a> { } impl<'a> GenericEventCookie<'a> { - fn from_event<'b>( - xconn: &'b XConnection, - event: ffi::XEvent, - ) -> Option> { + fn from_event(xconn: &XConnection, event: ffi::XEvent) -> Option> { unsafe { let mut cookie: ffi::XGenericEventCookie = From::from(event); if (xconn.xlib.XGetEventData)(xconn.display, &mut cookie) == ffi::True { diff --git a/src/platform_impl/linux/x11/monitor.rs b/src/platform_impl/linux/x11/monitor.rs index 2bd0ab17fbe..4c214e4cec1 100644 --- a/src/platform_impl/linux/x11/monitor.rs +++ b/src/platform_impl/linux/x11/monitor.rs @@ -230,11 +230,11 @@ impl XConnection { panic!("[winit] `XRRGetScreenResources` returned NULL. That should only happen if the root window doesn't exist."); } - let mut available; let mut has_primary = false; let primary = (self.xrandr.XRRGetOutputPrimary)(self.display, root); - available = Vec::with_capacity((*resources).ncrtc as usize); + let mut available = Vec::with_capacity((*resources).ncrtc as usize); + for crtc_index in 0..(*resources).ncrtc { let crtc_id = *((*resources).crtcs.offset(crtc_index as isize)); let crtc = (self.xrandr.XRRGetCrtcInfo)(self.display, resources, crtc_id); diff --git a/src/platform_impl/linux/x11/util/geometry.rs b/src/platform_impl/linux/x11/util/geometry.rs index 17aeca55844..8a0c8a5b967 100644 --- a/src/platform_impl/linux/x11/util/geometry.rs +++ b/src/platform_impl/linux/x11/util/geometry.rs @@ -98,7 +98,7 @@ pub struct LogicalFrameExtents { pub bottom: f64, } -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, PartialEq, Eq)] pub enum FrameExtentsHeuristicPath { Supported, UnsupportedNested, @@ -370,8 +370,12 @@ impl XConnection { let top = offset_y; let bottom = diff_y.saturating_sub(offset_y); - let frame_extents = - FrameExtents::new(left.into(), right.into(), top.into(), bottom.into()); + let frame_extents = FrameExtents::new( + left as c_ulong, + right as c_ulong, + top as c_ulong, + bottom as c_ulong, + ); FrameExtentsHeuristic { frame_extents, heuristic_path: UnsupportedNested, @@ -379,7 +383,7 @@ impl XConnection { } else { // This is the case for xmonad and dwm, AKA the only WMs tested that supplied a // border value. This is convenient, since we can use it to get an accurate frame. - let frame_extents = FrameExtents::from_border(border.into()); + let frame_extents = FrameExtents::from_border(border as c_ulong); FrameExtentsHeuristic { frame_extents, heuristic_path: UnsupportedBordered, diff --git a/src/platform_impl/linux/x11/util/hint.rs b/src/platform_impl/linux/x11/util/hint.rs index 222d81748ea..a2dbe6a1704 100644 --- a/src/platform_impl/linux/x11/util/hint.rs +++ b/src/platform_impl/linux/x11/util/hint.rs @@ -173,6 +173,12 @@ impl MotifHints { } } +impl Default for MotifHints { + fn default() -> Self { + Self::new() + } +} + impl MwmHints { fn as_slice(&self) -> &[c_ulong] { unsafe { slice::from_raw_parts(self as *const _ as *const c_ulong, 5) } @@ -317,7 +323,7 @@ impl XConnection { let mut hints = MotifHints::new(); if let Ok(props) = self.get_property::(window, motif_hints, motif_hints) { - hints.hints.flags = props.get(0).cloned().unwrap_or(0); + hints.hints.flags = props.first().cloned().unwrap_or(0); hints.hints.functions = props.get(1).cloned().unwrap_or(0); hints.hints.decorations = props.get(2).cloned().unwrap_or(0); hints.hints.input_mode = props.get(3).cloned().unwrap_or(0) as c_long; diff --git a/src/platform_impl/linux/x11/util/icon.rs b/src/platform_impl/linux/x11/util/icon.rs index b0253e1b96c..3240a9f896f 100644 --- a/src/platform_impl/linux/x11/util/icon.rs +++ b/src/platform_impl/linux/x11/util/icon.rs @@ -1,3 +1,5 @@ +#![allow(clippy::assertions_on_constants)] + use super::*; use crate::icon::{Icon, Pixel, PIXEL_SIZE}; diff --git a/src/platform_impl/linux/x11/util/randr.rs b/src/platform_impl/linux/x11/util/randr.rs index cb380c7d414..151776a1826 100644 --- a/src/platform_impl/linux/x11/util/randr.rs +++ b/src/platform_impl/linux/x11/util/randr.rs @@ -164,7 +164,8 @@ impl XConnection { (self.xrandr.XRRFreeOutputInfo)(output_info); Some((name, scale_factor, modes)) } - pub fn set_crtc_config(&self, crtc_id: RRCrtc, mode_id: RRMode) -> Result<(), ()> { + + pub fn set_crtc_config(&self, crtc_id: RRCrtc, mode_id: RRMode) -> Option<()> { unsafe { let mut major = 0; let mut minor = 0; @@ -195,12 +196,13 @@ impl XConnection { (self.xrandr.XRRFreeScreenResources)(resources); if status == Success as i32 { - Ok(()) + Some(()) } else { - Err(()) + None } } } + pub fn get_crtc_mode(&self, crtc_id: RRCrtc) -> RRMode { unsafe { let mut major = 0; diff --git a/src/platform_impl/linux/x11/util/wm.rs b/src/platform_impl/linux/x11/util/wm.rs index 6fef5a3c4df..464fcd51267 100644 --- a/src/platform_impl/linux/x11/util/wm.rs +++ b/src/platform_impl/linux/x11/util/wm.rs @@ -60,7 +60,7 @@ impl XConnection { let root_window_wm_check = { let result = self.get_property(root, check_atom, ffi::XA_WINDOW); - let wm_check = result.ok().and_then(|wm_check| wm_check.get(0).cloned()); + let wm_check = result.ok().and_then(|wm_check| wm_check.first().cloned()); wm_check? }; @@ -70,7 +70,7 @@ impl XConnection { let child_window_wm_check = { let result = self.get_property(root_window_wm_check, check_atom, ffi::XA_WINDOW); - let wm_check = result.ok().and_then(|wm_check| wm_check.get(0).cloned()); + let wm_check = result.ok().and_then(|wm_check| wm_check.first().cloned()); wm_check? }; diff --git a/src/platform_impl/macos/app_state.rs b/src/platform_impl/macos/app_state.rs index 7b392a41242..5f9a2aa5ce5 100644 --- a/src/platform_impl/macos/app_state.rs +++ b/src/platform_impl/macos/app_state.rs @@ -421,7 +421,7 @@ impl AppState { && !dialog_open && !dialog_is_closing { - let () = msg_send![app, stop: nil]; + let _: () = msg_send![app, stop: nil]; // To stop event loop immediately, we need to post some event here. post_dummy_event(app); } diff --git a/src/platform_impl/macos/event_loop.rs b/src/platform_impl/macos/event_loop.rs index cb069f8354c..0a05241afcf 100644 --- a/src/platform_impl/macos/event_loop.rs +++ b/src/platform_impl/macos/event_loop.rs @@ -120,7 +120,7 @@ pub struct EventLoop { _callback: Option>>, } -#[derive(Debug, Copy, Clone, PartialEq, Hash)] +#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] pub(crate) struct PlatformSpecificEventLoopAttributes { pub(crate) activation_policy: ActivationPolicy, pub(crate) default_menu: bool, @@ -246,7 +246,7 @@ pub unsafe fn post_dummy_event(target: id) { data1: 0 as NSInteger data2: 0 as NSInteger ]; - let () = msg_send![target, postEvent: dummy_event atStart: YES]; + let _: () = msg_send![target, postEvent: dummy_event atStart: YES]; } /// Catches panics that happen inside `f` and when a panic @@ -270,7 +270,7 @@ pub fn stop_app_on_panic R + UnwindSafe, R>( unsafe { let app_class = class!(NSApplication); let app: id = msg_send![app_class, sharedApplication]; - let () = msg_send![app, stop: nil]; + let _: () = msg_send![app, stop: nil]; // Posting a dummy event to get `stop` to take effect immediately. // See: https://stackoverflow.com/questions/48041279/stopping-the-nsapplication-main-event-loop/48064752#48064752 diff --git a/src/platform_impl/macos/mod.rs b/src/platform_impl/macos/mod.rs index 50e438ae440..301c00039a8 100644 --- a/src/platform_impl/macos/mod.rs +++ b/src/platform_impl/macos/mod.rs @@ -1,4 +1,5 @@ #![cfg(target_os = "macos")] +#![allow(clippy::let_unit_value)] #[macro_use] mod util; diff --git a/src/platform_impl/macos/util/async.rs b/src/platform_impl/macos/util/async.rs index afd62c2e9b3..bafebea8d24 100644 --- a/src/platform_impl/macos/util/async.rs +++ b/src/platform_impl/macos/util/async.rs @@ -170,7 +170,6 @@ pub unsafe fn set_maximized_async( let curr_mask = ns_window.styleMask(); if shared_state_lock.fullscreen.is_some() { // Handle it in window_did_exit_fullscreen - return; } else if curr_mask.contains(NSWindowStyleMask::NSResizableWindowMask) { // Just use the native zoom if resizable ns_window.zoom_(nil); diff --git a/src/platform_impl/macos/util/mod.rs b/src/platform_impl/macos/util/mod.rs index 75ff703a3de..61c6f66e88a 100644 --- a/src/platform_impl/macos/util/mod.rs +++ b/src/platform_impl/macos/util/mod.rs @@ -33,7 +33,7 @@ pub const EMPTY_RANGE: ffi::NSRange = ffi::NSRange { length: 0, }; -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub struct IdRef(id); impl IdRef { @@ -61,7 +61,7 @@ impl Drop for IdRef { fn drop(&mut self) { if self.0 != nil { unsafe { - let () = msg_send![self.0, release]; + let _: () = msg_send![self.0, release]; }; } } @@ -150,7 +150,7 @@ pub unsafe fn superclass(this: &Object) -> &Class { #[allow(dead_code)] pub unsafe fn open_emoji_picker() { - let () = msg_send![NSApp(), orderFrontCharacterPalette: nil]; + let _: () = msg_send![NSApp(), orderFrontCharacterPalette: nil]; } pub unsafe fn toggle_style_mask(window: id, view: id, mask: NSWindowStyleMask, on: bool) { diff --git a/src/platform_impl/macos/view.rs b/src/platform_impl/macos/view.rs index 302282119ba..422a4816d88 100644 --- a/src/platform_impl/macos/view.rs +++ b/src/platform_impl/macos/view.rs @@ -83,11 +83,9 @@ impl ViewState { fn get_scale_factor(&self) -> f64 { (unsafe { NSWindow::backingScaleFactor(self.ns_window) }) as f64 } + fn is_ime_enabled(&self) -> bool { - match self.ime_state { - ImeState::Disabled => false, - _ => true, - } + !matches!(self.ime_state, ImeState::Disabled) } } @@ -423,7 +421,7 @@ extern "C" fn draw_rect(this: &Object, _sel: Sel, rect: NSRect) { AppState::handle_redraw(WindowId(get_window_id(state.ns_window))); let superclass = util::superclass(this); - let () = msg_send![super(this, superclass), drawRect: rect]; + let _: () = msg_send![super(this, superclass), drawRect: rect]; } } @@ -649,11 +647,9 @@ extern "C" fn do_command_by_selector(this: &Object, _sel: Sel, _command: Sel) { state.forward_key_to_app = true; let has_marked_text: BOOL = msg_send![this, hasMarkedText]; - if has_marked_text == NO { - if state.ime_state == ImeState::Preedit { - // Leave preedit so that we also report the keyup for this key - state.ime_state = ImeState::Enabled; - } + if has_marked_text == NO && state.ime_state == ImeState::Preedit { + // Leave preedit so that we also report the keyup for this key + state.ime_state = ImeState::Enabled; } } } @@ -901,7 +897,7 @@ extern "C" fn insert_tab(this: &Object, _sel: Sel, _sender: id) { let first_responder: id = msg_send![window, firstResponder]; let this_ptr = this as *const _ as *mut _; if first_responder == this_ptr { - let (): _ = msg_send![window, selectNextKeyView: this]; + let _: () = msg_send![window, selectNextKeyView: this]; } } } diff --git a/src/platform_impl/macos/window.rs b/src/platform_impl/macos/window.rs index d4856cb91b1..193a018a2c3 100644 --- a/src/platform_impl/macos/window.rs +++ b/src/platform_impl/macos/window.rs @@ -416,7 +416,7 @@ impl UnownedWindow { use cocoa::foundation::NSArray; // register for drag and drop operations. - let () = msg_send![ + let _: () = msg_send![ *ns_window, registerForDraggedTypes: NSArray::arrayWithObject(nil, appkit::NSFilenamesPboardType) @@ -955,7 +955,7 @@ impl UnownedWindow { | NSApplicationPresentationOptions::NSApplicationPresentationHideMenuBar; app.setPresentationOptions_(presentation_options); - let () = msg_send![*self.ns_window, setLevel: ffi::CGShieldingWindowLevel() + 1]; + let _: () = msg_send![*self.ns_window, setLevel: ffi::CGShieldingWindowLevel() + 1]; }, ( &Some(Fullscreen::Exclusive(RootVideoMode { ref video_mode })), @@ -973,7 +973,7 @@ impl UnownedWindow { // Restore the normal window level following the Borderless fullscreen // `CGShieldingWindowLevel() + 1` hack. - let () = msg_send![ + let _: () = msg_send![ *self.ns_window, setLevel: ffi::NSWindowLevel::NSNormalWindowLevel ]; diff --git a/src/platform_impl/macos/window_delegate.rs b/src/platform_impl/macos/window_delegate.rs index 01a8c5fa8c6..e6c53aa9713 100644 --- a/src/platform_impl/macos/window_delegate.rs +++ b/src/platform_impl/macos/window_delegate.rs @@ -249,7 +249,7 @@ extern "C" fn init_with_winit(this: &Object, _sel: Sel, state: *mut c_void) -> i if this != nil { (*this).set_ivar("winitState", state); with_state(&*this, |state| { - let () = msg_send![*state.ns_window, setDelegate: this]; + let _: () = msg_send![*state.ns_window, setDelegate: this]; }); } this @@ -269,7 +269,7 @@ extern "C" fn window_will_close(this: &Object, _: Sel, _: id) { autoreleasepool(|| { // Since El Capitan, we need to be careful that delegate methods can't // be called after the window closes. - let () = msg_send![*state.ns_window, setDelegate: nil]; + let _: () = msg_send![*state.ns_window, setDelegate: nil]; }); state.emit_event(WindowEvent::Destroyed); }); @@ -420,7 +420,8 @@ extern "C" fn window_will_enter_fullscreen(this: &Object, _: Sel, _: id) { state.with_window(|window| { let mut shared_state = window.lock_shared_state("window_will_enter_fullscreen"); shared_state.maximized = window.is_zoomed(); - match shared_state.fullscreen { + let fullscreen = shared_state.fullscreen.as_ref(); + match fullscreen { // Exclusive mode sets the state in `set_fullscreen` as the user // can't enter exclusive mode by other means (like the // fullscreen button on the window decorations) @@ -550,12 +551,12 @@ extern "C" fn window_did_fail_to_enter_fullscreen(this: &Object, _: Sel, _: id) shared_state.target_fullscreen = None; }); if state.initial_fullscreen { - let _: () = unsafe { - msg_send![*state.ns_window, + unsafe { + let _: () = msg_send![*state.ns_window, performSelector:sel!(toggleFullScreen:) withObject:nil afterDelay: 0.5 - ] + ]; }; } else { state.with_window(|window| window.restore_state_from_fullscreen()); diff --git a/src/platform_impl/web/event_loop/mod.rs b/src/platform_impl/web/event_loop/mod.rs index d193094ea7c..a8d234cf29a 100644 --- a/src/platform_impl/web/event_loop/mod.rs +++ b/src/platform_impl/web/event_loop/mod.rs @@ -16,7 +16,7 @@ pub struct EventLoop { elw: RootEventLoopWindowTarget, } -#[derive(Default, Debug, Copy, Clone, PartialEq, Hash)] +#[derive(Default, Debug, Copy, Clone, PartialEq, Eq, Hash)] pub(crate) struct PlatformSpecificEventLoopAttributes {} impl EventLoop { diff --git a/src/platform_impl/web/event_loop/runner.rs b/src/platform_impl/web/event_loop/runner.rs index d476a4eeebb..840ba558e63 100644 --- a/src/platform_impl/web/event_loop/runner.rs +++ b/src/platform_impl/web/event_loop/runner.rs @@ -456,11 +456,8 @@ impl Shared { ControlFlow::ExitWithCode(_) => State::Exit, }; - match *self.0.runner.borrow_mut() { - RunnerEnum::Running(ref mut runner) => { - runner.state = new_state; - } - _ => (), + if let RunnerEnum::Running(ref mut runner) = *self.0.runner.borrow_mut() { + runner.state = new_state; } } diff --git a/src/platform_impl/web/event_loop/state.rs b/src/platform_impl/web/event_loop/state.rs index 16b6e6232c8..d7c7fb65c61 100644 --- a/src/platform_impl/web/event_loop/state.rs +++ b/src/platform_impl/web/event_loop/state.rs @@ -22,10 +22,7 @@ pub enum State { impl State { pub fn is_exit(&self) -> bool { - match self { - State::Exit => true, - _ => false, - } + matches!(self, State::Exit) } pub fn control_flow(&self) -> ControlFlow { diff --git a/src/platform_impl/web/web_sys/canvas.rs b/src/platform_impl/web/web_sys/canvas.rs index 8d68e5aaab2..a88ba45241f 100644 --- a/src/platform_impl/web/web_sys/canvas.rs +++ b/src/platform_impl/web/web_sys/canvas.rs @@ -44,11 +44,11 @@ impl Canvas { Some(canvas) => canvas, None => { let window = web_sys::window() - .ok_or(os_error!(OsError("Failed to obtain window".to_owned())))?; + .ok_or_else(|| os_error!(OsError("Failed to obtain window".to_owned())))?; let document = window .document() - .ok_or(os_error!(OsError("Failed to obtain document".to_owned())))?; + .ok_or_else(|| os_error!(OsError("Failed to obtain document".to_owned())))?; document .create_element("canvas") @@ -94,10 +94,10 @@ impl Canvas { self.raw().request_pointer_lock(); } else { let window = web_sys::window() - .ok_or(os_error!(OsError("Failed to obtain window".to_owned())))?; + .ok_or_else(|| os_error!(OsError("Failed to obtain window".to_owned())))?; let document = window .document() - .ok_or(os_error!(OsError("Failed to obtain document".to_owned())))?; + .ok_or_else(|| os_error!(OsError("Failed to obtain document".to_owned())))?; document.exit_pointer_lock(); } Ok(()) @@ -107,7 +107,7 @@ impl Canvas { self.common .raw .set_attribute(attribute, value) - .expect(&format!("Set attribute: {}", attribute)); + .unwrap_or_else(|_| panic!("Set attribute: {}", attribute)) } pub fn position(&self) -> LogicalPosition { @@ -339,9 +339,7 @@ impl Common { handler(event); }) as Box); - let listener = EventListenerHandle::new(&self.raw, event_name, closure); - - listener + EventListenerHandle::new(&self.raw, event_name, closure) } // The difference between add_event and add_user_event is that the latter has a special meaning diff --git a/src/platform_impl/web/web_sys/canvas/mouse_handler.rs b/src/platform_impl/web/web_sys/canvas/mouse_handler.rs index 81e2aead028..1effb455c7c 100644 --- a/src/platform_impl/web/web_sys/canvas/mouse_handler.rs +++ b/src/platform_impl/web/web_sys/canvas/mouse_handler.rs @@ -8,6 +8,8 @@ use std::rc::Rc; use web_sys::{EventTarget, MouseEvent}; +type MouseLeaveHandler = Rc>>>; + #[allow(dead_code)] pub(super) struct MouseHandler { on_mouse_leave: Option>, @@ -15,7 +17,7 @@ pub(super) struct MouseHandler { on_mouse_move: Option>, on_mouse_press: Option>, on_mouse_release: Option>, - on_mouse_leave_handler: Rc>>>, + on_mouse_leave_handler: MouseLeaveHandler, mouse_capture_state: Rc>, } @@ -175,8 +177,8 @@ impl MouseHandler { .map_or(false, |target| target == EventTarget::from(canvas.clone())); match &*mouse_capture_state { // Don't handle hover events outside of canvas. - MouseCaptureState::NotCaptured if !is_over_canvas => return, - MouseCaptureState::OtherElement if !is_over_canvas => return, + MouseCaptureState::NotCaptured | MouseCaptureState::OtherElement + if !is_over_canvas => {} // If hovering over the canvas, just send the cursor move event. MouseCaptureState::NotCaptured | MouseCaptureState::OtherElement diff --git a/src/platform_impl/web/web_sys/media_query_handle.rs b/src/platform_impl/web/web_sys/media_query_handle.rs index c2ab40da777..dc9595617c6 100644 --- a/src/platform_impl/web/web_sys/media_query_handle.rs +++ b/src/platform_impl/web/web_sys/media_query_handle.rs @@ -17,7 +17,7 @@ impl MediaQueryListHandle { .ok() .flatten() .and_then(|mql| { - mql.add_listener_with_opt_callback(Some(&listener.as_ref().unchecked_ref())) + mql.add_listener_with_opt_callback(Some(listener.as_ref().unchecked_ref())) .map(|_| mql) .ok() }); diff --git a/src/platform_impl/web/web_sys/mod.rs b/src/platform_impl/web/web_sys/mod.rs index 8057f7756a0..b604a226cfe 100644 --- a/src/platform_impl/web/web_sys/mod.rs +++ b/src/platform_impl/web/web_sys/mod.rs @@ -98,7 +98,7 @@ pub fn set_canvas_style_property(raw: &HtmlCanvasElement, property: &str, value: let style = raw.style(); style .set_property(property, value) - .expect(&format!("Failed to set {}", property)); + .unwrap_or_else(|_| panic!("Failed to set {}", property)) } pub fn is_fullscreen(canvas: &HtmlCanvasElement) -> bool { diff --git a/src/platform_impl/web/web_sys/scaling.rs b/src/platform_impl/web/web_sys/scaling.rs index 08b52ae306f..55fff0fab6b 100644 --- a/src/platform_impl/web/web_sys/scaling.rs +++ b/src/platform_impl/web/web_sys/scaling.rs @@ -65,13 +65,13 @@ impl ScaleChangeDetectorInternal { ); let mql = MediaQueryListHandle::new(&media_query, closure); if let Some(mql) = &mql { - assert_eq!(mql.mql().matches(), true); + assert!(!mql.mql().matches()); } mql } fn handler(&mut self, event: MediaQueryListEvent) { - assert_eq!(event.matches(), false); + assert!(event.matches()); let mql = self .mql .take() diff --git a/src/platform_impl/web/web_sys/timeout.rs b/src/platform_impl/web/web_sys/timeout.rs index e95c54ed51c..1978cbb38d3 100644 --- a/src/platform_impl/web/web_sys/timeout.rs +++ b/src/platform_impl/web/web_sys/timeout.rs @@ -21,7 +21,7 @@ impl Timeout { let handle = window .set_timeout_with_callback_and_timeout_and_arguments_0( - &closure.as_ref().unchecked_ref(), + closure.as_ref().unchecked_ref(), duration.as_millis() as i32, ) .expect("Failed to set timeout"); @@ -64,7 +64,7 @@ impl AnimationFrameRequest { }) as Box); let handle = window - .request_animation_frame(&closure.as_ref().unchecked_ref()) + .request_animation_frame(closure.as_ref().unchecked_ref()) .expect("Failed to request animation frame"); AnimationFrameRequest { diff --git a/src/platform_impl/web/window.rs b/src/platform_impl/web/window.rs index 6f5201b2220..aa485694640 100644 --- a/src/platform_impl/web/window.rs +++ b/src/platform_impl/web/window.rs @@ -36,11 +36,11 @@ impl Window { let id = target.generate_id(); let canvas = backend::Canvas::create(platform_attr)?; - let mut canvas = Rc::new(RefCell::new(canvas)); + let canvas = Rc::new(RefCell::new(canvas)); let register_redraw_request = Box::new(move || runner.request_redraw(RootWI(id))); - target.register(&mut canvas, id); + target.register(&canvas, id); let runner = target.runner.clone(); let resize_notify_fn = Box::new(move |new_size| { @@ -77,7 +77,7 @@ impl Window { Ok(window) } - pub fn canvas<'a>(&'a self) -> Ref<'a, backend::Canvas> { + pub fn canvas(&self) -> Ref<'_, backend::Canvas> { self.canvas.borrow() } @@ -220,7 +220,7 @@ impl Window { self.canvas .borrow() .set_cursor_grab(grab) - .map_err(|e| ExternalError::Os(e)) + .map_err(ExternalError::Os) } #[inline] @@ -344,7 +344,7 @@ impl Window { #[inline] pub fn id(&self) -> WindowId { - return self.id; + self.id } #[inline] diff --git a/src/platform_impl/windows/event_loop.rs b/src/platform_impl/windows/event_loop.rs index b3e9826649a..178fcf934e2 100644 --- a/src/platform_impl/windows/event_loop.rs +++ b/src/platform_impl/windows/event_loop.rs @@ -2001,7 +2001,7 @@ unsafe fn public_window_callback_inner( false => old_physical_inner_size, }; - let _ = userdata.send_event(Event::WindowEvent { + userdata.send_event(Event::WindowEvent { window_id: RootWindowId(WindowId(window)), event: ScaleFactorChanged { scale_factor: new_scale_factor, diff --git a/src/platform_impl/windows/ime.rs b/src/platform_impl/windows/ime.rs index d6c5c79b272..6e6d31ea5ee 100644 --- a/src/platform_impl/windows/ime.rs +++ b/src/platform_impl/windows/ime.rs @@ -80,19 +80,18 @@ impl ImeContext { let data = self.get_composition_data(gcs_mode)?; let (prefix, shorts, suffix) = data.align_to::(); if prefix.is_empty() && suffix.is_empty() { - OsString::from_wide(&shorts).into_string().ok() + OsString::from_wide(shorts).into_string().ok() } else { None } } unsafe fn get_composition_data(&self, gcs_mode: u32) -> Option> { - let size = ImmGetCompositionStringW(self.himc, gcs_mode, null_mut(), 0); - if size < 0 { - return None; - } else if size == 0 { - return Some(Vec::new()); - } + let size = match ImmGetCompositionStringW(self.himc, gcs_mode, null_mut(), 0) { + 0 => return Some(Vec::new()), + size if size < 0 => return None, + size => size, + }; let mut buf = Vec::::with_capacity(size as _); let size = ImmGetCompositionStringW( @@ -139,7 +138,7 @@ impl ImeContext { } unsafe fn system_has_ime() -> bool { - return GetSystemMetrics(SM_IMMENABLED) != 0; + GetSystemMetrics(SM_IMMENABLED) != 0 } } diff --git a/src/window.rs b/src/window.rs index 96189872f80..4518c3305d0 100644 --- a/src/window.rs +++ b/src/window.rs @@ -1125,7 +1125,7 @@ impl Default for CursorIcon { } /// Fullscreen modes. -#[derive(Clone, Debug, PartialEq)] +#[derive(Clone, Debug, PartialEq, Eq)] pub enum Fullscreen { Exclusive(VideoMode), @@ -1133,7 +1133,7 @@ pub enum Fullscreen { Borderless(Option), } -#[derive(Clone, Copy, Debug, PartialEq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq)] pub enum Theme { Light, Dark, @@ -1142,7 +1142,7 @@ pub enum Theme { /// ## Platform-specific /// /// - **X11:** Sets the WM's `XUrgencyHint`. No distinction between `Critical` and `Informational`. -#[derive(Debug, Clone, Copy, PartialEq)] +#[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum UserAttentionType { /// ## Platform-specific /// - **macOS:** Bounces the dock icon until the application is in focus.