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:
parent
baf10de958
commit
ba10c35240
2 changed files with 17 additions and 1 deletions
|
|
@ -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,
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue