summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-09-04 14:44:14 -0500
committerJeff Carr <[email protected]>2025-09-04 14:44:14 -0500
commit8ab6e8fcdcbb6060ff4870b41c64aa7de68925ef (patch)
tree5dc0d3b51178250c5c448766f2e8fd70c61e631c
parent709094a80f9bf51485df9dc215688b9a4c9dbe54 (diff)
fixes to make the GUI plugins more reliablev0.22.51
-rw-r--r--init.go28
-rw-r--r--plugin.go20
2 files changed, 36 insertions, 12 deletions
diff --git a/init.go b/init.go
index a8a1084..79691e6 100644
--- a/init.go
+++ b/init.go
@@ -341,7 +341,7 @@ func NoGui() bool {
}
// try to load andlabs, if that doesn't work, fall back to the console
-func (n *Node) Default() *Node {
+func (n *Node) Default() (string, error) {
var err error
// used to check if plugins load or not
if argGui.GuiPluginHack != "" {
@@ -352,19 +352,21 @@ func (n *Node) Default() *Node {
if argGui.NoGui {
log.Log(WARN, "--no-gui chill Winston. I don't need no gui")
- return n
+ return "", nil
}
if argGui.GuiPlugin != "" {
log.Log(WARN, "New.Default() try toolkit =", argGui.GuiPlugin)
if n, err = n.LoadToolkit(argGui.GuiPlugin); err == nil {
- return n
+ return argGui.GuiPlugin, nil
}
- log.Log(WARN, "LoadToolkit() failed for =", argGui.GuiPlugin)
- return nil
+ log.Log(WARN, "")
+ log.Log(WARN, "The GUI golang plugins did not load for the", argGui.GuiPlugin)
+ log.Log(WARN, "GO Plugin error:", err)
+ return argGui.GuiPlugin, err
}
if me.appPlugin != "" {
if n, err = n.LoadToolkit(me.appPlugin); err == nil {
- return n
+ return me.appPlugin, nil
}
}
@@ -374,17 +376,18 @@ func (n *Node) Default() *Node {
log.Log(WARN, "gui.Default() DISPLAY not set")
log.Log(WARN, "gui.Default() attempting ncurses gui")
if n, err = n.LoadToolkit("gocui"); err == nil {
- return n
+ return "gocui", nil
}
- return nil
+ log.Log(WARN, "DISPLAY is not set so GTK GUI plugin can not run and gocui also failed")
+ return "gocui", log.Errorf("no plugins worked. You will have to build them")
}
if n, err = n.LoadToolkit("andlabs"); err == nil {
- return n
+ return "andlabs", nil
}
log.Log(WARN, "LoadToolkit() failed to load andlabs")
if n, err = n.LoadToolkit("gocui"); err == nil {
- return n
+ return "gocui", nil
}
log.Log(WARN, "LoadToolkit() failed to load gocui")
@@ -401,10 +404,11 @@ func (n *Node) Default() *Node {
log.Sleep(2)
if n, err = n.LoadToolkit("nocui"); err == nil {
- return n
+ return "nocui", nil
}
log.Log(WARN, "LoadToolkit() failed to load nocui")
- return n
+ // if everything fails to load, try "gocui" and "nocui" since they are easy to build
+ return "gocui", log.Errorf("no plugins worked. You will have to build them")
}
// The window is destroyed but the application does not quit
diff --git a/plugin.go b/plugin.go
index 3a27b69..e07d046 100644
--- a/plugin.go
+++ b/plugin.go
@@ -59,6 +59,26 @@ type aplug struct {
var allPlugins []*aplug
+func (n *Node) LoadToolkitNew(name string) error {
+ log.Log(PLUG, "LoadToolkit() START for name =", name)
+ plug := initPlugin(name)
+ if plug == nil {
+ return errors.New("initPlugin(" + name + ") failed")
+ }
+ plug.dead = false
+
+ log.Log(PLUG, "LoadToolkit() sending Toolkit Init action to the plugin channel")
+ var a widget.Action
+ a.ActionType = widget.ToolkitInit
+ plug.pluginChan <- a
+ // sleep(.5) // temp hack until chan communication is setup
+
+ // TODO: find a new way to do this that is locking, safe and accurate
+ me.rootNode.redraw(plug)
+ log.Log(PLUG, "LoadToolkit() END for name =", name)
+ return nil
+}
+
func (n *Node) LoadToolkit(name string) (*Node, error) {
log.Log(PLUG, "LoadToolkit() START for name =", name)
plug := initPlugin(name)