Browse Source

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
Iván Montes 5 years ago
parent
commit
b3909f5600
1 changed files with 2 additions and 4 deletions
  1. 2 4
      shell/browser/native_window_views.cc

+ 2 - 4
shell/browser/native_window_views.cc

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