Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ class PersonalizationWindowContextV1Private
wlr_surface *surface = nullptr;

int32_t backgroundType = 0;
int32_t cornerRadius = 0;
int32_t cornerRadius = -1;
Shadow shadow;
Border border;
PersonalizationWindowContextV1::WindowStates states;
Expand Down
10 changes: 9 additions & 1 deletion src/modules/personalization/personalizationmanagerinterfacev1.h
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,14 @@
return m_cornerRadius;
}

void resetCornerRadius()

Check warning on line 225 in src/modules/personalization/personalizationmanagerinterfacev1.h

View workflow job for this annotation

GitHub Actions / cppcheck

The function 'resetCornerRadius' is never used.
{
if (m_cornerRadius == -1)
return;
m_cornerRadius = -1;
Q_EMIT cornerRadiusChanged();
}

Shadow shadow() const
{
return m_shadow;
Expand All @@ -245,7 +253,7 @@
WWrapPointer<WToplevelSurface> m_target;
PersonalizationManagerInterfaceV1 *m_manager = nullptr;
int32_t m_backgroundType = Personalization::BackgroundType::Normal;
int32_t m_cornerRadius = 0;
int32_t m_cornerRadius = -1;
Shadow m_shadow {};
Border m_border {};
PersonalizationWindowContextV1::WindowStates m_states {};
Expand Down
21 changes: 13 additions & 8 deletions src/surface/surfacewrapper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -456,14 +456,17 @@ void SurfaceWrapper::setup()
});
updateX11shouldSkipDock();
}
// Connect DConfig windowRadius change so QML bindings re-evaluate radius()
// When DConfig windowRadius changes, reset per-window override so
// radius() falls back to the new DConfig value.
if (m_type == Type::XdgToplevel || m_type == Type::XWayland) {
if (auto *helper = Helper::instance()) {
if (auto *config = helper->config()) {
connect(config,
&TreelandUserConfig::windowRadiusChanged,
this,
&SurfaceWrapper::radiusChanged);
connect(config, &TreelandUserConfig::windowRadiusChanged, this, [this] {
if (m_radius >= 0) {
m_radius = -1.0;
Q_EMIT radiusChanged();
}
});
}
}
}
Expand Down Expand Up @@ -1621,9 +1624,11 @@ qreal SurfaceWrapper::radius() const
return 8;

qreal radius = m_radius;
// m_radius > 1 means radius was explicitly set via Personalization protocol;
// m_radius <= 1 means no per-window override, fall back to DConfig.
if (radius < 1 && m_type != Type::Layer) {
// m_radius >= 0 means radius was explicitly set via Personalization protocol;
// m_radius < 0 means no per-window override, fall back to DConfig.
if (radius < 0) {
if (m_type == Type::Layer)
return 0;
radius = Helper::instance()->config()->windowRadius();
}

Expand Down
2 changes: 1 addition & 1 deletion src/surface/surfacewrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -453,7 +453,7 @@ public Q_SLOTS:
&SurfaceWrapper::surfaceStateChanged)
int m_workspaceId = -1;
int m_explicitAlwaysOnTop = 0;
qreal m_radius = 0.0;
qreal m_radius = -1.0;
QRect m_iconGeometry;
ActiveControlStates m_hasActiveCapability = ActiveControlState::UnMinimized;

Expand Down
Loading