|
|
@@ -141,6 +141,16 @@ static inline Rectangle<int> rectangleFromRECT (const RECT& r) noexcept |
|
|
|
return Rectangle<int>::leftTopRightBottom ((int) r.left, (int) r.top, (int) r.right, (int) r.bottom);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void setWindowPos (HWND hwnd, Rectangle<int> bounds, UINT flags)
|
|
|
|
{
|
|
|
|
SetWindowPos (hwnd, 0, bounds.getX(), bounds.getY(), bounds.getWidth(), bounds.getHeight(), flags);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void setWindowZOrder (HWND hwnd, HWND insertAfter)
|
|
|
|
{
|
|
|
|
SetWindowPos (hwnd, insertAfter, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOSENDCHANGING);
|
|
|
|
}
|
|
|
|
|
|
|
|
//==============================================================================
|
|
|
|
static void setDPIAwareness()
|
|
|
|
{
|
|
|
@@ -619,10 +629,7 @@ public: |
|
|
|
if (! hasMoved) flags |= SWP_NOMOVE;
|
|
|
|
if (! hasResized) flags |= SWP_NOSIZE;
|
|
|
|
|
|
|
|
SetWindowPos (hwnd, 0,
|
|
|
|
newBounds.getX(), newBounds.getY(),
|
|
|
|
newBounds.getWidth(), newBounds.getHeight(),
|
|
|
|
flags);
|
|
|
|
setWindowPos (hwnd, newBounds, flags);
|
|
|
|
|
|
|
|
if (hasResized && isValidPeer (this))
|
|
|
|
{
|
|
|
@@ -776,9 +783,7 @@ public: |
|
|
|
const bool oldDeactivate = shouldDeactivateTitleBar;
|
|
|
|
shouldDeactivateTitleBar = ((styleFlags & windowIsTemporary) == 0);
|
|
|
|
|
|
|
|
SetWindowPos (hwnd, alwaysOnTop ? HWND_TOPMOST : HWND_NOTOPMOST,
|
|
|
|
0, 0, 0, 0,
|
|
|
|
SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOSENDCHANGING);
|
|
|
|
setWindowZOrder (hwnd, alwaysOnTop ? HWND_TOPMOST : HWND_NOTOPMOST);
|
|
|
|
|
|
|
|
shouldDeactivateTitleBar = oldDeactivate;
|
|
|
|
|
|
|
@@ -815,9 +820,9 @@ public: |
|
|
|
// Must be careful not to try to put a topmost window behind a normal one, or Windows
|
|
|
|
// promotes the normal one to be topmost!
|
|
|
|
if (component.isAlwaysOnTop() == otherPeer->getComponent().isAlwaysOnTop())
|
|
|
|
SetWindowPos (hwnd, otherPeer->hwnd, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOSENDCHANGING);
|
|
|
|
setWindowZOrder (hwnd, otherPeer->hwnd);
|
|
|
|
else if (otherPeer->getComponent().isAlwaysOnTop())
|
|
|
|
SetWindowPos (hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOSENDCHANGING);
|
|
|
|
setWindowZOrder (hwnd, HWND_TOP);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
@@ -1351,7 +1356,7 @@ private: |
|
|
|
|
|
|
|
static void* toFrontCallback2 (void* h)
|
|
|
|
{
|
|
|
|
SetWindowPos ((HWND) h, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOSENDCHANGING);
|
|
|
|
setWindowZOrder ((HWND) h, HWND_TOP);
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
|
|
|
@@ -2203,8 +2208,8 @@ private: |
|
|
|
{
|
|
|
|
if (isFullScreen())
|
|
|
|
{
|
|
|
|
EnableMenuItem (menu, SC_RESTORE, MF_BYCOMMAND | MF_ENABLED);
|
|
|
|
EnableMenuItem (menu, SC_MOVE, MF_BYCOMMAND | MF_GRAYED);
|
|
|
|
EnableMenuItem (menu, SC_RESTORE, MF_BYCOMMAND | MF_ENABLED);
|
|
|
|
EnableMenuItem (menu, SC_MOVE, MF_BYCOMMAND | MF_GRAYED);
|
|
|
|
}
|
|
|
|
else if (! isMinimised())
|
|
|
|
{
|
|
|
@@ -2215,13 +2220,16 @@ private: |
|
|
|
|
|
|
|
void doSettingChange()
|
|
|
|
{
|
|
|
|
const_cast <Desktop::Displays&> (Desktop::getInstance().getDisplays()).refresh();
|
|
|
|
Desktop& desktop = Desktop::getInstance();
|
|
|
|
|
|
|
|
const_cast <Desktop::Displays&> (desktop.getDisplays()).refresh();
|
|
|
|
|
|
|
|
if (fullScreen && ! isMinimised())
|
|
|
|
{
|
|
|
|
const Rectangle<int> r (component.getParentMonitorArea());
|
|
|
|
const Desktop::Displays::Display& display
|
|
|
|
= desktop.getDisplays().getDisplayContaining (component.getScreenBounds().getCentre());
|
|
|
|
|
|
|
|
SetWindowPos (hwnd, 0, r.getX(), r.getY(), r.getWidth(), r.getHeight(),
|
|
|
|
setWindowPos (hwnd, display.userArea * display.scale,
|
|
|
|
SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOZORDER | SWP_NOSENDCHANGING);
|
|
|
|
}
|
|
|
|
}
|
|
|
@@ -2310,6 +2318,9 @@ private: |
|
|
|
case WM_MBUTTONUP:
|
|
|
|
case WM_RBUTTONUP: doMouseUp (getPointFromLParam (lParam), wParam); return 0;
|
|
|
|
|
|
|
|
case 0x020A: /* WM_MOUSEWHEEL */ doMouseWheel (wParam, true); return 0;
|
|
|
|
case 0x020E: /* WM_MOUSEHWHEEL */ doMouseWheel (wParam, false); return 0;
|
|
|
|
|
|
|
|
case WM_CAPTURECHANGED: doCaptureChanged(); return 0;
|
|
|
|
|
|
|
|
case WM_NCMOUSEMOVE:
|
|
|
@@ -2318,11 +2329,6 @@ private: |
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
case 0x020A: /* WM_MOUSEWHEEL */
|
|
|
|
case 0x020E: /* WM_MOUSEHWHEEL */
|
|
|
|
doMouseWheel (wParam, message == 0x020A);
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
case WM_TOUCH:
|
|
|
|
if (getTouchInputInfo != nullptr)
|
|
|
|
return doTouchEvent ((int) wParam, (HTOUCHINPUT) lParam);
|
|
|
@@ -2381,6 +2387,8 @@ private: |
|
|
|
if (doAppCommand (lParam))
|
|
|
|
return TRUE;
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case WM_MENUCHAR: // triggered when alt+something is pressed
|
|
|
|
return MNC_CLOSE << 16; // (avoids making the default system beep)
|
|
|
|
|
|
|
|