Skip to content

Commit 01fcce8

Browse files
committed
Release v1.4.4
1 parent 4cefa24 commit 01fcce8

5 files changed

Lines changed: 99 additions & 9 deletions

File tree

BlueMeter.WPF/BlueMeter.WPF.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<ImplicitUsings>enable</ImplicitUsings>
99
<UseWPF>true</UseWPF>
1010
<Platforms>x64</Platforms>
11-
<Version>1.4.3</Version>
11+
<Version>1.4.4</Version>
1212
<SupportedOSPlatformVersion>7.0</SupportedOSPlatformVersion>
1313
<AssemblyName>BlueMeter.WPF</AssemblyName>
1414
<RootNamespace>BlueMeter.WPF</RootNamespace>

BlueMeter.WPF/Views/DpsStatisticsView.xaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@
305305
<!-- Effective Damage (Total Threat) -->
306306
<TextBlock Style="{StaticResource FooterTextContent}">
307307
<Run Foreground="#FFD93D" Text="Effective Damage: " />
308-
<Run FontWeight="Bold" Foreground="White" Text="{Binding EffectiveDamage, StringFormat=N0}" />
308+
<Run FontWeight="Bold" Foreground="White" Text="{Binding EffectiveDamage, Mode=OneWay, StringFormat=N0}" />
309309
<Run Foreground="Gray" Text=" (HP + Shield)" />
310310
</TextBlock>
311311

@@ -318,13 +318,13 @@
318318
FontSize="13"
319319
FontWeight="Bold"
320320
Foreground="#6BCF7F"
321-
Text="{Binding MitigationPercent, StringFormat='{}{0:F1}%'}" />
321+
Text="{Binding MitigationPercent, Mode=OneWay, StringFormat='{}{0:F1}%'}" />
322322
</TextBlock>
323323

324324
<!-- Effective TPS -->
325325
<TextBlock Style="{StaticResource FooterTextContent}">
326326
<Run Foreground="#C8A2C8" Text="Effective TPS: " />
327-
<Run FontWeight="Bold" Foreground="White" Text="{Binding EffectiveTps, StringFormat='{}{0:F0}'}" />
327+
<Run FontWeight="Bold" Foreground="White" Text="{Binding EffectiveTps, Mode=OneWay, StringFormat='{}{0:F0}'}" />
328328
</TextBlock>
329329
</StackPanel>
330330
</Border>

PATCHNOTES.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,17 @@ This document contains the changelog for all BlueMeter releases. For detailed re
44

55
---
66

7+
## Version 1.4.4
8+
9+
**🐛 Critical Hotfix:**
10+
- Fixed crash when interacting with damage meter after disabling mouse-through mode
11+
- Fixed XAML binding errors on read-only tank stat properties (EffectiveDamage, MitigationPercent, EffectiveTps)
12+
- Popup tooltips now display reliably without crashes
13+
14+
[Detailed Release Notes](docs/RELEASE_NOTES_1.4.4.md)
15+
16+
---
17+
718
## Version 1.4.3
819

920
**🐛 Bug Fixes:**

README.md

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,10 @@ The tool does not require modifying the game client and does not violate the gam
1818

1919
For detailed patch notes and release information, see [PATCHNOTES.md](PATCHNOTES.md).
2020

21-
**Latest Version: 1.4.3**
22-
- Fixed queue pop alert toggle - alerts now stop immediately when disabled
23-
- Added real-time start/stop when toggling alert settings
24-
- Fixed false alerts inside dungeons
25-
- Detector now respects settings at app startup
21+
**Latest Version: 1.4.4**
22+
- Fixed crash when interacting with damage meter after disabling mouse-through mode
23+
- Fixed XAML binding errors on read-only tank stat properties
24+
- Popup tooltips now display reliably without crashes
2625

2726
For full changelog history, see [PATCHNOTES.md](PATCHNOTES.md) or detailed release notes in the `/docs/` directory.
2827

docs/RELEASE_NOTES_1.4.4.md

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
# BlueMeter v1.4.4 Release Notes
2+
3+
## 🐛 Bug Fixes
4+
5+
### Critical Crash Fix: Mouse-Through Mode Interaction
6+
7+
**Issue**: Application crashed when interacting with the damage meter window after disabling mouse-through mode following a long raid.
8+
9+
**Error**: `System.Windows.Markup.XamlParseException: A TwoWay or OneWayToSource binding cannot work on the read-only property 'EffectiveDamage'`
10+
11+
**Problems Identified**:
12+
1. **XAML Binding Mode**: WPF attempted to create two-way bindings on read-only computed properties
13+
2. **Template Context**: Bindings within popup templates defaulted to TwoWay mode in certain contexts
14+
3. **Crash Trigger**: Occurred when hovering over player stats after untoggling mouse-through mode
15+
16+
**Fixes Applied**:
17+
18+
#### 1. Fixed EffectiveDamage Binding (`DpsStatisticsView.xaml:308`)
19+
- **Explicit OneWay mode** added to `EffectiveDamage` binding
20+
- Prevents WPF from attempting two-way binding on read-only property
21+
- Property computes: `DamageTaken + DamageMitigated`
22+
23+
#### 2. Fixed MitigationPercent Binding (`DpsStatisticsView.xaml:321`)
24+
- **Explicit OneWay mode** added to `MitigationPercent` binding
25+
- Property computes: `(DamageMitigated / EffectiveDamage) × 100`
26+
27+
#### 3. Fixed EffectiveTps Binding (`DpsStatisticsView.xaml:327`)
28+
- **Explicit OneWay mode** added to `EffectiveTps` binding
29+
- Property computes: `EffectiveDamage / Duration`
30+
31+
---
32+
33+
## 🔧 Technical Details
34+
35+
### Root Cause Analysis
36+
37+
**The Problem**:
38+
- Three computed properties in `StatisticDataViewModel` are read-only (no setters):
39+
- `EffectiveDamage` (line 26)
40+
- `MitigationPercent` (line 31)
41+
- `EffectiveTps` (line 38)
42+
- XAML bindings in the `PopupTemplate` didn't explicitly specify `Mode=OneWay`
43+
- WPF's default binding mode in template contexts sometimes defaults to `TwoWay`
44+
- When popup was instantiated during mouse-over, WPF tried to create two-way binding
45+
- **Result**: Immediate crash with XamlParseException
46+
47+
**The Solution**:
48+
- Add explicit `Mode=OneWay` to all three bindings
49+
- Forces WPF to use one-way binding regardless of context
50+
- Properties remain read-only as designed
51+
- Popup template loads successfully
52+
53+
### When Did This Crash Occur?
54+
55+
The crash was triggered by this specific sequence:
56+
1. Long raid in progress (damage meter tracking data)
57+
2. Mouse-through mode enabled during raid
58+
3. User disables mouse-through mode
59+
4. User hovers mouse over player stats to view popup
60+
5. WPF attempts to render popup template
61+
6. **CRASH**: Two-way binding fails on read-only property
62+
63+
---
64+
65+
## 🎯 What's Fixed
66+
67+
- ✅ No more crashes when interacting with damage meter after disabling mouse-through mode
68+
- ✅ Tank stats popup displays correctly (Effective Damage, Mitigation %, Effective TPS)
69+
- ✅ All popup tooltips work reliably
70+
- ✅ Computed properties remain read-only (correct design)
71+
72+
---
73+
74+
## 📦 Installation
75+
76+
Download the latest release and extract to your preferred location. This hotfix resolves a critical crash affecting users who toggle mouse-through mode during raids.
77+
78+
---
79+
80+
**Thank you for using BlueMeter!** 🎉

0 commit comments

Comments
 (0)