aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/desktop
diff options
context:
space:
mode:
authorVaxry <[email protected]>2024-11-17 19:31:54 +0000
committerVaxry <[email protected]>2024-11-17 19:31:54 +0000
commitb735295d2b0025b26f88852c06f65514a963c711 (patch)
tree166560e38a396af304db4ec28ca14ba7bb7eedba /src/desktop
parent8d5cdedbd350b4730a1aa57dc5491c88dff3415e (diff)
downloadHyprland-b735295d2b0025b26f88852c06f65514a963c711.tar.gz
Hyprland-b735295d2b0025b26f88852c06f65514a963c711.zip
windows/xdg: minor cleanup of min/max size calculations
fixes #8495
Diffstat (limited to 'src/desktop')
-rw-r--r--src/desktop/Window.cpp26
-rw-r--r--src/desktop/Window.hpp19
2 files changed, 35 insertions, 10 deletions
diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp
index 20fed565..e74e13a2 100644
--- a/src/desktop/Window.cpp
+++ b/src/desktop/Window.cpp
@@ -1601,3 +1601,29 @@ bool CWindow::isX11OverrideRedirect() {
bool CWindow::isModal() {
return (m_pXWaylandSurface && m_pXWaylandSurface->modal);
}
+
+Vector2D CWindow::requestedMinSize() {
+ if ((m_bIsX11 && !m_pXWaylandSurface->sizeHints) || (!m_bIsX11 && !m_pXDGSurface->toplevel))
+ return Vector2D(1, 1);
+
+ Vector2D minSize = m_bIsX11 ? Vector2D(m_pXWaylandSurface->sizeHints->min_width, m_pXWaylandSurface->sizeHints->min_height) : m_pXDGSurface->toplevel->layoutMinSize();
+
+ minSize = minSize.clamp({1, 1});
+
+ return minSize;
+}
+
+Vector2D CWindow::requestedMaxSize() {
+ constexpr int NO_MAX_SIZE_LIMIT = 99999;
+ if (((m_bIsX11 && !m_pXWaylandSurface->sizeHints) || (!m_bIsX11 && !m_pXDGSurface->toplevel) || m_sWindowData.noMaxSize.valueOrDefault()))
+ return Vector2D(NO_MAX_SIZE_LIMIT, NO_MAX_SIZE_LIMIT);
+
+ Vector2D maxSize = m_bIsX11 ? Vector2D(m_pXWaylandSurface->sizeHints->max_width, m_pXWaylandSurface->sizeHints->max_height) : m_pXDGSurface->toplevel->layoutMaxSize();
+
+ if (maxSize.x < 5)
+ maxSize.x = NO_MAX_SIZE_LIMIT;
+ if (maxSize.y < 5)
+ maxSize.y = NO_MAX_SIZE_LIMIT;
+
+ return maxSize;
+}
diff --git a/src/desktop/Window.hpp b/src/desktop/Window.hpp
index b8dd3cf7..ac81e5ef 100644
--- a/src/desktop/Window.hpp
+++ b/src/desktop/Window.hpp
@@ -403,12 +403,9 @@ class CWindow {
}
// methods
- CBox getFullWindowBoundingBox();
- SBoxExtents getFullWindowExtents();
- CBox getWindowBoxUnified(uint64_t props);
- inline CBox getWindowMainSurfaceBox() const {
- return {m_vRealPosition.value().x, m_vRealPosition.value().y, m_vRealSize.value().x, m_vRealSize.value().y};
- }
+ CBox getFullWindowBoundingBox();
+ SBoxExtents getFullWindowExtents();
+ CBox getWindowBoxUnified(uint64_t props);
CBox getWindowIdealBoundingBoxIgnoreReserved();
void addWindowDeco(std::unique_ptr<IHyprWindowDecoration> deco);
void updateWindowDecos();
@@ -441,19 +438,15 @@ class CWindow {
void activate(bool force = false);
int surfacesCount();
void clampWindowSize(const std::optional<Vector2D> minSize, const std::optional<Vector2D> maxSize);
-
bool isFullscreen();
bool isEffectiveInternalFSMode(const eFullscreenMode);
-
int getRealBorderSize();
void updateWindowData();
void updateWindowData(const struct SWorkspaceRule&);
-
void onBorderAngleAnimEnd(void* ptr);
bool isInCurvedCorner(double x, double y);
bool hasPopupAt(const Vector2D& pos);
int popupsCount();
-
void applyGroupRules();
void createGroup();
void destroyGroup();
@@ -481,6 +474,12 @@ class CWindow {
void unsetWindowData(eOverridePriority priority);
bool isX11OverrideRedirect();
bool isModal();
+ Vector2D requestedMinSize();
+ Vector2D requestedMaxSize();
+
+ inline CBox getWindowMainSurfaceBox() const {
+ return {m_vRealPosition.value().x, m_vRealPosition.value().y, m_vRealSize.value().x, m_vRealSize.value().y};
+ }
// listeners
void onAck(uint32_t serial);