Clippy fixes (#2011)

* windows: bump winapi version

* windows: address dark_mode FIXMEs

use now available winapi structures

* clippy: fix clippy::upper_case_acronyms warnings

* clippy: fix needless_arbitrary_self_type warnings

* clippy: fix clone_on_copy warnings

* clippy: fix unnecessary_mut_passed warnings

* clippy: fix identity_op warnings

* clippy: fix misc warnings

* prefix rustdoc lints with rustdoc::

the prefix was introduced in Rust 1.52

* windows: silence file_drop_handler is never read warning

* clippy: fix from_over_into warnings

and a bit of naming simplification

* clippy: fix missing_safety_doc warnings

* make dummy() functions const
This commit is contained in:
Philippe Renon 2021-08-30 19:40:02 +02:00 committed by GitHub
parent 9e72396709
commit 1b3b82a3c1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
22 changed files with 119 additions and 143 deletions

View file

@ -58,7 +58,7 @@ features = ["display_link"]
parking_lot = "0.11" parking_lot = "0.11"
[target.'cfg(target_os = "windows")'.dependencies.winapi] [target.'cfg(target_os = "windows")'.dependencies.winapi]
version = "0.3.6" version = "0.3.9"
features = [ features = [
"combaseapi", "combaseapi",
"commctrl", "commctrl",

View file

@ -211,9 +211,9 @@ impl<P: Pixel, X: Pixel> From<(X, X)> for LogicalPosition<P> {
} }
} }
impl<P: Pixel, X: Pixel> Into<(X, X)> for LogicalPosition<P> { impl<P: Pixel, X: Pixel> From<LogicalPosition<P>> for (X, X) {
fn into(self: Self) -> (X, X) { fn from(p: LogicalPosition<P>) -> (X, X) {
(self.x.cast(), self.y.cast()) (p.x.cast(), p.y.cast())
} }
} }
@ -223,26 +223,23 @@ impl<P: Pixel, X: Pixel> From<[X; 2]> for LogicalPosition<P> {
} }
} }
impl<P: Pixel, X: Pixel> Into<[X; 2]> for LogicalPosition<P> { impl<P: Pixel, X: Pixel> From<LogicalPosition<P>> for [X; 2] {
fn into(self: Self) -> [X; 2] { fn from(p: LogicalPosition<P>) -> [X; 2] {
[self.x.cast(), self.y.cast()] [p.x.cast(), p.y.cast()]
} }
} }
#[cfg(feature = "mint")] #[cfg(feature = "mint")]
impl<P: Pixel> From<mint::Point2<P>> for LogicalPosition<P> { impl<P: Pixel> From<mint::Point2<P>> for LogicalPosition<P> {
fn from(mint: mint::Point2<P>) -> Self { fn from(p: mint::Point2<P>) -> Self {
Self::new(mint.x, mint.y) Self::new(p.x, p.y)
} }
} }
#[cfg(feature = "mint")] #[cfg(feature = "mint")]
impl<P: Pixel> From<LogicalPosition<P>> for mint::Point2<P> { impl<P: Pixel> From<LogicalPosition<P>> for mint::Point2<P> {
fn from(winit: LogicalPosition<P>) -> Self { fn from(p: LogicalPosition<P>) -> Self {
mint::Point2 { mint::Point2 { x: p.x, y: p.y }
x: winit.x,
y: winit.y,
}
} }
} }
@ -293,9 +290,9 @@ impl<P: Pixel, X: Pixel> From<(X, X)> for PhysicalPosition<P> {
} }
} }
impl<P: Pixel, X: Pixel> Into<(X, X)> for PhysicalPosition<P> { impl<P: Pixel, X: Pixel> From<PhysicalPosition<P>> for (X, X) {
fn into(self: Self) -> (X, X) { fn from(p: PhysicalPosition<P>) -> (X, X) {
(self.x.cast(), self.y.cast()) (p.x.cast(), p.y.cast())
} }
} }
@ -305,26 +302,23 @@ impl<P: Pixel, X: Pixel> From<[X; 2]> for PhysicalPosition<P> {
} }
} }
impl<P: Pixel, X: Pixel> Into<[X; 2]> for PhysicalPosition<P> { impl<P: Pixel, X: Pixel> From<PhysicalPosition<P>> for [X; 2] {
fn into(self: Self) -> [X; 2] { fn from(p: PhysicalPosition<P>) -> [X; 2] {
[self.x.cast(), self.y.cast()] [p.x.cast(), p.y.cast()]
} }
} }
#[cfg(feature = "mint")] #[cfg(feature = "mint")]
impl<P: Pixel> From<mint::Point2<P>> for PhysicalPosition<P> { impl<P: Pixel> From<mint::Point2<P>> for PhysicalPosition<P> {
fn from(mint: mint::Point2<P>) -> Self { fn from(p: mint::Point2<P>) -> Self {
Self::new(mint.x, mint.y) Self::new(p.x, p.y)
} }
} }
#[cfg(feature = "mint")] #[cfg(feature = "mint")]
impl<P: Pixel> From<PhysicalPosition<P>> for mint::Point2<P> { impl<P: Pixel> From<PhysicalPosition<P>> for mint::Point2<P> {
fn from(winit: PhysicalPosition<P>) -> Self { fn from(p: PhysicalPosition<P>) -> Self {
mint::Point2 { mint::Point2 { x: p.x, y: p.y }
x: winit.x,
y: winit.y,
}
} }
} }
@ -375,9 +369,9 @@ impl<P: Pixel, X: Pixel> From<(X, X)> for LogicalSize<P> {
} }
} }
impl<P: Pixel, X: Pixel> Into<(X, X)> for LogicalSize<P> { impl<P: Pixel, X: Pixel> From<LogicalSize<P>> for (X, X) {
fn into(self: LogicalSize<P>) -> (X, X) { fn from(s: LogicalSize<P>) -> (X, X) {
(self.width.cast(), self.height.cast()) (s.width.cast(), s.height.cast())
} }
} }
@ -387,25 +381,25 @@ impl<P: Pixel, X: Pixel> From<[X; 2]> for LogicalSize<P> {
} }
} }
impl<P: Pixel, X: Pixel> Into<[X; 2]> for LogicalSize<P> { impl<P: Pixel, X: Pixel> From<LogicalSize<P>> for [X; 2] {
fn into(self: Self) -> [X; 2] { fn from(s: LogicalSize<P>) -> [X; 2] {
[self.width.cast(), self.height.cast()] [s.width.cast(), s.height.cast()]
} }
} }
#[cfg(feature = "mint")] #[cfg(feature = "mint")]
impl<P: Pixel> From<mint::Vector2<P>> for LogicalSize<P> { impl<P: Pixel> From<mint::Vector2<P>> for LogicalSize<P> {
fn from(mint: mint::Vector2<P>) -> Self { fn from(v: mint::Vector2<P>) -> Self {
Self::new(mint.x, mint.y) Self::new(v.x, v.y)
} }
} }
#[cfg(feature = "mint")] #[cfg(feature = "mint")]
impl<P: Pixel> From<LogicalSize<P>> for mint::Vector2<P> { impl<P: Pixel> From<LogicalSize<P>> for mint::Vector2<P> {
fn from(winit: LogicalSize<P>) -> Self { fn from(s: LogicalSize<P>) -> Self {
mint::Vector2 { mint::Vector2 {
x: winit.width, x: s.width,
y: winit.height, y: s.height,
} }
} }
} }
@ -454,9 +448,9 @@ impl<P: Pixel, X: Pixel> From<(X, X)> for PhysicalSize<P> {
} }
} }
impl<P: Pixel, X: Pixel> Into<(X, X)> for PhysicalSize<P> { impl<P: Pixel, X: Pixel> From<PhysicalSize<P>> for (X, X) {
fn into(self: Self) -> (X, X) { fn from(s: PhysicalSize<P>) -> (X, X) {
(self.width.cast(), self.height.cast()) (s.width.cast(), s.height.cast())
} }
} }
@ -466,25 +460,25 @@ impl<P: Pixel, X: Pixel> From<[X; 2]> for PhysicalSize<P> {
} }
} }
impl<P: Pixel, X: Pixel> Into<[X; 2]> for PhysicalSize<P> { impl<P: Pixel, X: Pixel> From<PhysicalSize<P>> for [X; 2] {
fn into(self: Self) -> [X; 2] { fn from(s: PhysicalSize<P>) -> [X; 2] {
[self.width.cast(), self.height.cast()] [s.width.cast(), s.height.cast()]
} }
} }
#[cfg(feature = "mint")] #[cfg(feature = "mint")]
impl<P: Pixel> From<mint::Vector2<P>> for PhysicalSize<P> { impl<P: Pixel> From<mint::Vector2<P>> for PhysicalSize<P> {
fn from(mint: mint::Vector2<P>) -> Self { fn from(v: mint::Vector2<P>) -> Self {
Self::new(mint.x, mint.y) Self::new(v.x, v.y)
} }
} }
#[cfg(feature = "mint")] #[cfg(feature = "mint")]
impl<P: Pixel> From<PhysicalSize<P>> for mint::Vector2<P> { impl<P: Pixel> From<PhysicalSize<P>> for mint::Vector2<P> {
fn from(winit: PhysicalSize<P>) -> Self { fn from(s: PhysicalSize<P>) -> Self {
mint::Vector2 { mint::Vector2 {
x: winit.width, x: s.width,
y: winit.height, y: s.height,
} }
} }
} }

