|  | @@ -144,6 +144,7 @@ void la_DestroyWindow(laWindow *wnd){
 | 
	
		
			
				|  |  |      lstRemoveItem(&MAIN.Windows, wnd);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      memFree(wnd);
 | 
	
		
			
				|  |  | +    MAIN.CurrentWindow=MAIN.Windows.pFirst;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  void laRenameWindow(laWindow* wnd, char* name){
 | 
	
	
		
			
				|  | @@ -411,7 +412,6 @@ void laShutoff(){
 | 
	
		
			
				|  |  |      laSharedTypeItem* sti; while(sti=lstPopItem(&MAIN.SharedTypePointerSync)){ memFree(sti); }
 | 
	
		
			
				|  |  |      laKeyMapItem* kmi; while(kmi=lstPopItem(&MAIN.KeyMap.Items)){ la_FreeKeyMapItem(kmi); }
 | 
	
		
			
				|  |  |      laTheme* t; while(t=lstPopItem(&MAIN.Themes)){ la_DestroyTheme(t); }
 | 
	
		
			
				|  |  | -    laPanel* p; while(p=lstPopItem(&MAIN.WastedPanels)){ memFree(p); }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      arrFree(&MAIN.InputBuf,&MAIN.InputBufNext);
 | 
	
		
			
				|  |  |      arrFree(&MAIN.InputBufU,&MAIN.InputBufUNext);
 | 
	
	
		
			
				|  | @@ -427,6 +427,7 @@ void laShutoff(){
 | 
	
		
			
				|  |  |      tnsQuit();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      laPropContainer* pc; while(pc=lstPopItem(&MAIN.PropContainers)){ la_FreePropertyContainer(pc); }
 | 
	
		
			
				|  |  | +    laPanel* p; while(p=lstPopItem(&MAIN.WastedPanels)){ memFree(p); }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      strSafeDump();
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -2157,14 +2158,14 @@ void laDeferredDestroyPanel(laPanel *p){
 | 
	
		
			
				|  |  |  void laDestroySinglePanel(laPanel *p){
 | 
	
		
			
				|  |  |      la_SetPropMathcerContext(p);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    if (p->PropLinkPP.LastPs->p->SubProp->Props.pFirst){
 | 
	
		
			
				|  |  | +    if (p->PropLinkPP.LastPs&&p->PropLinkPP.LastPs->p->SubProp->Props.pFirst){
 | 
	
		
			
				|  |  |          for(laProp* prop=p->PropLinkPP.LastPs->p->SubProp->Props.pFirst;prop;prop=prop->Item.pNext){
 | 
	
		
			
				|  |  |              { /* la_StopUsingPropPack(&prop->DetachedPP); */ }
 | 
	
		
			
				|  |  |              //laStopUsingDataBlock(prop->DetachedPP.LastPs->UseInstance, prop->DetachedPP.LastPs->p,MAIN.PropMatcherContextP);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    if(p==MAIN.CurrentWindow->MaximizedUiPanel){ laRestoreCanvasUI(); }
 | 
	
		
			
				|  |  | +    if(MAIN.CurrentWindow&&p==MAIN.CurrentWindow->MaximizedUiPanel){ laRestoreCanvasUI(); }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      la_DestroyUiList(&p->UI, 1, 1, 0);
 | 
	
		
			
				|  |  |      la_DestroyUiList(&p->TitleBar, 1, 1, 0);
 | 
	
	
		
			
				|  | @@ -5892,7 +5893,7 @@ void laRequestDelayEvent(real Seconds){
 | 
	
		
			
				|  |  |      MAIN.DelayTriggered=0; MAIN.DelayStart=MAIN.TimeAccum; MAIN.DelayTime = Seconds; }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  int la_UiStillInService(void *UiInstance){
 | 
	
		
			
				|  |  | -    laOperator *ai, *dai;
 | 
	
		
			
				|  |  | +    laOperator *ai, *dai; if(!MAIN.CurrentWindow) return 0;
 | 
	
		
			
				|  |  |      for (ai = MAIN.CurrentWindow->Operators.pFirst; ai; ai = ai->Item.pNext){
 | 
	
		
			
				|  |  |          if (ai->Instance == UiInstance) return 1;
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -5942,7 +5943,7 @@ void la_StopAllOperators(){
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      for (ai = MAIN.CurrentWindow->Operators.pFirst; ai; ai = NextAi){
 | 
	
		
			
				|  |  |          NextAi = ai->Item.pNext;
 | 
	
		
			
				|  |  | -        if (ai->Instance == ai->ToPanel && !ai->ToPanel->IsMenuPanel){
 | 
	
		
			
				|  |  | +        if (ai->ToPanel && ai->Instance == ai->ToPanel && !ai->ToPanel->IsMenuPanel){
 | 
	
		
			
				|  |  |              laHidePanelWithDissoveEffect(ai->ToPanel);
 | 
	
		
			
				|  |  |              ai->ToPanel->LaterDestroy = 1;
 | 
	
		
			
				|  |  |          }
 | 
	
	
		
			
				|  | @@ -6081,6 +6082,7 @@ int la_UpdateOperatorHints(laWindow* w){
 | 
	
		
			
				|  |  |      laSafeString* ss=0;
 | 
	
		
			
				|  |  |      for(laOperator* o=w->Operators.pFirst;o;o=o->Item.pNext){
 | 
	
		
			
				|  |  |          if(o->RuntimeHint&&o->RuntimeHint->Ptr){ strSafePrint(&ss, "%s | %s  ", o->Type->Name, o->RuntimeHint->Ptr);}
 | 
	
		
			
				|  |  | +        strSafeDestroy(&o->RuntimeHint);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      if((w->OperatorHints&&ss&&strSame(ss->Ptr,w->OperatorHints->Ptr))||(!w->OperatorHints&&!ss)){ //pass
 | 
	
		
			
				|  |  |      }else{
 | 
	
	
		
			
				|  | @@ -6214,7 +6216,7 @@ int la_HandleEvents(laWindow *w){
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              if (e && !w->Operators.pFirst){ laInvokeUi(0, "LA_window_operator", e, w, 0, 0); }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -            if (e) if(!la_HandleSingleEvent(e, &w->Operators)){ la_StopAllOperators(); return 0; } //EXIT
 | 
	
		
			
				|  |  | +            if (e) if(!la_HandleSingleEvent(e, &w->Operators)){ la_StopAllOperators(); FreeMem(e); return 0; } //EXIT
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              FreeMem(e);
 | 
	
		
			
				|  |  |          }
 | 
	
	
		
			
				|  | @@ -6385,7 +6387,7 @@ void laMainLoop(){
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          for (w=MAIN.Windows.pFirst;w;w = NextW){
 | 
	
		
			
				|  |  |              NextW = w->Item.pNext;
 | 
	
		
			
				|  |  | -            if(!la_HandleEvents(w)) return;
 | 
	
		
			
				|  |  | +            if(!la_HandleEvents(w)){ laShutoff(); return; }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          for(w=MAIN.Windows.pFirst;w;w=w->Item.pNext){
 | 
	
		
			
				|  |  |              tnsSwitchToCurrentWindowContext(w);
 | 
	
	
		
			
				|  | @@ -6396,7 +6398,7 @@ void laMainLoop(){
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          //t2 = clock();
 | 
	
		
			
				|  |  |          laRecordTime(&FrameEndTime);
 | 
	
		
			
				|  |  | -        TimeInterval = /* (t2 - t1) / 1000.0;*/ laTimeElapsedSecondsf(&FrameEndTime, &FrameStartTime);
 | 
	
		
			
				|  |  | +        TimeInterval = laTimeElapsedSecondsf(&FrameEndTime, &FrameStartTime);
 | 
	
		
			
				|  |  |          Pause = (1.0 / MAIN.TopFramerate - TimeInterval);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          if (Pause > 0){
 | 
	
	
		
			
				|  | @@ -6404,10 +6406,7 @@ void laMainLoop(){
 | 
	
		
			
				|  |  |              usleep(ms);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        laRecordTime(&FrameEndTime);
 | 
	
		
			
				|  |  | -        TimeInterval = /* (t2 - t1) / 1000.0;*/ laTimeElapsedSecondsf(&FrameEndTime, &FrameStartTime);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        MAIN.TimeAccum += (MAIN.LastFrameTime = (Pause + TimeInterval));
 | 
	
		
			
				|  |  | +        MAIN.TimeAccum += (MAIN.LastFrameTime = Pause+TimeInterval);
 | 
	
		
			
				|  |  |          FrameInterval = 1.0 / MAIN.Animation.FrameRate;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  }
 |