From 3af13af4e6db1e3e6e42e90090c2891af2c72911 Mon Sep 17 00:00:00 2001 From: TrueCrimeDev Date: Thu, 11 Jun 2026 21:29:56 -0400 Subject: [PATCH 01/23] Add markdown preview pane with per-result content types Results can now declare how their preview description is rendered via Result.Preview.ContentType: - text (default): the classic plain-text preview, unchanged - markdown: renders the description as markdown in the preview pane, with syntax-highlighted code blocks (MdXaml + AvalonEdit), themed via the new PreviewMarkdownStyle resources - hidden: suppresses the preview pane for that result, even when Always Preview is on Selecting a markdown result auto-opens the internal preview and leaving it closes the pane again; panes the user opened with the preview hotkey (or via Always Preview) are never auto-closed. JSON-RPC plugins opt in with "contentType": "markdown" on the preview object. Co-Authored-By: Claude Fable 5 --- Flow.Launcher.Plugin/Result.cs | 31 +++ .../MainViewModelPreviewTest.cs | 206 +++++++++++++++ .../Plugins/JsonRPCPluginTest.cs | 32 +++ .../PreviewMarkdownScrollViewerTest.cs | 117 +++++++++ .../PreviewMarkdownStyleTest.cs | 64 +++++ Flow.Launcher/Flow.Launcher.csproj | 1 + Flow.Launcher/MainWindow.xaml | 34 ++- .../Resources/Controls/CodeHighlightTheme.cs | 129 +++++++++ .../Controls/PreviewMarkdownScrollViewer.cs | 245 ++++++++++++++++++ Flow.Launcher/Themes/Base.xaml | 174 +++++++++++++ Flow.Launcher/ViewModel/MainViewModel.cs | 85 ++++++ Flow.Launcher/ViewModel/ResultViewModel.cs | 4 + Flow.Launcher/packages.lock.json | 15 +- 13 files changed, 1125 insertions(+), 12 deletions(-) create mode 100644 Flow.Launcher.Test/MainViewModelPreviewTest.cs create mode 100644 Flow.Launcher.Test/PreviewMarkdownScrollViewerTest.cs create mode 100644 Flow.Launcher.Test/PreviewMarkdownStyleTest.cs create mode 100644 Flow.Launcher/Resources/Controls/CodeHighlightTheme.cs create mode 100644 Flow.Launcher/Resources/Controls/PreviewMarkdownScrollViewer.cs diff --git a/Flow.Launcher.Plugin/Result.cs b/Flow.Launcher.Plugin/Result.cs index 9404d110705..f379dd4d920 100644 --- a/Flow.Launcher.Plugin/Result.cs +++ b/Flow.Launcher.Plugin/Result.cs @@ -406,6 +406,12 @@ public record PreviewInfo /// public string FilePath { get; set; } = null; + /// + /// Determines how should be rendered in Flow Launcher's preview panel. + /// + [JsonConverter(typeof(JsonStringEnumConverter))] + public PreviewContentType ContentType { get; set; } = PreviewContentType.Text; + /// /// Default instance of /// @@ -416,7 +422,32 @@ public record PreviewInfo IsMedia = false, PreviewDelegate = null, FilePath = null, + ContentType = PreviewContentType.Text, }; } } + + /// + /// Supported preview description rendering modes. + /// + public enum PreviewContentType + { + /// + /// Render preview descriptions as plain text. + /// + [JsonStringEnumMemberName("text")] + Text, + + /// + /// Render preview descriptions as markdown. + /// + [JsonStringEnumMemberName("markdown")] + Markdown, + + /// + /// Suppress the preview pane for this result, even when the global "Always Preview" setting is on. + /// + [JsonStringEnumMemberName("hidden")] + Hidden, + } } diff --git a/Flow.Launcher.Test/MainViewModelPreviewTest.cs b/Flow.Launcher.Test/MainViewModelPreviewTest.cs new file mode 100644 index 00000000000..164bd79e72c --- /dev/null +++ b/Flow.Launcher.Test/MainViewModelPreviewTest.cs @@ -0,0 +1,206 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Threading.Tasks; +using Flow.Launcher.Infrastructure.UserSettings; +using Flow.Launcher.Plugin; +using Flow.Launcher.ViewModel; +using NUnit.Framework; +using NUnit.Framework.Legacy; + +namespace Flow.Launcher.Test +{ + [TestFixture] + internal class MainViewModelPreviewTest + { + [Test] + public async Task GivenManualPreviewWasVisible_WhenHiddenResultThenNormalResultSelected_ThenInternalPreviewIsRestoredAsync() + { + var settings = new Settings + { + AlwaysPreview = false + }; + var viewModel = CreatePreviewViewModel(settings, ResultAreaColumnPreviewShown); + + viewModel.PreviewSelectedItem = ViewModel("Hidden", PreviewContentType.Hidden, settings); + await InvokeUpdatePreviewAsync(viewModel); + ClassicAssert.IsFalse(viewModel.InternalPreviewVisible); + + viewModel.PreviewSelectedItem = ViewModel("Normal", PreviewContentType.Text, settings); + await InvokeUpdatePreviewAsync(viewModel); + + ClassicAssert.IsTrue(viewModel.InternalPreviewVisible); + } + + [Test] + public async Task GivenExternalPreviewWasVisible_WhenHiddenResultThenNormalResultSelected_ThenPreviewIsRestoredAsync() + { + var settings = new Settings + { + AlwaysPreview = false + }; + var viewModel = CreatePreviewViewModel(settings, ResultAreaColumnPreviewHidden); + SetExternalPreviewVisible(viewModel, true); + + viewModel.PreviewSelectedItem = ViewModel("Hidden", PreviewContentType.Hidden, settings); + await InvokeUpdatePreviewAsync(viewModel); + ClassicAssert.IsFalse(viewModel.ExternalPreviewVisible); + ClassicAssert.IsFalse(viewModel.InternalPreviewVisible); + + viewModel.PreviewSelectedItem = ViewModel("Normal", PreviewContentType.Text, settings); + await InvokeUpdatePreviewAsync(viewModel); + + ClassicAssert.IsTrue(viewModel.InternalPreviewVisible); + } + + [Test] + public async Task GivenPreviewHidden_WhenMarkdownResultSelected_ThenInternalPreviewAutoOpensAsync() + { + var settings = new Settings + { + AlwaysPreview = false + }; + var viewModel = CreatePreviewViewModel(settings, ResultAreaColumnPreviewHidden); + + viewModel.PreviewSelectedItem = ViewModel("Markdown", PreviewContentType.Markdown, settings); + await InvokeUpdatePreviewAsync(viewModel); + + ClassicAssert.IsTrue(viewModel.InternalPreviewVisible); + } + + [Test] + public async Task GivenPreviewAutoOpenedForMarkdown_WhenTextResultSelected_ThenInternalPreviewAutoClosesAsync() + { + var settings = new Settings + { + AlwaysPreview = false + }; + var viewModel = CreatePreviewViewModel(settings, ResultAreaColumnPreviewHidden); + + viewModel.PreviewSelectedItem = ViewModel("Markdown", PreviewContentType.Markdown, settings); + await InvokeUpdatePreviewAsync(viewModel); + ClassicAssert.IsTrue(viewModel.InternalPreviewVisible); + + viewModel.PreviewSelectedItem = ViewModel("Normal", PreviewContentType.Text, settings); + await InvokeUpdatePreviewAsync(viewModel); + + ClassicAssert.IsFalse(viewModel.InternalPreviewVisible); + } + + [Test] + public async Task GivenPreviewManuallyVisible_WhenTextResultSelected_ThenInternalPreviewStaysVisibleAsync() + { + var settings = new Settings + { + AlwaysPreview = false + }; + var viewModel = CreatePreviewViewModel(settings, ResultAreaColumnPreviewShown); + + viewModel.PreviewSelectedItem = ViewModel("Normal", PreviewContentType.Text, settings); + await InvokeUpdatePreviewAsync(viewModel); + + ClassicAssert.IsTrue(viewModel.InternalPreviewVisible); + } + + [Test] + public async Task GivenPreviewAutoOpenedForMarkdown_WhenHiddenThenTextResultSelected_ThenInternalPreviewStaysHiddenAsync() + { + var settings = new Settings + { + AlwaysPreview = false + }; + var viewModel = CreatePreviewViewModel(settings, ResultAreaColumnPreviewHidden); + + viewModel.PreviewSelectedItem = ViewModel("Markdown", PreviewContentType.Markdown, settings); + await InvokeUpdatePreviewAsync(viewModel); + ClassicAssert.IsTrue(viewModel.InternalPreviewVisible); + + viewModel.PreviewSelectedItem = ViewModel("Hidden", PreviewContentType.Hidden, settings); + await InvokeUpdatePreviewAsync(viewModel); + ClassicAssert.IsFalse(viewModel.InternalPreviewVisible); + + viewModel.PreviewSelectedItem = ViewModel("Normal", PreviewContentType.Text, settings); + await InvokeUpdatePreviewAsync(viewModel); + + ClassicAssert.IsFalse(viewModel.InternalPreviewVisible); + } + + [Test] + public async Task GivenAlwaysPreviewOnAndPreviewManuallyHidden_WhenTextResultSelected_ThenInternalPreviewStaysHiddenAsync() + { + var settings = new Settings + { + AlwaysPreview = true + }; + var viewModel = CreatePreviewViewModel(settings, ResultAreaColumnPreviewHidden); + + viewModel.PreviewSelectedItem = ViewModel("Normal", PreviewContentType.Text, settings); + await InvokeUpdatePreviewAsync(viewModel); + + ClassicAssert.IsFalse(viewModel.InternalPreviewVisible); + } + + [Test] + public async Task GivenAlwaysPreviewOnAndPreviewHidden_WhenHiddenThenTextResultSelected_ThenInternalPreviewReopensAsync() + { + var settings = new Settings + { + AlwaysPreview = true + }; + var viewModel = CreatePreviewViewModel(settings, ResultAreaColumnPreviewHidden); + + viewModel.PreviewSelectedItem = ViewModel("Hidden", PreviewContentType.Hidden, settings); + await InvokeUpdatePreviewAsync(viewModel); + ClassicAssert.IsFalse(viewModel.InternalPreviewVisible); + + viewModel.PreviewSelectedItem = ViewModel("Normal", PreviewContentType.Text, settings); + await InvokeUpdatePreviewAsync(viewModel); + + ClassicAssert.IsTrue(viewModel.InternalPreviewVisible); + } + + private static MainViewModel CreatePreviewViewModel(Settings settings, int resultAreaColumn) + { + var viewModel = (MainViewModel)RuntimeHelpers.GetUninitializedObject(typeof(MainViewModel)); + typeof(MainViewModel) + .GetField("k__BackingField", BindingFlags.Instance | BindingFlags.NonPublic) + .SetValue(viewModel, settings); + viewModel.ResultAreaColumn = resultAreaColumn; + return viewModel; + } + + private static ResultViewModel ViewModel(string title, PreviewContentType contentType, Settings settings) + => new( + new Result + { + Title = title, + Preview = new Result.PreviewInfo + { + ContentType = contentType + } + }, + settings); + + private static int ResultAreaColumnPreviewShown + => (int)typeof(MainViewModel) + .GetField("ResultAreaColumnPreviewShown", BindingFlags.NonPublic | BindingFlags.Static) + .GetValue(null); + + private static int ResultAreaColumnPreviewHidden + => (int)typeof(MainViewModel) + .GetField("ResultAreaColumnPreviewHidden", BindingFlags.NonPublic | BindingFlags.Static) + .GetValue(null); + + private static async Task InvokeUpdatePreviewAsync(MainViewModel viewModel) + { + var task = (Task)typeof(MainViewModel) + .GetMethod("UpdatePreviewAsync", BindingFlags.NonPublic | BindingFlags.Instance) + .Invoke(viewModel, null); + await task; + } + + private static void SetExternalPreviewVisible(MainViewModel viewModel, bool visible) + => typeof(MainViewModel) + .GetField("k__BackingField", BindingFlags.Instance | BindingFlags.NonPublic) + .SetValue(viewModel, visible); + } +} diff --git a/Flow.Launcher.Test/Plugins/JsonRPCPluginTest.cs b/Flow.Launcher.Test/Plugins/JsonRPCPluginTest.cs index 497f874e70f..332a2ee135d 100644 --- a/Flow.Launcher.Test/Plugins/JsonRPCPluginTest.cs +++ b/Flow.Launcher.Test/Plugins/JsonRPCPluginTest.cs @@ -7,6 +7,7 @@ using System.Threading; using System.Text; using System.Collections.Generic; +using System.Linq; namespace Flow.Launcher.Test.Plugins { @@ -61,5 +62,36 @@ public async Task GivenVariousJsonText_WhenVariousNamingCase_ThenExpectNotNullRe } }) }; + + [Test] + public async Task GivenMarkdownPreviewContentType_WhenDeserializeJsonRpcResult_ThenPreviewContentTypeIsMarkdown() + { + const string resultText = + """ + { + "result": [ + { + "title": "Answer", + "subTitle": "*args in Python", + "preview": { + "description": "**`*args`** collects extra positional arguments.", + "contentType": "markdown" + } + } + ], + "debugMessage": null + } + """; + + var results = await QueryAsync(new Query + { + Search = resultText + }, default); + + var result = results.Single(); + + ClassicAssert.AreEqual(PreviewContentType.Markdown, result.Preview.ContentType); + ClassicAssert.AreEqual("**`*args`** collects extra positional arguments.", result.Preview.Description); + } } } diff --git a/Flow.Launcher.Test/PreviewMarkdownScrollViewerTest.cs b/Flow.Launcher.Test/PreviewMarkdownScrollViewerTest.cs new file mode 100644 index 00000000000..512ddd0463d --- /dev/null +++ b/Flow.Launcher.Test/PreviewMarkdownScrollViewerTest.cs @@ -0,0 +1,117 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Windows; +using System.Windows.Documents; +using System.Windows.Media; +using Flow.Launcher.Resources.Controls; +using NUnit.Framework; +using NUnit.Framework.Legacy; + +namespace Flow.Launcher.Test +{ + [TestFixture] + internal class PreviewMarkdownScrollViewerTest + { + [Test] + [Apartment(ApartmentState.STA)] + public void GivenMarkdownLink_WhenRendered_ThenHyperlinkUsesAccentForeground() + { + var accentBrush = new SolidColorBrush(Color.FromRgb(0x31, 0xA8, 0xFF)); + var viewer = new PreviewMarkdownScrollViewer + { + MarkdownStyle = CreateMarkdownStyle(accentBrush), + Markdown = "Links should use the theme accent: [Flow Launcher](https://www.flowlauncher.com/)." + }; + + var hyperlink = EnumerateInlines(viewer.Document.Blocks).OfType().Single(); + var foreground = (SolidColorBrush)hyperlink.Foreground; + + ClassicAssert.AreEqual(accentBrush.Color, foreground.Color); + } + + [Test] + [Apartment(ApartmentState.STA)] + public void GivenConstrainedPreviewWidth_WhenMarkdownIsRendered_ThenDocumentPageWidthMatchesViewerWidth() + { + var viewer = new PreviewMarkdownScrollViewer + { + Width = 280, + Height = 200, + Markdown = "This long paragraph should wrap inside the preview pane instead of clipping at the right edge." + }; + + viewer.Measure(new Size(280, 200)); + viewer.Arrange(new Rect(0, 0, 280, 200)); + viewer.UpdateLayout(); + + ClassicAssert.AreEqual(280, viewer.Document.PageWidth); + ClassicAssert.AreEqual(280, viewer.Document.MaxPageWidth); + ClassicAssert.AreEqual(280, viewer.Document.ColumnWidth); + } + + private static Style CreateMarkdownStyle(Brush accentBrush) + { + var documentStyle = new Style(typeof(FlowDocument)); + documentStyle.Setters.Add(new Setter(TextElement.ForegroundProperty, Brushes.LightGray)); + + var hyperlinkStyle = new Style(typeof(Hyperlink)); + hyperlinkStyle.Setters.Add(new Setter(TextElement.ForegroundProperty, accentBrush)); + hyperlinkStyle.Setters.Add(new Setter(Inline.TextDecorationsProperty, null)); + documentStyle.Resources.Add(typeof(Hyperlink), hyperlinkStyle); + + return documentStyle; + } + + private static IEnumerable EnumerateInlines(BlockCollection blocks) + { + foreach (var block in blocks) + { + switch (block) + { + case Paragraph paragraph: + foreach (var inline in EnumerateInlines(paragraph.Inlines)) + { + yield return inline; + } + + break; + + case Section section: + foreach (var inline in EnumerateInlines(section.Blocks)) + { + yield return inline; + } + + break; + + case List list: + foreach (var inline in list.ListItems + .Cast() + .SelectMany(item => EnumerateInlines(item.Blocks))) + { + yield return inline; + } + + break; + } + } + } + + private static IEnumerable EnumerateInlines(InlineCollection inlines) + { + foreach (var inline in inlines) + { + yield return inline; + if (inline is Span span) + { + foreach (var child in EnumerateInlines(span.Inlines)) + { + yield return child; + } + } + } + } + } +} diff --git a/Flow.Launcher.Test/PreviewMarkdownStyleTest.cs b/Flow.Launcher.Test/PreviewMarkdownStyleTest.cs new file mode 100644 index 00000000000..5f218b3e1dc --- /dev/null +++ b/Flow.Launcher.Test/PreviewMarkdownStyleTest.cs @@ -0,0 +1,64 @@ +using System.IO; +using System.Linq; +using System.Xml.Linq; +using NUnit.Framework; +using NUnit.Framework.Legacy; + +namespace Flow.Launcher.Test +{ + [TestFixture] + internal class PreviewMarkdownStyleTest + { + private static readonly XNamespace PresentationNamespace = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"; + private static readonly XNamespace XamlNamespace = "http://schemas.microsoft.com/winfx/2006/xaml"; + + [Test] + public void GivenPreviewMarkdownStyle_WhenRendered_ThenBodyAndBoldUseAppTextFont() + { + var style = GetPreviewMarkdownStyle(); + + ClassicAssert.AreEqual("{DynamicResource ContentControlThemeFontFamily}", GetSetterValue(style, "FontFamily")); + ClassicAssert.AreEqual("Normal", GetSetterValue(style, "FontWeight")); + + var boldStyle = style.Descendants(PresentationNamespace + "Style") + .First(element => element.Attribute("TargetType")?.Value == "{x:Type Bold}"); + + ClassicAssert.AreEqual("{DynamicResource ContentControlThemeFontFamily}", GetSetterValue(boldStyle, "FontFamily")); + ClassicAssert.AreEqual("SemiBold", GetSetterValue(boldStyle, "FontWeight")); + } + + private static XElement GetPreviewMarkdownStyle() + { + var baseThemePath = FindBaseThemePath(); + var document = XDocument.Load(baseThemePath); + + return document.Descendants(PresentationNamespace + "Style") + .First(element => element.Attribute(XamlNamespace + "Key")?.Value == "PreviewMarkdownStyle"); + } + + private static string FindBaseThemePath() + { + var directory = new DirectoryInfo(TestContext.CurrentContext.TestDirectory); + while (directory is not null) + { + var path = Path.Combine(directory.FullName, "Flow.Launcher", "Themes", "Base.xaml"); + if (File.Exists(path)) + { + return path; + } + + directory = directory.Parent; + } + + throw new FileNotFoundException("Could not find Flow.Launcher/Themes/Base.xaml from test directory."); + } + + private static string GetSetterValue(XElement style, string propertyName) + { + return style.Elements(PresentationNamespace + "Setter") + .Where(element => element.Attribute("Property")?.Value == propertyName) + .Select(element => element.Attribute("Value")?.Value) + .FirstOrDefault(); + } + } +} diff --git a/Flow.Launcher/Flow.Launcher.csproj b/Flow.Launcher/Flow.Launcher.csproj index 576bf6f2f13..4290739e194 100644 --- a/Flow.Launcher/Flow.Launcher.csproj +++ b/Flow.Launcher/Flow.Launcher.csproj @@ -138,6 +138,7 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index 2950d2f6555..bfd8d0d35c4 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -3,6 +3,7 @@ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:converters="clr-namespace:Flow.Launcher.Converters" + xmlns:controls="clr-namespace:Flow.Launcher.Resources.Controls" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:flowlauncher="clr-namespace:Flow.Launcher" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" @@ -403,9 +404,9 @@ - + - + @@ -462,6 +465,15 @@ d:DataContext="{d:DesignInstance vm:ResultViewModel}" DataContext="{Binding PreviewSelectedItem, Mode=OneWay}" Visibility="{Binding ShowDefaultPreview}"> + + + - + @@ -514,7 +529,16 @@ TextAlignment="Center" TextWrapping="Wrap" /> - + + + + + + + + + + + + + + + + + + + + + + + + From 1ade524fcb1c0a0e9d13f5a7f63d2bcdd8ac416e Mon Sep 17 00:00:00 2001 From: TrueCrimeDev Date: Mon, 29 Jun 2026 09:17:48 -0400 Subject: [PATCH 09/23] fix: give code blocks an explicit themed scrollbar template Relying on an implicit ScrollBar style alone left the code-block scrollbars looking like the default (arrows, chunky). Give the editor's ScrollViewer an explicit template: the horizontal scrollbar now sits in its own grid row (so it can never overlap the last line of code) and both bars use the thin themed ScrollBar style. Drops the bottom-padding workaround since the dedicated row handles clearance now. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_011TcJGQVjhYU3tEMi8FF4TM --- Flow.Launcher/Themes/Base.xaml | 50 ++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 3 deletions(-) diff --git a/Flow.Launcher/Themes/Base.xaml b/Flow.Launcher/Themes/Base.xaml index 290b184a012..62478f1c2c2 100644 --- a/Flow.Launcher/Themes/Base.xaml +++ b/Flow.Launcher/Themes/Base.xaml @@ -653,8 +653,7 @@ - - + @@ -672,7 +671,52 @@ HorizontalScrollBarVisibility="{TemplateBinding HorizontalScrollBarVisibility}" Padding="{TemplateBinding Padding}" VerticalContentAlignment="Top" - VerticalScrollBarVisibility="{TemplateBinding VerticalScrollBarVisibility}" /> + VerticalScrollBarVisibility="{TemplateBinding VerticalScrollBarVisibility}"> + + + + + + + + + + + + + + + + + + + From 40d2220e0a72cebbbc6f15a8b70b53ad680b5edf Mon Sep 17 00:00:00 2001 From: TrueCrimeDev Date: Mon, 29 Jun 2026 10:15:35 -0400 Subject: [PATCH 10/23] fix: close unclosed Grid in code-block scrollbar template MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The ScrollBar ControlTemplate added for code-block scrollbars left its root unclosed, with ControlTemplate.Triggers nested inside it. Themes/*.xaml are loose Content (runtime-loaded, not BAML-compiled), so the build didn't catch it — but loading the theme at runtime throws XamlParseException, breaking the preview (and the app theme). Close the Grid and move the triggers to the template root. Caught by rendering the control to an image with the real Base.xaml. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_011TcJGQVjhYU3tEMi8FF4TM --- Flow.Launcher/Themes/Base.xaml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Flow.Launcher/Themes/Base.xaml b/Flow.Launcher/Themes/Base.xaml index 62478f1c2c2..bce9713b4f5 100644 --- a/Flow.Launcher/Themes/Base.xaml +++ b/Flow.Launcher/Themes/Base.xaml @@ -625,13 +625,14 @@ - - - - - - - + + + + + + + + From 8670a6183354c60366a024deb6aa4e748da4641f Mon Sep 17 00:00:00 2001 From: TrueCrimeDev Date: Mon, 29 Jun 2026 10:18:49 -0400 Subject: [PATCH 11/23] docs: add proof render of the themed preview scrollbars Renders the PreviewMarkdownScrollViewer through the real Base.xaml styles with the dark-theme colours, showing the fixes from this branch: the outer pane scrollbar and the code-block horizontal scrollbar both use Flow's thin themed bar (no default arrows), and the last line of code stays clear of the horizontal scrollbar. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_011TcJGQVjhYU3tEMi8FF4TM --- docs/assets/markdown-preview-scrollbars.png | Bin 0 -> 39855 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/assets/markdown-preview-scrollbars.png diff --git a/docs/assets/markdown-preview-scrollbars.png b/docs/assets/markdown-preview-scrollbars.png new file mode 100644 index 0000000000000000000000000000000000000000..fc01e8f52fc9ae5ba7e6a0f473158cefff8554da GIT binary patch literal 39855 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%0As|brsfSo0f0Q zr`Pn}z4)RI&|SM(+L{zB3Z#5lcMupLh?cR;i&29Jk>pCb!cAj1H0-1L704hOj3rQX z$zVUJi^59>7Znr=2is603;@u#W1E%*8ccS9k-9oSB5=3PI*6?$)g0c4Uj@iD^-pti zb4P&ptNg_Iono0$7tf)Bfaq^kzst!n18`6MI`XV^aZ<56@!g(;?&pWZsNX+T1YVXzB5d`fp5UhCQ}v6@P9ZqH!oZQa z?rb2YV_9NjWtHD}&Do#SQh}U>!Kub4AroHbt(32Any-Y0Lk-vVoJq`S#SeBY<>%Q^VY@g8T6Z z;?5JWJU}9hLQVgrFK(D{K%t;=1X%~BeF5Td;3q#<0vYMejarN!E=#A4NGguI$-`ou zkPRHUf9%Gg{)F-dT9HjbK(+ce_ay&bH@g3^*Lq_73|&MXaQlL2STqRLO%`Jq8$g** z2sRyP!Z!16f{IyoMa4xFf?x+~Nu$Ue4RhFz^Y4;QFWQZx84&F( zE0v5h1i?Q{FB?@2u&H~&8i$@_UVR+TZlzb{A%uYL;UaA>_LE%ihSh;-3XaNEVoJ`N zK@osHmwR`w4&(zN1+Ndc06zh73o_wY%V6u_9fKg{<)7Ad9w7=^2#YgwUS1w$XYcV5 zb{)Xw#EWXLuHK5LMuD1JLqO)1Pj6QFGM_Qp;GPzmzREJgQ;E9=bPj;q|M(pJZDX*iygR^q*cl;JH#Rf+HuUOx{~VGtA^a)`W8nB?VMe z^(X!?SkcnbLVmp5g?#m7WVI|ybM(`f?fR*kZV7STf&uRhBV$hBK(7<=AUxPai!}iM zX55}_2VJsISM5(afxsWo*xY=2erzGUMg%-&1l%|x&nDzLf%N6=(yw4ZuU@-m3fxTb zZUE?c0+4Wn7A~|Z7?ep3nPQ{?9u$DwVgTbanwgnNwehZ~Ocx0wDwRhE+X(VnPhX#- zzYF0RoA1fR-Z2jnKkGkmt-@*Mb_}6hvwmu_jIRWcknj%r@z4Z5$$Y6Xf=M`@cMq7k zYhl3&$<@O>jeIRONlE>90Z22UOz@fSKguZT1bx4ub^u8Uho_B=P4MXv9}VvFFf$WB z^>i-C9QdOnfG_ga>;BQvD3}35+G{{D9e)_u(%Fg3=pOHP`Jcvi!b}ZtJjc$0OO1EM zomi9twU*Ya&!GeeG>yR7JDuYSN6QSxHyG2As|0iJp`ev^da(wm{$Ru=JSwUQiqC>@ zUV-NgnMc@zNth5j)nvizA}0E9++?szS4=(9Tz^1vDe1QK`%8O#d!;XS=k=54W|I=< z)mWr<2F&Aqj@Npw9o{6i@5+!qWF^)r$WnNETGMvP89CTEw*()F(40YJ&^`%k%6*52 zm2T65V-g*GHpYhI*WuR+6R5XMw#2bPm3JmVUP&r_6YR*Tk>ly1BGKb$1u0h%5Ga(X z=%S^i{n6WdYHwb}1EI)75Dz*xG=0JMljpPz9Egs(P{RH2$qBs&{Jn^fBQgS7bdb!r z%fZHm2RMdl>Zf<$Rv@=$i}1OEE_3RjzlpFT)?Y2& za~}8I-M>R}O=LT-+sXmx8h0+WoQpv<9Lb&I@!naw4vf0WhAq|catD7xPU%2=4E1Hd zU=9&GX20FX;8WhvA0grr!r_ujP%((vxIj&fh$)?{kfnC~S;u`#59H$j(FYMMCb-_b z$k>?F@!k~7ebmE%I%r~r!i_Tj^- z?b{zz-G1#++j-LxYjB&80XT@!e-=$uX7p5~`3h%_eB%@ROVE6x{5gO<=d@SlP_sLc z&*(9>5X)3Sp{B9d5F>miMYzcvUu7hv3miA3BJqzY>}T}At3t1xPx2J4ZA#NBy_a`a zOtmo=zW}eAaZsAczO{3mNl(e7S2ax4RT+`h(F&P`u)jxcJ>J+3+<5j?8%S}Q7Uw8a z4=DRvA@&i1XdJpC#J=3A=a%zev`}Se;AnST;10>bqDr!9Ls-`P_c!-MZBhZs2&67y zwsKRvmw|$9`CQJmi6>=C5^2JZo;_sp^>i@)Vi7exdRxSojt4|Tcjtz0TBR4E+9w=p zK~w=m&V=zV}pV@55PX%eM z6cSYfV>8ry;?0x1TdON8>43UppvV*tF#rf7Buvo(1&DSC7qQ4wKMaHW>!P9`Q%4cN zB1jL+SrkEqFm{8e-qwOn@H)&Qm;&!TjjUf)e`=cO<;$1l2OscUK(44vqzU*7*d(Kq zHmjy*7g}0d>mZ)sp*vG|)Oj0B?c2`A>kGg#3WOl+BOYb;<7YwiLXwrhoe&`!Z&=8< z=ZSFhyWavY!+Oic%Idc^;RuGK)8?xl;$cr6zL?EFo5ZIZ)SAFW@))K|4nG*UzCCwEZ;e$1#W*3!Va04l!ktvz(Vo1zMDa_PZnb#Bo3@oQiM(`b zAQdI@ym0zPrt>HpyFq?eS(em+tqqtVe{S#&3)B&L>>N$-0$Kg;xv!b3lE>O#{MwV z6nDzDb$O!3_|fK^b&S*o5sc2U`!hR~B6j8An%B4gP0gp;|1#xkN|B&mCO9CV5`hpC zi<|T56v^!@DiF;_LfaIHP`4$_)Kq12Z$Q!_UY-9JCQE*3@BznsBK3s}b&%}IPTC5mfV?9PiZg-upEML9 zqP=&Xit6;@v$Ce#)|o)>R20P6sMHS57u`?FNM!3Y|4A$Xy*#vsGCiB1xd6<_A^z~0 zplZSd-5(V5iw3jen@TN>ixFjp8XAEgKk{VB=)4k>&65rHBT9u5zhG(y6zMdBpfLqk zeMkArOexfdFN@PIwe-za|wc`avtD95cZB#bukMyl!J%N}HW~|tCr%>`;!Y~)m(x%whTE4<#$|%nf_mG;_@qmz>VpR_ zV=c;tVfuo!JU9`F$@4#d{%QH67STH4j&GQVwN0hIVM=y>ix+VnYy%0kRjB8HVo7Tpos|6t}marfRfMzb!`(HpA!gsf^x@xQ+-s5-8d`{ zV#cN2Il(^SjAW}!N=yW+=0KAa0)j&`l$?b{j$nP03~)6-`vfA^u%7v8?e&jEMdVN` zfQd($6R}!w2hi)7)y~&yKXwF}@DQ!MmoM%@!4ji}od3HAAY|dY`AAb9G^AizK{*zV zUHpePXp`)#wvv-wDQ|(*GuesKe|n5#GZ%Wb$*<1)gV+&-)Y3sB{&jcZ=BQ_)gZQAb z4#-D1$k4u#xrl-;8HZ-{(v;o9=kVJ59E;8YO*!vqKq<3aS+|i*aPmWu2`H*%iXLCV zAvr%Y#z3M473t|w{$l8Sv|?=>YNl7C%8ja{l7(R7;T4f~=_UPQ*wn)8m(T;VJoIFT zEf4AjGy{+~LSZHO?B_vSwezONv}G^!$(x))bo-nXpd$lh`|V+7_+5o z+%^ZoGtg`7$@vsL_#%HVEqvT=Dq``PsA&IGwHUf!u;pc0&FQPD9f*X1Q}^y;FhJt^ z+lw}|ErSY&U#Sqp#Rms1pSyVC-tgLm0%gb$Y$N30)30;hWbbrKKB@sx+tn zA}^ej5Mc@Q{vSG+vRJ$22Qeq~Ju zhqu0gt4rfu7fMP@tTz!1?_qDUxzkhoE60#qB?fhZ~-UFI$Zzh^qndNCk%gW;<)}j=@^`KwdkyurMj=Ucbd# zi;DuI1Z`sY71`vZWUy7E2wn-y0#uYB#PIpdK5BIpYF=x)^8EKjE&Q(=zu%$c^JmzO zaN*hY&5_h_1w|AM9i0||m4quC0Shsjj?bZsX~WctAOAFs5dbTA$6JpY^J)$lOd_C| zQ*KZ|`O}kP90Ym)-c?-xc?6q6oE}S{<1pS*clVZVzE&%d0@B{N+Y}bFKdcMs3&7#Xby z(F-Ioeox3QU&(*-EjG`+7;p?ocOMi{zm+W)Z}J$`ym^BQie4}n3h{gV;iQifc3sPO zY;Bf8So4%arhwb`*bmO@6@QYxTw+h`>`(DH0TUX3RcXcNSp<-=iyAW>qMP=d8>beZ z*_Rz2fLNH@i#Wr`*bhu@29pQV?MwM*_yqjV951K>Qwzr2H%!(q%#iZALHZ{4d{V+Y zXi`JB3-8U&AJQ5!A@o@tZ}Jn_hBm?!w2r~*Qd+AWweU=9XD8Lq#zThevSsX0nOKa0 z^p{7I+g0f*6?WKfZcSC&I8s_kW2Nm(Hq3S-!`}{z1rPVnWfHpG-5B20;zaZN_I3}l zzQsud)D6^18z$tSoejtXq)Z9^{j1((@m4T+$cQY9t4OcaKWA1ust!tKv07SM1i%UK z3C~?!TT>G`Bwq%X+{eM%L3d96n^EEJP3k1jd(pW`dFAhJZFiMSH0mQ>w{yi^hUQp6*G7E$$ zz@NT$g+)c`Vt$|!44S$i{|FI5J$Qf3?!%($5kH^aB>Lbw<`QKP+ez)sFMkdO7`z;0-w?~eWBRDt_Vt8u#TX-sMT)S^LlcT1lqc>LG` zb#4jDeWv36)fxG4zaEdWkw8-qc2hq0(N)^e)U1XH*mHSR)#xI| z@qs349S{`-k@w$E9)besO(-{mz!kX!Ve>c|`L6U;hem2WNNfdpFzrw%F6Rbt(_hDp zs2$q^;E6l3T$8epSJVm7w;nt@GIKAlH{K_!xnFu%w(|Af26oEc8zLzrRUD&U%rjX; zqLH7BQA*jdNp``fsL)T`z!&|68i1%7M_@cuGltT;t?)-M{QXpIZEYbZWG~9x+82WD zH=Wdy55*@7Mg8s2uV2f>uQ-U|K4F_YKw7^N9|{VnqLmBKdp61j{;**3{^z*u7qQm7 zW$sLuUsM#(q-N{+E@Xj_!qp&&fC(R7nvg9A#`I}jqkr+`pZS7&FY$)d_X-N`nN&UU4{zN36PV;dVz zrgYG~^&4g!v4dLbMx+8KR5X(1AA$JvWl7(u)xYQYCl**X#%$8@otL3fQd-~gwJrg` zN;rN6*WB11;gss-he5L{`Z_&x-KZ?Vy)v$YWM2kKHTnUlL#yDPYMyX-4GDF*#SEiZ zRh(q!@fOZ=k4heznfy|NQgf}HSC&+ zwgN$G2|IFuvIi^WUIQgVQO}>QLHt&ObGP=^>WM8_mp$pN6-$e;+;@YPze6J2D3d6RxbTO^yb{4 zOpkHB_}-)-U464xs}cDc#`BHav^`#7?C$&*CA zaX?%~1GBW6>;YO{9!c8#s6NnB6Pe~MC)&!Oux0vfR|!IN@f-L(eR%n~aw{**&;^oy z=Z&O%t%)YF6Mm0XZwAabba8x{s0S^~%&4Sl%G!-chyY^jT1j_>1DA%O95(M&jqd6$ zg-%}6(Wvo~xp2zE%=6PlNwiIi?W6b%D_ORVMh?znTtJ(!BZfBNKi?OjKiaU0F4cy5 zXPP#o8jxGPjTnAvaI}UcE=9w=fm86-03ux2XK?BDr0-!JA+;<2fJnX@XM^Yy!1`{N zPVq9EPq($#WVcN1E=M*TeMWmM1oaZf*!LW6H|OeCh;-#90S*OXW3YQphV@;f9ZYES zC!?XTG?Rts+5G%99ewJ4aarNj$a1EHVKmJ!8kDw%$_s6xCX@@9y<$xki<0_gaL;GJ zqgz>`qs5cW6$3Er&5R{ghANQb#)~}sGFY`U8aQ?(Xc@1{F6m|Py9h#tL*kMQ+zRcD zDns{4nE~ssZP9D#QAhzoZA^eE?B?Ugm*B)d%w#_N@cun?eqQ#IL;w&Qe}^ZeOz!02 zqMGdOgP4^YmWeAXD}=z)X*`{Tb&^*qQe_u;PTLZD4U(3#1NZfr3(3;XpmQpSSh5_4 z2z4Y@NO}eYt(g`2puE8IzPtv->+UZwJTIunvZ74P!qs_E{6CO}&uJGlLy&-tC0Fua zs4Fl3zhfExzeS(_w*fh*@?0=^31KooP-QH?J$rT+5KXX&4g;|@2rC2P-Jfr4U%fsB0^`xdY!LFs$1>Hi9t^Z$bve+}70Hx#oxtwFsO z3JSO=2(d`om)$DY?yJKqrFK9BM*hSpmM^T%^q)Vc z)$V-yghI9Oph zY_WLdu!T`2X_zrjCGqJ?sI=Z}rymN=ywWKpfE-mptP5KwCQ-vi{G$=z_iNy-f}TUt&PFL?1pJBE}%xPw0Qy z<|^&PH?wV){*}fVOIIEl0rW!T%Roc(PyT^(2eXTE1$W_PU@dS19M1U2tglC6snD|L zS7TP0e3qXU$~sD#4WNauT#@dho}DPXR%+~6IXPTWX7eoli`;Mu#MdBnT&^sa69u3r z)SB1Ibl=qO<<5rHgv)t_h13To9^y%p5@r|!sMu7L?n_XV-K{`}%-UDRR&?sTDirC& zzo!;EPpzXrg*9=bA1jdD<6afG@n2NHiRX#_`#}EUU|UB=Xjtk`kddTac9R5@2w}Ly zy+nxOIUkdwpgN}he-7f!VQa~6T3@Aw^#65E4gnHLW&ola+>Gfk0y2f*EBe_oX5Ph% zf!~rEryY7DP}0llnFkSaz)!*fg|tG7-@<<$U9=J2Zbe?L#==jjmfek%Q7}YI!+`jN z`yzh;a*81&uk!U_9fohUEMv5NTTMmX9gW}$!5t9)1NzUfg76p~zdn>V{0bj>sRKcH z5gEh-^aA6}aDb(T#HJQ~{>;n}4?~YozG9H{#k+{bR~SY=9V06I@Sb$l+}I~jpb#ZG zrq>_A@nzOIDw-+-f#(A=OhbQC>%(}1>`w`n!w|ya81g=cGTZ?r9HMeteMNAL`Q-Xh5yX~y`8#6c5E}hV1Y{!nycuNLGK(SWeMufuc9lrX z-`Tj##PX4=oT;P(xB zC&o|;yiZ3KvPb*5T)DP(RF37NO~&7#JN8$#M=GCT)%U-EXCPf778Q2%5}b|eC9AY( za;;U$XVEmC)DSAi;*}b^F@FB?CG_w(yzs7@4@4oKw>1H`JzTISAqoX7ZmKCe*}%^L zkzG!F*);sMc_Dc8a6l-f!(u{@oGG*0>V*_LYq%Sy`}gBL3HPz+2+V=0mW7*Ln`u9@ z;_}Vty$RI!J;(>hQUI>mXAuG%8H8({{33Q#9Y6S=FPAS%VCKM6?4iGJps% z^}h2ua6CfF!XMK}NhktlAwD1&ktYRvV8g2Jv^-*Le2!?{P34CFyHz{IRBBsksBGMl zF+MbO_r0_#U|564Xa8x%-Lp|4Y>Z~ad2BLES?HK^rm&9Si#>i(wF&qiSP~Wi0WxSN zK@k$14^(X_Bm{O=Lg=ZiB0Lv=PfIkYo6eZHavyKqU>@e><_<8tDm|hN>jB6p!MiNS z;lY<6tMXh(LIm7B2TU^MlpJ&dSpVevZXr^_24qVOWnUp?j)~Tx4{3dO8K6 zj_ClVpGcAWS6^TKOoq{U|2;yLF#BMqKppO4k?FsyQKaFz=Rp*R9XN`sT&c1X&^eBd z&^9!Tg3HqyoKK&Py@n4{G&bbd6AdKE-U_TgwM(kL(p*Y07w#sw{niHZ04l|aj>k5<$2KV>T5Y&f3T@d2R zHe_@JBJ}U;Uv`-rdz4ScJ4Y8w?HX}VHJn26V&1f}K|89R!K^=c@iR`HU4A%69KxqW z$ns_Eb+D;J+p7o#k-~WsqLvH+8b`?&mg<&qFFt*_ELp>3Qu|wD+IOwff1Kf3${oGj z;=GUFN;09M=elyS1=xEmQ;kGVlwl%$+MqJ^Bj=~(pWZxe>MPd_eJ}sIB1K3@XeyIw{DPOj zsAHpPd>Hpd&c2Ud{-YIMP0jDCi~WTP4<0;rB8sZMZ5oRDtjp#2NpWCX#H=EY~YxVWh2I~G5&cG!rD&?ABaz40oaGaJb7Q;Ab&smGwC$IkFNH<6 zUtR)lHY?i&uS~Mtzw6GNQCU{jFQHWy#bKCeSSFtH@==A$PIbq}?O&fxKJ$57c2pjW za_(1mi2&Qz@VQ*JVF}fwEmy~Y)S|oQT_&ylBo5BMPDY&%mym} literal 0 HcmV?d00001 From 945d5ec781bc04ccfa792da5b6b4010e1c4e7d92 Mon Sep 17 00:00:00 2001 From: TrueCrimeDev Date: Mon, 29 Jun 2026 10:40:33 -0400 Subject: [PATCH 12/23] fix: make the preview scrollbars subtle The themed scrollbars used an opaque #898989 thumb at full width, which read as a heavy solid grey bar against the dark UI (especially the outer pane bar when the content only just overflowed). Switch to a thin, semi-transparent inset pill (#66FFFFFF, 2px inset, 8px track) so both the pane and code-block scrollbars are understated and don't compete with the content. Updates the proof render. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_011TcJGQVjhYU3tEMi8FF4TM --- Flow.Launcher/MainWindow.xaml | 6 +++--- Flow.Launcher/Themes/Base.xaml | 6 +++--- docs/assets/markdown-preview-scrollbars.png | Bin 39855 -> 44553 bytes 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index 62542974c42..27af24c6fc5 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -554,7 +554,7 @@ - + @@ -571,10 +571,10 @@ - + - + diff --git a/Flow.Launcher/Themes/Base.xaml b/Flow.Launcher/Themes/Base.xaml index bce9713b4f5..9353d66cff4 100644 --- a/Flow.Launcher/Themes/Base.xaml +++ b/Flow.Launcher/Themes/Base.xaml @@ -619,7 +619,7 @@ - + @@ -636,10 +636,10 @@ - + - + diff --git a/docs/assets/markdown-preview-scrollbars.png b/docs/assets/markdown-preview-scrollbars.png index fc01e8f52fc9ae5ba7e6a0f473158cefff8554da..c7faca354af73664d47b0a98a897ecd28ae71819 100644 GIT binary patch literal 44553 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 SiFzUY96xM$DEH@cSN{z)O-5t@ literal 39855 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%0As|brsfSo0f0Q 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 From 7ba1dbdb04e6b1cd8b040456d5932e651190bfb9 Mon Sep 17 00:00:00 2001 From: David Brett Date: Sun, 5 Jul 2026 15:33:17 +0200 Subject: [PATCH 13/23] Add base style for a horizontal scrollbar --- Flow.Launcher/Themes/Base.xaml | 43 ++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/Flow.Launcher/Themes/Base.xaml b/Flow.Launcher/Themes/Base.xaml index 9353d66cff4..c2135e600b4 100644 --- a/Flow.Launcher/Themes/Base.xaml +++ b/Flow.Launcher/Themes/Base.xaml @@ -363,6 +363,49 @@ + + + + + + + + - @@ -716,9 +676,6 @@ Padding="{TemplateBinding Padding}" VerticalContentAlignment="Top" VerticalScrollBarVisibility="{TemplateBinding VerticalScrollBarVisibility}"> - @@ -738,6 +695,7 @@ Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}" /> Date: Sun, 5 Jul 2026 16:17:59 -0400 Subject: [PATCH 15/23] fix: address reviewer feedback on markdown preview pane MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Base.xaml: make horizontal scrollbar theme-aware by adding HorizontalThumbStyle/HorizontalScrollBarStyle dynamic resource keys (BaseHorizontalScrollBarStyle now uses DynamicResource HorizontalThumbStyle; code-block ScrollViewer uses DynamicResource HorizontalScrollBarStyle so custom themes can override it, matching the vertical ScrollBarStyle pattern) - Base.xaml: restore hyperlink underline on hover/focus so users who rely on non-colour cues (colour-vision deficiencies, low-contrast themes) can still identify links - PreviewMarkdownScrollViewer: coalesce Dispatcher.BeginInvoke calls — rapid Markdown changes no longer queue redundant document traversals; a second BeginInvoke is skipped while one is already pending - PreviewMarkdownScrollViewer: override Equals/GetHashCode on SolidHighlightingBrush so colour comparisons work by value, preventing unnecessary re-tints and redraws when the theme colour is unchanged - MainViewModel: make TogglePreviewAsync properly async so SuppressPreviewAsync is awaited instead of fire-and-forgotten; exceptions are no longer unobserved - MainViewModel: add _previewManuallyClosed flag — when the user explicitly closes the preview via F1 the AlwaysPreview restore path no longer re-arms when the selection passes through a Never result, so the pane stays closed until the user re-opens it (regression test added) - MainViewModel: ResetPreview now closes an open external preview before calling ShowInternalPreview in the ForcePreviewPane branch, preventing both preview types from being visible simultaneously - Tests: isolate CodeHighlightThemeTest with SetUp/TearDown so static ActiveTheme does not bleed across tests; add coverage for an unrecognised (non-empty) theme setting Co-Authored-By: Claude Sonnet 4.6 --- Flow.Launcher.Test/CodeHighlightThemeTest.cs | 18 +++++++++++- .../MainViewModelPreviewTest.cs | 28 +++++++++++++++++++ .../Controls/PreviewMarkdownScrollViewer.cs | 21 ++++++++++++-- Flow.Launcher/Themes/Base.xaml | 23 +++++++++++++-- Flow.Launcher/ViewModel/MainViewModel.cs | 19 ++++++++++--- 5 files changed, 100 insertions(+), 9 deletions(-) diff --git a/Flow.Launcher.Test/CodeHighlightThemeTest.cs b/Flow.Launcher.Test/CodeHighlightThemeTest.cs index e8aec41721c..5e4a25144b3 100644 --- a/Flow.Launcher.Test/CodeHighlightThemeTest.cs +++ b/Flow.Launcher.Test/CodeHighlightThemeTest.cs @@ -7,6 +7,14 @@ namespace Flow.Launcher.Test [TestFixture] internal class CodeHighlightThemeTest { + private string _savedThemeName; + + [SetUp] + public void SetUp() => _savedThemeName = PreviewMarkdownScrollViewer.ActiveThemeName; + + [TearDown] + public void TearDown() => PreviewMarkdownScrollViewer.ApplyCodeHighlightTheme(_savedThemeName, isDark: true); + [Test] public void GivenAutoSetting_WhenAppIsDark_ThenActiveThemeIsADarkTheme() { @@ -32,11 +40,19 @@ public void GivenExplicitTheme_WhenApplied_ThenActiveThemeMatchesRegardlessOfApp } [Test] - public void GivenUnknownOrEmptySetting_WhenApplied_ThenFallsBackToAutoBehaviour() + public void GivenEmptySetting_WhenApplied_ThenFallsBackToAutoBehaviour() { PreviewMarkdownScrollViewer.ApplyCodeHighlightTheme("", isDark: false); ClassicAssert.AreEqual("VS Code Light", PreviewMarkdownScrollViewer.ActiveThemeName); } + + [Test] + public void GivenUnrecognisedSetting_WhenApplied_ThenFallsBackToAutoBehaviour() + { + PreviewMarkdownScrollViewer.ApplyCodeHighlightTheme("BogusTheme", isDark: true); + + ClassicAssert.AreEqual("VS Code Dark+", PreviewMarkdownScrollViewer.ActiveThemeName); + } } } diff --git a/Flow.Launcher.Test/MainViewModelPreviewTest.cs b/Flow.Launcher.Test/MainViewModelPreviewTest.cs index aa84eed4ba8..214367dfc5a 100644 --- a/Flow.Launcher.Test/MainViewModelPreviewTest.cs +++ b/Flow.Launcher.Test/MainViewModelPreviewTest.cs @@ -230,6 +230,29 @@ public void GivenAlwaysPreviewOffAndDefaultResult_WhenPreviewReset_ThenInternalP ClassicAssert.IsFalse(viewModel.InternalPreviewVisible); } + [Test] + public async Task GivenAlwaysPreviewOnAndManuallyClosedThenNeverResult_WhenDefaultResultSelected_ThenPreviewStaysHiddenAsync() + { + // Regression: user closes preview via F1, navigates through a Never result, then to a + // normal result — the AlwaysPreview restore path must not re-open the pane against + // the user's explicit intent. + var settings = new Settings + { + AlwaysPreview = true + }; + var viewModel = CreatePreviewViewModel(settings, ResultAreaColumnPreviewHidden); + SetPreviewManuallyClosed(viewModel, true); + + viewModel.PreviewSelectedItem = ViewModel("Never", PreviewVisibility.Never, settings); + await InvokeUpdatePreviewAsync(viewModel); + ClassicAssert.IsFalse(viewModel.InternalPreviewVisible); + + viewModel.PreviewSelectedItem = ViewModel("Normal", PreviewVisibility.Default, settings); + await InvokeUpdatePreviewAsync(viewModel); + + ClassicAssert.IsFalse(viewModel.InternalPreviewVisible); + } + private static MainViewModel CreatePreviewViewModel(Settings settings, int resultAreaColumn) { var viewModel = (MainViewModel)RuntimeHelpers.GetUninitializedObject(typeof(MainViewModel)); @@ -279,5 +302,10 @@ private static void SetExternalPreviewVisible(MainViewModel viewModel, bool visi => typeof(MainViewModel) .GetField("k__BackingField", BindingFlags.Instance | BindingFlags.NonPublic) .SetValue(viewModel, visible); + + private static void SetPreviewManuallyClosed(MainViewModel viewModel, bool value) + => typeof(MainViewModel) + .GetField("_previewManuallyClosed", BindingFlags.Instance | BindingFlags.NonPublic) + .SetValue(viewModel, value); } } diff --git a/Flow.Launcher/Resources/Controls/PreviewMarkdownScrollViewer.cs b/Flow.Launcher/Resources/Controls/PreviewMarkdownScrollViewer.cs index 9fba31ffd32..bb9a24de4b7 100644 --- a/Flow.Launcher/Resources/Controls/PreviewMarkdownScrollViewer.cs +++ b/Flow.Launcher/Resources/Controls/PreviewMarkdownScrollViewer.cs @@ -18,6 +18,9 @@ public class PreviewMarkdownScrollViewer : MarkdownScrollViewer internal static CodeHighlightTheme ActiveTheme { get; private set; } = CodeHighlightTheme.VSCodeDarkPlus; + // Track in-flight BeginInvoke so rapid Markdown changes don't pile up traversals. + private DispatcherOperation _pendingFixOperation; + /// /// Name of the code-highlight theme currently applied to embedded code blocks. /// @@ -55,7 +58,7 @@ protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e) if (e.Property == MarkdownProperty) { UpdateDocumentPageWidth(ActualWidth); - _ = Dispatcher.BeginInvoke(ApplyMarkdownCompatibilityFixes, DispatcherPriority.Loaded); + ScheduleCompatibilityFixes(); } } @@ -63,7 +66,16 @@ protected override void OnInitialized(EventArgs e) { base.OnInitialized(e); UpdateDocumentPageWidth(ActualWidth); - _ = Dispatcher.BeginInvoke(ApplyMarkdownCompatibilityFixes, DispatcherPriority.Loaded); + ScheduleCompatibilityFixes(); + } + + private void ScheduleCompatibilityFixes() + { + // Coalesce: if a traversal is already queued, let it run rather than piling up more. + if (_pendingFixOperation is { Status: DispatcherOperationStatus.Pending }) + return; + + _pendingFixOperation = Dispatcher.BeginInvoke(ApplyMarkdownCompatibilityFixes, DispatcherPriority.Loaded); } protected override Size ArrangeOverride(Size arrangeSize) @@ -254,5 +266,10 @@ public SolidHighlightingBrush(Color color) public override Brush GetBrush(ITextRunConstructionContext context) => _brush; public override string ToString() => _brush.Color.ToString(); + + public override bool Equals(object obj) + => obj is SolidHighlightingBrush other && _brush.Color == other._brush.Color; + + public override int GetHashCode() => _brush.Color.GetHashCode(); } } diff --git a/Flow.Launcher/Themes/Base.xaml b/Flow.Launcher/Themes/Base.xaml index 1012c5f9f89..d34ff2c1bf5 100644 --- a/Flow.Launcher/Themes/Base.xaml +++ b/Flow.Launcher/Themes/Base.xaml @@ -397,7 +397,7 @@ x:Name="PART_Track" DockPanel.Dock="Bottom"> - + @@ -406,6 +406,16 @@ + + + + + + + diff --git a/Flow.Launcher/Themes/Midnight.xaml b/Flow.Launcher/Themes/Midnight.xaml index 134b006d987..58eed2f036c 100644 --- a/Flow.Launcher/Themes/Midnight.xaml +++ b/Flow.Launcher/Themes/Midnight.xaml @@ -110,6 +110,26 @@ x:Key="ScrollBarStyle" BasedOn="{StaticResource BaseScrollBarStyle}" TargetType="{x:Type ScrollBar}" /> + + F1 M20,20z M0,0z M14.75,1A5.24,5.24,0,0,0,10,4A5.24,5.24,0,0,0,0,6.25C0,11.75 10,19 10,19 10,19 20,11.75 20,6.25A5.25,5.25,0,0,0,14.75,1z + diff --git a/Flow.Launcher/Themes/Ubuntu.xaml b/Flow.Launcher/Themes/Ubuntu.xaml index 330d57b299c..dc2e8f3c9fd 100644 --- a/Flow.Launcher/Themes/Ubuntu.xaml +++ b/Flow.Launcher/Themes/Ubuntu.xaml @@ -127,6 +127,26 @@ x:Key="ScrollBarStyle" BasedOn="{StaticResource BaseScrollBarStyle}" TargetType="{x:Type ScrollBar}" /> + -