Skip to content

Commit 702efd8

Browse files
committed
Release v1.1.0 - Flatpak support, subdirectory scanning, UI improvements
1 parent cbacc2f commit 702efd8

8 files changed

Lines changed: 962 additions & 490 deletions

File tree

App.axaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
x:Class="DMINLauncher.App"
44
RequestedThemeVariant="Dark">
55
<Application.Styles>
6-
<FluentTheme />
6+
<FluentTheme DensityStyle="Compact" />
7+
<StyleInclude Source="Styles/CompactRadioButton.axaml"/>
78
</Application.Styles>
89
</Application>

Assets/flatpak.png

16.6 KB
Loading

Assets/folder.png

800 KB
Loading

CHANGELOG.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,29 @@ All notable changes to DMINLauncher will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [1.1.0] - 2025-01-XX
9+
10+
### Added
11+
- 🐧 **Flatpak Engine Support** - Linux/Batocera users can now select Flatpak engines (e.g., org.zdoom.GZDoom)
12+
- 🔄 **Dual Engine Storage** - Separate storage for file path and Flatpak engines, switch between them without losing selections
13+
- 📂 **Subdirectory WAD Scanning** - IWADs directory now scans subdirectories for WAD files
14+
- 🎨 **Compact Radio Buttons** - Smaller, cleaner radio button style (30% smaller circles)
15+
- ⚠️ **Flatpak Permission Management** - Automatic filesystem permission configuration using `flatpak override --user`
16+
- ⌨️ **ESC Key Exit Confirmation** - Press ESC to show exit dialog, ESC again to cancel, Enter to confirm
17+
- 🚪 **Exit Confirmation Dialog** - Exit button and ESC key both show "Are you sure?" confirmation
18+
19+
### Changed
20+
- 🎮 **Engine Selection UI** - Radio buttons for File Path vs Flatpak (Linux only), cleaner layout
21+
- 📊 **IWAD Info Display** - Shows full file path and complete map list instead of redundant stats
22+
- 🎨 **UI Refinements** - Aligned spacing between WADs and Engine borders, colored bottom action buttons
23+
- ⚙️ **Batocera Defaults** - Default engine path changed from `/userdata/roms/ports/engines/gzdoom` to `/usr/bin/gzdoom`
24+
- 📝 **Config File Format** - Now stores separate `enginefilepath` and `engineflatpak` values
25+
26+
### Fixed
27+
-**Flatpak Dialog Positioning** - Dialogs now properly sized on Batocera (not fullscreen)
28+
-**ESC Key Handling** - All dialogs can be closed with ESC key
29+
-**Radio Button Visibility** - Properly hidden on Windows, shown on Linux/Batocera
30+
831
## [1.0.3] - 2024-01-15
932

1033
### Changed

DMINLauncher.csproj

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@
99
<AssemblyName>DMINLauncher</AssemblyName>
1010

1111
<!-- Version Information -->
12-
<Version>1.0.3</Version>
13-
<AssemblyVersion>1.0.3</AssemblyVersion>
14-
<FileVersion>1.0.3</FileVersion>
15-
<InformationalVersion>1.0.3</InformationalVersion>
12+
<Version>1.1.0</Version>
13+
<AssemblyVersion>1.1.0</AssemblyVersion>
14+
<FileVersion>1.1.0</FileVersion>
15+
<InformationalVersion>1.1.0</InformationalVersion>
1616

1717
<!-- Application Icon -->
1818
<ApplicationIcon>Assets\doom.ico</ApplicationIcon>
@@ -26,6 +26,7 @@
2626

2727
<ItemGroup>
2828
<AvaloniaResource Include="Assets\**" />
29+
<AvaloniaResource Include="Styles\**" />
2930
</ItemGroup>
3031

3132
<ItemGroup>

