From 8e2527ad356edf0d2353e58ddabefb6f3b5ae307 Mon Sep 17 00:00:00 2001 From: Travis McLane Date: Thu, 28 Sep 2023 15:53:28 -0500 Subject: [PATCH] [v3 linux] implement single_instance plugin --- v3/pkg/application/linux_cgo.go | 2 +- v3/plugins/single_instance/README.md | 4 +-- v3/plugins/single_instance/plugin.go | 3 ++- v3/plugins/single_instance/plugin_linux.go | 29 ++++++++++++++++------ 4 files changed, 26 insertions(+), 12 deletions(-) diff --git a/v3/pkg/application/linux_cgo.go b/v3/pkg/application/linux_cgo.go index d5b905917..a7c2d19c3 100644 --- a/v3/pkg/application/linux_cgo.go +++ b/v3/pkg/application/linux_cgo.go @@ -269,7 +269,7 @@ func hideAllWindows(application pointer) { func showAllWindows(application pointer) { for _, window := range getWindows(application) { - C.gtk_widget_show_all((*C.GtkWidget)(window)) + C.gtk_window_present((*C.GtkWindow)(window)) } } diff --git a/v3/plugins/single_instance/README.md b/v3/plugins/single_instance/README.md index 1dc48ddc6..87cb417ca 100644 --- a/v3/plugins/single_instance/README.md +++ b/v3/plugins/single_instance/README.md @@ -1,6 +1,6 @@ # single-instance Plugin -This example plugin provides a way to generate hashes of strings. +This plugin provides a way to prevent multiple launches of your application. ## Installation @@ -28,4 +28,4 @@ Please do not contact the Wails team for support. ## Credit This plugin contains modified code from the awesome [go-singleinstance](https://github.com/allan-simon/go-singleinstance) module (c) 2015 Allan Simon. -Original license file has been renamed `go-singleinstance.LICENSE` and is available [here](./singleinstance_LICENSE). \ No newline at end of file +Original license file has been renamed `go-singleinstance.LICENSE` and is available [here](./singleinstance_LICENSE). diff --git a/v3/plugins/single_instance/plugin.go b/v3/plugins/single_instance/plugin.go index f4a8ffe6c..b3bad39f5 100644 --- a/v3/plugins/single_instance/plugin.go +++ b/v3/plugins/single_instance/plugin.go @@ -2,9 +2,10 @@ package single_instance import ( "fmt" - "github.com/wailsapp/wails/v3/pkg/application" "os" "path/filepath" + + "github.com/wailsapp/wails/v3/pkg/application" ) type Config struct { diff --git a/v3/plugins/single_instance/plugin_linux.go b/v3/plugins/single_instance/plugin_linux.go index 52de947e1..996a5a3c4 100644 --- a/v3/plugins/single_instance/plugin_linux.go +++ b/v3/plugins/single_instance/plugin_linux.go @@ -2,16 +2,29 @@ package single_instance -/* -#cgo CFLAGS: -#cgo LDFLAGS: +import ( + "fmt" + "os" + "os/signal" + "syscall" -*/ -import "C" -import "fmt" + "github.com/wailsapp/wails/v3/pkg/application" +) + +func init() { + sigc := make(chan os.Signal, 1) + signal.Notify(sigc, + syscall.SIGUSR2, + ) + go func() { + for { + s := <-sigc + application.Get().Show() + } + }() +} func (p *Plugin) activeInstance(pid int) error { - // C.activateApplicationWithProcessID(C.int(pid)) - fmt.Println("[linux] activateInstance - not implemented: ", pid) + syscall.Kill(pid, syscall.SIGUSR2) return nil }