cogentcore / core

A free and open source framework for building powerful, fast, and elegant 2D and 3D apps that run on macOS, Windows, Linux, iOS, Android, and the Web with a single pure Go codebase, allowing you to Code Once, Run Everywhere.
http://cogentcore.org/core
BSD 3-Clause "New" or "Revised" License
1.31k stars 71 forks source link

panic: runtime error: invalid memory address or nil pointer dereference #890

Closed ddkwork closed 4 months ago

ddkwork commented 4 months ago

Describe the bug

see tile

How to reproduce

Hit the close button in the top right corner and it will happen every time

Example code

package main

import (
    "cogentcore.org/core/goosi/driver/desktop"
    "embed"
    "github.com/ddkwork/golibrary/stream"
    "github.com/go-gl/glfw/v3.3/glfw"

    "cogentcore.org/core/gi"
    "cogentcore.org/core/styles"
    "cogentcore.org/core/texteditor"
)

//go:embed texteditor.go
var samplefile embed.FS

func main() {
    b := gi.NewBody("Cogent Core Text Editor Demo")

    sp := gi.NewSplits(b)
    sp.SetSplits(.5, .5)
    // these are all inherited so we can put them at the top "editor panel" level
    sp.Style(func(s *styles.Style) {
        s.Text.WhiteSpace = styles.WhiteSpacePreWrap
        s.Text.TabSize = 4
        s.Font.Family = string(gi.AppearanceSettings.MonoFont)
    })

    te1 := texteditor.NewEditor(sp)
    te1.Style(func(s *styles.Style) {
        s.Min.X.Ch(20)
        s.Min.Y.Ch(10)
    })
    te2 := texteditor.NewEditor(sp)
    te2.Style(func(s *styles.Style) {
        s.Min.X.Ch(20)
        s.Min.Y.Ch(10)
    })

    tb := texteditor.NewBuf()
    te1.SetBuf(tb)
    te2.SetBuf(tb)

    tb.Hi.Lang = "Go"
    tb.OpenFS(samplefile, "texteditor.go")
    NewWindowRunAndWait(b, func(names []string) {
        s := stream.NewReadFile(names[0])
        tb.SetText(s.Bytes())
        te1.SetBuf(tb)
        te2.SetBuf(tb)
    })
    b.RunMainWindow()
}

func NewWindowRunAndWait(b *gi.Body, DropCallback func(names []string)) {
    w := b.NewWindow().Run()
    if w == nil || w.MainMgr == nil || w.MainMgr.RenderWin == nil {
        return
    }
    win := w.MainMgr.RenderWin.GoosiWin
    ww, ok := win.(*desktop.Window)
    if ok {
        ww.Glw.SetDropCallback(func(w *glfw.Window, names []string) {
            if DropCallback != nil {
                DropCallback(names)
            }
        })
    }
    w.Wait()
}

Relevant output

GOROOT=C:\Users\Admin\go\pkg\mod\golang.org\toolchain@v0.0.1-go1.22.0.windows-amd64 #gosetup
GOPATH=C:\Users\Admin\go #gosetup
C:\Users\Admin\go\pkg\mod\golang.org\toolchain@v0.0.1-go1.22.0.windows-amd64\bin\go.exe build -o C:\Users\Admin\AppData\Local\JetBrains\GoLand2023.3\tmp\GoLand\___1go_build_github_com_ddkwork_workspace_filetree_texteditor.exe github.com/ddkwork/workspace/filetree/texteditor #gosetup
C:\Users\Admin\AppData\Local\JetBrains\GoLand2023.3\tmp\GoLand\___1go_build_github_com_ddkwork_workspace_filetree_texteditor.exe
   Trace [2024-02-16 04:19:10]    --------- title --------- | ------------------ info ------------------ //runtime.doInit1 proc.go:7176
2024/02/16 04:19:12 INFO panic: interface conversion: interface is nil, not gi.Widget
2024/02/16 04:19:12 INFO 
2024/02/16 04:19:12 INFO ----- START OF STACK TRACE: -----
2024/02/16 04:19:12 INFO goroutine 1 [running, locked to thread]:
runtime/debug.Stack()
        C:/Users/Admin/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.22.0.windows-amd64/src/runtime/debug/stack.go:24 +0x5e
cogentcore.org/core/goosi.HandleRecoverBase({0x7ff7c6765d00, 0xc00060a240})
        D:/workspace/workspace/core/goosi/recover.go:49 +0x4b
cogentcore.org/core/gi.HandleRecover({0x7ff7c6765d00, 0xc00060a240})
        D:/workspace/workspace/core/gi/recover.go:32 +0x4b