Styles/CompactRadioButton.axaml

Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
<Styles xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
2+
<Design.PreviewWith>
3+
<Border Padding="20">
4+
<StackPanel Spacing="10">
5+
<RadioButton Content="Option 1" Background="Green" />
6+
<RadioButton Content="Option 2" />
7+
<RadioButton IsEnabled="False" Content="Option 3" />
8+
<RadioButton Content="Option 2" />
9+
</StackPanel>
10+
</Border>
11+
</Design.PreviewWith>
12+
13+
<Style Selector="RadioButton">
14+
<Setter Property="Background" Value="{DynamicResource RadioButtonBackground}" />
15+
<Setter Property="Foreground" Value="{DynamicResource RadioButtonForeground}" />
16+
<Setter Property="BorderBrush" Value="{DynamicResource RadioButtonBorderBrush}" />
17+
<Setter Property="CornerRadius" Value="{DynamicResource ControlCornerRadius}" />
18+
<Setter Property="Padding" Value="4,0,0,0" />
19+
<Setter Property="HorizontalAlignment" Value="Left" />
20+
<Setter Property="VerticalAlignment" Value="Center" />
21+
<Setter Property="HorizontalContentAlignment" Value="Left" />
22+
<Setter Property="VerticalContentAlignment" Value="Center" />
23+
<Setter Property="Template">
24+
<ControlTemplate TargetType="RadioButton">
25+
<Border
26+
Name="RootBorder"
27+
Background="{TemplateBinding Background}"
28+
BorderBrush="{TemplateBinding BorderBrush}"
29+
BorderThickness="{TemplateBinding BorderThickness}"
30+
CornerRadius="{TemplateBinding CornerRadius}">
31+
<Grid ColumnDefinitions="14,*">
32+
<Grid Height="18" VerticalAlignment="Top">
33+
34+
<Ellipse
35+
Name="OuterEllipse"
36+
Width="14"
37+
Height="14"
38+
Fill="{DynamicResource RadioButtonOuterEllipseFill}"
39+
Stroke="{DynamicResource RadioButtonOuterEllipseStroke}"
40+
StrokeThickness="{DynamicResource RadioButtonBorderThemeThickness}"
41+
UseLayoutRounding="False" />
42+
43+
<Ellipse
44+
Name="CheckOuterEllipse"
45+
Width="14"
46+
Height="14"
47+
Fill="{DynamicResource RadioButtonOuterEllipseCheckedFill}"
48+
Opacity="0"
49+
Stroke="{DynamicResource RadioButtonOuterEllipseCheckedStroke}"
50+
StrokeThickness="{DynamicResource RadioButtonBorderThemeThickness}"
51+
UseLayoutRounding="False" />
52+
53+
<Ellipse
54+
Name="CheckGlyph"
55+
Width="6"
56+
Height="6"
57+
Fill="{DynamicResource RadioButtonCheckGlyphFill}"
58+
Opacity="0"
59+
Stroke="{DynamicResource RadioButtonCheckGlyphStroke}"
60+
UseLayoutRounding="False" />
61+
</Grid>
62+
63+
<ContentPresenter
64+
Name="PART_ContentPresenter"
65+
Grid.Column="1"
66+
Margin="{TemplateBinding Padding}"
67+
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
68+
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
69+
Content="{TemplateBinding Content}"
70+
ContentTemplate="{TemplateBinding ContentTemplate}"
71+
Foreground="{TemplateBinding Foreground}" />
72+
</Grid>
73+
</Border>
74+
</ControlTemplate>
75+
</Setter>
76+
</Style>
77+
78+
<Style Selector="RadioButton /template/ ContentPresenter#PART_ContentPresenter">
79+
<Setter Property="RecognizesAccessKey" Value="True" />
80+
</Style>
81+
82+
<!-- PointerOver State -->
83+
<Style Selector="RadioButton:pointerover /template/ ContentPresenter#PART_ContentPresenter">
84+
<Setter Property="Foreground" Value="{DynamicResource RadioButtonForegroundPointerOver}" />
85+
</Style>
86+
87+
<Style Selector="RadioButton:pointerover /template/ Border#RootBorder">
88+
<Setter Property="Background" Value="{DynamicResource RadioButtonBackgroundPointerOver}" />
89+
<Setter Property="BorderBrush" Value="{DynamicResource RadioButtonBorderBrushPointerOver}" />
90+
</Style>
91+
92+
<Style Selector="RadioButton:pointerover /template/ Ellipse#OuterEllipse">
93+
<Setter Property="Stroke" Value="{DynamicResource RadioButtonOuterEllipseStrokePointerOver}" />
94+
<Setter Property="Fill" Value="{DynamicResource RadioButtonOuterEllipseFillPointerOver}" />
95+
</Style>
96+
97+
<Style Selector="RadioButton:pointerover /template/ Ellipse#CheckOuterEllipse">
98+
<Setter Property="Stroke" Value="{DynamicResource RadioButtonOuterEllipseCheckedStrokePointerOver}" />
99+
<Setter Property="Fill" Value="{DynamicResource RadioButtonOuterEllipseCheckedFillPointerOver}" />
100+
</Style>
101+
102+
<Style Selector="RadioButton:pointerover /template/ Ellipse#CheckGlyph">
103+
<Setter Property="Stroke" Value="{DynamicResource RadioButtonCheckGlyphStrokePointerOver}" />
104+
<Setter Property="Fill" Value="{DynamicResource RadioButtonCheckGlyphFillPointerOver}" />
105+
</Style>
106+
107+
108+
<!-- Pressed State -->
109+
<Style Selector="RadioButton:pressed /template/ ContentPresenter#PART_ContentPresenter">
110+
<Setter Property="Foreground" Value="{DynamicResource RadioButtonForegroundPressed}" />
111+
</Style>
112+
113+
<Style Selector="RadioButton:pressed /template/ Border#RootBorder">
114+
<Setter Property="Background" Value="{DynamicResource RadioButtonBackgroundPressed}" />
115+
<Setter Property="BorderBrush" Value="{DynamicResource RadioButtonBorderBrushPressed}" />
116+
</Style>
117+
118+
<Style Selector="RadioButton:pressed /template/ Ellipse#OuterEllipse">
119+
<Setter Property="Stroke" Value="{DynamicResource RadioButtonOuterEllipseStrokePressed}" />
120+
<Setter Property="Fill" Value="{DynamicResource RadioButtonOuterEllipseFillPressed}" />
121+
</Style>
122+
123+
<Style Selector="RadioButton:pressed /template/ Ellipse#CheckOuterEllipse">
124+
<Setter Property="Stroke" Value="{DynamicResource RadioButtonOuterEllipseCheckedStrokePressed}" />
125+
<Setter Property="Fill" Value="{DynamicResource RadioButtonOuterEllipseCheckedFillPressed}" />
126+
</Style>
127+
128+
<Style Selector="RadioButton:pressed /template/ Ellipse#CheckGlyph">
129+
<Setter Property="Stroke" Value="{DynamicResource RadioButtonCheckGlyphStrokePressed}" />
130+
<Setter Property="Fill" Value="{DynamicResource RadioButtonCheckGlyphFillPressed}" />
131+
</Style>
132+
133+
134+
<!-- Disabled State -->
135+
<Style Selector="RadioButton:disabled /template/ ContentPresenter#PART_ContentPresenter">
136+
<Setter Property="Foreground" Value="{DynamicResource RadioButtonForegroundDisabled}" />
137+
</Style>
138+
139+
<Style Selector="RadioButton:disabled /template/ Border#RootBorder">
140+
<Setter Property="Background" Value="{DynamicResource RadioButtonBackgroundDisabled}" />
141+
<Setter Property="BorderBrush" Value="{DynamicResource RadioButtonBorderBrushDisabled}" />
142+
</Style>
143+
144+
<Style Selector="RadioButton:disabled /template/ Ellipse#OuterEllipse">
145+
<Setter Property="Stroke" Value="{DynamicResource RadioButtonOuterEllipseStrokeDisabled}" />
146+
<Setter Property="Fill" Value="{DynamicResource RadioButtonOuterEllipseFillDisabled}" />
147+
</Style>
148+
149+
<Style Selector="RadioButton:disabled /template/ Ellipse#CheckOuterEllipse">
150+
<Setter Property="Stroke" Value="{DynamicResource RadioButtonOuterEllipseCheckedStrokeDisabled}" />
151+
<Setter Property="Fill" Value="{DynamicResource RadioButtonOuterEllipseCheckedFillDisabled}" />
152+
</Style>
153+
154+
<Style Selector="RadioButton:disabled /template/ Ellipse#CheckGlyph">
155+
<Setter Property="Stroke" Value="{DynamicResource RadioButtonCheckGlyphFillDisabled}" />
156+
<Setter Property="Fill" Value="{DynamicResource RadioButtonCheckGlyphStrokeDisabled}" />
157+
</Style>
158+
159+
160+
<!-- Checked State -->
161+
<Style Selector="RadioButton:checked /template/ Ellipse#CheckGlyph">
162+
<Setter Property="Opacity" Value="1" />
163+
</Style>
164+
165+
<Style Selector="RadioButton:checked /template/ Ellipse#OuterEllipse">
166+
<Setter Property="Opacity" Value="0" />
167+
</Style>
168+
169+
<Style Selector="RadioButton:checked /template/ Ellipse#CheckOuterEllipse">
170+
<Setter Property="Opacity" Value="1" />
171+
</Style>
172+
</Styles>

0 commit comments

Comments
 (0)