mirror of
https://github.com/rust-windowing/winit.git
synced 2026-06-27 15:13:13 -04:00
fix(windows): configure hidden and grabbed cursor
This fixes issues where a hidden and grabbed cursor could leave the
window and become visible on top of the windows taskbar (and potentially
leave the window altogether if the taskbar is clicked) under at least
two occasions:
- When a window is overlapping the taskbar.
- When a window is maximized and Automatically hide the taskbar has
been enabled.
This approach of confining the cursor to the center of the window is
used in SDL.
This commit is contained in:
committed by
Kirill Chibisov
parent
baf10de958
commit
ba10c35240
@@ -510,7 +510,22 @@ impl CursorFlags {
|
||||
|
||||
if util::is_focused(window) {
|
||||
let cursor_clip = match self.contains(CursorFlags::GRABBED) {
|
||||
true => Some(client_rect),
|
||||
true => {
|
||||
if self.contains(CursorFlags::HIDDEN) {
|
||||
// Confine the cursor to the center of the window if the cursor is hidden. This avoids
|
||||
// problems with the cursor activating the taskbar if the window borders or overlaps that.
|
||||
let cx = (client_rect.left + client_rect.right) / 2;
|
||||
let cy = (client_rect.top + client_rect.bottom) / 2;
|
||||
Some(RECT {
|
||||
left: cx,
|
||||
right: cx + 1,
|
||||
top: cy,
|
||||
bottom: cy + 1,
|
||||
})
|
||||
} else {
|
||||
Some(client_rect)
|
||||
}
|
||||
}
|
||||
false => None,
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user