kcms/rules: show explanatory text with contextual help button, not tooltip

Tooltips don't work when using the system with touch, and these here are
also a bit annoying with a pointing device since they appear instantly on
hover and take up a lot of space, so they unexpectedly pop up and cover
UI elements a lot.

To improve this, use a KCM.ContextualHelpButton inline in the list items
to show the explanation when clicked or hovered, just like we do in most
other places in other KCMs.

To make this work, the internal line breaks in the explanatory text had
to be removed to make the text flow properly with an arbitrarily-sized
tooltip.
This commit is contained in:
Nate Graham 2023-04-11 10:27:43 -06:00
parent e2d690e0aa
commit afdf3ad106
3 changed files with 48 additions and 33 deletions

View file

@ -8,6 +8,7 @@ import QtQuick
import QtQuick.Layouts
import QtQuick.Controls as QQC2
import org.kde.kirigami 2.10 as Kirigami
import org.kde.kcm 1.6 as KCM
Kirigami.AbstractListItem {
id: ruleDelegate
@ -31,15 +32,26 @@ Kirigami.AbstractListItem {
Layout.alignment: Qt.AlignVCenter
}
RowLayout {
Layout.preferredWidth: 10 * Kirigami.Units.gridUnit
spacing: Kirigami.Units.smallSpacing
QQC2.Label {
text: model.name
horizontalAlignment: Text.AlignLeft
elide: Text.ElideRight
Layout.preferredWidth: 10 * Kirigami.Units.gridUnit
Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter
}
KCM.ContextualHelpButton {
Layout.preferredHeight: Kirigami.Units.gridUnit * 2
Layout.alignment: Qt.AlignVCenter
visible: model.description.length > 0
toolTipText: model.description
}
}
RowLayout {
// This layout keeps the width constant between delegates, independent of items visibility
Layout.fillWidth: true

View file

@ -211,10 +211,6 @@ ScrollViewKCM {
Layout.preferredWidth: implicitWidth
Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter
QQC2.ToolTip {
text: model.description
visible: hovered && (model.description.length > 0)
}
}
QQC2.Label {
id: suggestedLabel
@ -229,6 +225,13 @@ ScrollViewKCM {
visible: hovered && suggestedLabel.truncated
}
}
ContextualHelpButton {
Layout.rightMargin: Kirigami.Units.largeSpacing
visible: model.description.length > 0
toolTipText: model.description
}
QQC2.ToolButton {
icon.name: (model.enabled) ? "dialog-ok-apply" : "list-add"
onClicked: addProperty();

View file

@ -524,9 +524,9 @@ void RulesModel::populateRuleList()
RulePolicy::SetRule, RuleItem::Boolean,
i18n("Ignore requested geometry"), i18n("Size & Position"),
QIcon::fromTheme("view-time-schedule-baselined-remove"),
i18n("Windows can ask to appear in a certain position.\n"
"By default this overrides the placement strategy\n"
"what might be nasty if the client abuses the feature\n"
i18n("Windows can ask to appear in a certain position. "
"By default this overrides the placement strategy "
"what might be nasty if the client abuses the feature "
"to unconditionally popup in the middle of your screen.")));
ignoregeometry->setFlag(RuleItem::AffectsWarning);
@ -544,10 +544,10 @@ void RulesModel::populateRuleList()
RulePolicy::ForceRule, RuleItem::Boolean,
i18n("Obey geometry restrictions"), i18n("Size & Position"),
QIcon::fromTheme("transform-crop-and-resize"),
i18n("Eg. terminals or video players can ask to keep a certain aspect ratio\n"
"or only grow by values larger than one\n"
"(eg. by the dimensions of one character).\n"
"This may be pointless and the restriction prevents arbitrary dimensions\n"
i18n("Eg. terminals or video players can ask to keep a certain aspect ratio "
"or only grow by values larger than one "
"(eg. by the dimensions of one character). "
"This may be pointless and the restriction prevents arbitrary dimensions "
"like your complete screen area.")));
// Arrangement & Access
@ -611,10 +611,10 @@ void RulesModel::populateRuleList()
RulePolicy::ForceRule, RuleItem::Option,
i18n("Focus stealing prevention"), i18n("Appearance & Fixes"),
QIcon::fromTheme("preferences-system-windows-effect-glide"),
i18n("KWin tries to prevent windows from taking the focus\n"
"(\"activate\") while you're working in another window,\n"
"but this may sometimes fail or superact.\n"
"\"None\" will unconditionally allow this window to get the focus while\n"
i18n("KWin tries to prevent windows from taking the focus "
"(\"activate\") while you're working in another window, "
"but this may sometimes fail or superact. "
"\"None\" will unconditionally allow this window to get the focus while "
"\"Extreme\" will completely prevent it from taking the focus.")));
fsplevel->setOptionsData(focusModelData());
@ -622,10 +622,10 @@ void RulesModel::populateRuleList()
RulePolicy::ForceRule, RuleItem::Option,
i18n("Focus protection"), i18n("Appearance & Fixes"),
QIcon::fromTheme("preferences-system-windows-effect-minimize"),
i18n("This controls the focus protection of the currently active window.\n"
"None will always give the focus away,\n"
"Extreme will keep it.\n"
"Otherwise it's interleaved with the stealing prevention\n"
i18n("This controls the focus protection of the currently active window. "
"None will always give the focus away, "
"Extreme will keep it. "
"Otherwise it's interleaved with the stealing prevention "
"assigned to the window that wants the focus.")));
fpplevel->setOptionsData(focusModelData());
@ -633,21 +633,21 @@ void RulesModel::populateRuleList()
RulePolicy::ForceRule, RuleItem::Boolean,
i18n("Accept focus"), i18n("Appearance & Fixes"),
QIcon::fromTheme("preferences-desktop-cursors"),
i18n("Windows may prevent to get the focus (activate) when being clicked.\n"
"On the other hand you might wish to prevent a window\n"
i18n("Windows may prevent to get the focus (activate) when being clicked. "
"On the other hand you might wish to prevent a window "
"from getting focused on a mouse click.")));
addRule(new RuleItem(QLatin1String("disableglobalshortcuts"),
RulePolicy::ForceRule, RuleItem::Boolean,
i18n("Ignore global shortcuts"), i18n("Appearance & Fixes"),
QIcon::fromTheme("input-keyboard-virtual-off"),
i18n("When used, a window will receive\n"
"all keyboard inputs while it is active, including Alt+Tab etc.\n"
"This is especially interesting for emulators or virtual machines.\n"
i18n("When used, a window will receive "
"all keyboard inputs while it is active, including Alt+Tab etc. "
"This is especially interesting for emulators or virtual machines. "
"\n"
"Be warned:\n"
"you won't be able to Alt+Tab out of the window\n"
"nor use any other global shortcut (such as Alt+F2 to show KRunner)\n"
"Be warned: "
"you won't be able to Alt+Tab out of the window "
"nor use any other global shortcut (such as Alt+F2 to show KRunner) "
"while it's active!")));
addRule(new RuleItem(QLatin1String("closeable"),