Skip to content

Commit 5199474

Browse files
authored
Bump MSRV to 1.80
1 parent 8c36ed4 commit 5199474

File tree

11 files changed

+70
-98
lines changed

11 files changed

+70
-98
lines changed

.github/workflows/ci.yml

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ jobs:
5555
strategy:
5656
fail-fast: false
5757
matrix:
58-
toolchain: [stable, nightly, '1.73']
58+
toolchain: [stable, nightly, '1.80']
5959
platform:
6060
# Note: Make sure that we test all the `docs.rs` targets defined in Cargo.toml!
6161
- { name: 'Windows 64bit MSVC', target: x86_64-pc-windows-msvc, os: windows-latest, }
@@ -82,13 +82,13 @@ jobs:
8282
- toolchain: nightly
8383
platform: { name: 'Windows 32bit GNU' }
8484
# Android is tested on stable-3
85-
- toolchain: '1.73'
85+
- toolchain: '1.80'
8686
platform: { name: 'Android' }
8787
# Redox OS doesn't follow MSRV
88-
- toolchain: '1.73'
88+
- toolchain: '1.80'
8989
platform: { name: 'Redox OS' }
9090
include:
91-
- toolchain: '1.73'
91+
- toolchain: '1.80'
9292
platform: { name: 'Android', target: aarch64-linux-android, os: ubuntu-latest, options: '--package=winit --features=android-native-activity', cmd: 'apk --' }
9393
- toolchain: 'nightly'
9494
platform: { name: 'Web', target: wasm32-unknown-unknown, os: ubuntu-latest, test-options: -Zdoctest-xcompile }
@@ -183,19 +183,19 @@ jobs:
183183
- name: Test dpi crate
184184
if: >
185185
contains(matrix.platform.name, 'Linux 64bit') &&
186-
matrix.toolchain != '1.73'
186+
matrix.toolchain != '1.80'
187187
run: cargo test -p dpi
188188

189189
- name: Check dpi crate (no_std)
190190
if: >
191191
contains(matrix.platform.name, 'Linux 64bit') &&
192-
matrix.toolchain != '1.73'
192+
matrix.toolchain != '1.80'
193193
run: cargo check -p dpi --no-default-features
194194

195195
- name: Build tests
196196
if: >
197197
!contains(matrix.platform.target, 'redox') &&
198-
matrix.toolchain != '1.73'
198+
matrix.toolchain != '1.80'
199199
run: cargo $CMD test --no-run $OPTIONS
200200

201201
- name: Run tests
@@ -204,7 +204,7 @@ jobs:
204204
!contains(matrix.platform.target, 'ios') &&
205205
(!contains(matrix.platform.target, 'wasm32') || matrix.toolchain == 'nightly') &&
206206
!contains(matrix.platform.target, 'redox') &&
207-
matrix.toolchain != '1.73'
207+
matrix.toolchain != '1.80'
208208
run: cargo $CMD test $OPTIONS
209209

210210
- name: Lint with clippy
@@ -214,7 +214,7 @@ jobs:
214214
- name: Build tests with serde enabled
215215
if: >
216216
!contains(matrix.platform.target, 'redox') &&
217-
matrix.toolchain != '1.73'
217+
matrix.toolchain != '1.80'
218218
run: cargo $CMD test --no-run $OPTIONS $TEST_OPTIONS --features serde
219219

220220
- name: Run tests with serde enabled
@@ -223,7 +223,7 @@ jobs:
223223
!contains(matrix.platform.target, 'ios') &&
224224
(!contains(matrix.platform.target, 'wasm32') || matrix.toolchain == 'nightly') &&
225225
!contains(matrix.platform.target, 'redox') &&
226-
matrix.toolchain != '1.73'
226+
matrix.toolchain != '1.80'
227227
run: cargo $CMD test $OPTIONS $TEST_OPTIONS --features serde
228228

229229
- name: Check docs.rs documentation

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,7 @@ resolver = "2"
396396
edition = "2021"
397397
license = "Apache-2.0"
398398
repository = "https://github.com/rust-windowing/winit"
399-
rust-version = "1.73"
399+
rust-version = "1.80"
400400

