diff --git a/events.go b/events.go index a57ecee..a3d4e4b 100644 --- a/events.go +++ b/events.go @@ -352,12 +352,16 @@ func handleEvents() { } case *sdl.QuitEvent: - confirmQuit := globals.MenuSystem.Get("confirm quit") - if confirmQuit.Opened { + if globals.Project.Modified { + confirmQuit := globals.MenuSystem.Get("confirm quit") + if confirmQuit.Opened { + quit = true + } + confirmQuit.Center() + confirmQuit.Open() + } else { quit = true } - confirmQuit.Center() - confirmQuit.Open() case *sdl.KeyboardEvent: diff --git a/main.go b/main.go index a1adfd2..a05d46b 100644 --- a/main.go +++ b/main.go @@ -938,10 +938,14 @@ func ConstructMenus() { browser.OpenURL("https://github.com/SolarLune/masterplan/wiki") })) root.AddRow(AlignCenter).Add("Quit", NewButton("Quit", nil, nil, false, func() { - confirmQuit := globals.MenuSystem.Get("confirm quit") - confirmQuit.Center() - confirmQuit.Open() - fileMenu.Close() + if globals.Project.Modified { + confirmQuit := globals.MenuSystem.Get("confirm quit") + confirmQuit.Center() + confirmQuit.Open() + fileMenu.Close() + } else { + quit = true + } })) // Export sub-menu @@ -1818,9 +1822,12 @@ func ConstructMenus() { root = confirmQuit.Pages["root"] root.AddRow(AlignCenter).Add("label", NewLabel("Are you sure you wish to quit?", nil, false, AlignCenter)) root.AddRow(AlignCenter).Add("label-2", NewLabel("Any unsaved changes will be lost.", nil, false, AlignCenter)) - row = root.AddRow(AlignCenter) - row.Add("yes", NewButton("Yes, Quit", &sdl.FRect{0, 0, 128, 32}, nil, false, func() { quit = true })) - row.Add("no", NewButton("No", &sdl.FRect{0, 0, 128, 32}, nil, false, func() { confirmQuit.Close() })) + root.AddRow(AlignCenter).Add("save", NewButton("Save and Quit", &sdl.FRect{0, 0, 256, 32}, nil, false, func() { + globals.Project.Save() + quit = true + })) + root.AddRow(AlignCenter).Add("yes", NewButton("Quit Without Saving", &sdl.FRect{0, 0, 256, 32}, nil, false, func() { quit = true })) + root.AddRow(AlignCenter).Add("no", NewButton("Cancel", &sdl.FRect{0, 0, 256, 32}, nil, false, func() { confirmQuit.Close() })) confirmQuit.Recreate(root.IdealSize().X+48, root.IdealSize().Y+32) confirmNewProject := globals.MenuSystem.Add(NewMenu("confirm new project", &sdl.FRect{0, 0, 32, 32}, MenuCloseButton), true)