[kcm/kwinrules] Fix types property for NET::AllTypesMask
When the user selects all of the types or none of them, the "types" property must be set to a special value (`NET::AllTypesMask = -1`), different than the sum of all the flags together. This re-implements this behaviour as the old KCM, fixing some heuristics that prevented finding the rule corresponding to the current window. The enum name that handles this property has been changed to `NetTypes` to make it more explicit. BUG: 423214 FIXED-IN: 5.19.3 TEST PLAN: 1. Open the `Application specific settings` on a window via menu 2. Select every "Window Type" (or none of them) 3. Give the rule a different name than the default and save 4. Open it again and check that the same rule is found
This commit is contained in:
parent
578ede2dd7
commit
8b9472e0bf
5 changed files with 14 additions and 12 deletions
|
@ -225,7 +225,7 @@ ScrollViewKCM {
|
|||
return i18nc("Size (width, height)", "(%1, %2)", value.width, value.height);
|
||||
case RuleItem.Option:
|
||||
return options.textOfValue(value);
|
||||
case RuleItem.FlagsOption:
|
||||
case RuleItem.NetTypes:
|
||||
var selectedValue = value.toString(2).length - 1;
|
||||
return options.textOfValue(selectedValue);
|
||||
}
|
||||
|
|
|
@ -43,7 +43,7 @@ Loader {
|
|||
case RuleItem.String: return stringEditor
|
||||
case RuleItem.Integer: return integerEditor
|
||||
case RuleItem.Option: return optionEditor
|
||||
case RuleItem.FlagsOption: return flagsEditor
|
||||
case RuleItem.NetTypes: return netTypesEditor
|
||||
case RuleItem.Percentage: return percentageEditor
|
||||
case RuleItem.Point: return coordinateEditor
|
||||
case RuleItem.Size: return coordinateEditor
|
||||
|
@ -113,12 +113,13 @@ Loader {
|
|||
}
|
||||
|
||||
Component {
|
||||
id: flagsEditor
|
||||
id: netTypesEditor
|
||||
OptionsComboBox {
|
||||
flat: true
|
||||
model: ruleOptions
|
||||
multipleChoice: true
|
||||
selectionMask: ruleValue
|
||||
// If NET::AllTypesMask (-1), select everything
|
||||
selectionMask: (ruleValue == -1) ? 0x3BF : ruleValue
|
||||
onActivated: {
|
||||
valueEditor.valueEdited(selectionMask);
|
||||
}
|
||||
|
|
|
@ -157,7 +157,7 @@ QVariant RuleItem::options() const
|
|||
void RuleItem::setOptionsData(const QList<OptionsModel::Data> &data)
|
||||
{
|
||||
if (!m_options) {
|
||||
if (m_type != Option && m_type != FlagsOption) {
|
||||
if (m_type != Option && m_type != NetTypes) {
|
||||
return;
|
||||
}
|
||||
m_options = new OptionsModel();
|
||||
|
@ -202,12 +202,13 @@ QVariant RuleItem::typedValue(const QVariant &value, const RuleItem::Type type)
|
|||
case Integer:
|
||||
case Percentage:
|
||||
return value.toInt();
|
||||
case FlagsOption:
|
||||
// HACK: Currently, the only user of this is "types" property
|
||||
if (value.toInt() == -1) { //NET:AllTypesMask
|
||||
return 0x3FF - 0x040; //All possible flags minus NET::Override (deprecated)
|
||||
case NetTypes: {
|
||||
const int usefulTypes = value.toInt() & 0x3BF; // remove NET::Override=0x040 (deprecated)
|
||||
if (usefulTypes == 0 || usefulTypes == 0x3BF) { // if no flags or all of them are selected
|
||||
return -1; // return NET:AllTypesMask
|
||||
}
|
||||
return value.toInt();
|
||||
}
|
||||
case Point:
|
||||
return value.toPoint();
|
||||
case Size:
|
||||
|
|
|
@ -41,7 +41,7 @@ public:
|
|||
String,
|
||||
Integer,
|
||||
Option,
|
||||
FlagsOption,
|
||||
NetTypes,
|
||||
Percentage,
|
||||
Point,
|
||||
Size,
|
||||
|
|
|
@ -373,7 +373,7 @@ void RulesModel::populateRuleList()
|
|||
wmclasscomplete->setFlag(RuleItem::AlwaysEnabled);
|
||||
|
||||
auto types = addRule(new RuleItem(QLatin1String("types"),
|
||||
RulePolicy::NoPolicy, RuleItem::FlagsOption,
|
||||
RulePolicy::NoPolicy, RuleItem::NetTypes,
|
||||
i18n("Window types"), i18n("Window matching"),
|
||||
QIcon::fromTheme("window-duplicate")));
|
||||
types->setOptionsData(windowTypesModelData());
|
||||
|
@ -660,7 +660,7 @@ void RulesModel::setWindowProperties(const QVariantMap &info, bool forceValue)
|
|||
if (window_type == NET::Unknown) {
|
||||
window_type = NET::Normal;
|
||||
}
|
||||
m_rules["types"]->setSuggestedValue(1 << window_type, forceValue);
|
||||
m_rules["types"]->setSuggestedValue(1 << window_type);
|
||||
|
||||
const QString wmsimpleclass = info.value("resourceClass").toString();
|
||||
const QString wmcompleteclass = QStringLiteral("%1 %2").arg(info.value("resourceName").toString(),
|
||||
|
|
Loading…
Reference in a new issue