Commit graph

11216 commits

Author SHA1 Message Date
taooceros
11eefa49b7 chore: upgrade from .NET 9 to .NET 10
Some checks failed
Build / build (push) Has been cancelled
Update all project files from net9.0 to net10.0:
- Core projects: net9.0-windows → net10.0-windows
- App projects: net9.0-windows10.0.19041.0 → net10.0-windows10.0.19041.0
- All plugin projects updated
- Microsoft.Extensions packages updated to 10.0.0-preview.1

Build verified with 1220 warnings (pre-existing), 0 errors.

💘 Generated with Crush

Assisted-by: Kimi for Coding via Crush <crush@charm.land>
2026-02-05 01:53:42 +08:00
taooceros
45e2ce4992 docs(avalonia): mark text highlighting as done in checklist
Text highlighting was already implemented via HighlightTextConverter
and TitleHighlightData/SubTitleHighlightData in ResultViewModel.

💘 Generated with Crush

Assisted-by: Kimi for Coding via Crush <crush@charm.land>
2026-02-05 01:43:13 +08:00
taooceros
b0dfd0b86c feat(avalonia): implement preview hotkey setting and update migration checklist
- Add PreviewHotkey property to HotkeySettingsViewModel
- Add preview hotkey UI to HotkeySettingsPage
- Implement dynamic hotkey handling in MainWindow code-behind
- Remove hardcoded F1 keybinding from XAML
- Update AVALONIA_MIGRATION_CHECKLIST.md with accurate progress:
  - Overall progress: 60-65% (was 35-40%)
  - Plugin Store: 95% done (was 0%)
  - Plugin Settings: 90% done (was 33%)
  - Proxy Settings: 100% done (was 59%)

💘 Generated with Crush

Assisted-by: Kimi for Coding via Crush <crush@charm.land>
2026-02-05 01:41:28 +08:00
taooceros
0e90bc1c18 chore(avalonia): remove build cleanup targets and update lock file
- Remove PowerShell-based duplicate DLL cleanup targets from Avalonia csproj
- Remove unnecessary runtime folder cleanup targets
- Update WPF packages.lock.json dependencies

These cleanup steps are now handled differently or are no longer needed.

💘 Generated with Crush

