*/}}
Browse Source

udf write failure warning

YimingWu 2 months ago
parent
commit
30df11f2dc
5 changed files with 26 additions and 8 deletions
  1. 4 2
      la_data.c
  2. 1 1
      la_data.h
  3. 2 0
      la_kernel.c
  4. 5 0
      la_tns_kernel.c
  5. 14 5
      resources/la_operators.c

+ 4 - 2
la_data.c

@@ -4067,16 +4067,18 @@ void laClearManagedUDF(){
     while(m=MAIN.ManagedUDFs.pFirst){ laStopManageUDF(m); }
 }
 
-void laSaveManagedUDF(int ModifiedOnly){
+int laSaveManagedUDF(int ModifiedOnly){
+    int allsuccess=1;
     laRegisterModifications(0,0,0,1);
     if(MAIN.PreSave){ MAIN.PreSave(); }
     for(laManagedUDF* m=MAIN.ManagedUDFs.pFirst;m;m=m->Item.pNext){
         if(!m->udf) continue;
         if(ModifiedOnly && !m->udf->Modified){ continue; }
-        if(m->udf->PropsToOperate.pFirst){ laPackUDF(m->udf, 1, 1); }
+        if(m->udf->PropsToOperate.pFirst){ if(!laPackUDF(m->udf, 1, 1)){ allsuccess=0; }; }
         laCloseUDF(m->udf);// just in case
     }
     if(MAIN.PostSave){ MAIN.PostSave(); }
+    return allsuccess;
 }
 
 void laPropagateUDF(laPropContainer* pc, void* inst, int force){

+ 1 - 1
la_data.h

@@ -1014,7 +1014,7 @@ void la_MakeDummyManagedUDF();
 void laStopManageUDF(laManagedUDF* m);
 void laClearManagedUDF();
 
-void laSaveManagedUDF(int ModifiedOnly);
+int laSaveManagedUDF(int ModifiedOnly);
 
 void laPropagateUDF(laPropContainer* pc, void* inst, int force);
 

+ 2 - 0
la_kernel.c

@@ -4156,6 +4156,8 @@ laPanel *laEnableOperatorPanel(laOperator *For, laPropPack *This, int X, int Y,
     int b;
     laUiDefineFunc def = 0;
 
+    if(ai->OperatorPanel){ return ai->OperatorPanel; }
+
     if (ai->Type->UiDefine) def = ai->Type->UiDefine;
     else def = laui_DefaultPropUiDefine;
     

+ 5 - 0
la_tns_kernel.c

@@ -2123,6 +2123,7 @@ static void _tns_png_read(png_struct *ps, png_byte *data, png_size_t length){
     PNGRead->NextData+=length;
 }
 void tns_ImageToTexture(tnsImage* im){
+    if(!im) return;
     if(!im->MemPNG) return;
     png_structp png_ptr=0;
     png_infop info_ptr=0;
@@ -2165,6 +2166,7 @@ cleanup_png_read:
     if(png_ptr && info_ptr) png_destroy_read_struct(&png_ptr,&info_ptr,0);
 }
 void tnsUseImage(tnsImage* im){
+    if(!im) return;
     if(im->UserCount==0 || !im->Texture){
         if(!im->MemPNG){
             if(im->Texture){ tnsDeleteTexture(im->Texture); im->Texture=0; }
@@ -2175,14 +2177,17 @@ void tnsUseImage(tnsImage* im){
     im->UserCount++;
 }
 void tnsRefreshImage(tnsImage* im,void* data){
+    if(!im) return;
     if(im->MemPNG){free(im->MemPNG);}
     im->MemPNG=data; tnsDeleteTexture(im->Texture); im->Texture=0;
 }
 void tnsStopUsingImage(tnsImage* im){
+    if(!im) return;
     im->UserCount--;
     if(im->UserCount<=0){ im->UserCount=0; tnsDeleteTexture(im->Texture); im->Texture=0; }
 }
 void tnsRemoveImage(tnsImage* im){
+    if(!im) return;
     while(im->UserCount) tnsStopUsingImage(im);
     if(im->MemPNG) free(im->MemPNG);
     lstRemoveItem(&T->Images,im); memFree(im);

+ 14 - 5
resources/la_operators.c

@@ -869,7 +869,13 @@ int OPINV_ManagedSave(laOperator *a, laEvent *e){
             int empty=0; laRegisterModifications(0,1,&empty,0);
             if(strSame(strGetArgumentString(a->ExtraInstructionsP, "ignore_unassigned"),"true")) empty=0;
             int modified_only=0; if(strSame(strGetArgumentString(a->ExtraInstructionsP, "modified_only"),"true")) modified_only=1;
-            if(!empty){ laSaveManagedUDF(modified_only); return LA_FINISHED; }
+            if(!empty){
+                if(!laSaveManagedUDF(modified_only)){
+                    laEnableMessagePanel(0,0,"Caution",
+                        "Not all files have been successfully written.\nSee messages in terminal for details.",e->x,e->y,400,e);
+                }
+                return LA_FINISHED;
+            }
         }
         if(strSame(strGetArgumentString(a->ExtraInstructionsP, "on_exit"),"true")){ OnExit=1; }
     }
@@ -891,7 +897,7 @@ int OPMOD_ManagedSave(laOperator *a, laEvent *e){
         if(a->ConfirmData->Mode==LA_CONFIRM_CUSTOM_STRING && strSame(a->ConfirmData->StrData,"DISCARD_AND_QUIT")){
             return LA_OPERATOR_CALLS_SHUTOFF;
         }
-        if(a->ConfirmData->Mode==LA_CONFIRM_CANCEL||a->ConfirmData->Mode==LA_CONFIRM_OK) return LA_FINISHED;
+        if(a->ConfirmData->Mode==LA_CONFIRM_CANCEL) return LA_FINISHED;
         return LA_RUNNING;
     }
 
@@ -2418,9 +2424,12 @@ int OPMOD_ModalPanel(laOperator *a, laEvent *e){
         if (a->ConfirmData->Mode == LA_CONFIRM_DATA||a->ConfirmData->Mode==LA_CONFIRM_CUSTOM_STRING){
              return LA_RUNNING_PASS;
         }
-        la_StopUiOperatorService(p);
-        laDestroySinglePanel(p,0);
-        return LA_FINISHED_PASS;
+        if(!p->ParentOperator){
+            la_StopUiOperatorService(p);
+            laDestroySinglePanel(p,0);
+            return LA_FINISHED_PASS;
+        }
+        return LA_RUNNING_PASS;
     }
 
     if (!laIsInPanel(p, e->x, e->y) && !uid->TargetIndexVali){