diff --git a/kcmkwin/kwinrules/package/contents/ui/RulesEditor.qml b/kcmkwin/kwinrules/package/contents/ui/RulesEditor.qml --- a/kcmkwin/kwinrules/package/contents/ui/RulesEditor.qml +++ b/kcmkwin/kwinrules/package/contents/ui/RulesEditor.qml @@ -218,9 +218,10 @@ return value ? i18n("Yes") : i18n("No"); case RuleItem.Percentage: return i18n("%1 %", value); - case RuleItem.Coordinate: - var point = value.split(','); - return i18nc("Coordinates (x, y)", "(%1, %2)", point[0], point[1]); + case RuleItem.Point: + return i18nc("Coordinates (x, y)", "(%1, %2)", value.x, value.y); + case RuleItem.Size: + return i18nc("Size (width, height)", "(%1, %2)", value.width, value.height); case RuleItem.Option: return options.textOfValue(value); case RuleItem.FlagsOption: diff --git a/kcmkwin/kwinrules/package/contents/ui/ValueEditor.qml b/kcmkwin/kwinrules/package/contents/ui/ValueEditor.qml --- a/kcmkwin/kwinrules/package/contents/ui/ValueEditor.qml +++ b/kcmkwin/kwinrules/package/contents/ui/ValueEditor.qml @@ -45,7 +45,8 @@ case RuleItem.Option: return optionEditor case RuleItem.FlagsOption: return flagsEditor case RuleItem.Percentage: return percentageEditor - case RuleItem.Coordinate: return coordinateEditor + case RuleItem.Point: return coordinateEditor + case RuleItem.Size: return coordinateEditor case RuleItem.Shortcut: return shortcutEditor default: return emptyEditor } @@ -154,17 +155,18 @@ id: coordItem spacing: Kirigami.Units.smallSpacing - property var coords: ruleValue ? ruleValue.split(',') : [0, 0] + readonly property var coord: (controlType == RuleItem.Size) ? Qt.size(coordX.value, coordY.value) + : Qt.point(coordX.value, coordY.value) + onCoordChanged: valueEditor.valueEdited(coord) QQC2.SpinBox { id: coordX editable: true Layout.preferredWidth: 50 // 50% Layout.fillWidth: true from: 0 to: 4098 - value: coords[0] - onValueModified: valueEditor.valueEdited(coordX.value + "," + coordY.value) + value: (controlType == RuleItem.Size) ? ruleValue.width : ruleValue.x } QQC2.Label { id: coordSeparator @@ -179,8 +181,7 @@ to: 4098 Layout.preferredWidth: 50 // 50% Layout.fillWidth: true - value: coords[1] - onValueModified: valueEditor.valueEdited(coordX.value + "," + coordY.value) + value: (controlType == RuleItem.Size) ? ruleValue.height : ruleValue.y } } } diff --git a/kcmkwin/kwinrules/ruleitem.h b/kcmkwin/kwinrules/ruleitem.h --- a/kcmkwin/kwinrules/ruleitem.h +++ b/kcmkwin/kwinrules/ruleitem.h @@ -43,7 +43,8 @@ Option, FlagsOption, Percentage, - Coordinate, + Point, + Size, Shortcut }; Q_ENUM(Type) diff --git a/kcmkwin/kwinrules/ruleitem.cpp b/kcmkwin/kwinrules/ruleitem.cpp --- a/kcmkwin/kwinrules/ruleitem.cpp +++ b/kcmkwin/kwinrules/ruleitem.cpp @@ -208,11 +208,10 @@ return 0x3FF - 0x040; //All possible flags minus NET::Override (deprecated) } return value.toInt(); - case Coordinate: - if (value.toString().isEmpty()) { - return QStringLiteral("0,0"); - } - return value.toString(); + case Point: + return value.toPoint(); + case Size: + return value.toSize(); case String: return value.toString().trimmed(); case Shortcut: diff --git a/kcmkwin/kwinrules/rulesmodel.cpp b/kcmkwin/kwinrules/rulesmodel.cpp --- a/kcmkwin/kwinrules/rulesmodel.cpp +++ b/kcmkwin/kwinrules/rulesmodel.cpp @@ -396,12 +396,12 @@ // Size & Position addRule(new RuleItem(QLatin1String("position"), - RulePolicy::SetRule, RuleItem::Coordinate, + RulePolicy::SetRule, RuleItem::Point, i18n("Position"), i18n("Size & Position"), QIcon::fromTheme("transform-move"))); addRule(new RuleItem(QLatin1String("size"), - RulePolicy::SetRule, RuleItem::Coordinate, + RulePolicy::SetRule, RuleItem::Size, i18n("Size"), i18n("Size & Position"), QIcon::fromTheme("image-resize-symbolic"))); @@ -474,12 +474,12 @@ "to unconditionally popup in the middle of your screen."))); addRule(new RuleItem(QLatin1String("minsize"), - RulePolicy::ForceRule, RuleItem::Coordinate, + RulePolicy::ForceRule, RuleItem::Size, i18n("Minimum Size"), i18n("Size & Position"), QIcon::fromTheme("image-resize-symbolic"))); addRule(new RuleItem(QLatin1String("maxsize"), - RulePolicy::ForceRule, RuleItem::Coordinate, + RulePolicy::ForceRule, RuleItem::Size, i18n("Maximum Size"), i18n("Size & Position"), QIcon::fromTheme("image-resize-symbolic"))); @@ -647,10 +647,8 @@ void RulesModel::setWindowProperties(const QVariantMap &info, bool forceValue) { // Properties that cannot be directly applied via x11PropertyHash - const QString position = QStringLiteral("%1,%2").arg(info.value("x").toInt()) - .arg(info.value("y").toInt()); - const QString size = QStringLiteral("%1,%2").arg(info.value("width").toInt()) - .arg(info.value("height").toInt()); + const QPoint position = QPoint(info.value("x").toInt(), info.value("y").toInt()); + const QSize size = QSize(info.value("width").toInt(), info.value("height").toInt()); m_rules["position"]->setSuggestedValue(position, forceValue); m_rules["size"]->setSuggestedValue(size, forceValue);