401401
[workspace.dependencies]
402402
mint = "0.5.6"

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ For contributing guidelines see [CONTRIBUTING.md](./CONTRIBUTING.md).
3939

4040
## MSRV Policy
4141

42-
This crate's Minimum Supported Rust Version (MSRV) is **1.73**. Changes to
42+
This crate's Minimum Supported Rust Version (MSRV) is **1.80**. Changes to
4343
the MSRV will be accompanied by a minor version bump.
4444

4545
As a **tentative** policy, the upper bound of the MSRV is given by the following

src/changelog/unreleased.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ changelog entry.
8585
- `ActiveEventLoop::create_window` now returns `Box<dyn Window>`.
8686
- `ApplicationHandler` now uses `dyn ActiveEventLoop`.
8787
- On Web, let events wake up event loop immediately when using `ControlFlow::Poll`.
88-
- Bump MSRV from `1.70` to `1.73`.
88+
- Bump MSRV from `1.70` to `1.80`.
8989
- Changed `ApplicationHandler::user_event` to `user_wake_up`, removing the
9090
generic user event.
9191

src/platform_impl/linux/common/xkb/mod.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use std::os::raw::c_char;
44
use std::os::unix::io::OwnedFd;
55
use std::ptr::{self, NonNull};
66
use std::sync::atomic::{AtomicBool, Ordering};
7+
use std::sync::LazyLock;
78

