From afdf3ad106188097552a71eeba71fdf59294d170 Mon Sep 17 00:00:00 2001 From: Nate Graham Date: Tue, 11 Apr 2023 10:27:43 -0600 Subject: [PATCH] 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. --- .../package/contents/ui/RuleItemDelegate.qml | 24 +++++++--- .../rules/package/contents/ui/RulesEditor.qml | 11 +++-- src/kcms/rules/rulesmodel.cpp | 46 +++++++++---------- 3 files changed, 48 insertions(+), 33 deletions(-) diff --git a/src/kcms/rules/package/contents/ui/RuleItemDelegate.qml b/src/kcms/rules/package/contents/ui/RuleItemDelegate.qml index b45e1b3070..cc0c614705 100644 --- a/src/kcms/rules/package/contents/ui/RuleItemDelegate.qml +++ b/src/kcms/rules/package/contents/ui/RuleItemDelegate.qml @@ -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,13 +32,24 @@ Kirigami.AbstractListItem { Layout.alignment: Qt.AlignVCenter } - QQC2.Label { - text: model.name - horizontalAlignment: Text.AlignLeft - elide: Text.ElideRight + RowLayout { Layout.preferredWidth: 10 * Kirigami.Units.gridUnit - Layout.fillWidth: true - Layout.alignment: Qt.AlignVCenter + spacing: Kirigami.Units.smallSpacing + + QQC2.Label { + text: model.name + horizontalAlignment: Text.AlignLeft + elide: Text.ElideRight + 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 { diff --git a/src/kcms/rules/package/contents/ui/RulesEditor.qml b/src/kcms/rules/package/contents/ui/RulesEditor.qml index dc26cc74eb..947de10cb5 100644 --- a/src/kcms/rules/package/contents/ui/RulesEditor.qml +++ b/src/kcms/rules/package/contents/ui/RulesEditor.qml @@ -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(); diff --git a/src/kcms/rules/rulesmodel.cpp b/src/kcms/rules/rulesmodel.cpp index 99328afffa..76191a326f 100644 --- a/src/kcms/rules/rulesmodel.cpp +++ b/src/kcms/rules/rulesmodel.cpp @@ -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"),