2
0
Эх сурвалжийг харах

#430 restore language if restart cancelled, also cancel if save cancel

circular17 3 жил өмнө
parent
commit
e7152f7d39

+ 5 - 3
lazpaint/lazpaintinstance.pas

@@ -213,7 +213,7 @@ type
     procedure Show; override;
     function Hide: boolean; override;
     procedure Run; override;
-    procedure Restart; override;
+    function Restart: boolean; override;
     procedure CancelRestart; override;
     destructor Destroy; override;
     procedure NotifyImageChange(RepaintNow: boolean; ARect: TRect); override;
@@ -1555,13 +1555,15 @@ begin
   until not MainFormVisible;
 end;
 
-procedure TLazPaintInstance.Restart;
+function TLazPaintInstance.Restart: boolean;
 begin
   if FMain <> nil then
   begin
     FRestartQuery := true;
     FMain.Close;
-  end;
+    result := FRestartQuery;
+  end else
+    result := true;
 end;
 
 procedure TLazPaintInstance.CancelRestart;

+ 15 - 3
lazpaint/lazpaintmainform.pas

@@ -831,6 +831,7 @@ type
   public
     { public declarations }
     Zoom: TZoom;
+    Closing: boolean;
 
     procedure PaintPictureNow;
     procedure PaintPictureLater;
@@ -2484,6 +2485,7 @@ begin
   if ToolManager.ToolSleeping then
   begin
     CanClose := false;
+    LazPaintInstance.CancelRestart;
     exit;
   end;
   if CurrentTool in [ptDeformation,ptLayerMapping] then
@@ -2492,6 +2494,7 @@ begin
     if not Image.CheckNoAction then
     begin
       CanClose := false;
+      LazPaintInstance.CancelRestart;
       exit;
     end;
   if not LazPaintInstance.Embedded and image.IsFileModified and not image.Empty then
@@ -2499,12 +2502,19 @@ begin
     topmostInfo:= LazPaintInstance.HideTopmost;
 
     case LazPaintInstance.SaveQuestion(rsExitRequest) of
-    IDYES: FileSave.Execute;
+    IDYES: if scripting.CallScriptFunction('FileSave') <> srOk then
+           begin
+             CanClose := false;
+             LazPaintInstance.CancelRestart;
+             LazPaintInstance.ShowTopmost(topmostInfo);
+             exit;
+           end;
     IDNO: ;
     IDCANCEL: begin
                 CanClose := false;
                 LazPaintInstance.CancelRestart;
                 LazPaintInstance.ShowTopmost(topmostInfo);
+                exit;
               end;
     end;
   end else
@@ -2611,15 +2621,17 @@ begin
 end;
 
 procedure TFMain.LanguageClick(Sender: TObject);
-var language: string;
+var language, prevLanguage: string;
 begin
   if Sender is TMenuItem then
   begin
     language := (Sender as TMenuItem).Caption;
     if Config.DefaultLangage <> language then
     begin
+      prevLanguage := Config.DefaultLangage;
       Config.SetDefaultLangage(language);
-      LazPaintInstance.Restart;
+      if not LazPaintInstance.Restart then
+        Config.SetDefaultLangage(prevLanguage);
     end;
   end;
 end;

+ 1 - 1
lazpaint/lazpainttype.pas

@@ -244,7 +244,7 @@ type
     procedure Show; virtual; abstract;
     function Hide: boolean; virtual; abstract;
     procedure Run; virtual; abstract;
-    procedure Restart; virtual; abstract;
+    function Restart: boolean; virtual; abstract;
     procedure CancelRestart; virtual; abstract;
     procedure NotifyImageChange(RepaintNow: boolean; ARect: TRect); virtual; abstract;
     procedure NotifyImageChangeCompletely(RepaintNow: boolean); virtual; abstract;