qml: styling History, ProxyConfig and NostrConfigDialog
What changed, and why it matters
This commit is purely a user-interface styling refresh. It changes how the History screen, Nostr relay settings dialog, and proxy configuration panel look in Electrum's QML (mobile-style) GUI. There are no changes to security logic, network handling, cryptography, or data processing.
No security action needed. This is a routine UI styling change; normal code-review approval is sufficient.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The diff replaces some custom background rectangles with a shared PaneInsetBackground component, swaps a DialogHighlightPane for an InfoTextArea in the Nostr dialog, and reorganizes the ProxyConfig form from a two-column GridLayout to a single-column ColumnLayout with placeholder text inside fields. The ‘Detect Tor proxy’ button is simplified from a FlatButton inside a Pane to a plain Button. No backend code, validation, or network behavior is modified.
Changed components
electrum/gui/qml/components/History.qmlelectrum/gui/qml/components/NostrConfigDialog.qmlelectrum/gui/qml/components/controls/ProxyConfig.qmlInspect captured patch +47 / −51
diff --git a/electrum/gui/qml/components/History.qml b/electrum/gui/qml/components/History.qml
index c99be75..7b2782b 100644
--- a/electrum/gui/qml/components/History.qml
+++ b/electrum/gui/qml/components/History.qml
@@ -14,8 +14,8 @@ Pane {
padding: 0
clip: true
- background: Rectangle {
- color: constants.darkerBackground
+ background: PaneInsetBackground {
+ vertical: false
}
ElListView {
diff --git a/electrum/gui/qml/components/NostrConfigDialog.qml b/electrum/gui/qml/components/NostrConfigDialog.qml
index 2a62fc7..0eb6cfd 100644
--- a/electrum/gui/qml/components/NostrConfigDialog.qml
+++ b/electrum/gui/qml/components/NostrConfigDialog.qml
@@ -52,16 +52,18 @@ ElDialog {
Layout.rightMargin: constants.paddingLarge
Layout.bottomMargin: constants.paddingLarge
- DialogHighlightPane {
+ InfoTextArea {
Layout.fillWidth: true
- Label {
- text: qsTr('Enter the list of Nostr relays') + '<br/><br/>' +
- qsTr('Nostr relays are used to send and receive submarine swap offers.') +
- ' ' + qsTr('For multisig wallets, nostr is also used to relay transactions to your co-signers.') +
- ' ' + qsTr('Connections to nostr are only made when required, and ephemerally.')
- width: parent.width
- wrapMode: Text.Wrap
- }
+ Layout.bottomMargin: constants.paddingLarge
+ compact: true
+ text: qsTr('Nostr relays are used to send and receive submarine swap offers.') +
+ ' ' + qsTr('For multisig wallets, nostr is also used to relay transactions to your co-signers.') +
+ ' ' + qsTr('Connections to nostr are only made when required, and ephemerally.')
+ backgroundColor: constants.darkerDialogBackground
+ }
+
+ Label {
+ text: qsTr('Enter the list of Nostr relays')
}
RowLayout {
diff --git a/electrum/gui/qml/components/controls/ProxyConfig.qml b/electrum/gui/qml/components/controls/ProxyConfig.qml
index 05bc05b..e1e665d 100644
--- a/electrum/gui/qml/components/controls/ProxyConfig.qml
+++ b/electrum/gui/qml/components/controls/ProxyConfig.qml
@@ -53,68 +53,62 @@ Item {
model: proxy_type_map
}
- GridLayout {
- columns: 2
+ ColumnLayout {
+ // columns: 2
Layout.fillWidth: true
+ spacing: constants.paddingSmall
+
+ RowLayout {
+ Layout.fillWidth: true
+ Layout.rightMargin: constants.paddingLarge
+
+ TextField {
+ id: address
+ Layout.fillWidth: true
+ enabled: proxy_enabled_cb.checked
+ inputMethodHints: Qt.ImhNoPredictiveText
+ placeholderText: qsTr("Address")
+ }
- Label {
- text: qsTr("Address")
- enabled: address.enabled
- }
-
- TextField {
- id: address
- enabled: proxy_enabled_cb.checked
- inputMethodHints: Qt.ImhNoPredictiveText
- }
-
- Label {
- text: qsTr("Port")
- enabled: port.enabled
- }
-
- TextField {
- id: port
- enabled: proxy_enabled_cb.checked
- inputMethodHints: Qt.ImhDigitsOnly
+ TextField {
+ id: port
+ Layout.fillWidth: true
+ enabled: proxy_enabled_cb.checked
+ inputMethodHints: Qt.ImhDigitsOnly
+ placeholderText: qsTr("Port")
+ }
}
Label {
- text: qsTr("Username")
+ Layout.topMargin: constants.paddingLarge
+ text: qsTr("Authentication")
enabled: username_tf.enabled
}
TextField {
id: username_tf
+ Layout.fillWidth: true
+ Layout.rightMargin: constants.paddingLarge
enabled: proxy_enabled_cb.checked
inputMethodHints: Qt.ImhNoPredictiveText
- }
-
- Label {
- text: qsTr("Password")
- enabled: password_tf.enabled
+ placeholderText: qsTr("Username")
}
PasswordField {
id: password_tf
enabled: proxy_enabled_cb.checked
+ placeholderText: qsTr("Password")
}
}
- Pane {
+ Button {
Layout.alignment: Qt.AlignHCenter
Layout.topMargin: constants.paddingLarge
- padding: 0
- background: Rectangle {
- color: constants.darkerDialogBackground
- }
- FlatButton {
- enabled: proxy_enabled_cb.checked && !_probing
- text: qsTr('Detect Tor proxy')
- onClicked: {
- _probing = true
- Network.probeTor()
- }
+ enabled: proxy_enabled_cb.checked && !_probing
+ text: qsTr('Detect Tor proxy')
+ onClicked: {
+ _probing = true
+ Network.probeTor()
}
}
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.