Skip to content

Commit 0393065

Browse files
committed
Merge branch 'testing'
2 parents 33b4f6b + 7b74c02 commit 0393065

4 files changed

Lines changed: 26 additions & 10 deletions

File tree

src/views/main_window.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -458,10 +458,17 @@ def _on_action_about(self) -> None:
458458
)
459459

460460
def _on_action_preferences(self) -> None:
461-
"""Open the Preferences dialog; apply settings live on Apply/OK."""
461+
"""Open the Preferences dialog; apply settings after dialog closes.
462+
463+
Preferences are applied once after exec() returns rather than live via
464+
preferences_changed signal. Connecting _apply_preferences during exec()
465+
causes app.setPalette() + setRootIndex() to trigger recursive repaints
466+
inside the modal event loop → SIGSEGV. Cancel leaves QSettings unchanged
467+
so _apply_preferences() is a no-op after Cancel.
468+
"""
462469
prefs = PreferencesDialog(self.ui)
463-
prefs.preferences_changed.connect(self._apply_preferences)
464470
prefs.exec()
471+
self._apply_preferences()
465472

466473
# ---------------------------------------------------------- merge tab handlers
467474

src/views/preferences_dialog.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,12 @@
1010
import os
1111

1212
from PySide6.QtCore import QDir, QFile, QObject, QSettings, Signal
13-
from PySide6.QtGui import QFont
1413
from PySide6.QtUiTools import QUiLoader
1514
from PySide6.QtWidgets import (
1615
QCheckBox,
16+
QComboBox,
1717
QDialog,
1818
QFileDialog,
19-
QFontComboBox,
2019
QLineEdit,
2120
QPushButton,
2221
QRadioButton,
@@ -89,7 +88,7 @@ def _load_ui(self, parent: QWidget | None) -> None:
8988
self.dialog: QDialog = loaded # type: ignore[assignment]
9089

9190
self._font_family_combo = _require(
92-
self.dialog.findChild(QFontComboBox, "fontFamilyComboBox"),
91+
self.dialog.findChild(QComboBox, "fontFamilyComboBox"),
9392
"fontFamilyComboBox",
9493
)
9594
self._font_size_spin = _require(
@@ -136,8 +135,8 @@ def _connect_signals(self) -> None:
136135
def _load_from_settings(self) -> None:
137136
"""Populate widgets from QSettings (falls back to DEFAULTS for missing keys)."""
138137
settings = QSettings()
139-
self._font_family_combo.setCurrentFont(
140-
QFont(str(settings.value(KEY_FONT_FAMILY, DEFAULTS[KEY_FONT_FAMILY])))
138+
self._font_family_combo.setCurrentText(
139+
str(settings.value(KEY_FONT_FAMILY, DEFAULTS[KEY_FONT_FAMILY]))
141140
)
142141
self._font_size_spin.setValue(
143142
int(settings.value(KEY_FONT_SIZE, DEFAULTS[KEY_FONT_SIZE]))
@@ -158,7 +157,7 @@ def _load_from_settings(self) -> None:
158157
def _write_to_settings(self) -> None:
159158
"""Persist current widget values to QSettings."""
160159
settings = QSettings()
161-
settings.setValue(KEY_FONT_FAMILY, self._font_family_combo.currentFont().family())
160+
settings.setValue(KEY_FONT_FAMILY, self._font_family_combo.currentText())
162161
settings.setValue(KEY_FONT_SIZE, self._font_size_spin.value())
163162
settings.setValue(KEY_WORD_WRAP, self._word_wrap_cb.isChecked())
164163
settings.setValue(KEY_LINE_NUMBERS, self._line_numbers_cb.isChecked())

src/views/ui/main_window.ui

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -960,14 +960,14 @@
960960
<addaction name="actionOpen"/>
961961
<addaction name="actionSave"/>
962962
<addaction name="actionSave_as"/>
963-
<addaction name="actionPreferences"/>
964963
<addaction name="separator"/>
965964
<addaction name="actionQuit"/>
966965
</widget>
967966
<widget class="QMenu" name="menuEdit">
968967
<property name="title">
969968
<string>Edit</string>
970969
</property>
970+
<addaction name="actionPreferences"/>
971971
</widget>
972972
<widget class="QMenu" name="menuHelp">
973973
<property name="title">

src/views/ui/preferences_dialog.ui

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,23 @@
2929
</widget>
3030
</item>
3131
<item>
32-
<widget class="QFontComboBox" name="fontFamilyComboBox">
32+
<widget class="QComboBox" name="fontFamilyComboBox">
3333
<property name="sizePolicy">
3434
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
3535
<horstretch>1</horstretch>
3636
<verstretch>0</verstretch>
3737
</sizepolicy>
3838
</property>
39+
<item><property name="text"><string>Monospace</string></property></item>
40+
<item><property name="text"><string>Noto Sans Mono</string></property></item>
41+
<item><property name="text"><string>DejaVu Sans Mono</string></property></item>
42+
<item><property name="text"><string>Liberation Mono</string></property></item>
43+
<item><property name="text"><string>Courier New</string></property></item>
44+
<item><property name="text"><string>Consolas</string></property></item>
45+
<item><property name="text"><string>Inconsolata</string></property></item>
46+
<item><property name="text"><string>Source Code Pro</string></property></item>
47+
<item><property name="text"><string>Fira Code</string></property></item>
48+
<item><property name="text"><string>JetBrains Mono</string></property></item>
3949
</widget>
4050
</item>
4151
<item>

0 commit comments

Comments
 (0)