89
use smol_str::SmolStr;
910
use tracing::warn;
@@ -16,7 +17,6 @@ use {x11_dl::xlib_xcb::xcb_connection_t, xkbcommon_dl::x11::xkbcommon_x11_handle
1617

1718
use crate::event::{ElementState, KeyEvent};
1819
use crate::keyboard::{Key, KeyLocation};
19-
use crate::utils::Lazy;
2020

2121
mod compose;
2222
mod keymap;
@@ -32,10 +32,10 @@ pub use state::XkbState;
3232
// TODO: Wire this up without using a static `AtomicBool`.
3333
static RESET_DEAD_KEYS: AtomicBool = AtomicBool::new(false);
3434

35-
static XKBH: Lazy<&'static XkbCommon> = Lazy::new(xkbcommon_handle);
36-
static XKBCH: Lazy<&'static XkbCommonCompose> = Lazy::new(xkbcommon_compose_handle);
35+
static XKBH: LazyLock<&'static XkbCommon> = LazyLock::new(xkbcommon_handle);
36+
static XKBCH: LazyLock<&'static XkbCommonCompose> = LazyLock::new(xkbcommon_compose_handle);
3737
#[cfg(feature = "x11")]
38-
static XKBXH: Lazy<&'static xkb::x11::XkbCommonX11> = Lazy::new(xkbcommon_x11_handle);
38+
static XKBXH: LazyLock<&'static xkb::x11::XkbCommonX11> = LazyLock::new(xkbcommon_x11_handle);
3939

4040
#[inline(always)]
4141
pub fn reset_dead_keys() {

src/platform_impl/linux/x11/mod.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use std::ops::Deref;
66
use std::os::raw::*;
77
use std::os::unix::io::{AsFd, AsRawFd, BorrowedFd, RawFd};
88
use std::sync::mpsc::{self, Receiver, Sender, TryRecvError};
9-
use std::sync::{Arc, Mutex, Weak};
9+
use std::sync::{Arc, LazyLock, Mutex, Weak};
1010
use std::time::{Duration, Instant};
1111
use std::{fmt, mem, ptr, slice, str};
1212

@@ -36,7 +36,6 @@ use crate::platform::x11::XlibErrorHook;
3636
use crate::platform_impl::common::xkb::Context;
3737
use crate::platform_impl::platform::min_timeout;
3838
use crate::platform_impl::x11::window::Window;
39-
use crate::utils::Lazy;
4039
use crate::window::{
4140
CustomCursor as CoreCustomCursor, CustomCursorSource, Theme, Window as CoreWindow,
4241
WindowAttributes, WindowId,
@@ -74,8 +73,8 @@ type X11rbConnection = x11rb::xcb_ffi::XCBConnection;
7473
type X11Source = Generic<BorrowedFd<'static>>;
7574

7675
#[cfg(x11_platform)]
77-
pub(crate) static X11_BACKEND: Lazy<Mutex<Result<Arc<XConnection>, XNotSupported>>> =
78-
Lazy::new(|| Mutex::new(XConnection::new(Some(x_error_callback)).map(Arc::new)));
76+
pub(crate) static X11_BACKEND: LazyLock<Mutex<Result<Arc<XConnection>, XNotSupported>>> =
77+
LazyLock::new(|| Mutex::new(XConnection::new(Some(x_error_callback)).map(Arc::new)));
7978

8079
/// Hooks for X11 errors.
8180
#[cfg(x11_platform)]
@@ -252,7 +251,7 @@ impl EventLoop {
252251
// Remember default locale to restore it if target locale is unsupported
253252
// by Xlib
254253
let default_locale = setlocale(LC_CTYPE, ptr::null());
255-
setlocale(LC_CTYPE, b"\0".as_ptr() as *const _);
254+
setlocale(LC_CTYPE, c"".as_ptr() as *const _);
256255

257256
// Check if set locale is supported by Xlib.
258257
// If not, calls to some Xlib functions like `XSetLocaleModifiers`

src/platform_impl/windows/dark_mode.rs

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use std::sync::LazyLock;
12
/// This is a simple implementation of support for Windows Dark Mode,
23
/// which is inspired by the solution in https://github.com/ysc3839/win32-darkmode
34
use std::{ffi::c_void, ptr};
@@ -11,10 +12,9 @@ use windows_sys::Win32::UI::Controls::SetWindowTheme;
1112
use windows_sys::Win32::UI::WindowsAndMessaging::{SystemParametersInfoA, SPI_GETHIGHCONTRAST};
1213

1314
use super::util;
14-
use crate::utils::Lazy;
1515
use crate::window::Theme;
1616

17-
static WIN10_BUILD_VERSION: Lazy<Option<u32>> = Lazy::new(|| {
17+
static WIN10_BUILD_VERSION: LazyLock<Option<u32>> = LazyLock::new(|| {
1818
type RtlGetVersion = unsafe extern "system" fn(*mut OSVERSIONINFOW) -> NTSTATUS;
1919
let handle = get_function!("ntdll.dll", RtlGetVersion);
2020

@@ -42,7 +42,7 @@ static WIN10_BUILD_VERSION: Lazy<Option<u32>> = Lazy::new(|| {
4242
}
4343
});
4444

45-
static DARK_MODE_SUPPORTED: Lazy<bool> = Lazy::new(|| {
45+
static DARK_MODE_SUPPORTED: LazyLock<bool> = LazyLock::new(|| {
4646
// We won't try to do anything for windows versions < 17763
4747
// (Windows 10 October 2018 update)
4848
match *WIN10_BUILD_VERSION {
@@ -51,8 +51,9 @@ static DARK_MODE_SUPPORTED: Lazy<bool> = Lazy::new(|| {
5151
}
5252
});
5353

54-
static DARK_THEME_NAME: Lazy<Vec<u16>> = Lazy::new(|| util::encode_wide("DarkMode_Explorer"));
55-
static LIGHT_THEME_NAME: Lazy<Vec<u16>> = Lazy::new(|| util::encode_wide(""));
54+
static DARK_THEME_NAME: LazyLock<Vec<u16>> =
55+
LazyLock::new(|| util::encode_wide("DarkMode_Explorer"));
56+
static LIGHT_THEME_NAME: LazyLock<Vec<u16>> = LazyLock::new(|| util::encode_wide(""));
5657

5758
/// Attempt to set a theme on a window, if necessary.
5859
/// Returns the theme that was picked
@@ -99,8 +100,8 @@ fn set_dark_mode_for_window(hwnd: HWND, is_dark_mode: bool) -> bool {
99100
cbData: usize,
100101
}
101102

102-
static SET_WINDOW_COMPOSITION_ATTRIBUTE: Lazy<Option<SetWindowCompositionAttribute>> =
103-
Lazy::new(|| get_function!("user32.dll", SetWindowCompositionAttribute));
103+
static SET_WINDOW_COMPOSITION_ATTRIBUTE: LazyLock<Option<SetWindowCompositionAttribute>> =
104+
LazyLock::new(|| get_function!("user32.dll", SetWindowCompositionAttribute));
104105

105106
if let Some(set_window_composition_attribute) = *SET_WINDOW_COMPOSITION_ATTRIBUTE {
106107
unsafe {
@@ -128,19 +129,20 @@ pub fn should_use_dark_mode() -> bool {
128129

129130
fn should_apps_use_dark_mode() -> bool {
130131
type ShouldAppsUseDarkMode = unsafe extern "system" fn() -> bool;
131-
static SHOULD_APPS_USE_DARK_MODE: Lazy<Option<ShouldAppsUseDarkMode>> = Lazy::new(|| unsafe {
132-
const UXTHEME_SHOULDAPPSUSEDARKMODE_ORDINAL: PCSTR = 132 as PCSTR;
132+
static SHOULD_APPS_USE_DARK_MODE: LazyLock<Option<ShouldAppsUseDarkMode>> =
133+
LazyLock::new(|| unsafe {
134+
const UXTHEME_SHOULDAPPSUSEDARKMODE_ORDINAL: PCSTR = 132 as PCSTR;
133135

134-
let module = LoadLibraryA("uxtheme.dll\0".as_ptr());
136+
let module = LoadLibraryA(c"uxtheme.dll".as_ptr().cast());
135137

136-
if module.is_null() {
137-
return None;
138-
}
138+
if module.is_null() {
139+
return None;
140+
}
139141

140-
let handle = GetProcAddress(module, UXTHEME_SHOULDAPPSUSEDARKMODE_ORDINAL);
142+
let handle = GetProcAddress(module, UXTHEME_SHOULDAPPSUSEDARKMODE_ORDINAL);
141143

142-
handle.map(|handle| std::mem::transmute(handle))
143-
});
144+
handle.map(|handle| std::mem::transmute(handle))
145+
});
144146

145147
SHOULD_APPS_USE_DARK_MODE
146148
.map(|should_apps_use_dark_mode| unsafe { (should_apps_use_dark_mode)() })

src/platform_impl/windows/event_loop.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use std::ffi::c_void;
77
use std::os::windows::io::{AsRawHandle as _, FromRawHandle as _, OwnedHandle, RawHandle};
88
use std::rc::Rc;
99
use std::sync::atomic::{AtomicU32, Ordering};
10-
use std::sync::{Arc, Mutex, MutexGuard};
10+
use std::sync::{Arc, LazyLock, Mutex, MutexGuard};
1111
use std::time::{Duration, Instant};
1212
use std::{fmt, mem, panic, ptr};
1313

@@ -91,7 +91,6 @@ use crate::platform_impl::platform::window_state::{
9191
};
9292
use crate::platform_impl::platform::{raw_input, util, wrap_device_id};
9393
use crate::platform_impl::Window;
94-
use crate::utils::Lazy;
9594
use crate::window::{
9695
CustomCursor as CoreCustomCursor, CustomCursorSource, Theme, Window as CoreWindow,
9796
WindowAttributes, WindowId,
@@ -833,8 +832,8 @@ pub(crate) static DESTROY_MSG_ID: LazyMessageId = LazyMessageId::new("Winit::Des
833832
// documentation in the `window_state` module for more information.
834833
pub(crate) static SET_RETAIN_STATE_ON_SIZE_MSG_ID: LazyMessageId =
835834
LazyMessageId::new("Winit::SetRetainMaximized\0");
836-
static THREAD_EVENT_TARGET_WINDOW_CLASS: Lazy<Vec<u16>> =
837-
Lazy::new(|| util::encode_wide("Winit Thread Event Target"));
835+
static THREAD_EVENT_TARGET_WINDOW_CLASS: LazyLock<Vec<u16>> =
836+
LazyLock::new(|| util::encode_wide("Winit Thread Event Target"));
838837
/// When the taskbar is created, it registers a message with the "TaskbarCreated" string and then
839838
/// broadcasts this message to all top-level windows <https://docs.microsoft.com/en-us/windows/win32/shell/taskbar#taskbar-creation-notification>
840839
pub(crate) static TASKBAR_CREATED: LazyMessageId = LazyMessageId::new("TaskbarCreated\0");

src/platform_impl/windows/keyboard_layout.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use std::collections::hash_map::Entry;
22
use std::collections::{HashMap, HashSet};
33
use std::ffi::OsString;
44
use std::os::windows::ffi::OsStringExt;
5-
use std::sync::Mutex;
5+
use std::sync::{LazyLock, Mutex};
66

77
use smol_str::SmolStr;
88
use windows_sys::Win32::System::SystemServices::{LANG_JAPANESE, LANG_KOREAN};
@@ -43,10 +43,9 @@ use windows_sys::Win32::UI::Input::KeyboardAndMouse::{
4343

4444
use crate::keyboard::{Key, KeyCode, ModifiersState, NamedKey, NativeKey, PhysicalKey};
4545
use crate::platform_impl::{loword, primarylangid, scancode_to_physicalkey};
46-
use crate::utils::Lazy;
4746

48-
pub(crate) static LAYOUT_CACHE: Lazy<Mutex<LayoutCache>> =
49-
Lazy::new(|| Mutex::new(LayoutCache::default()));
47+
pub(crate) static LAYOUT_CACHE: LazyLock<Mutex<LayoutCache>> =
48+
LazyLock::new(|| Mutex::new(LayoutCache::default()));
5049

5150
fn key_pressed(vkey: VIRTUAL_KEY) -> bool {
5251
unsafe { (GetKeyState(vkey as i32) & (1 << 15)) == (1 << 15) }
@@ -71,7 +70,7 @@ const NUMPAD_VKEYS: [VIRTUAL_KEY; 16] = [
7170
VK_DIVIDE,
7271
];
7372

74-
static NUMPAD_KEYCODES: Lazy<HashSet<KeyCode>> = Lazy::new(|| {
73+
static NUMPAD_KEYCODES: LazyLock<HashSet<KeyCode>> = LazyLock::new(|| {
7574
let mut keycodes = HashSet::new();
7675
keycodes.insert(KeyCode::Numpad0);
7776
keycodes.insert(KeyCode::Numpad1);

src/platform_impl/windows/util.rs

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use std::iter::once;
33
use std::ops::BitAnd;
44
use std::os::windows::prelude::{OsStrExt, OsStringExt};
55
use std::sync::atomic::{AtomicBool, Ordering};
6+
use std::sync::LazyLock;
67
use std::{io, mem, ptr};
78

89
use windows_sys::core::{HRESULT, PCWSTR};
@@ -23,7 +24,6 @@ use windows_sys::Win32::UI::WindowsAndMessaging::{
2324
WINDOWPLACEMENT,
2425
};
2526

26-
use crate::utils::Lazy;
2727
use crate::window::CursorIcon;
2828

2929
pub fn encode_wide(string: impl AsRef<OsStr>) -> Vec<u16> {
@@ -251,25 +251,26 @@ pub type GetPointerDeviceRects = unsafe extern "system" fn(
251251
pub type GetPointerTouchInfo =
252252
unsafe extern "system" fn(pointer_id: u32, touch_info: *mut POINTER_TOUCH_INFO) -> BOOL;
253253

254-
pub(crate) static GET_DPI_FOR_WINDOW: Lazy<Option<GetDpiForWindow>> =
255-
Lazy::new(|| get_function!("user32.dll", GetDpiForWindow));
256-
pub(crate) static ADJUST_WINDOW_RECT_EX_FOR_DPI: Lazy<Option<AdjustWindowRectExForDpi>> =
257-
Lazy::new(|| get_function!("user32.dll", AdjustWindowRectExForDpi));
258-
pub(crate) static GET_DPI_FOR_MONITOR: Lazy<Option<GetDpiForMonitor>> =
259-
Lazy::new(|| get_function!("shcore.dll", GetDpiForMonitor));
260-
pub(crate) static ENABLE_NON_CLIENT_DPI_SCALING: Lazy<Option<EnableNonClientDpiScaling>> =
261-
Lazy::new(|| get_function!("user32.dll", EnableNonClientDpiScaling));
262-
pub(crate) static SET_PROCESS_DPI_AWARENESS_CONTEXT: Lazy<Option<SetProcessDpiAwarenessContext>> =
263-
Lazy::new(|| get_function!("user32.dll", SetProcessDpiAwarenessContext));
264-
pub(crate) static SET_PROCESS_DPI_AWARENESS: Lazy<Option<SetProcessDpiAwareness>> =
265-
Lazy::new(|| get_function!("shcore.dll", SetProcessDpiAwareness));
266-
pub(crate) static SET_PROCESS_DPI_AWARE: Lazy<Option<SetProcessDPIAware>> =
267-
Lazy::new(|| get_function!("user32.dll", SetProcessDPIAware));
268-
pub(crate) static GET_POINTER_FRAME_INFO_HISTORY: Lazy<Option<GetPointerFrameInfoHistory>> =
269-
Lazy::new(|| get_function!("user32.dll", GetPointerFrameInfoHistory));
270-
pub(crate) static SKIP_POINTER_FRAME_MESSAGES: Lazy<Option<SkipPointerFrameMessages>> =
271-
Lazy::new(|| get_function!("user32.dll", SkipPointerFrameMessages));
272-
pub(crate) static GET_POINTER_DEVICE_RECTS: Lazy<Option<GetPointerDeviceRects>> =
273-
Lazy::new(|| get_function!("user32.dll", GetPointerDeviceRects));
274-
pub(crate) static GET_POINTER_TOUCH_INFO: Lazy<Option<GetPointerTouchInfo>> =
275-
Lazy::new(|| get_function!("user32.dll", GetPointerTouchInfo));
254+
pub(crate) static GET_DPI_FOR_WINDOW: LazyLock<Option<GetDpiForWindow>> =
255+
LazyLock::new(|| get_function!("user32.dll", GetDpiForWindow));
256+
pub(crate) static ADJUST_WINDOW_RECT_EX_FOR_DPI: LazyLock<Option<AdjustWindowRectExForDpi>> =
257+
LazyLock::new(|| get_function!("user32.dll", AdjustWindowRectExForDpi));
258+
pub(crate) static GET_DPI_FOR_MONITOR: LazyLock<Option<GetDpiForMonitor>> =
259+
LazyLock::new(|| get_function!("shcore.dll", GetDpiForMonitor));
260+
pub(crate) static ENABLE_NON_CLIENT_DPI_SCALING: LazyLock<Option<EnableNonClientDpiScaling>> =
261+
LazyLock::new(|| get_function!("user32.dll", EnableNonClientDpiScaling));
262+
pub(crate) static SET_PROCESS_DPI_AWARENESS_CONTEXT: LazyLock<
263+
Option<SetProcessDpiAwarenessContext>,
264+
> = LazyLock::new(|| get_function!("user32.dll", SetProcessDpiAwarenessContext));
265+
pub(crate) static SET_PROCESS_DPI_AWARENESS: LazyLock<Option<SetProcessDpiAwareness>> =
266+
LazyLock::new(|| get_function!("shcore.dll", SetProcessDpiAwareness));
267+
pub(crate) static SET_PROCESS_DPI_AWARE: LazyLock<Option<SetProcessDPIAware>> =
268+
LazyLock::new(|| get_function!("user32.dll", SetProcessDPIAware));
269+
pub(crate) static GET_POINTER_FRAME_INFO_HISTORY: LazyLock<Option<GetPointerFrameInfoHistory>> =
270+
LazyLock::new(|| get_function!("user32.dll", GetPointerFrameInfoHistory));
271+
pub(crate) static SKIP_POINTER_FRAME_MESSAGES: LazyLock<Option<SkipPointerFrameMessages>> =
272+
LazyLock::new(|| get_function!("user32.dll", SkipPointerFrameMessages));
273+
pub(crate) static GET_POINTER_DEVICE_RECTS: LazyLock<Option<GetPointerDeviceRects>> =
274+
LazyLock::new(|| get_function!("user32.dll", GetPointerDeviceRects));
275+
pub(crate) static GET_POINTER_TOUCH_INFO: LazyLock<Option<GetPointerTouchInfo>> =
276+
LazyLock::new(|| get_function!("user32.dll", GetPointerTouchInfo));

0 commit comments

Comments
 (0)