docs: add v1.4.10 forge announcement post and apply csharpier reflow
Forge-Post is required in the tagged tree so forge-announce.yml can read it during the release-pipeline run. Plus a csharpier reflow on two files (SymbolPicker.cs, ChatLogWindow.cs) that preflight Block E flagged after the cycle's comment-tightening sweep — purely whitespace, no behaviour change.
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
---
|
||||
subtitle: Symbol-Picker und Tell-History Fix
|
||||
versionsnatur: Feature-Patch + Hotfix
|
||||
---
|
||||
|
||||
- Symbol-Picker im Chat-Eingang: ein kleiner Smile-Button links neben
|
||||
dem Kanal-Indikator öffnet ein Popup mit zwei Tabs. Der erste listet
|
||||
alle 161 FFXIV-PUA-Glyphen (Dalamuds SeIconChar); der zweite trägt
|
||||
97 verifizierte BMP-Symbole (Latin-Marken, Währungen, das ganze
|
||||
griechische Alphabet, Geometrie, Spielkarten, Noten) — jedes davon
|
||||
über `/echo` und `/say` in einer vierrundigen Whitelist-Probe
|
||||
durchgereicht, damit der Channel-Render dem entspricht, was der
|
||||
Picker anzeigt. Klick fügt das Symbol an der Cursor-Position ein,
|
||||
Multi-Insert lässt das Popup offen, eine Recent-Used-Leiste zeigt
|
||||
die letzten sechzehn Picks über beide Tabs. Toggle in Settings →
|
||||
Chat → Nachrichten-Verhalten, Default an.
|
||||
- Verlauf in angepinnten Tell-Tabs lädt wieder vollständig: ein
|
||||
versteckter 500-Zeilen-Scan-Cap in PreloadHistory hat das
|
||||
User-Setting `AutoTellTabsHistoryPreload` überschrieben, wodurch
|
||||
weniger-frequente Tell-Partner ihren Backlog verloren haben sobald
|
||||
die Scan-Schicht mit anderen Chat-Partnern voll lief. Cap ist raus,
|
||||
der Index auf `(Receiver, Date)` hält die Query schnell.
|
||||
- Slash-Command-Teardown: /hellion, /hellionView, /hellionDebugger
|
||||
(und im Debug-Build /hellionSeString) sind als private Felder
|
||||
gecached. Plugin-Dispose detached die echte Registrierung, statt
|
||||
mit identischen Args neu zu registrieren — schließt eine latente
|
||||
Wartungs-Falle aus v1.4.9.
|
||||
- v1.4.x-Polish-Sweep endet hier. Der ImGuiListClipper-Refactor von
|
||||
der v1.4.10-Reserve-Liste wurde gecancelt, nachdem der Cross-
|
||||
Plattform-Smoke gezeigt hat dass das Scroll-Gummi ein Wine/Linux-
|
||||
Quirk ist — Windows-User haben es nie gesehen. Spike dafür kommt in
|
||||
einem späteren Patch. Nächster Major-Cycle ist v1.5.0 mit der
|
||||
DI-Container-Adoption (`Microsoft.Extensions.Hosting` +
|
||||
`ILogger<T>`) nach dem Lightless-Vorbild.
|
||||
- Migration v17 unverändert: kein Schema-Bump, kein
|
||||
Config-Migrations-Aufwand.
|
||||
@@ -801,10 +801,13 @@ public sealed class ChatLogWindow : Window
|
||||
// picker below would pin the popup under the wrong widget.
|
||||
if (Plugin.Config.SymbolPickerEnabled)
|
||||
{
|
||||
if (ImGuiUtil.IconButton(
|
||||
if (
|
||||
ImGuiUtil.IconButton(
|
||||
FontAwesomeIcon.Smile,
|
||||
"symbol-picker-trigger",
|
||||
"Insert symbol or FFXIV icon"))
|
||||
"Insert symbol or FFXIV icon"
|
||||
)
|
||||
)
|
||||
{
|
||||
_symbolPicker.OpenPopup();
|
||||
}
|
||||
|
||||
@@ -148,11 +148,14 @@ internal sealed class SymbolPicker
|
||||
foreach (var codepoint in _recentUsed)
|
||||
{
|
||||
var glyph = char.ConvertFromUtf32((int)codepoint);
|
||||
if (ImGui.Selectable(
|
||||
if (
|
||||
ImGui.Selectable(
|
||||
glyph,
|
||||
false,
|
||||
ImGuiSelectableFlags.DontClosePopups,
|
||||
new Vector2(20, 20)))
|
||||
new Vector2(20, 20)
|
||||
)
|
||||
)
|
||||
{
|
||||
inserted = glyph;
|
||||
}
|
||||
@@ -183,7 +186,12 @@ internal sealed class SymbolPicker
|
||||
if (!tab)
|
||||
return null;
|
||||
|
||||
ImGui.InputTextWithHint("##pua-search", "Search by name (e.g. HighQuality)", ref _search, 64);
|
||||
ImGui.InputTextWithHint(
|
||||
"##pua-search",
|
||||
"Search by name (e.g. HighQuality)",
|
||||
ref _search,
|
||||
64
|
||||
);
|
||||
|
||||
string? inserted = null;
|
||||
|
||||
@@ -193,19 +201,24 @@ internal sealed class SymbolPicker
|
||||
foreach (var icon in Enum.GetValues<SeIconChar>())
|
||||
{
|
||||
var label = icon.ToString();
|
||||
if (query.Length > 0
|
||||
&& label.IndexOf(query, StringComparison.OrdinalIgnoreCase) < 0)
|
||||
if (
|
||||
query.Length > 0
|
||||
&& label.IndexOf(query, StringComparison.OrdinalIgnoreCase) < 0
|
||||
)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// ToIconString gives the single-codepoint glyph; tooltip
|
||||
// carries the enum name for discoverability.
|
||||
if (ImGui.Selectable(
|
||||
if (
|
||||
ImGui.Selectable(
|
||||
icon.ToIconString(),
|
||||
false,
|
||||
ImGuiSelectableFlags.DontClosePopups,
|
||||
new Vector2(24, 24)))
|
||||
new Vector2(24, 24)
|
||||
)
|
||||
)
|
||||
{
|
||||
inserted = icon.ToIconString();
|
||||
}
|
||||
@@ -243,18 +256,20 @@ internal sealed class SymbolPicker
|
||||
var query = _search;
|
||||
foreach (var (codepoint, name) in BmpWhitelist)
|
||||
{
|
||||
if (query.Length > 0
|
||||
&& name.IndexOf(query, StringComparison.OrdinalIgnoreCase) < 0)
|
||||
if (query.Length > 0 && name.IndexOf(query, StringComparison.OrdinalIgnoreCase) < 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var glyph = char.ConvertFromUtf32((int)codepoint);
|
||||
if (ImGui.Selectable(
|
||||
if (
|
||||
ImGui.Selectable(
|
||||
glyph,
|
||||
false,
|
||||
ImGuiSelectableFlags.DontClosePopups,
|
||||
new Vector2(24, 24)))
|
||||
new Vector2(24, 24)
|
||||
)
|
||||
)
|
||||
{
|
||||
inserted = glyph;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user