fix: add check in IsMaximized for non-WS_THICKFRAME windows (#26586)
* fix: add check in IsMaximized for non-WS_THICKFRAME windows * remove logs * change GetPosition for GetNativeWindow * change GetPosition for GetNativeWindow in IsMaximize * add top left corner check * add transparent maximization test * replace window and display comparison * rebase off master
This commit is contained in:
parent
acfbbe9869
commit
32d4c9ad85
3 changed files with 36 additions and 5 deletions
|
@ -530,6 +530,20 @@ void NativeWindowViews::Unmaximize() {
|
|||
}
|
||||
|
||||
bool NativeWindowViews::IsMaximized() {
|
||||
// For window without WS_THICKFRAME style, we can not call IsMaximized().
|
||||
// This path will be used for transparent windows as well.
|
||||
|
||||
#if defined(OS_WIN)
|
||||
if (!(::GetWindowLong(GetAcceleratedWidget(), GWL_STYLE) & WS_THICKFRAME)) {
|
||||
// Compare the size of the window with the size of the display
|
||||
auto display = display::Screen::GetScreen()->GetDisplayNearestWindow(
|
||||
GetNativeWindow());
|
||||
// Maximized if the window is the same dimensions and placement as the
|
||||
// display
|
||||
return GetBounds() == display.work_area();
|
||||
}
|
||||
#endif
|
||||
|
||||
return widget()->IsMaximized();
|
||||
}
|
||||
|
||||
|
|
|
@ -149,9 +149,7 @@ std::set<NativeWindowViews*> NativeWindowViews::forwarding_windows_;
|
|||
HHOOK NativeWindowViews::mouse_hook_ = NULL;
|
||||
|
||||
void NativeWindowViews::Maximize() {
|
||||
// Only use Maximize() when:
|
||||
// 1. window has WS_THICKFRAME style;
|
||||
// 2. and window is not frameless when there is autohide taskbar.
|
||||
// Only use Maximize() when window has WS_THICKFRAME style
|
||||
if (::GetWindowLong(GetAcceleratedWidget(), GWL_STYLE) & WS_THICKFRAME) {
|
||||
if (IsVisible())
|
||||
widget()->Maximize();
|
||||
|
@ -161,8 +159,8 @@ void NativeWindowViews::Maximize() {
|
|||
return;
|
||||
} else {
|
||||
restore_bounds_ = GetBounds();
|
||||
auto display =
|
||||
display::Screen::GetScreen()->GetDisplayNearestPoint(GetPosition());
|
||||
auto display = display::Screen::GetScreen()->GetDisplayNearestWindow(
|
||||
GetNativeWindow());
|
||||
SetBounds(display.work_area(), false);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1059,6 +1059,25 @@ describe('BrowserWindow module', () => {
|
|||
await unmaximize;
|
||||
expectBoundsEqual(w.getNormalBounds(), bounds);
|
||||
});
|
||||
it('can check transparent window maximization', async () => {
|
||||
w.destroy();
|
||||
w = new BrowserWindow({
|
||||
show: false,
|
||||
width: 300,
|
||||
height: 300,
|
||||
transparent: true
|
||||
});
|
||||
|
||||
const maximize = emittedOnce(w, 'resize');
|
||||
w.show();
|
||||
w.maximize();
|
||||
await maximize;
|
||||
expect(w.isMaximized()).to.equal(true);
|
||||
const unmaximize = emittedOnce(w, 'resize');
|
||||
w.unmaximize();
|
||||
await unmaximize;
|
||||
expect(w.isMaximized()).to.equal(false);
|
||||
});
|
||||
});
|
||||
|
||||
ifdescribe(process.platform !== 'linux')('Minimized state', () => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue