This commit is contained in:
jahruz67
2026-05-09 10:59:26 -07:00
parent 4ea6675450
commit 52cf789eab
8 changed files with 98 additions and 33 deletions
+28 -7
View File
@@ -15,31 +15,52 @@ const baseDesktopFileTemplate = `[Desktop Entry]
Type=Application
Name=WIS Free V3
%s
Icon=%s
StartupWMClass=%s
Terminal=false
Categories=Utility;
`
const autostartDesktopFileTemplate = baseDesktopFileTemplate + "X-GNOME-Autostart-enabled=true\n"
const autostartDesktopFileTemplate = `[Desktop Entry]
Type=Application
Name=WIS Free V3
%s
Icon=wis-free-v3
StartupWMClass=wis-free-v3
Terminal=false
Categories=Utility;
X-GNOME-Autostart-enabled=true
`
func EnsureDesktopFile() error {
func EnsureDesktopFile(iconBytes []byte) error {
home, err := os.UserHomeDir()
if err != nil {
return err
}
appsDir := filepath.Join(home, ".local", "share", "applications")
if err := os.MkdirAll(appsDir, 0755); err != nil {
return err
}
desktopPath := filepath.Join(appsDir, appName+".desktop")
exePath, err := getExecutablePath()
if err != nil {
return err
}
content := fmt.Sprintf(baseDesktopFileTemplate, desktopExecField(exePath))
// Write icon to local pixmaps so the desktop file Icon= field resolves
pixmapsDir := filepath.Join(home, ".local", "share", "pixmaps")
if err := os.MkdirAll(pixmapsDir, 0755); err != nil {
return err
}
iconPath := filepath.Join(pixmapsDir, appName+".png")
if err := os.WriteFile(iconPath, iconBytes, 0644); err != nil {
return fmt.Errorf("failed to write icon to pixmaps: %w", err)
}
content := fmt.Sprintf(baseDesktopFileTemplate, desktopExecField(exePath), appName, appName)
return os.WriteFile(desktopPath, []byte(content), 0644)
}
+2 -2
View File
@@ -31,6 +31,6 @@ func IsProcessRunning(pid int) bool {
return linux.IsProcessRunning(pid)
}
func EnsureDesktopFile() error {
return linux.EnsureDesktopFile()
func EnsureDesktopFile(iconBytes []byte) error {
return linux.EnsureDesktopFile(iconBytes)
}
+1 -1
View File
@@ -31,7 +31,7 @@ func IsProcessRunning(pid int) bool {
return windows.IsProcessRunning(pid)
}
func EnsureDesktopFile() error {
func EnsureDesktopFile(iconBytes []byte) error {
// Not applicable on Windows
return nil
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

+10 -22
View File
@@ -10,7 +10,6 @@ import (
"os"
"runtime"
"strings"
"sync"
"wis-free-v3/internal/config"
"wis-free-v3/internal/logger"
@@ -22,6 +21,9 @@ import (
//go:embed icon.ico
var iconData []byte
//go:embed icon.png
var iconPNGData []byte
//go:embed icon_recording.png
var iconRecordingData []byte
@@ -152,30 +154,16 @@ func buildTooltip(app App) string {
return trayLabel + " - " + shortcut + " to record"
}
var (
defaultIconOnce sync.Once
defaultIconBytes []byte
)
func getDefaultIcon() []byte {
if runtime.GOOS != "linux" {
return iconData
if runtime.GOOS == "linux" {
return iconPNGData
}
return iconData
}
defaultIconOnce.Do(func() {
pngData, err := icoToPNG(iconData)
if err != nil {
logger.Error("Failed to convert tray icon to PNG for Linux: %v", err)
defaultIconBytes = iconData
return
}
defaultIconBytes = pngData
})
if len(defaultIconBytes) == 0 {
return iconData
}
return defaultIconBytes
// DefaultIconBytes returns the raw default icon bytes for the current platform.
func DefaultIconBytes() []byte {
return getDefaultIcon()
}
func icoToPNG(data []byte) ([]byte, error) {
+14
View File
@@ -0,0 +1,14 @@
//go:build linux
package tray
/*
#include <glib.h>
*/
import "C"
import "unsafe"
func init() {
cstr := C.CString("wis-free-v3")
defer C.free(unsafe.Pointer(cstr))
C.g_set_prgname(cstr)
}