Skip to content

Commit c1a1a4f

Browse files
committed
fix: Windows keyboard focus (message hook + dummy EDIT + IME)
- WH_GETMESSAGE hook intercepts keyboard before DAW accelerators - Dummy EDIT control signals text input state to DAW - TranslateMessage/DispatchMessage generates WM_CHAR correctly - IME support for Japanese/Chinese/Korean input - Focus event forwarding for proper ImGui state - Null guards prevent crashes if subclassing fails Fixes spacebar triggering transport and Caps Lock not working in Bitwig/REAPER
1 parent a829a3a commit c1a1a4f

File tree

187 files changed

+48739
-48085
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

187 files changed

+48739
-48085
lines changed

.github/workflows/build.yml

Lines changed: 189 additions & 189 deletions
Original file line numberDiff line numberDiff line change
@@ -1,189 +1,189 @@
1-
name: Build and Release
2-
3-
on:
4-
push:
5-
tags:
6-
- 'v*'
7-
workflow_dispatch:
8-
inputs:
9-
create_release:
10-
description: 'Create a release with artifacts'
11-
required: false
12-
default: 'false'
13-
14-
env:
15-
BUILD_TYPE: Release
16-
17-
jobs:
18-
build-macos:
19-
runs-on: macos-14 # Apple Silicon runner
20-
steps:
21-
- name: Checkout
22-
uses: actions/checkout@v4
23-
with:
24-
submodules: recursive
25-
26-
- name: Setup CMake
27-
uses: lukka/get-cmake@latest
28-
29-
- name: Configure CMake
30-
run: |
31-
cmake -B build \
32-
-DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \
33-
-DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
34-
-DJAMWIDE_UNIVERSAL=ON \
35-
-DJAMWIDE_DEV_BUILD=OFF \
36-
-DCLAP_WRAPPER_DOWNLOAD_DEPENDENCIES=TRUE
37-
38-
- name: Build
39-
run: cmake --build build --config ${{ env.BUILD_TYPE }} -j $(sysctl -n hw.ncpu)
40-
41-
- name: Package artifacts
42-
run: |
43-
mkdir -p artifacts/macos
44-
45-
# Package CLAP
46-
cd build
47-
zip -r ../artifacts/macos/JamWide-macOS-CLAP.zip JamWide.clap
48-
49-
# Package VST3
50-
zip -r ../artifacts/macos/JamWide-macOS-VST3.zip JamWide.vst3
51-
52-
# Package AU
53-
zip -r ../artifacts/macos/JamWide-macOS-AU.zip JamWide.component
54-
55-
# Create combined package
56-
zip -r ../artifacts/macos/JamWide-macOS-All.zip JamWide.clap JamWide.vst3 JamWide.component
57-
58-
- name: Upload macOS artifacts
59-
uses: actions/upload-artifact@v4
60-
with:
61-
name: JamWide-macOS
62-
path: artifacts/macos/*.zip
63-
retention-days: 30
64-
65-
build-windows:
66-
runs-on: windows-latest
67-
steps:
68-
- name: Checkout
69-
uses: actions/checkout@v4
70-
with:
71-
submodules: recursive
72-
73-
- name: Setup CMake
74-
uses: lukka/get-cmake@latest
75-
76-
- name: Configure CMake
77-
run: |
78-
cmake -B build `
79-
-G "Visual Studio 17 2022" `
80-
-A x64 `
81-
-DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} `
82-
-DJAMWIDE_DEV_BUILD=OFF `
83-
-DCLAP_WRAPPER_DOWNLOAD_DEPENDENCIES=TRUE
84-
85-
- name: Build
86-
run: cmake --build build --config ${{ env.BUILD_TYPE }} -j $env:NUMBER_OF_PROCESSORS
87-
88-
- name: Package artifacts
89-
shell: pwsh
90-
run: |
91-
New-Item -ItemType Directory -Force -Path artifacts/windows
92-
93-
# Debug: Show what was built
94-
Write-Host "=== Build output structure ==="
95-
Get-ChildItem -Path build -Recurse -Include "*.clap","*.vst3" | Select-Object FullName
96-
97-
# CLAP is in build/CLAP/Release/JamWide.clap
98-
Compress-Archive -Path build/CLAP/${{ env.BUILD_TYPE }}/JamWide.clap -DestinationPath artifacts/windows/JamWide-Windows-CLAP.zip
99-
100-
# VST3 is a folder bundle in build/Release/JamWide.vst3/
101-
Compress-Archive -Path build/${{ env.BUILD_TYPE }}/JamWide.vst3 -DestinationPath artifacts/windows/JamWide-Windows-VST3.zip
102-
103-
# Create combined package
104-
Compress-Archive -Path build/CLAP/${{ env.BUILD_TYPE }}/JamWide.clap, build/${{ env.BUILD_TYPE }}/JamWide.vst3 -DestinationPath artifacts/windows/JamWide-Windows-All.zip
105-
106-
- name: Upload Windows artifacts
107-
uses: actions/upload-artifact@v4
108-
with:
109-
name: JamWide-Windows
110-
path: artifacts/windows/*.zip
111-
retention-days: 30
112-
113-
release:
114-
needs: [build-macos, build-windows]
115-
runs-on: ubuntu-latest
116-
if: startsWith(github.ref, 'refs/tags/v') || github.event.inputs.create_release == 'true'
117-
permissions:
118-
contents: write
119-
steps:
120-
- name: Checkout
121-
uses: actions/checkout@v4
122-
123-
- name: Download all artifacts
124-
uses: actions/download-artifact@v4
125-
with:
126-
path: artifacts
127-
128-
- name: Get version from tag
129-
id: get_version
130-
run: |
131-
if [[ "${{ github.ref }}" == refs/tags/* ]]; then
132-
VERSION=${GITHUB_REF#refs/tags/}
133-
else
134-
VERSION="dev-$(date +%Y%m%d-%H%M%S)"
135-
fi
136-
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
137-
138-
- name: Generate release notes
139-
id: release_notes
140-
run: |
141-
# Get build number from source
142-
BUILD_NUM=$(grep -o 'JAMWIDE_BUILD_NUMBER [0-9]*' src/build_number.h | awk '{print $2}' || echo "unknown")
143-
144-
cat << EOF > release_notes.md
145-
## JamWide ${{ steps.get_version.outputs.VERSION }}
146-
147-
**Build:** r${BUILD_NUM}
148-
149-
### Downloads
150-
151-
#### macOS (Universal: Apple Silicon + Intel)
152-
- **JamWide-macOS-All.zip** - All formats (CLAP, VST3, AU)
153-
- **JamWide-macOS-CLAP.zip** - CLAP only
154-
- **JamWide-macOS-VST3.zip** - VST3 only
155-
- **JamWide-macOS-AU.zip** - Audio Unit only
156-
157-
#### Windows (x64)
158-
- **JamWide-Windows-All.zip** - All formats (CLAP, VST3)
159-
- **JamWide-Windows-CLAP.zip** - CLAP only
160-
- **JamWide-Windows-VST3.zip** - VST3 only
161-
162-
### Installation
163-
164-
**macOS:**
165-
- CLAP: \`~/Library/Audio/Plug-Ins/CLAP/\`
166-
- VST3: \`~/Library/Audio/Plug-Ins/VST3/\`
167-
- AU: \`~/Library/Audio/Plug-Ins/Components/\`
168-
169-
**Windows:**
170-
- CLAP: \`C:\\Program Files\\Common Files\\CLAP\\\`
171-
- VST3: \`C:\\Program Files\\Common Files\\VST3\\\`
172-
173-
---
174-
175-
⚠️ **Early Development** - Not yet ready for production use
176-
EOF
177-
178-
- name: Create Release
179-
uses: softprops/action-gh-release@v2
180-
with:
181-
name: JamWide ${{ steps.get_version.outputs.VERSION }}
182-
body_path: release_notes.md
183-
draft: false
184-
prerelease: true
185-
files: |
186-
artifacts/JamWide-macOS/*.zip
187-
artifacts/JamWide-Windows/*.zip
188-
env:
189-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
1+
name: Build and Release
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*'
7+
workflow_dispatch:
8+
inputs:
9+
create_release:
10+
description: 'Create a release with artifacts'
11+
required: false
12+
default: 'false'
13+
14+
env:
15+
BUILD_TYPE: Release
16+
17+
jobs:
18+
build-macos:
19+
runs-on: macos-14 # Apple Silicon runner
20+
steps:
21+
- name: Checkout
22+
uses: actions/checkout@v4
23+
with:
24+
submodules: recursive
25+
26+
- name: Setup CMake
27+
uses: lukka/get-cmake@latest
28+
29+
- name: Configure CMake
30+
run: |
31+
cmake -B build \
32+
-DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \
33+
-DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
34+
-DJAMWIDE_UNIVERSAL=ON \
35+
-DJAMWIDE_DEV_BUILD=OFF \
36+
-DCLAP_WRAPPER_DOWNLOAD_DEPENDENCIES=TRUE
37+
38+
- name: Build
39+
run: cmake --build build --config ${{ env.BUILD_TYPE }} -j $(sysctl -n hw.ncpu)
40+
41+
- name: Package artifacts
42+
run: |
43+
mkdir -p artifacts/macos
44+
45+
# Package CLAP
46+
cd build
47+
zip -r ../artifacts/macos/JamWide-macOS-CLAP.zip JamWide.clap
48+
49+
# Package VST3
50+
zip -r ../artifacts/macos/JamWide-macOS-VST3.zip JamWide.vst3
51+
52+
# Package AU
53+
zip -r ../artifacts/macos/JamWide-macOS-AU.zip JamWide.component
54+
55+
# Create combined package
56+
zip -r ../artifacts/macos/JamWide-macOS-All.zip JamWide.clap JamWide.vst3 JamWide.component
57+
58+
- name: Upload macOS artifacts
59+
uses: actions/upload-artifact@v4
60+
with:
61+
name: JamWide-macOS
62+
path: artifacts/macos/*.zip
63+
retention-days: 30
64+
65+
build-windows:
66+
runs-on: windows-latest
67+
steps:
68+
- name: Checkout
69+
uses: actions/checkout@v4
70+
with:
71+
submodules: recursive
72+
73+
- name: Setup CMake
74+
uses: lukka/get-cmake@latest
75+
76+
- name: Configure CMake
77+
run: |
78+
cmake -B build `
79+
-G "Visual Studio 17 2022" `
80+
-A x64 `
81+
-DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} `
82+
-DJAMWIDE_DEV_BUILD=OFF `
83+
-DCLAP_WRAPPER_DOWNLOAD_DEPENDENCIES=TRUE
84+
85+
- name: Build
86+
run: cmake --build build --config ${{ env.BUILD_TYPE }} -j $env:NUMBER_OF_PROCESSORS
87+
88+
- name: Package artifacts
89+
shell: pwsh
90+
run: |
91+
New-Item -ItemType Directory -Force -Path artifacts/windows
92+
93+
# Debug: Show what was built
94+
Write-Host "=== Build output structure ==="
95+
Get-ChildItem -Path build -Recurse -Include "*.clap","*.vst3" | Select-Object FullName
96+
97+
# CLAP is in build/CLAP/Release/JamWide.clap
98+
Compress-Archive -Path build/CLAP/${{ env.BUILD_TYPE }}/JamWide.clap -DestinationPath artifacts/windows/JamWide-Windows-CLAP.zip
99+
100+
# VST3 is a folder bundle in build/Release/JamWide.vst3/
101+
Compress-Archive -Path build/${{ env.BUILD_TYPE }}/JamWide.vst3 -DestinationPath artifacts/windows/JamWide-Windows-VST3.zip
102+
103+
# Create combined package
104+
Compress-Archive -Path build/CLAP/${{ env.BUILD_TYPE }}/JamWide.clap, build/${{ env.BUILD_TYPE }}/JamWide.vst3 -DestinationPath artifacts/windows/JamWide-Windows-All.zip
105+
106+
- name: Upload Windows artifacts
107+
uses: actions/upload-artifact@v4
108+
with:
109+
name: JamWide-Windows
110+
path: artifacts/windows/*.zip
111+
retention-days: 30
112+
113+
release:
114+
needs: [build-macos, build-windows]
115+
runs-on: ubuntu-latest
116+
if: startsWith(github.ref, 'refs/tags/v') || github.event.inputs.create_release == 'true'
117+
permissions:
118+
contents: write
119+
steps:
120+
- name: Checkout
121+
uses: actions/checkout@v4
122+
123+
- name: Download all artifacts
124+
uses: actions/download-artifact@v4
125+
with:
126+
path: artifacts
127+
128+
- name: Get version from tag
129+
id: get_version
130+
run: |
131+
if [[ "${{ github.ref }}" == refs/tags/* ]]; then
132+
VERSION=${GITHUB_REF#refs/tags/}
133+
else
134+
VERSION="dev-$(date +%Y%m%d-%H%M%S)"
135+
fi
136+
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
137+
138+
- name: Generate release notes
139+
id: release_notes
140+
run: |
141+
# Get build number from source
142+
BUILD_NUM=$(grep -o 'JAMWIDE_BUILD_NUMBER [0-9]*' src/build_number.h | awk '{print $2}' || echo "unknown")
143+
144+
cat << EOF > release_notes.md
145+
## JamWide ${{ steps.get_version.outputs.VERSION }}
146+
147+
**Build:** r${BUILD_NUM}
148+
149+
### Downloads
150+
151+
#### macOS (Universal: Apple Silicon + Intel)
152+
- **JamWide-macOS-All.zip** - All formats (CLAP, VST3, AU)
153+
- **JamWide-macOS-CLAP.zip** - CLAP only
154+
- **JamWide-macOS-VST3.zip** - VST3 only
155+
- **JamWide-macOS-AU.zip** - Audio Unit only
156+
157+
#### Windows (x64)
158+
- **JamWide-Windows-All.zip** - All formats (CLAP, VST3)
159+
- **JamWide-Windows-CLAP.zip** - CLAP only
160+
- **JamWide-Windows-VST3.zip** - VST3 only
161+
162+
### Installation
163+
164+
**macOS:**
165+
- CLAP: \`~/Library/Audio/Plug-Ins/CLAP/\`
166+
- VST3: \`~/Library/Audio/Plug-Ins/VST3/\`
167+
- AU: \`~/Library/Audio/Plug-Ins/Components/\`
168+
169+
**Windows:**
170+
- CLAP: \`C:\\Program Files\\Common Files\\CLAP\\\`
171+
- VST3: \`C:\\Program Files\\Common Files\\VST3\\\`
172+
173+
---
174+
175+
⚠️ **Early Development** - Not yet ready for production use
176+
EOF
177+
178+
- name: Create Release
179+
uses: softprops/action-gh-release@v2
180+
with:
181+
name: JamWide ${{ steps.get_version.outputs.VERSION }}
182+
body_path: release_notes.md
183+
draft: false
184+
prerelease: true
185+
files: |
186+
artifacts/JamWide-macOS/*.zip
187+
artifacts/JamWide-Windows/*.zip
188+
env:
189+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

0 commit comments

Comments
 (0)