@@ -84,6 +84,7 @@ function NavBar({ layoutref }: NavBarProps) {
8484 const [ isConnected , setConnected ] = useState ( false ) ;
8585 const [ isLogin , setLogin ] = useState ( false ) ;
8686 const [ isRunning , setRunning ] = useState ( false ) ;
87+ const [ isStopping , setIsStopping ] = useState ( false ) ;
8788 const [ isBlockly , setBlockly ] = useState ( false ) ;
8889 const [ isOtherTab , setIsOtherTab ] = useState ( false ) ;
8990 const dialogRef = useRef < HTMLDialogElement > ( null ) ;
@@ -798,6 +799,15 @@ function NavBar({ layoutref }: NavBarProps) {
798799 async function onRunBtnClicked ( ) {
799800 console . log ( 'onRunBtnClicked' ) ;
800801
802+ const resetRunButtonStates = ( ) => {
803+ AppMgr . getInstance ( ) . on ( EventType . EVENT_PROGRAM_EXECUTED , ( ) => {
804+ setRunning ( false ) ;
805+ setIsStopping ( false ) ;
806+ broadcastRunningState ( false ) ;
807+ AppMgr . getInstance ( ) . eventOff ( EventType . EVENT_PROGRAM_EXECUTED ) ;
808+ } ) ;
809+ }
810+
801811 if ( ! isRunning ) {
802812 if ( ! isConnected ) {
803813 setDialogContent (
@@ -852,9 +862,7 @@ function NavBar({ layoutref }: NavBarProps) {
852862 . updateMainFile ( session . path )
853863 . then ( async ( lines ) => {
854864 await CommandToXRPMgr . getInstance ( ) . executeLines ( lines ) ;
855- setRunning ( false ) ;
856- broadcastRunningState ( false ) ;
857-
865+ resetRunButtonStates ( ) ;
858866 } ) ;
859867 } ) ;
860868 } ) ;
@@ -863,8 +871,7 @@ function NavBar({ layoutref }: NavBarProps) {
863871 . updateMainFile ( session . path )
864872 . then ( async ( lines ) => {
865873 await CommandToXRPMgr . getInstance ( ) . executeLines ( lines ) ;
866- setRunning ( false ) ;
867- broadcastRunningState ( false ) ;
874+ resetRunButtonStates ( ) ;
868875 } ) ;
869876 }
870877 }
@@ -908,8 +915,7 @@ function NavBar({ layoutref }: NavBarProps) {
908915 }
909916 } ) ;
910917 } else {
911- setRunning ( false ) ;
912- broadcastRunningState ( false ) ;
918+ setIsStopping ( true ) ;
913919 CommandToXRPMgr . getInstance ( ) . stopProgram ( ) ;
914920 }
915921 }
@@ -1197,6 +1203,7 @@ function NavBar({ layoutref }: NavBarProps) {
11971203 id = "runBtn"
11981204 className = { `text-white h-full w-[120] items-center justify-center rounded-3xl px-4 py-2 ${ isRunning ? 'bg-cinnabar-600' : 'bg-chateau-green-500' } ${ isConnected ? 'flex' : 'hidden' } ` }
11991205 onClick = { onRunBtnClicked }
1206+ disabled = { isStopping }
12001207 >
12011208 { isRunning ? (
12021209 < >
0 commit comments