diff options
| author | Vaxry <vaxry@vaxry.net> | 2023-12-15 15:38:08 +0000 |
|---|---|---|
| committer | Vaxry <vaxry@vaxry.net> | 2023-12-15 15:38:20 +0000 |
| commit | 395ab3ba370f5e12fcba594232c338c16deef0ed (patch) | |
| tree | 8e472f2ba8c71df1b881585b40b9aa2e61d07454 /src/events/Windows.cpp | |
| parent | 36fa33f7ca2f555cc8581a13c5899effed2bf84b (diff) | |
xdg: use better min/max size checks for floating resizes
Diffstat (limited to 'src/events/Windows.cpp')
| -rw-r--r-- | src/events/Windows.cpp | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp index efefcbec..390fb1e1 100644 --- a/src/events/Windows.cpp +++ b/src/events/Windows.cpp @@ -814,22 +814,29 @@ void Events::listener_commitWindow(void* owner, void* data) { if (PWINDOW->m_bIsX11 || !PWINDOW->m_bIsFloating || PWINDOW->m_bIsFullscreen) return; - const auto ISRIGID = PWINDOW->m_uSurface.xdg->toplevel->current.max_height == PWINDOW->m_uSurface.xdg->toplevel->current.min_height && - PWINDOW->m_uSurface.xdg->toplevel->current.max_width == PWINDOW->m_uSurface.xdg->toplevel->current.min_width; + const auto MINSIZE = Vector2D{PWINDOW->m_uSurface.xdg->toplevel->current.min_width, PWINDOW->m_uSurface.xdg->toplevel->current.min_height}; + const auto MAXSIZE = Vector2D{PWINDOW->m_uSurface.xdg->toplevel->current.max_width, PWINDOW->m_uSurface.xdg->toplevel->current.max_height}; - if (!ISRIGID) + if (MAXSIZE < Vector2D{1, 1}) return; - const Vector2D REQUESTEDSIZE = {PWINDOW->m_uSurface.xdg->toplevel->current.max_width, PWINDOW->m_uSurface.xdg->toplevel->current.max_height}; + const auto REALSIZE = PWINDOW->m_vRealSize.goalv(); + Vector2D newSize = REALSIZE; - if (REQUESTEDSIZE == PWINDOW->m_vReportedSize || REQUESTEDSIZE.x < 5 || REQUESTEDSIZE.y < 5) - return; + if (MAXSIZE.x < newSize.x) + newSize.x = MAXSIZE.x; + if (MAXSIZE.y < newSize.y) + newSize.y = MAXSIZE.y; + if (MINSIZE.x > newSize.x) + newSize.x = MINSIZE.x; + if (MINSIZE.y > newSize.y) + newSize.y = MINSIZE.y; - const Vector2D DELTA = PWINDOW->m_vReportedSize - REQUESTEDSIZE; + const Vector2D DELTA = REALSIZE - newSize; PWINDOW->m_vRealPosition = PWINDOW->m_vRealPosition.goalv() + DELTA / 2.0; - PWINDOW->m_vRealSize = REQUESTEDSIZE; - g_pXWaylandManager->setWindowSize(PWINDOW, REQUESTEDSIZE, true); + PWINDOW->m_vRealSize = newSize; + g_pXWaylandManager->setWindowSize(PWINDOW, newSize, true); g_pHyprRenderer->damageWindow(PWINDOW); } |
