- Fix (false, false) case in EditActionKeyword to break gracefully instead
of throwing ArgumentException. This handles the valid scenario where the
user changes a disabled keyword's text but keeps it disabled.
- Fix GetActiveActionKeywords to return an empty dictionary instead of null
when actionKeywordStr is null/empty, preventing NullReferenceException.
- Fix ActionKeyword setter to only auto-enable when the value actually
changes, preventing unintended side-effects during construction.
- Initialize ActionKeywordSetting backing fields directly in constructor to
avoid the auto-enable triggering during initialization.
- Change TextBox binding to UpdateSourceTrigger=PropertyChanged so the
checkbox auto-enables as the user types (before they click the checkbox),
fixing the checkbox toggle issue caused by LostFocus timing.
Co-authored-by: Jack251970 <53996452+Jack251970@users.noreply.github.com>
Renamed the method GetFreezeSolidColorBrush to GetFrozenSolidColorBrush in ThemeHelper.cs for improved naming consistency. Updated all references in Theme.cs accordingly. No changes to functionality.
Moved the CopyStyle method from Theme to a new static ThemeHelper class for better code organization and reusability. Updated all references in Theme to use ThemeHelper.CopyStyle. Added ThemeHelper.cs and necessary using directives.
Introduce ThemeHelper.GetFreezeSolidColorBrush to centralize and reuse SolidColorBrush creation and freezing logic. Refactor Theme.cs to use this helper, improving code clarity and maintainability. Also, use Brushes.Transparent directly where appropriate.
Changed SelectionBrush in TextBox style from StaticResource to DynamicResource for SystemAccentColorLight1Brush. This enables automatic updates to the selection color when the resource changes at runtime, improving theme responsiveness.
Separated BatteryBox into its own StackPanel with margin for improved alignment and spacing in MainWindow.xaml and SettingsPaneTheme.xaml. Updated the battery icon glyph in SettingsPaneTheme.xaml for a refreshed visual appearance.
Changed default Margin in Base.xaml styles from "0 0 0 3" or "0 0 0 0" to "0 1.5 0 1.5" for better vertical alignment and spacing in both the main and BaseDateBox styles. Trigger-based margin and font size settings remain unchanged.
Restructure ClockPanel in MainWindow.xaml by grouping the Clock and Date TextBlocks in a vertical StackPanel and placing the Battery TextBlock in a separate vertical StackPanel with a left margin. This enhances the visual alignment and separation between the clock/date and battery displays.
- Remove BaseBatteryBox and BatteryBox style definitions from Base.xaml
- Remove BatteryBox style overrides from all theme files
- Update BatteryBox TextBlock in MainWindow.xaml to use ClockBox style
- Update BatteryBox TextBlock in SettingsPaneTheme.xaml to use ClockBox style
Co-authored-by: Jack251970 <53996452+Jack251970@users.noreply.github.com>
- Add PowerStatus NuGet package (v1.0.3)
- Add UseBattery setting to Settings.cs
- Add BatteryText property and update periodic timer in MainViewModel
- Add BatteryBox TextBlock to ClockPanel in MainWindow.xaml
- Add BaseBatteryBox and BatteryBox styles to Base.xaml and all theme files
- Add UseBattery toggle and preview to SettingsPaneTheme
- Add Battery localization string to en.xaml
Co-authored-by: Jack251970 <53996452+Jack251970@users.noreply.github.com>
InitProgressbarAnimation is now triggered by the progress bar's Loaded event instead of during main window initialization. This ensures the animation starts only after the progress bar is fully loaded, improving reliability and preventing potential UI timing issues.
Refactored Theme.cs to improve theme blur and dark mode handling:
- Replaced static IsBlurTheme() with IsThemeBlurEnabled(dict) for per-theme blur detection.
- Updated all blur checks to use the new method.
- Improved code style, readability, and comments.
- Moved system dark mode registry check to only run when needed.
- Ensured blur and dark mode are applied based on theme and user/system preferences.
Logging when a plugin's minimum Flow Launcher version is not met
has been removed. The method now returns false without logging
any informational message.
Improved the message shown when a plugin requires a newer Flow Launcher version by adding line breaks for clarity and updating the title wording. Adjusted code to pass Environment.NewLine and modified resource strings in en.xaml to support the new format.
Throw a JsonException if deserializing plugin metadata from JSON returns null. This prevents null metadata from being used and improves error handling for invalid or corrupted plugin.json files.
Refactored the plugin minimum app version check to use Version.TryParse instead of try-catch with Version.Parse, preventing exceptions on invalid input. Improved error handling by logging parse failures as errors and version mismatches as info, making the logic clearer and more robust.
Previously, installing a plugin with an invalid or corrupted plugin.json would cause an unhandled exception. Now, deserialization errors are caught, a user-friendly error message is shown, and the exception is logged. Added a new localized error message for this scenario in en.xaml.
Introduced MinimumAppVersion property to PluginMetadata, enabling plugins to specify required Flow Launcher version. Plugin installation now checks this requirement and prompts users if unsatisfied. Minimum app version logic moved to PluginManager and applied to manifest updates. Added localized strings for user prompts. Refactored SameOrLesserPluginVersionExists to accept PluginMetadata.