cogentcore.org/core/gi.(*Stage).RunImpl.func1()
        D:/workspace/workspace/core/gi/stage.go:300 +0x24
panic({0x7ff7c6765d00?, 0xc00060a240?})
        C:/Users/Admin/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.22.0.windows-amd64/src/runtime/panic.go:770 +0x132
cogentcore.org/core/gi.(*WidgetBase).OnFinal(0xc000361508, 0x1b, 0xc001203e80)
        D:/workspace/workspace/core/gi/events.go:66 +0x1b1
cogentcore.org/core/gi.(*Layout).HandleKeys(...)
        D:/workspace/workspace/core/gi/layout.go:308
cogentcore.org/core/gi.(*Layout).HandleEvents(0xc000361508)
        D:/workspace/workspace/core/gi/layout.go:292 +0x74
cogentcore.org/core/gi.(*Frame).OnInit(0xc000361508)
        D:/workspace/workspace/core/gi/frame.go:20 +0x1e
cogentcore.org/core/gi.(*Body).OnInit(0xc000361508)
        D:/workspace/workspace/core/gi/body.go:50 +0x1e
cogentcore.org/core/ki.InitNode({0x7ff7c7de5cd8, 0xc000361508})
        D:/workspace/workspace/core/ki/admin.go:32 +0xa2
cogentcore.org/core/ki.(*Node).AddChild(0xc0001a0008, {0x7ff7c7de5cd8, 0xc000361508})
        D:/workspace/workspace/core/ki/node.go:439 +0x4b
cogentcore.org/core/gi.(*Scene).ConfigSceneBars(0xc0001a0008)
        D:/workspace/workspace/core/gi/bars.go:83 +0x2b5
cogentcore.org/core/gi.(*Stage).ConfigMainStage(0xc0011ec008)
        D:/workspace/workspace/core/gi/mainstage.go:104 +0x68
cogentcore.org/core/gi.(*Stage).RunWindow(0xc0011ec008)
        D:/workspace/workspace/core/gi/mainstage.go:118 +0x130
cogentcore.org/core/gi.(*Stage).RunImpl(0x7ff7c7c62b30?)
        D:/workspace/workspace/core/gi/stage.go:303 +0xac
cogentcore.org/core/gi.(*Stage).Run(0xc000000000?)
        D:/workspace/workspace/core/gi/stage.go:282 +0x7a
cogentcore.org/core/gi.(*Body).RunMainWindow(0xc000411008?)
        D:/workspace/workspace/core/gi/mainstage.go:38 +0x26
main.main()
        D:/workspace/workspace/filetree/texteditor/texteditor.go:52 +0x3ef

2024/02/16 04:19:12 INFO ----- END OF STACK TRACE -----
2024/02/16 04:19:12 INFO SAVED CRASH LOG TO C:\Users\Admin\AppData\Roaming\Cogent Core Text Editor Demo\crash-logs\crash_2024-02-16_04-19-12
2024/02/16 04:19:12 INFO panic: runtime error: invalid memory address or nil pointer dereference
2024/02/16 04:19:12 INFO
2024/02/16 04:19:12 INFO ----- START OF STACK TRACE: -----
2024/02/16 04:19:12 INFO goroutine 1 [running, locked to thread]:
runtime/debug.Stack()
        C:/Users/Admin/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.22.0.windows-amd64/src/runtime/debug/stack.go:24 +0x5e
cogentcore.org/core/goosi.HandleRecoverBase({0x7ff7c6760d60, 0x7ff7c66038c0})
        D:/workspace/workspace/core/goosi/recover.go:49 +0x4b
cogentcore.org/core/gi.HandleRecover({0x7ff7c6760d60, 0x7ff7c66038c0})
        D:/workspace/workspace/core/gi/recover.go:32 +0x4b
cogentcore.org/core/gi.(*Stage).RunImpl.func1()
        D:/workspace/workspace/core/gi/stage.go:300 +0x24
panic({0x7ff7c6760d60?, 0x7ff7c66038c0?})
        C:/Users/Admin/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.22.0.windows-amd64/src/runtime/panic.go:770 +0x132
cogentcore.org/core/goosi/driver/desktop.(*Window).WinSize(0x0?)
        <autogenerated>:1 +0x9
cogentcore.org/core/goosi.(*NewWindowOptions).Fixup(0xc00007c0c0)
        D:/workspace/workspace/core/goosi/window.go:363 +0x20d
cogentcore.org/core/goosi/driver/desktop.(*App).NewWindow(0x7ff7c8771da0, 0x7ff7c8771a7c?)
        D:/workspace/workspace/core/goosi/driver/desktop/app.go:117 +0x146
