瀏覽代碼

patch modal combobox for qt5

Johann ELSASS 4 年之前
父節點
當前提交
b7e7b1aff0
共有 4 個文件被更改,包括 55 次插入34 次删除
  1. 26 0
      lazpaint/dialog/ubrowseimages.pas
  2. 8 3
      lazpaint/lazpaintinstance.pas
  3. 20 30
      lazpaint/lazpaintmainform.pas
  4. 1 1
      lazpaint/lazpainttype.pas

+ 26 - 0
lazpaint/dialog/ubrowseimages.pas

@@ -146,6 +146,7 @@ type
     ShowRememberStartupDirectory: boolean;
     function GetChosenImage: TImageEntry;
     procedure FreeChosenImage;
+    function ShowModal: Integer; override;
     property LazPaintInstance: TLazPaintCustomInstance read FLazPaintInstance write SetLazPaintInstance;
     property Filename: string read FFilename;
     property SelectedFileCount: integer read GetSelectedFileCount;
@@ -1284,5 +1285,30 @@ begin
   FreeAndNil(FChosenImage.bmp);
 end;
 
+function TFBrowseImages.ShowModal: Integer;
+var
+  mainHidden: Boolean;
+begin
+  mainHidden := FLazPaintInstance.Hide;
+  try
+    {$IFDEF LCLqt5}
+    Show;
+    ModalResult := mrNone;
+    repeat
+      Application.ProcessMessages;
+      Sleep(50);
+    until (ModalResult <> mrNone) or not Visible;
+    if Visible then Hide;
+    if ModalResult = mrNone then
+      result := mrAbort
+      else result := ModalResult;
+    {$ELSE}
+    Result:=inherited ShowModal;
+    {$ENDIf}
+  finally
+    if mainHidden then FLazPaintInstance.Show;
+  end;
+end;
+
 end.
 

+ 8 - 3
lazpaint/lazpaintinstance.pas

@@ -211,7 +211,7 @@ type
     function ProcessCommands(commands: TStringList): boolean; override;
     procedure ChangeIconSize(size: integer); override;
     procedure Show; override;
-    procedure Hide; override;
+    function Hide: boolean; override;
     procedure Run; override;
     procedure Restart; override;
     procedure CancelRestart; override;
@@ -1530,9 +1530,14 @@ begin
   FMain.Show;
 end;
 
-procedure TLazPaintInstance.Hide;
+function TLazPaintInstance.Hide: boolean;
 begin
-  if MainFormVisible then FMain.Hide;
+  if MainFormVisible then
+  begin
+    FMain.Hide;
+    result := true;
+  end
+  else result := false;
 end;
 
 procedure TLazPaintInstance.Run;

+ 20 - 30
lazpaint/lazpaintmainform.pas

@@ -1889,24 +1889,19 @@ begin
         FBrowseSelections.AllowMultiSelect := false;
         FBrowseSelections.Caption := LoadSelectionDialog.Title;
       end;
-      self.Hide;
-      try
-        FBrowseSelections.FilterIndex:= LoadSelectionDialog.FilterIndex;
-        if FBrowseSelections.ShowModal = mrOK then
-        begin
-          LoadSelectionDialog.FilterIndex := FBrowseSelections.FilterIndex;
-          LazPaintInstance.ShowTopmost(topmost);
-          selectionFileName := FBrowseSelections.Filename;
-          loadedImage := FBrowseSelections.GetChosenImage;
-          Config.AddRecentDirectory(ExtractFilePath(selectionFileName));
-        end else
-        begin
-          result := srCancelledByUser;
-          LazPaintInstance.ShowTopmost(topmost);
-          exit;
-        end;
-      finally
-        self.Show;
+      FBrowseSelections.FilterIndex:= LoadSelectionDialog.FilterIndex;
+      if FBrowseSelections.ShowModal = mrOK then
+      begin
+        LoadSelectionDialog.FilterIndex := FBrowseSelections.FilterIndex;
+        LazPaintInstance.ShowTopmost(topmost);
+        selectionFileName := FBrowseSelections.Filename;
+        loadedImage := FBrowseSelections.GetChosenImage;
+        Config.AddRecentDirectory(ExtractFilePath(selectionFileName));
+      end else
+      begin
+        result := srCancelledByUser;
+        LazPaintInstance.ShowTopmost(topmost);
+        exit;
       end;
     end else
     begin
@@ -3828,18 +3823,13 @@ begin
         FBrowseBrushes.AllowMultiSelect := false;
         FBrowseBrushes.Caption := OpenBrushDialog.Title;
       end;
-      self.Hide;
-      try
-        FBrowseBrushes.InitialDirectory := Config.DefaultBrushDirectory;
-        FBrowseBrushes.FilterIndex:= OpenBrushDialog.FilterIndex;
-        if FBrowseBrushes.ShowModal = mrOK then
-        begin
-          OpenBrushDialog.FilterIndex := FBrowseBrushes.FilterIndex;
-          brushFilename := FBrowseBrushes.Filename;
-          newBrushBmp := FBrowseBrushes.GetChosenImage.bmp;
-        end;
-      finally
-        self.Show;
+      FBrowseBrushes.InitialDirectory := Config.DefaultBrushDirectory;
+      FBrowseBrushes.FilterIndex:= OpenBrushDialog.FilterIndex;
+      if FBrowseBrushes.ShowModal = mrOK then
+      begin
+        OpenBrushDialog.FilterIndex := FBrowseBrushes.FilterIndex;
+        brushFilename := FBrowseBrushes.Filename;
+        newBrushBmp := FBrowseBrushes.GetChosenImage.bmp;
       end;
     end else
     begin

+ 1 - 1
lazpaint/lazpainttype.pas

@@ -242,7 +242,7 @@ type
     function ProcessCommands(commands: TStringList): boolean; virtual; abstract;
     procedure ChangeIconSize(size: integer); virtual; abstract;
     procedure Show; virtual; abstract;
-    procedure Hide; virtual; abstract;
+    function Hide: boolean; virtual; abstract;
     procedure Run; virtual; abstract;
     procedure Restart; virtual; abstract;
     procedure CancelRestart; virtual; abstract;