Skip to content

Commit

Permalink
Fix hiding a maximized window On Windows (#2336)
Browse files Browse the repository at this point in the history
  • Loading branch information
amrbashir committed Jul 23, 2022
1 parent 1cd0e94 commit 08d0259
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 12 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Expand Up @@ -8,6 +8,7 @@ And please only add new entries to the top of this list, right below the `# Unre

# Unreleased

- On Windows, fix hiding a maximized window.
- On Android, `ndk-glue`'s `NativeWindow` lock is now held between `Event::Resumed` and `Event::Suspended`.
- On Web, added `EventLoopExtWebSys` with a `spawn` method to start the event loop without throwing an exception.
- Added `WindowEvent::Occluded(bool)`, currently implemented on macOS and X11.
Expand Down
22 changes: 10 additions & 12 deletions src/platform_impl/windows/window_state.rs
Expand Up @@ -106,7 +106,6 @@ bitflags! {

const EXCLUSIVE_FULLSCREEN_OR_MASK = WindowFlags::ALWAYS_ON_TOP.bits;
const NO_DECORATIONS_AND_MASK = !WindowFlags::RESIZABLE.bits;
const INVISIBLE_AND_MASK = !WindowFlags::MAXIMIZED.bits;
}
}

Expand Down Expand Up @@ -229,9 +228,6 @@ impl WindowFlags {
if self.contains(WindowFlags::MARKER_EXCLUSIVE_FULLSCREEN) {
self |= WindowFlags::EXCLUSIVE_FULLSCREEN_OR_MASK;
}
if !self.contains(WindowFlags::VISIBLE) {
self &= WindowFlags::INVISIBLE_AND_MASK;
}
if !self.contains(WindowFlags::DECORATIONS) {
self &= WindowFlags::NO_DECORATIONS_AND_MASK;
}
Expand Down Expand Up @@ -294,21 +290,17 @@ impl WindowFlags {
new = new.mask();

let diff = self ^ new;

if diff == WindowFlags::empty() {
return;
}

if diff.contains(WindowFlags::VISIBLE) {
if new.contains(WindowFlags::VISIBLE) {
unsafe {
ShowWindow(
window,
match new.contains(WindowFlags::VISIBLE) {
true => SW_SHOW,
false => SW_HIDE,
},
);
ShowWindow(window, SW_SHOW);
}
}

if diff.contains(WindowFlags::ALWAYS_ON_TOP) {
unsafe {
SetWindowPos(
Expand Down Expand Up @@ -352,6 +344,12 @@ impl WindowFlags {
}
}

if !new.contains(WindowFlags::VISIBLE) {
unsafe {
ShowWindow(window, SW_HIDE);
}
}

if diff != WindowFlags::empty() {
let (style, style_ex) = new.to_window_styles();

Expand Down

0 comments on commit 08d0259

Please sign in to comment.