View file

@ -131,7 +131,7 @@ impl<T: Clone> Clone for Event<'static, T> {
device_id: *device_id, device_id: *device_id,
event: event.clone(), event: event.clone(),
}, },
NewEvents(cause) => NewEvents(cause.clone()), NewEvents(cause) => NewEvents(*cause),
MainEventsCleared => MainEventsCleared, MainEventsCleared => MainEventsCleared,
RedrawRequested(wid) => RedrawRequested(*wid), RedrawRequested(wid) => RedrawRequested(*wid),
RedrawEventsCleared => RedrawEventsCleared, RedrawEventsCleared => RedrawEventsCleared,
@ -358,8 +358,8 @@ impl Clone for WindowEvent<'static> {
fn clone(&self) -> Self { fn clone(&self) -> Self {
use self::WindowEvent::*; use self::WindowEvent::*;
return match self { return match self {
Resized(size) => Resized(size.clone()), Resized(size) => Resized(*size),
Moved(pos) => Moved(pos.clone()), Moved(pos) => Moved(*pos),
CloseRequested => CloseRequested, CloseRequested => CloseRequested,
Destroyed => Destroyed, Destroyed => Destroyed,
DroppedFile(file) => DroppedFile(file.clone()), DroppedFile(file) => DroppedFile(file.clone()),
@ -377,7 +377,7 @@ impl Clone for WindowEvent<'static> {
is_synthetic: *is_synthetic, is_synthetic: *is_synthetic,
}, },
ModifiersChanged(modifiers) => ModifiersChanged(modifiers.clone()), ModifiersChanged(modifiers) => ModifiersChanged(*modifiers),
#[allow(deprecated)] #[allow(deprecated)]
CursorMoved { CursorMoved {
device_id, device_id,
@ -437,7 +437,7 @@ impl Clone for WindowEvent<'static> {
value: *value, value: *value,
}, },
Touch(touch) => Touch(*touch), Touch(touch) => Touch(*touch),
ThemeChanged(theme) => ThemeChanged(theme.clone()), ThemeChanged(theme) => ThemeChanged(*theme),
ScaleFactorChanged { .. } => { ScaleFactorChanged { .. } => {
unreachable!("Static event can't be about scale factor changing") unreachable!("Static event can't be about scale factor changing")
} }
@ -538,12 +538,16 @@ impl<'a> WindowEvent<'a> {
pub struct DeviceId(pub(crate) platform_impl::DeviceId); pub struct DeviceId(pub(crate) platform_impl::DeviceId);
impl DeviceId { impl DeviceId {
/// Returns a dummy `DeviceId`, useful for unit testing. The only guarantee made about the return /// Returns a dummy `DeviceId`, useful for unit testing.
/// value of this function is that it will always be equal to itself and to future values returned ///
/// by this function. No other guarantees are made. This may be equal to a real `DeviceId`. /// # Safety
///
/// The only guarantee made about the return value of this function is that
/// it will always be equal to itself and to future values returned by this function.
/// No other guarantees are made. This may be equal to a real `DeviceId`.
/// ///
/// **Passing this into a winit function will result in undefined behavior.** /// **Passing this into a winit function will result in undefined behavior.**
pub unsafe fn dummy() -> Self { pub const unsafe fn dummy() -> Self {
DeviceId(platform_impl::DeviceId::dummy()) DeviceId(platform_impl::DeviceId::dummy())
} }
} }
@ -998,9 +1002,9 @@ bitflags! {
// left and right modifiers are currently commented out, but we should be able to support // left and right modifiers are currently commented out, but we should be able to support
// them in a future release // them in a future release
/// The "shift" key. /// The "shift" key.
const SHIFT = 0b100 << 0; const SHIFT = 0b100;
// const LSHIFT = 0b010 << 0; // const LSHIFT = 0b010;
// const RSHIFT = 0b001 << 0; // const RSHIFT = 0b001;
/// The "control" key. /// The "control" key.
const CTRL = 0b100 << 3; const CTRL = 0b100 << 3;
// const LCTRL = 0b010 << 3; // const LCTRL = 0b010 << 3;

View file

@ -130,7 +130,7 @@
//! [`raw_window_handle`]: ./window/struct.Window.html#method.raw_window_handle //! [`raw_window_handle`]: ./window/struct.Window.html#method.raw_window_handle
#![deny(rust_2018_idioms)] #![deny(rust_2018_idioms)]
#![deny(broken_intra_doc_links)] #![deny(rustdoc::broken_intra_doc_links)]
#[allow(unused_imports)] #[allow(unused_imports)]
#[macro_use] #[macro_use]

View file

@ -443,7 +443,7 @@ impl<T: 'static> EventLoopWindowTarget<T> {
pub struct WindowId; pub struct WindowId;
impl WindowId { impl WindowId {
pub fn dummy() -> Self { pub const fn dummy() -> Self {
WindowId WindowId
} }
} }
@ -452,7 +452,7 @@ impl WindowId {
pub struct DeviceId; pub struct DeviceId;
impl DeviceId { impl DeviceId {
pub fn dummy() -> Self { pub const fn dummy() -> Self {
DeviceId DeviceId
} }
} }

View file

@ -91,7 +91,7 @@ pub struct DeviceId {
} }
impl DeviceId { impl DeviceId {
pub unsafe fn dummy() -> Self { pub const unsafe fn dummy() -> Self {
DeviceId { DeviceId {
uiscreen: std::ptr::null_mut(), uiscreen: std::ptr::null_mut(),
} }

View file

@ -611,7 +611,7 @@ pub struct WindowId {
} }
impl WindowId { impl WindowId {
pub unsafe fn dummy() -> Self { pub const unsafe fn dummy() -> Self {
WindowId { WindowId {
window: std::ptr::null_mut(), window: std::ptr::null_mut(),
} }

View file

@ -141,7 +141,7 @@ pub enum WindowId {
} }
impl WindowId { impl WindowId {
pub unsafe fn dummy() -> Self { pub const unsafe fn dummy() -> Self {
#[cfg(feature = "wayland")] #[cfg(feature = "wayland")]
return WindowId::Wayland(wayland::WindowId::dummy()); return WindowId::Wayland(wayland::WindowId::dummy());
#[cfg(all(not(feature = "wayland"), feature = "x11"))] #[cfg(all(not(feature = "wayland"), feature = "x11"))]
@ -158,7 +158,7 @@ pub enum DeviceId {
} }
impl DeviceId { impl DeviceId {
pub unsafe fn dummy() -> Self { pub const unsafe fn dummy() -> Self {
#[cfg(feature = "wayland")] #[cfg(feature = "wayland")]
return DeviceId::Wayland(wayland::DeviceId::dummy()); return DeviceId::Wayland(wayland::DeviceId::dummy());
#[cfg(all(not(feature = "wayland"), feature = "x11"))] #[cfg(all(not(feature = "wayland"), feature = "x11"))]

View file

@ -22,7 +22,7 @@ mod window;
pub struct DeviceId; pub struct DeviceId;
impl DeviceId { impl DeviceId {
pub unsafe fn dummy() -> Self { pub const unsafe fn dummy() -> Self {
DeviceId DeviceId
} }
} }
@ -31,7 +31,7 @@ impl DeviceId {
pub struct WindowId(usize); pub struct WindowId(usize);
impl WindowId { impl WindowId {
pub unsafe fn dummy() -> Self { pub const unsafe fn dummy() -> Self {
WindowId(0) WindowId(0)
} }
} }

View file

@ -490,7 +490,7 @@ impl<'a> Deref for DeviceInfo<'a> {
pub struct WindowId(ffi::Window); pub struct WindowId(ffi::Window);
impl WindowId { impl WindowId {
pub unsafe fn dummy() -> Self { pub const unsafe fn dummy() -> Self {
WindowId(0) WindowId(0)
} }
} }
@ -499,7 +499,7 @@ impl WindowId {
pub struct DeviceId(c_int); pub struct DeviceId(c_int);
impl DeviceId { impl DeviceId {
pub unsafe fn dummy() -> Self { pub const unsafe fn dummy() -> Self {
DeviceId(0) DeviceId(0)
} }
} }

View file

@ -33,7 +33,7 @@ pub(crate) use crate::icon::NoIcon as PlatformIcon;
pub struct DeviceId; pub struct DeviceId;
impl DeviceId { impl DeviceId {
pub unsafe fn dummy() -> Self { pub const unsafe fn dummy() -> Self {
DeviceId DeviceId
} }
} }

View file

@ -51,7 +51,7 @@ use objc::{
pub struct Id(pub usize); pub struct Id(pub usize);
impl Id { impl Id {
pub unsafe fn dummy() -> Self { pub const unsafe fn dummy() -> Self {
Id(0) Id(0)
} }
} }

View file

@ -2,7 +2,7 @@
pub struct Id(pub i32); pub struct Id(pub i32);
impl Id { impl Id {
pub unsafe fn dummy() -> Self { pub const unsafe fn dummy() -> Self {
Id(0) Id(0)
} }
} }

View file

@ -344,7 +344,7 @@ impl Drop for Window {
pub struct Id(pub(crate) u32); pub struct Id(pub(crate) u32);
impl Id { impl Id {
pub unsafe fn dummy() -> Id { pub const unsafe fn dummy() -> Id {
Id(0) Id(0)
} }
} }

View file

@ -6,38 +6,24 @@ use std::os::windows::ffi::OsStrExt;
use winapi::{ use winapi::{
shared::{ shared::{
basetsd::SIZE_T, basetsd::SIZE_T,
minwindef::{BOOL, DWORD, FALSE, UINT, ULONG, WORD}, minwindef::{BOOL, DWORD, FALSE, WORD},
ntdef::{LPSTR, NTSTATUS, NT_SUCCESS, PVOID, WCHAR}, ntdef::{NTSTATUS, NT_SUCCESS, PVOID},
windef::HWND, windef::HWND,
winerror::S_OK, winerror::S_OK,
}, },
um::{libloaderapi, uxtheme, winuser}, um::{libloaderapi, uxtheme, winnt, winuser},
}; };
use crate::window::Theme; use crate::window::Theme;
lazy_static! { lazy_static! {
static ref WIN10_BUILD_VERSION: Option<DWORD> = { static ref WIN10_BUILD_VERSION: Option<DWORD> = {
// FIXME: RtlGetVersion is a documented windows API, type RtlGetVersion = unsafe extern "system" fn (*mut winnt::OSVERSIONINFOW) -> NTSTATUS;
// should be part of winapi!
#[allow(non_snake_case)]
#[repr(C)]
struct OSVERSIONINFOW {
dwOSVersionInfoSize: ULONG,
dwMajorVersion: ULONG,
dwMinorVersion: ULONG,
dwBuildNumber: ULONG,
dwPlatformId: ULONG,
szCSDVersion: [WCHAR; 128],
}
type RtlGetVersion = unsafe extern "system" fn (*mut OSVERSIONINFOW) -> NTSTATUS;
let handle = get_function!("ntdll.dll", RtlGetVersion); let handle = get_function!("ntdll.dll", RtlGetVersion);
if let Some(rtl_get_version) = handle { if let Some(rtl_get_version) = handle {
unsafe { unsafe {
let mut vi = OSVERSIONINFOW { let mut vi = winnt::OSVERSIONINFOW {
dwOSVersionInfoSize: 0, dwOSVersionInfoSize: 0,
dwMajorVersion: 0, dwMajorVersion: 0,
dwMinorVersion: 0, dwMinorVersion: 0,
@ -108,11 +94,12 @@ fn set_dark_mode_for_window(hwnd: HWND, is_dark_mode: bool) -> bool {
type SetWindowCompositionAttribute = type SetWindowCompositionAttribute =
unsafe extern "system" fn(HWND, *mut WINDOWCOMPOSITIONATTRIBDATA) -> BOOL; unsafe extern "system" fn(HWND, *mut WINDOWCOMPOSITIONATTRIBDATA) -> BOOL;
#[allow(non_snake_case)] #[allow(clippy::upper_case_acronyms)]
type WINDOWCOMPOSITIONATTRIB = u32; type WINDOWCOMPOSITIONATTRIB = u32;
const WCA_USEDARKMODECOLORS: WINDOWCOMPOSITIONATTRIB = 26; const WCA_USEDARKMODECOLORS: WINDOWCOMPOSITIONATTRIB = 26;
#[allow(non_snake_case)] #[allow(non_snake_case)]
#[allow(clippy::upper_case_acronyms)]
#[repr(C)] #[repr(C)]
struct WINDOWCOMPOSITIONATTRIBDATA { struct WINDOWCOMPOSITIONATTRIBDATA {
Attrib: WINDOWCOMPOSITIONATTRIB, Attrib: WINDOWCOMPOSITIONATTRIB,
@ -181,21 +168,8 @@ fn should_apps_use_dark_mode() -> bool {
.unwrap_or(false) .unwrap_or(false)
} }
// FIXME: This definition was missing from winapi. Can remove from
// here and use winapi once the following PR is released:
// https://github.com/retep998/winapi-rs/pull/815
#[repr(C)]
#[allow(non_snake_case)]
struct HIGHCONTRASTA {
cbSize: UINT,
dwFlags: DWORD,
lpszDefaultScheme: LPSTR,
}
const HCF_HIGHCONTRASTON: DWORD = 1;
fn is_high_contrast() -> bool { fn is_high_contrast() -> bool {
let mut hc = HIGHCONTRASTA { let mut hc = winuser::HIGHCONTRASTA {
cbSize: 0, cbSize: 0,
dwFlags: 0, dwFlags: 0,
lpszDefaultScheme: std::ptr::null_mut(), lpszDefaultScheme: std::ptr::null_mut(),
@ -210,7 +184,7 @@ fn is_high_contrast() -> bool {
) )
}; };
ok != FALSE && (HCF_HIGHCONTRASTON & hc.dwFlags) == 1 ok != FALSE && (winuser::HCF_HIGHCONTRASTON & hc.dwFlags) == 1
} }
fn widestring(src: &'static str) -> Vec<u16> { fn widestring(src: &'static str) -> Vec<u16> {

View file

@ -181,7 +181,7 @@ impl FileDropHandler {
}, },
}; };
let mut drop_format = FORMATETC { let drop_format = FORMATETC {
cfFormat: CF_HDROP as CLIPFORMAT, cfFormat: CF_HDROP as CLIPFORMAT,
ptd: ptr::null(), ptd: ptr::null(),
dwAspect: DVASPECT_CONTENT, dwAspect: DVASPECT_CONTENT,
@ -190,7 +190,7 @@ impl FileDropHandler {
}; };
let mut medium = std::mem::zeroed(); let mut medium = std::mem::zeroed();
let get_data_result = (*data_obj).GetData(&mut drop_format, &mut medium); let get_data_result = (*data_obj).GetData(&drop_format, &mut medium);
if SUCCEEDED(get_data_result) { if SUCCEEDED(get_data_result) {
let hglobal = (*medium.u).hGlobal(); let hglobal = (*medium.u).hGlobal();
let hdrop = (*hglobal) as shellapi::HDROP; let hdrop = (*hglobal) as shellapi::HDROP;
@ -213,15 +213,15 @@ impl FileDropHandler {
callback(OsString::from_wide(&path_buf[0..character_count]).into()); callback(OsString::from_wide(&path_buf[0..character_count]).into());
} }
return Some(hdrop); Some(hdrop)
} else if get_data_result == DV_E_FORMATETC { } else if get_data_result == DV_E_FORMATETC {
// If the dropped item is not a file this error will occur. // If the dropped item is not a file this error will occur.
// In this case it is OK to return without taking further action. // In this case it is OK to return without taking further action.
debug!("Error occured while processing dropped/hovered item: item is not a file."); debug!("Error occured while processing dropped/hovered item: item is not a file.");
return None; None
} else { } else {
debug!("Unexpected error occured while processing dropped/hovered item."); debug!("Unexpected error occured while processing dropped/hovered item.");
return None; None
} }
} }
} }

View file

@ -39,8 +39,8 @@ pub fn get_key_mods() -> ModifiersState {
bitflags! { bitflags! {
#[derive(Default)] #[derive(Default)]
pub struct ModifiersStateSide: u32 { pub struct ModifiersStateSide: u32 {
const LSHIFT = 0b010 << 0; const LSHIFT = 0b010;
const RSHIFT = 0b001 << 0; const RSHIFT = 0b001;
const LCTRL = 0b010 << 3; const LCTRL = 0b010 << 3;
const RCTRL = 0b001 << 3; const RCTRL = 0b001 << 3;
@ -343,7 +343,7 @@ pub fn handle_extended_keys(
extended: bool, extended: bool,
) -> Option<(c_int, UINT)> { ) -> Option<(c_int, UINT)> {
// Welcome to hell https://blog.molecular-matters.com/2011/09/05/properly-handling-keyboard-input/ // Welcome to hell https://blog.molecular-matters.com/2011/09/05/properly-handling-keyboard-input/
scancode = if extended { 0xE000 } else { 0x0000 } | scancode; scancode |= if extended { 0xE000 } else { 0x0000 };
let vkey = match vkey { let vkey = match vkey {
winuser::VK_SHIFT => unsafe { winuser::VK_SHIFT => unsafe {
winuser::MapVirtualKeyA(scancode, winuser::MAPVK_VSC_TO_VK_EX) as _ winuser::MapVirtualKeyA(scancode, winuser::MAPVK_VSC_TO_VK_EX) as _
@ -369,7 +369,7 @@ pub fn handle_extended_keys(
// Don't emit anything for the LeftControl event in the pair... // Don't emit anything for the LeftControl event in the pair...
0xE01D if vkey == winuser::VK_PAUSE => return None, 0xE01D if vkey == winuser::VK_PAUSE => return None,
// ...and emit the Pause event for the second event in the pair. // ...and emit the Pause event for the second event in the pair.
0x45 if vkey == winuser::VK_PAUSE || vkey == 0xFF as _ => { 0x45 if vkey == winuser::VK_PAUSE || vkey == 0xFF => {
scancode = 0xE059; scancode = 0xE059;
winuser::VK_PAUSE winuser::VK_PAUSE
} }

View file

@ -86,7 +86,7 @@ lazy_static! {
pub(crate) struct WindowData<T: 'static> { pub(crate) struct WindowData<T: 'static> {
pub window_state: Arc<Mutex<WindowState>>, pub window_state: Arc<Mutex<WindowState>>,
pub event_loop_runner: EventLoopRunnerShared<T>, pub event_loop_runner: EventLoopRunnerShared<T>,
pub file_drop_handler: Option<FileDropHandler>, pub _file_drop_handler: Option<FileDropHandler>,
pub userdata_removed: Cell<bool>, pub userdata_removed: Cell<bool>,
pub recurse_depth: Cell<u32>, pub recurse_depth: Cell<u32>,
} }
@ -217,8 +217,8 @@ impl<T: 'static> EventLoop<T> {
if 0 == winuser::GetMessageW(&mut msg, ptr::null_mut(), 0, 0) { if 0 == winuser::GetMessageW(&mut msg, ptr::null_mut(), 0, 0) {
break 'main; break 'main;
} }
winuser::TranslateMessage(&mut msg); winuser::TranslateMessage(&msg);
winuser::DispatchMessageW(&mut msg); winuser::DispatchMessageW(&msg);
if let Err(payload) = runner.take_panic_error() { if let Err(payload) = runner.take_panic_error() {
runner.reset_runner(); runner.reset_runner();
@ -345,15 +345,15 @@ fn wait_thread(parent_thread_id: DWORD, msg_window_id: HWND) {
if wait_until_opt.is_some() { if wait_until_opt.is_some() {
if 0 != winuser::PeekMessageW(&mut msg, ptr::null_mut(), 0, 0, winuser::PM_REMOVE) { if 0 != winuser::PeekMessageW(&mut msg, ptr::null_mut(), 0, 0, winuser::PM_REMOVE) {
winuser::TranslateMessage(&mut msg); winuser::TranslateMessage(&msg);
winuser::DispatchMessageW(&mut msg); winuser::DispatchMessageW(&msg);
} }
} else { } else {
if 0 == winuser::GetMessageW(&mut msg, ptr::null_mut(), 0, 0) { if 0 == winuser::GetMessageW(&mut msg, ptr::null_mut(), 0, 0) {
break 'main; break 'main;
} else { } else {
winuser::TranslateMessage(&mut msg); winuser::TranslateMessage(&msg);
winuser::DispatchMessageW(&mut msg); winuser::DispatchMessageW(&msg);
} }
} }
@ -714,8 +714,8 @@ unsafe fn flush_paint_messages<T: 'static>(
return; return;
} }
winuser::TranslateMessage(&mut msg); winuser::TranslateMessage(&msg);
winuser::DispatchMessageW(&mut msg); winuser::DispatchMessageW(&msg);
}); });
true true
} else { } else {
@ -938,7 +938,7 @@ unsafe fn public_window_callback_inner<T: 'static>(
winuser::MonitorFromRect(&new_rect, winuser::MONITOR_DEFAULTTONULL); winuser::MonitorFromRect(&new_rect, winuser::MONITOR_DEFAULTTONULL);
match fullscreen { match fullscreen {
Fullscreen::Borderless(ref mut fullscreen_monitor) => { Fullscreen::Borderless(ref mut fullscreen_monitor) => {
if new_monitor != ptr::null_mut() if !new_monitor.is_null()
&& fullscreen_monitor && fullscreen_monitor
.as_ref() .as_ref()
.map(|monitor| new_monitor != monitor.inner.hmonitor()) .map(|monitor| new_monitor != monitor.inner.hmonitor())
@ -1020,8 +1020,8 @@ unsafe fn public_window_callback_inner<T: 'static>(
winuser::WM_CHAR | winuser::WM_SYSCHAR => { winuser::WM_CHAR | winuser::WM_SYSCHAR => {
use crate::event::WindowEvent::ReceivedCharacter; use crate::event::WindowEvent::ReceivedCharacter;
use std::char; use std::char;
let is_high_surrogate = 0xD800 <= wparam && wparam <= 0xDBFF; let is_high_surrogate = (0xD800..=0xDBFF).contains(&wparam);
let is_low_surrogate = 0xDC00 <= wparam && wparam <= 0xDFFF; let is_low_surrogate = (0xDC00..=0xDFFF).contains(&wparam);
if is_high_surrogate { if is_high_surrogate {
userdata.window_state.lock().high_surrogate = Some(wparam as u16); userdata.window_state.lock().high_surrogate = Some(wparam as u16);

View file

@ -58,7 +58,7 @@ unsafe impl Sync for Cursor {}
pub struct DeviceId(u32); pub struct DeviceId(u32);
impl DeviceId { impl DeviceId {
pub unsafe fn dummy() -> Self { pub const unsafe fn dummy() -> Self {
DeviceId(0) DeviceId(0)
} }
} }
@ -88,7 +88,7 @@ unsafe impl Send for WindowId {}
unsafe impl Sync for WindowId {} unsafe impl Sync for WindowId {}
impl WindowId { impl WindowId {
pub unsafe fn dummy() -> Self { pub const unsafe fn dummy() -> Self {
use std::ptr::null_mut; use std::ptr::null_mut;
WindowId(null_mut()) WindowId(null_mut())

View file

@ -30,7 +30,7 @@ where
} }
pub fn wchar_to_string(wchar: &[wchar_t]) -> String { pub fn wchar_to_string(wchar: &[wchar_t]) -> String {
String::from_utf16_lossy(wchar).to_string() String::from_utf16_lossy(wchar)
} }
pub fn wchar_ptr_to_string(wchar: *const wchar_t) -> String { pub fn wchar_ptr_to_string(wchar: *const wchar_t) -> String {

View file

@ -116,7 +116,7 @@ impl Window {
event_loop::WindowData { event_loop::WindowData {
window_state: win.window_state.clone(), window_state: win.window_state.clone(),
event_loop_runner: event_loop.runner_shared.clone(), event_loop_runner: event_loop.runner_shared.clone(),
file_drop_handler, _file_drop_handler: file_drop_handler,
userdata_removed: Cell::new(false), userdata_removed: Cell::new(false),
recurse_depth: Cell::new(0), recurse_depth: Cell::new(0),
} }
@ -455,7 +455,7 @@ impl Window {
// string, so add it // string, so add it
display_name.push(0); display_name.push(0);
let mut native_video_mode = video_mode.video_mode.native_video_mode.clone(); let mut native_video_mode = video_mode.video_mode.native_video_mode;
let res = unsafe { let res = unsafe {
winuser::ChangeDisplaySettingsExW( winuser::ChangeDisplaySettingsExW(
@ -896,7 +896,7 @@ unsafe fn post_init<T: 'static>(
win.set_maximized(true); win.set_maximized(true);
} }
if let Some(_) = attributes.fullscreen { if attributes.fullscreen.is_some() {
win.set_fullscreen(attributes.fullscreen); win.set_fullscreen(attributes.fullscreen);
force_window_active(win.window.0); force_window_active(win.window.0);
} }
@ -986,7 +986,7 @@ unsafe fn taskbar_mark_fullscreen(handle: HWND, fullscreen: bool) {
TASKBAR_LIST.with(|task_bar_list_ptr| { TASKBAR_LIST.with(|task_bar_list_ptr| {
let mut task_bar_list = task_bar_list_ptr.get(); let mut task_bar_list = task_bar_list_ptr.get();
if task_bar_list == ptr::null_mut() { if task_bar_list.is_null() {
use winapi::{shared::winerror::S_OK, Interface}; use winapi::{shared::winerror::S_OK, Interface};
let hr = combaseapi::CoCreateInstance( let hr = combaseapi::CoCreateInstance(

View file

@ -69,12 +69,16 @@ impl Drop for Window {
pub struct WindowId(pub(crate) platform_impl::WindowId); pub struct WindowId(pub(crate) platform_impl::WindowId);
impl WindowId { impl WindowId {
/// Returns a dummy `WindowId`, useful for unit testing. The only guarantee made about the return /// Returns a dummy `WindowId`, useful for unit testing.
/// value of this function is that it will always be equal to itself and to future values returned ///
/// by this function. No other guarantees are made. This may be equal to a real `WindowId`. /// # Safety
///
/// The only guarantee made about the return value of this function is that
/// it will always be equal to itself and to future values returned by this function.
/// No other guarantees are made. This may be equal to a real `WindowId`.
/// ///
/// **Passing this into a winit function will result in undefined behavior.** /// **Passing this into a winit function will result in undefined behavior.**
pub unsafe fn dummy() -> Self { pub const unsafe fn dummy() -> Self {
WindowId(platform_impl::WindowId::dummy()) WindowId(platform_impl::WindowId::dummy())
} }
} }