cogentcore.org/core/gi.NewRenderWin({0xc001214440, 0x3d}, {0xc001214400, 0x31}, 0xc00007c0c0)
        D:/workspace/workspace/core/gi/renderwin.go:172 +0xa6
cogentcore.org/core/gi.(*Stage).NewRenderWin(0xc00125c008)
        D:/workspace/workspace/core/gi/mainstage.go:280 +0x1fd
cogentcore.org/core/gi.(*Stage).RunWindow(0xc00125c008)
        D:/workspace/workspace/core/gi/mainstage.go:166 +0x672
cogentcore.org/core/gi.(*Stage).RunImpl(0x7ff7c67eea00?)
        D:/workspace/workspace/core/gi/stage.go:303 +0xac
cogentcore.org/core/gi.(*Stage).Run(0x0?)
        D:/workspace/workspace/core/gi/stage.go:282 +0x7a
cogentcore.org/core/gi.HandleRecover({0x7ff7c6765d00, 0xc00060a240})
        D:/workspace/workspace/core/gi/recover.go:67 +0x21a
cogentcore.org/core/gi.(*Stage).RunImpl.func1()
        D:/workspace/workspace/core/gi/stage.go:300 +0x24
panic({0x7ff7c6765d00?, 0xc00060a240?})
        C:/Users/Admin/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.22.0.windows-amd64/src/runtime/panic.go:770 +0x132
cogentcore.org/core/gi.(*WidgetBase).OnFinal(0xc000361508, 0x1b, 0xc001203e80)
        D:/workspace/workspace/core/gi/events.go:66 +0x1b1
cogentcore.org/core/gi.(*Layout).HandleKeys(...)
        D:/workspace/workspace/core/gi/layout.go:308
cogentcore.org/core/gi.(*Layout).HandleEvents(0xc000361508)
        D:/workspace/workspace/core/gi/layout.go:292 +0x74
cogentcore.org/core/gi.(*Frame).OnInit(0xc000361508)
        D:/workspace/workspace/core/gi/frame.go:20 +0x1e
cogentcore.org/core/gi.(*Body).OnInit(0xc000361508)
        D:/workspace/workspace/core/gi/body.go:50 +0x1e
cogentcore.org/core/ki.InitNode({0x7ff7c7de5cd8, 0xc000361508})
        D:/workspace/workspace/core/ki/admin.go:32 +0xa2
cogentcore.org/core/ki.(*Node).AddChild(0xc0001a0008, {0x7ff7c7de5cd8, 0xc000361508})
        D:/workspace/workspace/core/ki/node.go:439 +0x4b
cogentcore.org/core/gi.(*Scene).ConfigSceneBars(0xc0001a0008)
        D:/workspace/workspace/core/gi/bars.go:83 +0x2b5
cogentcore.org/core/gi.(*Stage).ConfigMainStage(0xc0011ec008)
        D:/workspace/workspace/core/gi/mainstage.go:104 +0x68
cogentcore.org/core/gi.(*Stage).RunWindow(0xc0011ec008)
        D:/workspace/workspace/core/gi/mainstage.go:118 +0x130
cogentcore.org/core/gi.(*Stage).RunImpl(0x7ff7c7c62b30?)
        D:/workspace/workspace/core/gi/stage.go:303 +0xac
cogentcore.org/core/gi.(*Stage).Run(0xc000000000?)
        D:/workspace/workspace/core/gi/stage.go:282 +0x7a
cogentcore.org/core/gi.(*Body).RunMainWindow(0xc000411008?)
        D:/workspace/workspace/core/gi/mainstage.go:38 +0x26
main.main()
        D:/workspace/workspace/filetree/texteditor/texteditor.go:52 +0x3ef

2024/02/16 04:19:12 INFO ----- END OF STACK TRACE -----
2024/02/16 04:19:12 INFO SAVED CRASH LOG TO C:\Users\Admin\AppData\Roaming\Cogent Core Text Editor Demo\crash-logs\crash_2024-02-16_04-19-12

Platform

Windows

ddkwork commented 4 months ago

screenshots

kkoreilly commented 4 months ago

I will work on fixing this.

kkoreilly commented 4 months ago

You can not call both NewWindowRunAndWait and RunMainWindow; they do the same thing. If you get rid of the RunMainWindow call, it should work. Also, I will make it easier to listen to OS drag and drop events in #33.

ddkwork commented 4 months ago

You can not call both NewWindowRunAndWait and RunMainWindow; they do the same thing. If you get rid of the RunMainWindow call, it should work. Also, I will make it easier to listen to OS drag and drop events in #33.

thanks!