Assisted-by: Kimi for Coding via Crush <crush@charm.land>
2026-02-05 00:52:18 +08:00
Shengkai Lin
54827a1b25 sk
Some checks are pending
Build / build (push) Waiting to run
2026-02-04 22:03:25 +08:00
Shengkai Lin
5e1ec2b3e9 fix(avalonia): update PluginManager API calls for Release build
Some checks failed
Build / build (push) Has been cancelled
- Replace PluginManager.AllPlugins with GetAllLoadedPlugins()
- Replace PluginManager.NonGlobalPlugins with GetNonGlobalPlugins()
- Fix InitializePluginsAsync to pass IResultUpdateRegister parameter
- Fix QueryBuilder.Build to pass required 3 parameters
- Implement IResultUpdateRegister interface on MainViewModel
2026-02-01 18:01:46 +08:00
Shengkai Lin
c51c029263 Merge branch 'dev' into avalonia_migration
Some checks are pending
Build / build (push) Waiting to run
Resolved conflicts:
- Calculator.csproj: Keep Mages 3.0.1 (from dev) + Avalonia packages
- Explorer SettingsViewModel.cs: Use PromptUserSelectFileAsync for ShellPath
- ExplorerSettings.xaml: Removed (deleted in HEAD)
- packages.lock.json: Restored from dev
2026-02-01 13:33:39 +08:00
Shengkai Lin
fbcd700cd8 ci(github): add avalonia_migration branch to build triggers
Enable automatic GitHub Actions builds for pushes to the avalonia_migration branch.
2026-02-01 13:28:52 +08:00
Shengkai Lin
c507bb982d chore(git): remove codemap files from tracking and add to gitignore
- Remove 13 codemap.md files from git index (Plugins/Flow.Launcher.Plugin.Explorer)
- Add **/codemap.md pattern to .gitignore
- Add .slim/ to .gitignore
2026-02-01 13:26:50 +08:00
Shengkai Lin
9c99c7c65a feat(avalonia): implement HighlightTextConverter with theme-aware styling
- Add gold foreground color (#FFD700) for highlighted search matches
- Update HighlightTextConverter to use theme resource with fallback
- Fix TextBlockHelper to preserve Foreground property when copying Runs
- Fix highlight update bug: sync TitleHighlightData/SubTitleHighlightData/Score
  for reused ResultViewModel instances when query changes
- Update migration checklist to mark HighlightTextConverter as done
2026-02-01 13:25:11 +08:00
Shengkai Lin
830023513f fix(avalonia): fix enum translation in settings pages
- Add DropdownDataGeneric<T> helper for translated enum dropdowns
- Fix GeneralSettingsViewModel to use DropdownDataGeneric for enums:
  - SearchWindowScreens, SearchWindowAligns, SearchPrecisionScore, LastQueryMode
- Fix ThemeSettingsViewModel to use DropdownDataGeneric for ColorSchemes
- Fix PluginsSettingsViewModel DisplayMode to use correct translation keys:
  - DisplayModeOnOff, DisplayModePriority, DisplayModeSearchDelay, DisplayModeHomeOnOff
- Add missing translation keys to en.xaml for plugin types and display modes
- Update XAML bindings to use DisplayMemberPath/SelectedValuePath pattern
2026-02-01 12:33:52 +08:00
Shengkai Lin
8ee32dfab7 fix(avalonia): fix localization keys in settings pages
- Rename Avalonia-specific keys to match existing WPF keys in en.xaml:
  - proxyEnabled -> enableProxy, proxyServer -> server, etc.
  - toggleFlowLauncher -> flowlauncherHotkey
  - install -> installLocalPluginTooltip
  - plugin_open_plugin_directory -> pluginDirectory
- Add missing Avalonia-specific keys to en.xaml:
  - hotkeyFormatTip, sourceCode, loading
  - plugin_settings_open_in_wpf_window, openSettings
- Fix Explorer plugin settings to not expand general section by default
2026-02-01 12:05:01 +08:00
Shengkai Lin
0681332238 fix(explorer): complete Avalonia migration and fix action keyword crashes
- Remove WPF views (ActionKeywordSetting, ExplorerSettings, PreviewPanel, QuickAccessLinkSettings)
- Fix NullReferenceException in ActionKeywordModel by initializing settings
- Fix (false,false) crash case in EditActionKeywordAsync
- Add null-safe dialog patterns for owner window
- Move Focus() to OnOpened for reliable control attachment
- Add using for Avalonia PreviewPanel namespace in ResultManager
- Update Main.cs to use AvaloniaControl return type
2026-01-31 23:09:41 +08:00
Hongtao Zhang
e337f9e6c5 feat(explorer): add Avalonia ActionKeywordSetting dialog
- Port ActionKeywordSetting window to Avalonia
- Includes keyword editing, enable/disable toggle, validation
- Handles Enter key to submit, Space key blocked in keyword input
2026-01-26 16:32:03 -08:00
Hongtao Zhang
e726c44559 ci: add self-contained publish for Avalonia build
- Add Net9.0-SelfContained.pubxml publish profile for Avalonia
- Add Publish-Self-Contained-Avalonia function to post_build.ps1
- Call Avalonia publish before cleanup in Main function
2026-01-26 16:30:24 -08:00
Hongtao Zhang
82390b580e ci: add Avalonia build processing to post_build script
- Add Delete-Unused-Avalonia function to remove duplicate DLLs in Avalonia output
- Add Remove-CreateDumpExe-Avalonia function to clean up createdump.exe
- Call Avalonia processing functions in Main after WPF processing
2026-01-26 16:28:47 -08:00
Hongtao Zhang
ae0bdbc6bc ci: trigger builds on draft PRs and add Avalonia artifact
- Add pull_request types to trigger on opened, synchronize, reopened, ready_for_review
- Add 'Flow Launcher Avalonia' artifact uploading Output/Release/Avalonia/
2026-01-26 16:24:17 -08:00
Hongtao Zhang
5e1411f099 feat(avalonia): add Plugin Store settings page with virtualized grid
- Add PluginStoreSettingsPage with header, language filters, and search
- Add PluginStoreSettingsViewModel with async loading and filtering
- Add PluginStoreItemViewModel for individual plugin cards with install/update/uninstall
- Connect AvaloniaPublicAPI to real PluginsManifest instead of empty stubs
- Use FluentAvalonia ItemsRepeater with UniformGridLayout for virtualization
- Fix icon visibility using ObjectConverters instead of StringConverters
2026-01-26 16:20:56 -08:00
Hongtao Zhang
c0d17672af feat(avalonia): add Avalonia settings views for 8 plugins
- Add i18n injection to Application.Resources for DynamicResource bindings
- Create Avalonia settings views for plugins:
  - Explorer (ExplorerSettings + QuickAccessLinkSettings dialog)
  - BrowserBookmark (SettingsControl + CustomBrowserSettingWindow)
  - Calculator (CalculatorSettings)
  - ProcessKiller (SettingsControl)
  - PluginsManager (PluginsManagerSettings)
  - WebSearch (SettingsControl)
  - Shell (ShellSetting + converter)
  - Program (ProgramSetting)
- Add IsAvalonia detection pattern for dual-framework dialog support
- Update 11 plugin .csproj files with CopyToAvaloniaOutput targets
- Add System.Threading.Tasks using for async RelayCommand support
2026-01-26 15:30:33 -08:00
Hongtao Zhang
0c2f026d01 Implement comprehensive Plugins Settings page in Avalonia
- Add plugin search with filtering across name, description, and action keywords
- Implement display mode switcher (On/Off, Priority, Search Delay, Home On/Off)
- Add plugin management controls (enable/disable, priority, search delays, home visibility)
- Integrate both native Avalonia settings and WPF fallback support
- Add action keywords editing dialog
- Include plugin directory access, source code links, and uninstall functionality
- Add help dialog explaining priority, search delay, and home features
- Improve UI with FluentAvalonia controls and proper layout
- Load plugin icons asynchronously and display plugin metrics (init time, query time)

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-01-26 14:19:30 -08:00
Jeremy Wu
6c8add051f
Merge pull request #4057 from Flow-Launcher/last_history_show_result_icon
Some checks failed
Build / build (push) Has been cancelled
History results display actual result icon for Last Opened history style
2026-01-26 17:50:55 +11:00
Jeremy
248da93d05 fix preview when toggle history mode via Ctrl + H 2026-01-26 16:57:47 +11:00
Jack Ye
e9dcd8b7ba
Fix code comments
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2026-01-23 16:15:25 +08:00
Jack251970
935d41dc26 Ensure combability of glyph setter 2026-01-23 16:10:01 +08:00
Jack251970
0f0ee9ffde Revert "Try to fix combability issue"
This reverts commit b703bcdd52.
2026-01-23 16:05:03 +08:00
Jack251970
b703bcdd52 Try to fix combability issue 2026-01-23 15:51:24 +08:00
Jack251970
8e127d0339 Code cleanup 2026-01-21 18:13:27 +08:00
Jack Ye
add111fe3f
Merge pull request #4212 from Flow-Launcher/dependabot/nuget/Flow.Launcher.Plugin/Microsoft.SourceLink.GitHub-10.0.102
Bump Microsoft.SourceLink.GitHub from 8.0.0 to 10.0.102
2026-01-21 18:08:03 +08:00
Jeremy
bf44637400 revert context menu early exit when history result 2026-01-20 23:18:00 +11:00
Jeremy
657e6ae7d3 add null-safe comparison for glyph 2026-01-20 22:55:04 +11:00
Jeremy
4ddb164bbd adjusted context menu call to exit early when history result selected 2026-01-20 22:48:11 +11:00
Jeremy
5c241d7491 fix to respect max history result shown setting 2026-01-20 21:47:38 +11:00
Jeremy
90360022a4 update glyph when history result exists 2026-01-20 21:26:04 +11:00
Hongtao Zhang
d9bfe4995f Fix MainWindow startup visibility and OpenSettings logic
- Delay setting desktop.MainWindow until plugins are initialized to prevent auto-show on startup
- Restore missing Hide() method in MainViewModel
- Fix Show() method which was incorrectly calling HideRequested
- Ensure OpenSettings cleanly hides MainWindow before showing SettingsWindow
2026-01-19 00:19:15 -08:00
Hongtao Zhang
32aa3ffdc5 Fix MainWindow visibility logic:
- Restore Hide() method in MainViewModel (accidentally deleted)
- Fix Show() method which was incorrectly calling HideRequested
- Ensure OpenSettings cleanly hides MainWindow before showing SettingsWindow
2026-01-19 00:16:59 -08:00
Hongtao Zhang
2b328e552a Fix OpenSettings command: ensure Main Window hides before showing Settings
- Call Hide() before scheduling SettingsWindow.Show() to ensure proper visibility state transition
- Use Dispatcher.UIThread.Post for showing the new window to avoid focus conflicts
2026-01-19 00:13:42 -08:00
Hongtao Zhang
19913fa1e6 Fix OpenSettings command: ensure Main Window hides before showing Settings
- Remove Dispatcher.UIThread.Post which might cause timing issues
- Call Hide() before showing SettingsWindow to ensure proper focus and visibility transition
2026-01-19 00:10:33 -08:00
Hongtao Zhang
dda587493b Migrate Program plugin settings to Avalonia and fix scroll issues
- Update ISettingProvider to support CreateSettingPanelAvalonia
- Create native Avalonia settings UI for Program Plugin (ProgramSetting.axaml)
- Implement ProgramSettingViewModel using CommunityToolkit.Mvvm
- Update PluginsSettingsViewModel to detect and load native Avalonia settings
- Replace ListBox with ItemsControl in PluginsSettingsPage to fix auto-scroll issues when expanding settings
- Align Avalonia package versions (11.2.3) across projects to fix type load errors
2026-01-19 00:06:36 -08:00
Hongtao Zhang
fb9721c7f2 refactor: move history storage to infrastructure and implement WPF settings window host in Avalonia 2026-01-18 23:28:56 -08:00
Hongtao Zhang
0e1af2279b Implement WPF plugin settings hosting in Avalonia
- Created WpfControlHost to host WPF controls using HwndSource

- Updated PluginItemViewModel to load settings via ISettingProvider

- Updated PluginsSettingsPage to display settings in an expander
2026-01-18 20:01:00 -08:00
Hongtao Zhang
1209ca5194 Fix flickering & add result highlighting
- Implemented channel-based debouncing (20ms) in MainViewModel to fix result flickering (matches WPF behavior)

- Added ResultForUpdate struct and ProcessResultUpdatesAsync for batching updates

- Added HighlightTextConverter and TextBlockHelper for bolding matched query terms

- Updated ResultListBox to display highlighted title and subtitle
2026-01-18 13:13:05 -08:00
Hongtao Zhang
1d945654c1 Expand GeneralSettingsPage with ~25 settings using FluentAvalonia SettingsExpander
- Add Card, ExCard, CardGroup custom controls for settings pages
- Update GeneralSettingsViewModel with new properties:
  - Startup: UseLogonTaskForStartup, HideOnStartup
  - Behavior: HideNotifyIcon, IgnoreHotkeysOnFullscreen, AlwaysPreview
  - Updates: AutoUpdates, AutoUpdatePlugins
  - Search: SearchPrecision, LastQueryMode, SearchDelay
  - Home: ShowHomePage, ShowHistoryResults, MaxHistoryResults
  - Misc: AutoRestart, ShowWarning, AlwaysStartEn, ShouldUsePinyin
- Rewrite GeneralSettingsPage.axaml using SettingsExpander pattern
- Update migration checklist to ~35-40% progress
2026-01-18 02:25:47 -08:00
Hongtao Zhang
8a99881799 Add detailed Avalonia migration checklist 2026-01-18 02:16:15 -08:00
Hongtao Zhang
0f9b9329dd Add hotkey recorder with manual modifier tracking
- Add HotkeyRecorderDialog with global keyboard hook for capturing hotkeys
- Implement manual modifier state tracking to handle swallowed key events
- Add HotkeyControl button that opens the recorder dialog
- Add CheckAvailability and RemoveToggleHotkey to HotKeyMapper
- Expose GetKeyFromVk helper in GlobalHotkey infrastructure
- Add Settings pages (General, Plugin, Theme, Proxy, About)
- Add PreviewPanel for result previews in main window
- Fix hook reuse issue by clearing callback on close instead of disposing
2026-01-18 02:10:53 -08:00
Hongtao Zhang
29b26643cc Improve glyph support and embed Segoe Fluent Icons
- Embed SegoeFluentIcons.ttf as an AvaloniaResource
- Register SegoeFluentIcons FontFamily in App.axaml using avares URI
- Create FontLoader helper for robust font resolution (Embedded > System > File)
- Add safety checks to FontLoader to prevent rendering crashes if fonts are invalid
- Update ResultViewModel and ResultListBox to use resolved GlyphFontFamily
2026-01-17 12:50:07 -08:00
Jack Ye
ca5f5cf0e3
Merge pull request #4206 from Flow-Launcher/copilot/fix-calculator-thousands-separator
Add setting to disable thousands separator in Calculator plugin
2026-01-17 20:17:41 +08:00
VictoriousRaptor
befcc9b37c
Update Plugins/Flow.Launcher.Plugin.Calculator/Languages/en.xaml 2026-01-17 19:59:47 +08:00
Hongtao Zhang
ed668f3716 Add glyph icon support for results
- Add Glyph and GlyphAvailable properties to ResultViewModel
- Set Glyph from plugin Result when creating result items
- Add resultGlyph style matching icon size (32x32)
- Update ResultListBox to show glyph or image icon based on ShowGlyph property
- ShowGlyph = true when UseGlyphIcons is enabled AND glyph is available
2026-01-15 23:41:11 -08:00
Hongtao Zhang
c68a03e193 Delay window show until plugins are initialized
- MainWindowVisibility starts as false (window hidden)
- Window IsVisible bound to MainWindowVisibility
- Set MainWindowVisibility = true in OnPluginsReady() after plugins load
2026-01-15 23:31:30 -08:00
Hongtao Zhang
5d80816f84 Refactor i18n to be self-initializing via DI
- Internationalization.Initialize() called in constructor when DI creates it
- Remove InitializeInternationalization() method from App.axaml.cs
- Update AvaloniaPublicAPI and LocalizeExtension to use Ioc.Default.GetService
- Reorder ConfigureDI before i18n initialization
2026-01-15 01:17:29 -08:00