@@ -276,7 +276,7 @@ mainPFWidgetWithBypass MainPFWidgetConfig {..} bypassEvent = mdo
276276
277277
278278 let
279- performSaveEv = attach (current $ _goatWidget_DEBUG_goatState everythingW) $ leftmost [saveAsEv, clickSaveEv]
279+ performSaveEv = attach (current $ _goatWidget_DEBUG_goatState everythingW) $ leftmost [saveAsEv, clickSaveEv, _saveBeforeExitOutput_save ]
280280 finishSaveEv <- performEvent $ ffor performSaveEv $ \ (gs,fn) -> liftIO $ do
281281 let
282282 spf = owlPFState_to_sPotatoFlow . _owlPFWorkspace_pFState . _goatState_workspace $ gs
@@ -330,6 +330,7 @@ mainPFWidgetWithBypass MainPFWidgetConfig {..} bypassEvent = mdo
330330 , _goatWidgetConfig_canvasSize = _paramsWidget_canvasSizeEvent (_leftWidget_paramsW leftW)
331331 , _goatWidgetConfig_newFolder = _layerWidget_newFolderEv (_leftWidget_layersW leftW)
332332 , _goatWidgetConfig_setPotatoDefaultParameters = _paramsWidget_setDefaultParamsEvent (_leftWidget_paramsW leftW)
333+ , _goatWidgetConfig_markSaved = void performSaveEv
333334
334335 -- debugging stuff
335336 , _goatWidgetConfig_setDebugLabel = never
@@ -373,27 +374,31 @@ mainPFWidgetWithBypass MainPFWidgetConfig {..} bypassEvent = mdo
373374 return (kb, stuff)
374375
375376 let
377+ doesNeedSaveOnExitEv = tag (current $ _goatWidget_unsavedChanges everythingW) $ leftmost [_appKbCmd_quit, _menuButtonsWidget_quitEv . _leftWidget_menuButtonsW $ leftW]
376378 (clickSaveEv, nothingClickSaveEv) = fanMaybe $ tag (_potatoConfig_appCurrentOpenFile potatoConfig) $ leftmost [_menuButtonsWidget_saveEv . _leftWidget_menuButtonsW $ leftW, _appKbCmd_save]
377- clickSaveAsEv = leftmost $ [_menuButtonsWidget_saveAsEv . _leftWidget_menuButtonsW $ leftW, nothingClickSaveEv]
379+ clickSaveAsEv = leftmost $ [_menuButtonsWidget_saveAsEv . _leftWidget_menuButtonsW $ leftW, nothingClickSaveEv, _saveBeforeExitOutput_saveAs ]
378380
381+ -- TODO probably have some sort of PopupManager -__-
382+ -- 1 welcome popup
379383 -- (_, popupStateDyn1) <- popupPaneSimple def (postBuildEv $> welcomeWidget)
380384 (_, popupStateDyn1) <- popupPaneSimple def (never $> welcomeWidget)
381385
382- -- TODO correct initial state (tag potatoConfig)
386+ -- 2 save as popup
383387 (saveAsEv, popupStateDyn2) <- flip runPotatoReader potatoConfig $ popupSaveAsWindow $ SaveAsWindowConfig (tag (_potatoConfig_appCurrentDirectory potatoConfig) clickSaveAsEv)
384388
389+ -- 3 alert popup
385390 let
386- alertEv = leftmost [ fmapMaybe eitherMaybeLeft finishSaveEv]
387- popupStateDyn3 <- flip runPotatoReader potatoConfig $ popupAlert alertEv
391+ saveFailAlertEv = fmapMaybe eitherMaybeLeft finishSaveEv
392+ popupStateDyn3 <- flip runPotatoReader potatoConfig $ popupAlert saveFailAlertEv
388393
394+ -- 4 unsaved changes on quit popup
395+ (SaveBeforeExitOutput {.. }, popupStateDyn4) <- flip runPotatoReader potatoConfig $ popupSaveBeforeExit (SaveBeforeExitConfig (void $ ffilter id doesNeedSaveOnExitEv))
389396
390397 let
391398 -- TODO assert that we never have more than 1 popup open at once
392399 -- block input if any popup is currently open
393- inputCapturedByPopupBeh = current . fmap getAny . mconcat . fmap (fmap Any ) $ [popupStateDyn1, popupStateDyn2, popupStateDyn3]
394-
400+ inputCapturedByPopupBeh = current . fmap getAny . mconcat . fmap (fmap Any ) $ [popupStateDyn1, popupStateDyn2, popupStateDyn3, popupStateDyn4]
395401
396402
397403 -- handle escape event
398- -- TODO we want to prompt for save first, use popupSaveBeforeExit
399- return $ leftmost [_appKbCmd_quit, _menuButtonsWidget_quitEv . _leftWidget_menuButtonsW $ leftW]
404+ return $ void $ ffilter not doesNeedSaveOnExitEv
0 commit comments