mirror of
https://github.com/jahruz67/wisp-open.git
synced 2026-08-08 18:14:08 +00:00
11
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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
@@ -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) {
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
Reference in New Issue
Block a user