wayland/layershell: ensure exclusive zone is updated on zone/mode chg
This commit is contained in:
parent
644254d9ec
commit
edfc4c681c
2 changed files with 15 additions and 16 deletions
|
@ -14,7 +14,20 @@
|
||||||
|
|
||||||
namespace qs::wayland::layershell {
|
namespace qs::wayland::layershell {
|
||||||
|
|
||||||
WlrLayershell::WlrLayershell(QObject* parent): ProxyWindowBase(parent) {}
|
WlrLayershell::WlrLayershell(QObject* parent): ProxyWindowBase(parent) {
|
||||||
|
this->bcExclusiveZone.setBinding([this]() -> qint32 {
|
||||||
|
switch (this->bExclusionMode.value()) {
|
||||||
|
case ExclusionMode::Ignore: return -1;
|
||||||
|
case ExclusionMode::Normal: return this->bExclusiveZone;
|
||||||
|
case ExclusionMode::Auto:
|
||||||
|
const auto anchors = this->bAnchors.value();
|
||||||
|
|
||||||
|
if (anchors.horizontalConstraint()) return this->height();
|
||||||
|
else if (anchors.verticalConstraint()) return this->width();
|
||||||
|
else return 0;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
ProxiedWindow* WlrLayershell::retrieveWindow(QObject* oldInstance) {
|
ProxiedWindow* WlrLayershell::retrieveWindow(QObject* oldInstance) {
|
||||||
auto* old = qobject_cast<WlrLayershell*>(oldInstance);
|
auto* old = qobject_cast<WlrLayershell*>(oldInstance);
|
||||||
|
@ -112,19 +125,6 @@ LayerSurfaceState WlrLayershell::computeState() const {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
qint32 WlrLayershell::computeExclusiveZone() const {
|
|
||||||
switch (this->bExclusionMode.value()) {
|
|
||||||
case ExclusionMode::Ignore: return -1;
|
|
||||||
case ExclusionMode::Normal: return this->bExclusiveZone;
|
|
||||||
case ExclusionMode::Auto:
|
|
||||||
const auto anchors = this->bAnchors.value();
|
|
||||||
|
|
||||||
if (anchors.horizontalConstraint()) return this->height();
|
|
||||||
else if (anchors.verticalConstraint()) return this->width();
|
|
||||||
else return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void WlrLayershell::updateAutoExclusion() { this->bcExclusiveZone.notify(); }
|
void WlrLayershell::updateAutoExclusion() { this->bcExclusiveZone.notify(); }
|
||||||
|
|
||||||
WlrLayershell* WlrLayershell::qmlAttachedProperties(QObject* object) {
|
WlrLayershell* WlrLayershell::qmlAttachedProperties(QObject* object) {
|
||||||
|
|
|
@ -178,7 +178,6 @@ private slots:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
[[nodiscard]] LayerSurfaceState computeState() const;
|
[[nodiscard]] LayerSurfaceState computeState() const;
|
||||||
[[nodiscard]] qint32 computeExclusiveZone() const;
|
|
||||||
|
|
||||||
void onStateChanged();
|
void onStateChanged();
|
||||||
|
|
||||||
|
@ -193,7 +192,7 @@ private:
|
||||||
Q_OBJECT_BINDABLE_PROPERTY(WlrLayershell, qint32, bExclusiveZone, &WlrLayershell::exclusiveZoneChanged);
|
Q_OBJECT_BINDABLE_PROPERTY(WlrLayershell, qint32, bExclusiveZone, &WlrLayershell::exclusiveZoneChanged);
|
||||||
Q_OBJECT_BINDABLE_PROPERTY(WlrLayershell, WlrKeyboardFocus::Enum, bKeyboardFocus, &WlrLayershell::keyboardFocusChanged);
|
Q_OBJECT_BINDABLE_PROPERTY(WlrLayershell, WlrKeyboardFocus::Enum, bKeyboardFocus, &WlrLayershell::keyboardFocusChanged);
|
||||||
Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(WlrLayershell, ExclusionMode::Enum, bExclusionMode, ExclusionMode::Auto, &WlrLayershell::exclusionModeChanged);
|
Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(WlrLayershell, ExclusionMode::Enum, bExclusionMode, ExclusionMode::Auto, &WlrLayershell::exclusionModeChanged);
|
||||||
Q_OBJECT_COMPUTED_PROPERTY(WlrLayershell, qint32, bcExclusiveZone, &WlrLayershell::computeExclusiveZone);
|
Q_OBJECT_BINDABLE_PROPERTY(WlrLayershell, qint32, bcExclusiveZone);
|
||||||
|
|
||||||
QS_BINDING_SUBSCRIBE_METHOD(WlrLayershell, bLayer, onStateChanged, onValueChanged);
|
QS_BINDING_SUBSCRIBE_METHOD(WlrLayershell, bLayer, onStateChanged, onValueChanged);
|
||||||
QS_BINDING_SUBSCRIBE_METHOD(WlrLayershell, bAnchors, onStateChanged, onValueChanged);
|
QS_BINDING_SUBSCRIBE_METHOD(WlrLayershell, bAnchors, onStateChanged, onValueChanged);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue