fix: moveAbove not working on Windows (#23161)

* fix moveAbove on Windows systems

The documentation for [setWindowPos](https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowpos) second argument `hWndInsertAfter` is a bit confusing...

> A handle to the window to precede the positioned window in the Z order. This parameter must be a window handle or one of the following values.

Since Windows refers to the Z order from low to high it means that the window provided as reference will always _precede_ the electron window, which is the opposite of what we want in this function, since the electron window is displayed behind the referenced window.

The change is simply to ask `SetWindowPos` to position our window *behind* the window that's *above* the reference window, effectively making our window sit just above the reference one.

* lint
This commit is contained in:
Iván Montes 2020-04-21 21:58:38 +02:00 committed by GitHub
parent a041882192
commit b3909f5600
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -654,10 +654,8 @@ bool NativeWindowViews::MoveAbove(const std::string& sourceId) {
if (!::IsWindow(otherWindow)) if (!::IsWindow(otherWindow))
return false; return false;
gfx::Point pos = GetPosition(); ::SetWindowPos(GetAcceleratedWidget(), GetWindow(otherWindow, GW_HWNDPREV), 0,
gfx::Size size = GetSize(); 0, 0, 0,
::SetWindowPos(GetAcceleratedWidget(), otherWindow, pos.x(), pos.y(),
size.width(), size.height(),
SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW); SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
#elif defined(USE_X11) #elif defined(USE_X11)
if (!IsWindowValid(id.id)) if (!IsWindowValid(id.id))