diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 5196d009f..38803b2be 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -11,6 +11,7 @@ on:
- "**/*.md"
- ".github/ISSUE_TEMPLATE/*"
- ".github/workflows/sponsors.yml"
+ - ".github/workflows/translators.yml"
- "Graphics/*"
pull_request:
branches:
diff --git a/.github/workflows/sponsors.yml b/.github/workflows/sponsors.yml
index 1fe2fbb99..e2dda2491 100644
--- a/.github/workflows/sponsors.yml
+++ b/.github/workflows/sponsors.yml
@@ -11,12 +11,12 @@ jobs:
uses: actions/checkout@v3
- name: Generate Sponsors
- uses: JamesIves/github-sponsors-readme-action@v1.2.2
+ uses: JamesIves/github-sponsors-readme-action@v1
with:
token: ${{ secrets.SPONSORS_PAT }}
file: 'README.md'
organization: true
- template: '
'
+ template: '
'
- name: Deploy to GitHub Pages
uses: JamesIves/github-pages-deploy-action@v4
diff --git a/.github/workflows/translators.yml b/.github/workflows/translators.yml
new file mode 100644
index 000000000..11046de4d
--- /dev/null
+++ b/.github/workflows/translators.yml
@@ -0,0 +1,47 @@
+name: Update Translators List
+
+on:
+ schedule:
+ - cron: '0 0 * * 0' # Run weekly on Sunday at 00:00
+ workflow_dispatch:
+
+jobs:
+ update-translators:
+ runs-on: windows-latest
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+
+ - name: Update README.md
+ shell: pwsh
+ run: |
+ $headers = @{
+ "Authorization" = "Bearer ${{ secrets.CROWDIN_API_TOKEN }}"
+ }
+
+ $response = Invoke-RestMethod `
+ -Uri "https://api.crowdin.com/api/v2/projects/407880/members" `
+ -Headers $headers
+ $translators = $response.data.data
+
+ $html = ($translators | Sort-Object -Property @{Expression={ $_.fullName }}, @{Expression={ $_.username }} | ForEach-Object {
+ $translator = $_
+ $translatorName = if ($translator.fullName) { $translator.fullName } else { $translator.username }
+ $avatarUrl = $translator.avatarUrl
+ "
"
+ }) -join " "
+ $html = "`n$html`n"
+
+ $readmeContent = Get-Content -Path .\README.md -Raw
+ $readmeContent -match "(?[\s\S]*?)[\s\S]*?(?[\s\S]*)"
+ $readmeContent = $matches["sof"] + $html + $matches["eof"]
+
+ Set-Content -Path .\README.md -Value $readmeContent
+
+ - name: Commit changes
+ run: |
+ git config --local user.email "action@github.com"
+ git config --local user.name "GitHub Action"
+ git add README.md
+ git commit -m "Update translators via GitHub Actions" || exit 0
+ git push origin master
diff --git a/.gitignore b/.gitignore
index 4bc66cb67..272fb6bfc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -214,3 +214,4 @@ _pkginfo.txt
.chocolatey/tools/Release.zip
/artifacts/sideload
/Tools
+nuget.exe
diff --git a/EarTrumpet/App.xaml.cs b/EarTrumpet/App.xaml.cs
index 5df83cfa5..71f0245c8 100644
--- a/EarTrumpet/App.xaml.cs
+++ b/EarTrumpet/App.xaml.cs
@@ -128,7 +128,7 @@ private void trayIconScrolled(object _, int wheelDelta)
var hWndTray = WindowsTaskbar.GetTrayToolbarWindowHwnd();
var hWndTooltip = User32.SendMessage(hWndTray, User32.TB_GETTOOLTIPS, IntPtr.Zero, IntPtr.Zero);
User32.SendMessage(hWndTooltip, User32.TTM_POPUP, IntPtr.Zero, IntPtr.Zero);
-
+
CollectionViewModel.Default?.IncrementVolume(Math.Sign(wheelDelta) * 2);
}
}
diff --git a/EarTrumpet/AppSettings.cs b/EarTrumpet/AppSettings.cs
index 8ba84d363..8882399a4 100644
--- a/EarTrumpet/AppSettings.cs
+++ b/EarTrumpet/AppSettings.cs
@@ -145,6 +145,12 @@ public bool UseGlobalMouseWheelHook
set => _settings.Set("UseGlobalMouseWheelHook", value);
}
+ public bool UseScrollWheelInSliders
+ {
+ get => _settings.Get("UseScrollWheelInSliders", true);
+ set => _settings.Set("UseScrollWheelInSliders", value);
+ }
+
public bool HasShownFirstRun
{
get => _settings.HasKey("hasShownFirstRun");
diff --git a/EarTrumpet/Properties/Resources.Designer.cs b/EarTrumpet/Properties/Resources.Designer.cs
index c8b85eec0..31f1296e9 100644
--- a/EarTrumpet/Properties/Resources.Designer.cs
+++ b/EarTrumpet/Properties/Resources.Designer.cs
@@ -1430,6 +1430,15 @@ public static string SettingsUseGlobalMouseWheelHook {
}
}
+ ///
+ /// Looks up a localized string similar to Use the scroll wheel to change volume while hovering over volume sliders.
+ ///
+ public static string SettingsUseScrollWheelInSliders {
+ get {
+ return ResourceManager.GetString("SettingsUseScrollWheelInSliders", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Use legacy EarTrumpet icon.
///
diff --git a/EarTrumpet/Properties/Resources.resx b/EarTrumpet/Properties/Resources.resx
index 109324f4e..bb3ae9c00 100644
--- a/EarTrumpet/Properties/Resources.resx
+++ b/EarTrumpet/Properties/Resources.resx
@@ -659,6 +659,9 @@ Open [https://eartrumpet.app/jmp/fixfonts] now?
Use the scroll wheel to change volume while the flyout is open
+
+ Use the scroll wheel to change volume while hovering over volume sliders
+
Community settings
diff --git a/EarTrumpet/UI/Controls/VolumeSlider.cs b/EarTrumpet/UI/Controls/VolumeSlider.cs
index 7b5237c8b..19d8adf29 100644
--- a/EarTrumpet/UI/Controls/VolumeSlider.cs
+++ b/EarTrumpet/UI/Controls/VolumeSlider.cs
@@ -145,9 +145,12 @@ private void OnMouseMove(object sender, MouseEventArgs e)
private void OnMouseWheel(object sender, MouseWheelEventArgs e)
{
- var amount = Math.Sign(e.Delta) * 2.0;
- ChangePositionByAmount(amount);
- e.Handled = true;
+ if (App.Settings.UseScrollWheelInSliders)
+ {
+ var amount = Math.Sign(e.Delta) * 2.0;
+ ChangePositionByAmount(amount);
+ e.Handled = true;
+ }
}
public void SetPositionByControlPoint(Point point)
diff --git a/EarTrumpet/UI/ViewModels/EarTrumpetMouseSettingsPageViewModel.cs b/EarTrumpet/UI/ViewModels/EarTrumpetMouseSettingsPageViewModel.cs
index c76edcf27..9c02085ae 100644
--- a/EarTrumpet/UI/ViewModels/EarTrumpetMouseSettingsPageViewModel.cs
+++ b/EarTrumpet/UI/ViewModels/EarTrumpetMouseSettingsPageViewModel.cs
@@ -16,6 +16,12 @@ public bool UseGlobalMouseWheelHook
set => _settings.UseGlobalMouseWheelHook = value;
}
+ public bool UseScrollWheelInSliders
+ {
+ get => _settings.UseScrollWheelInSliders;
+ set => _settings.UseScrollWheelInSliders = value;
+ }
+
private readonly AppSettings _settings;
public EarTrumpetMouseSettingsPageViewModel(AppSettings settings) : base(null)
diff --git a/EarTrumpet/UI/Views/SettingsWindow.xaml b/EarTrumpet/UI/Views/SettingsWindow.xaml
index 3ac1c5c1a..672ea6a28 100644
--- a/EarTrumpet/UI/Views/SettingsWindow.xaml
+++ b/EarTrumpet/UI/Views/SettingsWindow.xaml
@@ -169,6 +169,9 @@
+
diff --git a/LICENSE b/LICENSE
index 5bcf67b01..7a134c6c6 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,3 +1,17 @@
+The following legal persons or entities (collectively, the "Excluded Entities") are
+expressly excluded from the licensing terms set forth below and, as such, do not
+have the right to reproduce, distribute, or create derivative works from the
+software or associated documentation files:
+
+ Yellow Elephant Productions
+ Tidal Media Inc.
+ Articent Group LLC
+
+The Excluded Entities may not exercise any of the rights granted to other users
+under these licensing terms.
+
+---
+
The MIT License (MIT)
Copyright (c) 2015
diff --git a/README.md b/README.md
index 8072bd56f..9a830ad36 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# EarTrumpet
-[](https://github.com/File-New-Project/EarTrumpet/issues) [](https://github.com/File-New-Project/EarTrumpet/network) [](https://github.com/File-New-Project/EarTrumpet/stargazers) [](https://github.com/File-New-Project/EarTrumpet/blob/master/LICENSE) [](https://chocolatey.org/packages/eartrumpet) 
+[](https://github.com/File-New-Project/EarTrumpet/issues) [](https://github.com/File-New-Project/EarTrumpet/network) [](https://github.com/File-New-Project/EarTrumpet/stargazers) [](https://chocolatey.org/packages/eartrumpet) 

@@ -12,6 +12,11 @@
## Media coverage
+> [...] there are alternative solutions like EarTrumpet which are great [...]
+>
+> — [Linus Tech Tips (February 12, 2025)](https://youtu.be/6wgHq9NZru0?t=461)
+
+
> [...] there are third-party solutions out there that do a much better job than what Windows offers by default. One such app is called EarTrumpet [...]
>
> — [TechQuickie (Jan 11, 2022)](https://www.youtube.com/watch?v=xQvp5HzY9xc)
@@ -26,7 +31,7 @@
## Sponsors
-

+
## Features
@@ -42,7 +47,13 @@
## Internationalization
-We currently support 20+ languages. Are we missing your language? [Contribute a translation via Crowdin](https://crowdin.com/project/eartrumpet)!
+Thanks to our translators, we currently support 20+ languages. Are we missing your language? [Contribute a translation via Crowdin](https://crowdin.com/project/eartrumpet)!
+
+### Translators
+
+
+
+
## Install
@@ -73,6 +84,7 @@ Want to see what we were working on? Or help us test new features? [Install EarT
- Windows 10 20H2 (October 2020 Update)
- Windows 10 21H1 (May 2021 Update)
- Windows 10 21H2 (November 2021 Update)
+- Windows 10 22H2 (October 2022 Update)
- Windows 11
## Credits
@@ -84,3 +96,86 @@ Want to see what we were working on? Or help us test new features? [Install EarT
## Special thanks
"[Horn](https://thenounproject.com/icon/horn-125731/)" icon by Artjom Korman from [the Noun Project](https://thenounproject.com/)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+