Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,12 @@ jobs:
run: tar czf llaunchpad-linux-x86_64.tar.gz -C target/release llaunchpad

# ── Windows ───────────────────────────────────────────────────────────
- name: Create Windows icon
if: matrix.os == 'windows-latest'
shell: pwsh
run: |
pip install Pillow --quiet
python -c "from PIL import Image; img = Image.open('assets/AppIcon.icns'); img.save('assets/AppIcon.ico', format='ICO', sizes=[(16,16),(32,32),(48,48),(64,64),(128,128),(256,256)])"
- name: Build Windows
if: matrix.os == 'windows-latest'
run: cargo build --release
Expand Down
26 changes: 25 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.6.3] - 2026-06-13

### Fixed
- **Windows taskbar pin icon** — the app icon now persists when pinned to the
Windows taskbar. Slint sets the runtime window icon, but Windows reads pinned
shortcut icons from the Win32 resource table embedded in the `.exe`. The build
now embeds `assets/AppIcon.ico` via `winresource`; CI generates the `.ico`
from `AppIcon.icns` using ImageMagick before the Windows build step.

### Internal
- Gated `agent_running`, `shell_safe_dir`, and `quit_gui` in `launch.rs` to
`#[cfg(target_os = "macos")]` — they were only called from macOS-gated sites.
- Removed dead `platform::spawn` modules for Linux and Windows from `terminal.rs`;
that spawning path was superseded by the inline logic in `spawn_in_terminal`
(which added `working_dir` support) and was never called on those platforms.
- Gated `Terminal::spawn` to `#[cfg(target_os = "macos")]` for the same reason.
- Gated `mod test_util` to `#[cfg(test)]` so test infrastructure is not compiled
into release binaries.
- Removed stray unused `Mutex` import from `controller.rs`.

## [0.6.2] - 2026-06-08

### Fixed
Expand Down Expand Up @@ -193,7 +213,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Persisted last-used agent + model across runs.
- App icon, banner, and `bundle.sh` to assemble `Llaunchpad.app`.

[Unreleased]: https://github.com/draugvar/llaunchpad/compare/v0.5.0...HEAD
[Unreleased]: https://github.com/draugvar/llaunchpad/compare/v0.6.3...HEAD
[0.6.3]: https://github.com/draugvar/llaunchpad/compare/v0.6.2...v0.6.3
[0.6.2]: https://github.com/draugvar/llaunchpad/compare/v0.6.1...v0.6.2
[0.6.1]: https://github.com/draugvar/llaunchpad/compare/v0.6.0...v0.6.1
[0.6.0]: https://github.com/draugvar/llaunchpad/compare/v0.5.0...v0.6.0
[0.5.0]: https://github.com/draugvar/llaunchpad/compare/v0.4.0...v0.5.0
[0.4.0]: https://github.com/draugvar/llaunchpad/compare/v0.3.0...v0.4.0
[0.3.0]: https://github.com/draugvar/llaunchpad/compare/v0.2.1...v0.3.0
Expand Down
30 changes: 28 additions & 2 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 4 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "llaunchpad"
version = "0.6.2"
version = "0.6.3"
edition = "2021"
description = "A cross-platform launcher for Ollama coding agents with cloud models"
license = "MIT"
Expand All @@ -18,3 +18,6 @@ async-trait = "0.1"

[build-dependencies]
slint-build = "1.8"

[target.'cfg(windows)'.build-dependencies]
winresource = "0.1"
Binary file added assets/AppIcon.ico
Binary file not shown.
14 changes: 14 additions & 0 deletions build.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,17 @@
fn main() {
slint_build::compile("ui/app.slint").unwrap();
embed_windows_icon();
}

#[cfg(windows)]
fn embed_windows_icon() {
if !std::path::Path::new("assets/AppIcon.ico").exists() {
return;
}
let mut res = winresource::WindowsResource::new();
res.set_icon("assets/AppIcon.ico");
res.compile().unwrap();
}

#[cfg(not(windows))]
fn embed_windows_icon() {}
Loading