[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#1033798: unblock: lazarus/2.2.6+dfsg1-2



Hi Release Team,

On Sat, 2023-04-01 at 21:36 +0200, Abou Al Montacir wrote:
The size of that patch looks very big that half of changes are in Makefiles which are auto-generated during the build, so not relevant. The other changes are reviewed and looks OK for me.
In order to help you review the path, I've striped all make files related changes. The debdiff file is now much smaller, even if it remains quite big (wen from 938kB down to 177kB)

I used this release with a quite big personal project, and it is indeed more stable than the previous one. I don't see any regression, so far.
I really recommend we have it on Bookwork both as a maintainer and as user.
-- 
Cheers,
Abou Al Montacir
diff -Nru lazarus-2.2.4+dfsg1/components/chmhelp/lhelp/Makefile.fpc lazarus-2.2.6+dfsg1/components/chmhelp/lhelp/Makefile.fpc
--- lazarus-2.2.4+dfsg1/components/chmhelp/lhelp/Makefile.fpc	2022-09-25 12:37:16.000000000 +0200
+++ lazarus-2.2.6+dfsg1/components/chmhelp/lhelp/Makefile.fpc	2023-03-04 14:24:23.000000000 +0100
@@ -15,7 +15,7 @@
 packages=rtl
 
 [compiler]
-options=-gs -gl -Sghi -O3 -dlcl$(LCL_PLATFORM) $(DBG_OPTIONS)
+options=-gl -Sghi -O3 -dlcl$(LCL_PLATFORM) $(DBG_OPTIONS)
 unittargetdir=lib/$(CPU_TARGET)-$(OS_TARGET)
 unitdir=. $(LAZDIR)/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) \
           $(LAZDIR)/packager/units/$(CPU_TARGET)-$(OS_TARGET) \
diff -Nru lazarus-2.2.4+dfsg1/components/codetools/finddeclarationtool.pas lazarus-2.2.6+dfsg1/components/codetools/finddeclarationtool.pas
--- lazarus-2.2.4+dfsg1/components/codetools/finddeclarationtool.pas	2022-09-25 12:37:16.000000000 +0200
+++ lazarus-2.2.6+dfsg1/components/codetools/finddeclarationtool.pas	2023-03-04 14:24:23.000000000 +0100
@@ -10472,6 +10472,7 @@
 
 var
   OldFlags: TFindDeclarationFlags;
+  MaybeFuncAtCursor: Boolean;
 begin
   Result:=CleanExpressionType;
   if AliasType<>nil then
@@ -10485,9 +10486,9 @@
   DebugLn('[TFindDeclarationTool.ReadOperandTypeAtCursor] A Atom=',GetAtom);
   debugln(['TFindDeclarationTool.ReadOperandTypeAtCursor StartContext=',Params.ContextNode.DescAsString,'="',dbgstr(Src,Params.ContextNode.StartPos,15),'"']);
   {$ENDIF}
-  if (AtomIsIdentifier)
+  MaybeFuncAtCursor := AtomIsIdentifier or UpAtomIs('INHERITED');
+  if (MaybeFuncAtCursor)
   or (CurPos.Flag=cafRoundBracketOpen)
-  or UpAtomIs('INHERITED')
   or UpAtomIs('ARRAY')
   then begin
     // read variable
@@ -10496,7 +10497,9 @@
     if EndPos>MaxEndPos then
       EndPos:=MaxEndPos;
     OldFlags:=Params.Flags;
-    Params.Flags:=(Params.Flags*fdfGlobals)+[fdfFunctionResult];
+    Params.Flags:=(Params.Flags*fdfGlobals);
+    if MaybeFuncAtCursor then
+      Params.Flags:=Params.Flags+[fdfFunctionResult];
     Result:=FindExpressionTypeOfTerm(SubStartPos,EndPos,Params,true,AliasType);
     Params.Flags:=OldFlags;
     MoveCursorToCleanPos(EndPos);
diff -Nru lazarus-2.2.4+dfsg1/components/codetools/tests/laztests/bug39897.pas lazarus-2.2.6+dfsg1/components/codetools/tests/laztests/bug39897.pas
--- lazarus-2.2.4+dfsg1/components/codetools/tests/laztests/bug39897.pas	1970-01-01 01:00:00.000000000 +0100
+++ lazarus-2.2.6+dfsg1/components/codetools/tests/laztests/bug39897.pas	2023-03-04 14:24:23.000000000 +0100
@@ -0,0 +1,20 @@
+program bug39897;
+{$mode objfpc}{$H+}
+uses
+  Classes;
+
+const
+  b = $1;
+  a = ((b)+1);
+procedure foo(x,y: byte);
+begin
+end;
+procedure foo(x,y: word);
+begin
+end;
+
+
+begin
+  foo{declaration:foo}(b, a);
+end.
+
diff -Nru lazarus-2.2.4+dfsg1/components/fpdebug/fpdbgclasses.pp lazarus-2.2.6+dfsg1/components/fpdebug/fpdbgclasses.pp
--- lazarus-2.2.4+dfsg1/components/fpdebug/fpdbgclasses.pp	2022-09-25 12:37:16.000000000 +0200
+++ lazarus-2.2.6+dfsg1/components/fpdebug/fpdbgclasses.pp	2023-03-04 14:24:23.000000000 +0100
@@ -219,6 +219,7 @@
          detect the int3 (false positive)
     *)
     procedure CheckAndResetInstructionPointerAfterBreakpoint;
+    function CheckForHardcodeBreakPoint(AnAddr: TDBGPtr): boolean;
     procedure BeforeContinue; virtual;
     procedure ApplyWatchPoints(AWatchPointData: TFpWatchPointData); virtual;
     function DetectHardwareWatchpoint: Pointer; virtual;
@@ -2740,6 +2741,18 @@
   end;
 end;
 
+function TDbgThread.CheckForHardcodeBreakPoint(AnAddr: TDBGPtr): boolean;
+var
+  OVal: Byte;
+begin
+  Result := False;
+  if AnAddr = 0 then
+    exit;
+  if FProcess.ReadData(AnAddr, 1, OVal) then
+    FPausedAtHardcodeBreakPoint := OVal = TDbgProcess.Int3;
+  Result := FPausedAtHardcodeBreakPoint;
+end;
+
 procedure TDbgThread.BeforeContinue;
 begin
   // On Windows this is only called, if this was the signalled thread
diff -Nru lazarus-2.2.4+dfsg1/components/fpdebug/fpdbgwinclasses.pas lazarus-2.2.6+dfsg1/components/fpdebug/fpdbgwinclasses.pas
--- lazarus-2.2.4+dfsg1/components/fpdebug/fpdbgwinclasses.pas	2022-09-25 12:37:16.000000000 +0200
+++ lazarus-2.2.6+dfsg1/components/fpdebug/fpdbgwinclasses.pas	2023-03-04 14:24:23.000000000 +0100
@@ -103,6 +103,8 @@
 
 {$mode objfpc}{$H+}
 {off $DEFINE DebuglnWinDebugEvents}
+{off $DEFINE FpDebugNewWinStepping}
+{$ifdef FpDebugOldWinStepping}  {$UNDEF FpDebugNewWinStepping}  {$endif}
 
 interface
 
@@ -130,10 +132,16 @@
   { TDbgWinThread }
 
   TDbgWinThread = class(TDbgThread)
+  private type
+    TBreakPointState = (bsNone, bsInSingleStep);
   private
     FIsSuspended: Boolean;
+    {$ifdef FpDebugNewWinStepping}
+    FBreakPointState: TBreakPointState;
+    {$else}
     FIsSkippingBreakPoint: Boolean;
     FIsSkippingBreakPointAddress: TDBGPtr;
+    {$endif}
   protected
     FThreadContextChanged: boolean;
     FThreadContextChangeFlags: TFpContextChangeFlags;
@@ -147,7 +155,9 @@
     procedure Suspend;
     procedure SuspendForStepOverBreakPoint;
     procedure Resume;
+    {$ifNdef FpDebugNewWinStepping}
     procedure SetSingleStepOverBreakPoint;
+    {$endif}
     procedure EndSingleStepOverBreakPoint;
     procedure SetSingleStep;
     procedure ApplyWatchPoints(AWatchPointData: TFpWatchPointData); override;
@@ -245,6 +255,11 @@
   FLAG_TRACE_BIT = $100;
 {$endif}
 
+function dbgs(ABrkPointState: TDbgWinThread.TBreakPointState): String;
+begin
+  WriteStr(Result, ABrkPointState);
+end;
+
 function dbgs(AnDbgEvent: DEBUG_EVENT): String; overload;
 begin
   case AnDbgEvent.dwDebugEventCode of
@@ -734,16 +749,28 @@
   begin
     Result := False;
     for t in FThreadMap do
-      if TDbgWinThread(t).FIsSkippingBreakPoint then begin
+      {$ifdef FpDebugNewWinStepping}
+      if TDbgWinThread(t).FBreakPointState = bsInSingleStep
+      {$else}
+      if TDbgWinThread(t).FIsSkippingBreakPoint
+      {$endif}
+      then begin
         Result := True;
         break;
       end;
+debugln(['HasThreadInSkippingBreak ',Result]);
   end;
 
 var
   EventThread, t: TDbgThread;
+  {$ifdef FpDebugNewWinStepping}
+  WinEventThread: TDbgWinThread absolute EventThread;
+  WinAThread: TDbgWinThread absolute AThread;
+  EventThreadNeedsTempBrkRemove: Boolean;
+  {$endif}
 begin
-debugln(FPDBG_WINDOWS, ['TDbgWinProcess.Continue ',SingleStep]);
+debugln(FPDBG_WINDOWS, ['TDbgWinProcess.Continue ',SingleStep, ' # ', ' # ',DbgSTime]);
+
   if assigned(AThread) and not FThreadMap.HasId(AThread.ID) then begin
     AThread := nil;
   end;
@@ -754,6 +781,54 @@
      This may mean suspending the current thread.
   *)
 
+  (* AThread  versus  EventThread
+
+   * AThread:
+     - AThread is ONLY passed for the "SingleStep" parameter.
+
+     - If AThread is at breakpoint, and AThread is *not* the event-thread, then
+       AThread must still hit that breakpoint.
+       Only the event-thread has been checked for being at a breakpoint.
+
+   * EventThread
+     - The event-thread will have been checked for being at a breakpoint.
+       It therefore must always step-over, if it is at a breakpoint
+
+     - Except, if the event-thread is at a hardcoded breakpoint.
+       In that case:
+       ~ The controller has handled, the hardcoded breakpoint.
+       ~ The IP was *not* reset.
+         So the event-thread may already be at the *next* breakpoint.
+  *)
+
+  {$ifdef FpDebugNewWinStepping}
+  EventThreadNeedsTempBrkRemove := False;
+  if AProcess.GetThread(MDebugEvent.dwThreadId, EventThread) then begin
+    EventThreadNeedsTempBrkRemove :=
+      (not EventThread.PausedAtHardcodeBreakPoint) and
+      Process.HasInsertedBreakInstructionAtLocation(EventThread.GetInstructionPointerRegisterValue);
+
+    if EventThreadNeedsTempBrkRemove then
+      WinEventThread.FBreakPointState := bsInSingleStep;
+
+    if ( (EventThread = AThread) and SingleStep ) or
+       ( EventThreadNeedsTempBrkRemove )
+    then
+      WinEventThread.SetSingleStep;
+    assert((WinEventThread.FBreakPointState=bsNone) or WinEventThread.NextIsSingleStep, 'TDbgWinProcess.Continue: (WinEventThread.FBreakPointState=bsNone) or WinEventThread.NextIsSingleStep');
+  end;
+
+  if (AThread <> nil) and (AThread <> EventThread) and SingleStep then
+    WinAThread.SetSingleStep;
+
+  if EventThreadNeedsTempBrkRemove or HasThreadInSkippingBreak then begin
+    debugln(FPDBG_WINDOWS or DBG_VERBOSE, '## Skip BrkPoint: EvntThread Nil=%s ISS=%s TmpRmBreak=%s / Thread Nil=%s ISS=%s ',
+      [ dbgs(EventThread <> nil), dbgs((EventThread<>nil) and EventThread.NextIsSingleStep), dbgs(EventThreadNeedsTempBrkRemove),
+        dbgs(AThread <> nil), dbgs((AThread<>nil) and AThread.NextIsSingleStep)  ]);
+    for t in FThreadMap do
+      TDbgWinThread(t).SuspendForStepOverBreakPoint;
+  end;
+  {$else}
   if AProcess.GetThread(MDebugEvent.dwThreadId, EventThread) then begin
     if EventThread = AThread then
       EventThread.NextIsSingleStep := SingleStep;
@@ -807,8 +882,11 @@
     if SingleStep then
       TDbgWinThread(AThread).SetSingleStep;
   end;
+  {$endif}
+
+
   AProcess.ThreadsBeforeContinue;
-if AThread<>nil then debugln(FPDBG_WINDOWS, ['## ath.iss ',AThread.NextIsSingleStep]);
+  if AThread<>nil then debugln(FPDBG_WINDOWS, ['## ath.iss ',AThread.NextIsSingleStep]);
 
   if MDebugEvent.dwDebugEventCode = EXCEPTION_DEBUG_EVENT then
     case MDebugEvent.Exception.ExceptionRecord.ExceptionCode of
@@ -930,10 +1008,16 @@
   ProcessIdentifier:=MDebugEvent.dwProcessId;
   ThreadIdentifier:=MDebugEvent.dwThreadId;
   {$IFDEF DebuglnWinDebugEvents}
-  DebugLn(FPDBG_WINDOWS, [dbgs(MDebugEvent), ' ', Result]);
+  DebugLn(FPDBG_WINDOWS, [dbgs(MDebugEvent), ' ', Result, ' # ',DbgSTime]);
   for TDbgThread(t) in FThreadMap do begin
   if t.ReadThreadState then
+    {$ifdef FpDebugNewWinStepping}
+    DebugLn(FPDBG_WINDOWS,
+      'Thr.Id:%d %x  SSTep %s EF %s     DR6:%x  DR7:%x  WP:%x  RegAcc: %d,  SStep: %d  Task: %d, ExcBrk: %d Susp: %s, ISS: %s BS:%s',
+      [t.ID, t.GetInstructionPointerRegisterValue, dbgs(t.FCurrentContext^.def.EFlags and FLAG_TRACE_BIT), dbghex(t.FCurrentContext^.def.EFlags), t.FCurrentContext^.def.Dr6, t.FCurrentContext^.def.Dr7, t.FCurrentContext^.def.Dr6 and 15, t.FCurrentContext^.def.Dr6 and (1<< 13), t.FCurrentContext^.def.Dr6 and (1<< 14), t.FCurrentContext^.def.Dr6 and (1<< 15), t.FCurrentContext^.def.Dr6 and (1<< 16), dbgs(t.FIsSuspended), dbgs(t.NextIsSingleStep), dbgs(t.FBreakPointState) ]);
+    {$else}
     DebugLn(FPDBG_WINDOWS, 'Thr.Id:%d %x  SSTep %s EF %s     DR6:%x  DR7:%x  WP:%x  RegAcc: %d,  SStep: %d  Task: %d, ExcBrk: %d', [t.ID, t.GetInstructionPointerRegisterValue, dbgs(t.FCurrentContext^.def.EFlags and FLAG_TRACE_BIT), dbghex(t.FCurrentContext^.def.EFlags), t.FCurrentContext^.def.Dr6, t.FCurrentContext^.def.Dr7, t.FCurrentContext^.def.Dr6 and 15, t.FCurrentContext^.def.Dr6 and (1<< 13), t.FCurrentContext^.def.Dr6 and (1<< 14), t.FCurrentContext^.def.Dr6 and (1<< 15), t.FCurrentContext^.def.Dr6 and (1<< 16)]);
+    {$endif}
   end;
   {$ENDIF}
 
@@ -1230,10 +1314,15 @@
             else begin
               result := deBreakpoint;
               if AThread <> nil then
+               {$ifdef FpDebugNewWinStepping}
+               TDbgWinThread(AThread).ResetInstructionPointerAfterBreakpoint; // This is always an int3 breakpoint
+               {$else}
                 AThread.CheckAndResetInstructionPointerAfterBreakpoint;
+               {$endif}
             end;
           end;
           EXCEPTION_SINGLE_STEP, STATUS_WX86_SINGLE_STEP: begin
+            // includes WatchPoints
             result := deBreakpoint;
           end
         else begin
@@ -1577,6 +1666,25 @@
   debugln(DBG_WARNINGS and (r = DWORD(-1)), 'Failed to suspend Thread %d (handle: %d). Error: %s', [Id, Handle, GetLastErrorText]);
 end;
 
+{$ifdef FpDebugNewWinStepping}
+procedure TDbgWinThread.SuspendForStepOverBreakPoint;
+var
+  t: TDBGPtr;
+begin
+  t := GetInstructionPointerRegisterValue;
+  if (FBreakPointState = bsInSingleStep)
+//     or  (NextIsSingleStep)
+  then begin
+    Process.TempRemoveBreakInstructionCode(t);
+  end
+  else
+  if NextIsSingleStep and (not Process.HasInsertedBreakInstructionAtLocation(t)) then begin
+    // nothing / do the single step
+  end
+  else
+    Suspend;
+end;
+{$else}
 procedure TDbgWinThread.SuspendForStepOverBreakPoint;
 begin
   if FIsSkippingBreakPoint then begin
@@ -1587,6 +1695,7 @@
   else
     Suspend;
 end;
+{$endif}
 
 procedure TDbgWinThread.Resume;
 var
@@ -1599,20 +1708,30 @@
   debugln(DBG_WARNINGS and (r = DWORD(-1)), 'Failed to resume Thread %d (handle: %d). Error: %s', [Id, Handle, GetLastErrorText]);
 end;
 
+{$ifNdef FpDebugNewWinStepping}
 procedure TDbgWinThread.SetSingleStepOverBreakPoint;
 begin
   SetSingleStep;
   FIsSkippingBreakPoint := True;
   FIsSkippingBreakPointAddress := GetInstructionPointerRegisterValue;
 end;
+{$endif}
 
 procedure TDbgWinThread.EndSingleStepOverBreakPoint;
 begin
+  {$ifdef FpDebugNewWinStepping}
+  FBreakPointState := bsNone;
+  {$else}
   FIsSkippingBreakPoint := False;
+  {$endif}
 end;
 
 procedure TDbgWinThread.SetSingleStep;
 begin
+  {$ifdef FpDebugNewWinStepping}
+  NextIsSingleStep := True;
+  {$endif}
+
   if FCurrentContext = nil then
     if not ReadThreadState then
       exit;
@@ -1729,7 +1848,7 @@
 begin
   {$IFDEF FPDEBUG_THREAD_CHECK}AssertFpDebugThreadId('TDbgWinThread.ResetInstructionPointerAfterBreakpoint');{$ENDIF}
   assert(MDebugEvent.dwProcessId <> 0, 'TDbgWinThread.ResetInstructionPointerAfterBreakpoint: MDebugEvent.dwProcessId <> 0');
-  assert(MDebugEvent.Exception.ExceptionRecord.ExceptionCode <> EXCEPTION_SINGLE_STEP, 'dec(IP) EXCEPTION_SINGLE_STEP');
+  //assert((MDebugEvent.Exception.ExceptionRecord.ExceptionCode = EXCEPTION_BREAKPOINT) or (MDebugEvent.Exception.ExceptionRecord.ExceptionCode = STATUS_WX86_BREAKPOINT), 'TDbgWinThread.ResetInstructionPointerAfterBreakpoint: (MDebugEvent.Exception.ExceptionRecord.ExceptionCode = EXCEPTION_BREAKPOINT) or (MDebugEvent.Exception.ExceptionRecord.ExceptionCode = STATUS_WX86_BREAKPOINT)');
 
   Result := False;
 
@@ -1737,13 +1856,22 @@
     exit;
 
   {$ifdef cpui386}
-  dec(FCurrentContext^.def.Eip);
+  {$ifdef FpDebugNewWinStepping}
+  if not CheckForHardcodeBreakPoint(FCurrentContext^.def.Eip - 1) then
+  {$endif}
+    dec(FCurrentContext^.def.Eip);
   {$else}
   if (TDbgWinProcess(Process).FBitness = b32) then begin
-    dec(FCurrentContext^.WOW.Eip);
+    {$ifdef FpDebugNewWinStepping}
+    if not CheckForHardcodeBreakPoint(FCurrentContext^.WOW.Eip - 1) then
+    {$endif}
+      dec(FCurrentContext^.WOW.Eip);
   end
   else begin
-    dec(FCurrentContext^.def.Rip);
+    {$ifdef FpDebugNewWinStepping}
+    if not CheckForHardcodeBreakPoint(FCurrentContext^.def.Rip - 1) then
+    {$endif}
+      dec(FCurrentContext^.def.Rip);
   end;
   {$endif}
 
diff -Nru lazarus-2.2.4+dfsg1/components/freetype/easylazfreetype.pas lazarus-2.2.6+dfsg1/components/freetype/easylazfreetype.pas
--- lazarus-2.2.4+dfsg1/components/freetype/easylazfreetype.pas	2022-09-25 12:37:16.000000000 +0200
+++ lazarus-2.2.6+dfsg1/components/freetype/easylazfreetype.pas	2023-03-04 14:24:24.000000000 +0100
@@ -2014,14 +2014,17 @@
          (nrLanguageID=0)) then
       begin
         value := TT_Get_Name_String(FFace, i);
-        for j := 1 to length(value) div 2 do
-          pword(@value[j*2-1])^ := BEtoN(pword(@value[j*2-1])^);
-        setlength(value2, 3*(length(value) div 2) + 1); //maximum is 3-byte chars and NULL char at the end
-        len := system.UnicodeToUtf8(@value2[1],length(value2),PUnicodeChar( @value[1] ),length(value) div 2);
-        if len > 0 then
+        if value <> '' then
         begin
-          setlength(value2, len-1 );
-          value := value2;
+          for j := 1 to length(value) div 2 do
+            pword(@value[j*2-1])^ := BEtoN(pword(@value[j*2-1])^);
+          setlength(value2, 3*(length(value) div 2) + 1); //maximum is 3-byte chars and NULL char at the end
+          len := system.UnicodeToUtf8(@value2[1],length(value2),PUnicodeChar( @value[1] ),length(value) div 2);
+          if len > 0 then
+          begin
+            setlength(value2, len-1 );
+            value := value2;
+          end;
         end;
         FNamesArray[nrNameID] := value;
       end;
diff -Nru lazarus-2.2.4+dfsg1/components/ideintf/graphpropedits.pas lazarus-2.2.6+dfsg1/components/ideintf/graphpropedits.pas
--- lazarus-2.2.4+dfsg1/components/ideintf/graphpropedits.pas	2022-09-25 12:37:16.000000000 +0200
+++ lazarus-2.2.6+dfsg1/components/ideintf/graphpropedits.pas	2023-03-04 14:24:24.000000000 +0100
@@ -753,11 +753,9 @@
 var
   Images: TCustomImageList;
   R, RImg: TRect;
-  dh: Integer;
+  dh, ImageIndex: Integer;
   wimg, himg: Integer;
 begin
-  if GetDefaultOrdValue <> NoDefaultValue then
-    Dec(Index);
   Images := GetImageList;
   R := ARect;
   dh := R.Bottom - R.Top;
@@ -782,7 +780,9 @@
         ACanvas.Brush.Color := clWhite;
       ACanvas.FillRect(R);
     end;
-    Images.StretchDraw(ACanvas, Index, RImg, true);
+    // the dropdown Index doesn't have to correlate with the ImageIndex (see GetValues()) - use the text instead
+    if TryStrToInt(CurValue, ImageIndex) and (ImageIndex>=0) then
+      Images.StretchDraw(ACanvas, ImageIndex, RImg, true);
     R.Left := RImg.Right + 2; 
   end;
   inherited ListDrawValue(CurValue, Index, ACanvas, R, AState);
diff -Nru lazarus-2.2.4+dfsg1/components/ideintf/imagelisteditor.pp lazarus-2.2.6+dfsg1/components/ideintf/imagelisteditor.pp
--- lazarus-2.2.4+dfsg1/components/ideintf/imagelisteditor.pp	2022-09-25 12:37:16.000000000 +0200
+++ lazarus-2.2.6+dfsg1/components/ideintf/imagelisteditor.pp	2023-03-04 14:24:24.000000000 +0100
@@ -373,6 +373,7 @@
       ImageListBox.Items.EndUpdate;
       ImageList.EndUpdate;
     end;
+    UpdatePreviewImage;
     ImageListBox.SetFocus;
   end;
 end;
@@ -390,6 +391,7 @@
       ImageListBox.Items.EndUpdate;
       ImageList.EndUpdate;
     end;
+    UpdatePreviewImage;
     ImageListBox.SetFocus;
   end;
 end;
@@ -465,19 +467,58 @@
 
 procedure TImageListEditorDlg.BtnReplaceClick(Sender: TObject);
 var
-  AT: TAddType;
+  i: Integer;
+  w: Integer = 0;
+  bigIdx: Integer = 0;
+  pic: TPicture;
 begin
-  if ImageListBox.ItemIndex>=0 then
+  if ImageListBox.ItemIndex >= 0 then
   begin
     OpenDialog.Title := sccsILEdtOpenDialogN;
-    OpenDialog.Options:=OpenDialog.Options-[ofAllowMultiSelect];
+    if Sender = BtnReplaceAll then
+      OpenDialog.Options := OpenDialog.Options + [ofAllowMultiSelect]
+    else
+      OpenDialog.Options := OpenDialog.Options - [ofAllowMultiSelect];
+
     if OpenDialog.Execute then
     begin
-      if Sender=BtnReplaceAll then
-        AT := atReplaceAllResolutions
-      else
-        AT := atReplace;
-      AddImageToList(TrimRight(OpenDialog.FileName), AT);
+      try
+        ImageList.BeginUpdate;
+        ImageListBox.Items.BeginUpdate;
+        // Replace all icons
+        if Sender = BtnReplaceAll then
+        begin
+          // Find the largest icon
+          pic := TPicture.Create;
+          try
+            for i := 0 to OpenDialog.Files.Count - 1 do
+            begin
+              pic.LoadFromFile(TrimRight(OpenDialog.Files[i]));
+              if pic.Width > W then
+              begin
+                w := pic.Width;
+                bigIdx := i;
+              end;
+            end;
+          finally
+            pic.Free;
+          end;
+          // Create all icons from the largest icon. This makes sure that
+          // also non-selected icons will be replaced.
+          AddImageToList(TrimRight(OpenDialog.Files[bigIdx]), atReplaceAllResolutions);
+          // Replace other  icons by their file versions when selected.
+          for i := 0 to OpenDialog.Files.Count - 1 do
+            if i <> bigIdx then
+              AddImageToList(TrimRight(OpenDialog.Files[i]), atReplace);
+        end
+        // Replace only a single icon
+        else
+          AddImageToList(TrimRight(OpenDialog.FileName), atReplace);
+      finally
+        ImageListBox.Items.EndUpdate;
+        ImageList.EndUpdate;
+      end;
+      UpdatePreviewImage;
       ImageListBox.SetFocus;
     end;
   end;
@@ -612,7 +653,9 @@
   ItemHeight, MaxHeight: Integer;
 begin
   ItemHeight := ImageListBox.Canvas.TextHeight('Hg');
-  MaxHeight := Scale96ToFont(32);
+  if ImageList.ResolutionCount > 0 then  // smallest image will not be truncated
+    ItemHeight := Max(ItemHeight, ImageList.ResolutionByIndex[0].Height);
+  MaxHeight := Scale96ToFont(32);   // max height above with next sizes will be truncated
   for R in ImageList.Resolutions do
   begin
     if R.Height <= MaxHeight then
diff -Nru lazarus-2.2.4+dfsg1/components/ideintf/languages/objinspstrconsts.sk.po lazarus-2.2.6+dfsg1/components/ideintf/languages/objinspstrconsts.sk.po
--- lazarus-2.2.4+dfsg1/components/ideintf/languages/objinspstrconsts.sk.po	2022-09-25 12:37:16.000000000 +0200
+++ lazarus-2.2.6+dfsg1/components/ideintf/languages/objinspstrconsts.sk.po	2023-03-04 14:24:24.000000000 +0100
@@ -2,7 +2,7 @@
 msgstr ""
 "Project-Id-Version: objinspstrconsts\n"
 "POT-Creation-Date: \n"
-"PO-Revision-Date: 2019-09-30 11:56+0200\n"
+"PO-Revision-Date: 2022-12-09 12:37+0100\n"
 "Last-Translator: Slavko <slavino@slavino.sk>\n"
 "Language-Team: Slovenský <sk@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -140,7 +140,7 @@
 
 #: objinspstrconsts.dcecolumneditor
 msgid "DBGrid Columns Editor"
-msgstr ""
+msgstr "Editor stĺpcov DBGrid"
 
 #: objinspstrconsts.dcedeleteall
 msgid "Delete All"
@@ -152,7 +152,7 @@
 
 #: objinspstrconsts.dceoktodelete
 msgid "This will delete all columns. Continue?"
-msgstr ""
+msgstr "Týmto sa zmažú všetky stĺpce. Pokračovať?"
 
 #: objinspstrconsts.dcewillreplacecontinue
 msgid "This will replace all captions from dataset. Continue?"
@@ -172,10 +172,8 @@
 msgstr "Zrušiť"
 
 #: objinspstrconsts.fescheckdset
-#, fuzzy
-#| msgid "Check dataset settings"
 msgid "Check dataset settings."
-msgstr "Skontrolovať nastavenia dataset"
+msgstr "Skontrolovať nastavenia Datasetu."
 
 #: objinspstrconsts.fesdata
 msgid "&Data"
@@ -191,6 +189,8 @@
 "Error message:\n"
 "%s"
 msgstr ""
+"Chybová správa:\n"
+"%s"
 
 #: objinspstrconsts.fesfetitle
 msgid "Edit Fields ..."
@@ -239,16 +239,12 @@
 msgstr ""
 
 #: objinspstrconsts.fesnofields
-#, fuzzy
-#| msgid "It was not possible to get the dataset field's list"
 msgid "It was not possible to get the dataset fields list."
-msgstr "Nebolo možné získať zoznam poľa dataset"
+msgstr "Nebolo možné získať zoznam polí Datasetu."
 
 #: objinspstrconsts.fesnofieldsnote
-#, fuzzy
-#| msgid "Field's list is not available, can't check for duplicates"
 msgid "Fields list is not available, can't check for duplicates."
-msgstr "Zoznam polí nie je dostupný, nie je možné skontrolovať duplicity"
+msgstr "Zoznam polí nie je dostupný, nie je možné skontrolovať duplicity."
 
 #: objinspstrconsts.fesokbtn
 msgctxt "objinspstrconsts.fesokbtn"
@@ -318,19 +314,19 @@
 
 #: objinspstrconsts.lrscopyfromdataset
 msgid "Copy data from other dataset"
-msgstr ""
+msgstr "Kopírovať dáta z iného Datasetu"
 
 #: objinspstrconsts.lrscreatedataset
 msgid "Create dataset"
-msgstr ""
+msgstr "Vytvoriť Dataset"
 
 #: objinspstrconsts.lrsdatasetactive
 msgid "Dataset is already active, close it first."
-msgstr ""
+msgstr "Dataset je aktívny, najskôr ho zatvorte."
 
 #: objinspstrconsts.lrsloadfromfile
 msgid "Load data from file"
-msgstr ""
+msgstr "Načítať údaje zo súboru"
 
 #: objinspstrconsts.lrsnodatasetsavailableforcopy
 msgid "No dataset available to copy data from."
@@ -342,7 +338,7 @@
 
 #: objinspstrconsts.lrssavetofile
 msgid "Save data to file"
-msgstr ""
+msgstr "Uložiť údaje do súboru"
 
 #: objinspstrconsts.lrsselectdatafilename
 msgid "Select a file with data to load into dataset"
@@ -427,15 +423,15 @@
 
 #: objinspstrconsts.oisaddcollectionitem
 msgid "&Add Item"
-msgstr ""
+msgstr "&Pridať položku"
 
 #: objinspstrconsts.oisaddfields
 msgid "&Add fields"
-msgstr ""
+msgstr "&Pridať polia"
 
 #: objinspstrconsts.oisaddfieldsfromfielddefs
 msgid "Add fields from FieldDefs"
-msgstr ""
+msgstr "Pridať polia z FieldDefs"
 
 #: objinspstrconsts.oisaddpage
 msgctxt "objinspstrconsts.oisaddpage"
@@ -485,7 +481,7 @@
 
 #: objinspstrconsts.oischangeparent
 msgid "Change Parent"
-msgstr ""
+msgstr "Zmeniť rodiča"
 
 #: objinspstrconsts.oischar
 msgid "Char"
@@ -508,10 +504,9 @@
 msgstr "Vyčistiť obrázok"
 
 #: objinspstrconsts.oiscomponentnameisnotavalididentifier
-#, object-pascal-format, fuzzy, badformat
-#| msgid "Component name %s%s%s is not a valid identifier"
+#, object-pascal-format
 msgid "Component name \"%s\" is not a valid identifier"
-msgstr "Názov komponentu %s%s%s nie je platný identifikátor"
+msgstr "Názov komponentu \"%s\" nie je platný identifikátor"
 
 #: objinspstrconsts.oiscomponentrestrictions
 msgid "Component restrictions: "
@@ -519,7 +514,7 @@
 
 #: objinspstrconsts.oisconfirmdelete
 msgid "Confirm delete"
-msgstr "Podtvrdiť zmazanie"
+msgstr "Potvrdiť zmazanie"
 
 #: objinspstrconsts.oiscopycomponents
 #, fuzzy
@@ -534,15 +529,15 @@
 
 #: objinspstrconsts.oiscreatenewfieldandadditatcurrentposition
 msgid "Create new field and add it at current position"
-msgstr ""
+msgstr "Vytvoriť nové pole a pridať ho na aktuálnu pozíciu"
 
 #: objinspstrconsts.oiscurrentparent
 msgid "Current parent"
-msgstr ""
+msgstr "Aktuálny rodič"
 
 #: objinspstrconsts.oiscurrentparents
 msgid "Current parents"
-msgstr ""
+msgstr "Aktuálny rodičia"
 
 #: objinspstrconsts.oiscutcomponents
 #, fuzzy
@@ -570,11 +565,11 @@
 
 #: objinspstrconsts.oisdeletepagequestion
 msgid "Do you want to delete the page?"
-msgstr ""
+msgstr "Chcete zmazať stránku?"
 
 #: objinspstrconsts.oisdeleteselectedfields
 msgid "Delete selected field(s)"
-msgstr ""
+msgstr "Zmazať vybraté polia"
 
 #: objinspstrconsts.oisdlinesdchars
 #, object-pascal-format
@@ -591,7 +586,7 @@
 
 #: objinspstrconsts.oiserrordeletingaction
 msgid "Error deleting action"
-msgstr ""
+msgstr "Chyba pri mazaní akcie"
 
 #: objinspstrconsts.oiserrorloadingimage
 msgid "Error loading image"
@@ -670,7 +665,7 @@
 #: objinspstrconsts.oisisnotavalidmethodname
 #, object-pascal-format
 msgid "\"%s\" is not a valid method name."
-msgstr ""
+msgstr "\"%s\" nie je platné meno metódy."
 
 #: objinspstrconsts.oisitemsselected
 #, object-pascal-format
@@ -680,7 +675,7 @@
 #: objinspstrconsts.oisjumptodeclarationof
 #, object-pascal-format
 msgid "Jump to declaration of %s"
-msgstr ""
+msgstr "Skočiť na deklaráciu %s"
 
 #: objinspstrconsts.oisload
 msgid "&Load"
@@ -749,7 +744,7 @@
 
 #: objinspstrconsts.oisopenmaskfile
 msgid "Open masks file (*.dem)"
-msgstr "Orvoriť súbor s maskami (*.dem)"
+msgstr "Otvoriť súbor s maskami (*.dem)"
 
 #: objinspstrconsts.oisoptions
 msgid "Options"
@@ -757,19 +752,19 @@
 
 #: objinspstrconsts.oisorderbackone
 msgid "Back One"
-msgstr ""
+msgstr "O jednu späť"
 
 #: objinspstrconsts.oisorderforwardone
 msgid "Forward One"
-msgstr ""
+msgstr "O jednu dopredu"
 
 #: objinspstrconsts.oisordermovetoback
 msgid "Move to Back"
-msgstr ""
+msgstr "Posunúť dozadu"
 
 #: objinspstrconsts.oisordermovetofront
 msgid "Move to Front"
-msgstr ""
+msgstr "Posunúť dopredu"
 
 #: objinspstrconsts.oispages
 msgid "Pages"
@@ -777,7 +772,7 @@
 
 #: objinspstrconsts.oispageseditordialog
 msgid "Pages Editor"
-msgstr ""
+msgstr "Editor stránok"
 
 #: objinspstrconsts.oispastecomponents
 #, fuzzy
@@ -800,7 +795,7 @@
 
 #: objinspstrconsts.oispressakey
 msgid "Press a key ..."
-msgstr ""
+msgstr "Stlačte kláves ..."
 
 #: objinspstrconsts.oispressakeyegctrlp
 msgid "You can press e.g. Ctrl+P ..."
@@ -861,7 +856,7 @@
 
 #: objinspstrconsts.oisselectall
 msgid "&Select all"
-msgstr ""
+msgstr "Vybrať &všetky"
 
 #: objinspstrconsts.oisselectallhint
 msgid "Select All Fields"
@@ -916,7 +911,7 @@
 
 #: objinspstrconsts.oisshowclasses
 msgid "Show classes"
-msgstr ""
+msgstr "Zobraziť triedy"
 
 #: objinspstrconsts.oisshowcomponenttree
 msgid "Show Component Tree"
@@ -924,15 +919,15 @@
 
 #: objinspstrconsts.oisshowhints
 msgid "Show Hints"
-msgstr "Zobariť rady"
+msgstr "Zobraziť rady"
 
 #: objinspstrconsts.oisshowinfobox
 msgid "Show Information Box"
-msgstr ""
+msgstr "Zobraziť informačný rámček"
 
 #: objinspstrconsts.oisshowpropertyfilter
 msgid "Show Property Filter"
-msgstr ""
+msgstr "Zobraziť filter vlastností"
 
 #: objinspstrconsts.oisshowstatusbar
 msgid "Show Status Bar"
@@ -1170,10 +1165,8 @@
 msgstr "Uložiť ako"
 
 #: objinspstrconsts.oistdactfonteditheadline
-#, fuzzy
-#| msgid "Select &Font..."
 msgid "Select &Font ..."
-msgstr "Vybrať &font..."
+msgstr "Vybrať &font ..."
 
 #: objinspstrconsts.oistdactfontedithint
 msgid "Font Select"
@@ -1244,14 +1237,12 @@
 msgstr "Nahradiť"
 
 #: objinspstrconsts.oistestdialog
-#, fuzzy
-#| msgid "Test dialog..."
 msgid "Test dialog ..."
 msgstr "Testovať dialóg..."
 
 #: objinspstrconsts.oistestinput
 msgid "Test Input"
-msgstr "Testvstupu"
+msgstr "Testovať vstup"
 
 #: objinspstrconsts.oistheidentifierisnotamethodpresscanceltoundopressign
 #, object-pascal-format, fuzzy, badformat
@@ -1288,11 +1279,11 @@
 
 #: objinspstrconsts.oisunselectall
 msgid "&Unselect all"
-msgstr ""
+msgstr "&Odznačiť všetko"
 
 #: objinspstrconsts.oisunselectallhint
 msgid "Unselect All"
-msgstr ""
+msgstr "Odznačiť všetko"
 
 #: objinspstrconsts.oisvalue
 msgid "Value:"
@@ -1391,11 +1382,11 @@
 
 #: objinspstrconsts.sccsiledtaddmoreresolutions
 msgid "Add more resolutions ..."
-msgstr ""
+msgstr "Pridať ďalšie rozlíšenia ..."
 
 #: objinspstrconsts.sccsiledtaddnewresolution
 msgid "New resolution ..."
-msgstr ""
+msgstr "Nové rozlíšenie ..."
 
 #: objinspstrconsts.sccsiledtaddsliced
 msgid "Add sliced ..."
@@ -1410,15 +1401,13 @@
 msgstr "Doladenie"
 
 #: objinspstrconsts.sccsiledtapply
-#, fuzzy
-#| msgid "Apply"
 msgctxt "objinspstrconsts.sccsiledtapply"
 msgid "&Apply"
-msgstr "Použiť"
+msgstr "&Použiť"
 
 #: objinspstrconsts.sccsiledtcannotdeleteresolution
 msgid "Cannot delete default resolution."
-msgstr ""
+msgstr "Nie je možné zmazať predvolené rozlíšenie."
 
 #: objinspstrconsts.sccsiledtcannotslice
 msgid "Source image size must be an integer multiple of the ImageList's Width and Height."
@@ -1433,11 +1422,9 @@
 msgstr "Vystredniť"
 
 #: objinspstrconsts.sccsiledtclear
-#, fuzzy
-#| msgid "Clear"
 msgctxt "objinspstrconsts.sccsiledtclear"
 msgid "&Clear"
-msgstr "Zmazať"
+msgstr "Vyčistiť"
 
 #: objinspstrconsts.sccsiledtcrop
 msgid "Crop"
@@ -1450,11 +1437,11 @@
 
 #: objinspstrconsts.sccsiledtdeleteresolution
 msgid "Delete resolution ..."
-msgstr ""
+msgstr "Zmazať rozlíšenie ..."
 
 #: objinspstrconsts.sccsiledtdeleteresolutionconfirmation
 msgid "Select the resolution to delete."
-msgstr ""
+msgstr "Vyberte rozlíšenie, ktoré chcete zmazať."
 
 #: objinspstrconsts.sccsiledtgrplcaption
 msgid "Images"
@@ -1500,7 +1487,7 @@
 
 #: objinspstrconsts.sccsiledtreplaceallresolutions
 msgid "Replace all resolutions ..."
-msgstr ""
+msgstr "Nahradiť všetky rozlíšenia ..."
 
 #: objinspstrconsts.sccsiledtsave
 msgctxt "objinspstrconsts.sccsiledtsave"
@@ -1526,7 +1513,7 @@
 #: objinspstrconsts.sccslvedt
 msgctxt "objinspstrconsts.sccslvedt"
 msgid "Edit Items ..."
-msgstr "Editovať položky ..."
+msgstr "Upraviť položky ..."
 
 #: objinspstrconsts.sccslvedtapply
 msgctxt "objinspstrconsts.sccslvedtapply"
@@ -1590,10 +1577,8 @@
 msgstr "Editor panelov ..."
 
 #: objinspstrconsts.sccssgedt
-#, fuzzy
-#| msgid "Edit StringGrid..."
 msgid "Edit StringGrid ..."
-msgstr "Editovať StringGrid..."
+msgstr "Upraviť StringGrid ..."
 
 #: objinspstrconsts.sccssgedtapply
 msgctxt "objinspstrconsts.sccssgedtapply"
@@ -1638,7 +1623,7 @@
 #: objinspstrconsts.sccstredt
 msgctxt "objinspstrconsts.sccstredt"
 msgid "Edit Items ..."
-msgstr "Editovať položky ..."
+msgstr "Upraviť položky ..."
 
 #: objinspstrconsts.sccstredtapply
 msgctxt "objinspstrconsts.sccstredtapply"
@@ -1738,7 +1723,7 @@
 
 #: objinspstrconsts.tbcenewbutton
 msgid "New Button"
-msgstr ""
+msgstr "Nové tlačítko"
 
 #: objinspstrconsts.tbcenewcheckbutton
 msgid "New CheckButton"
@@ -1750,7 +1735,7 @@
 
 #: objinspstrconsts.tbcenewseparator
 msgid "New Separator"
-msgstr ""
+msgstr "Nový oddeľovač"
 
 #: objinspstrconsts.tccesaddtab
 msgid "Add tab"
diff -Nru lazarus-2.2.4+dfsg1/components/lazcontrols/spinex.pp lazarus-2.2.6+dfsg1/components/lazcontrols/spinex.pp
--- lazarus-2.2.4+dfsg1/components/lazcontrols/spinex.pp	2022-09-25 12:37:16.000000000 +0200
+++ lazarus-2.2.6+dfsg1/components/lazcontrols/spinex.pp	2023-03-04 14:24:24.000000000 +0100
@@ -70,7 +70,7 @@
 {$mode objfpc}{$H+}
 
 // Activates a workaround for issue #39490
-{$if FPC_FullVersion=30202}{$ifdef Win64}
+{$if (FPC_FullVersion>=30202) and (FPC_FullVersion < 30300)}{$ifdef Win64}
   {$define fpc_math_samevalue_bug}
 {$endif}{$endif}
 
diff -Nru lazarus-2.2.4+dfsg1/components/lazdebuggers/lazdebuggerfp/test/testapps/BreakPointThreadPrg.pas lazarus-2.2.6+dfsg1/components/lazdebuggers/lazdebuggerfp/test/testapps/BreakPointThreadPrg.pas
--- lazarus-2.2.4+dfsg1/components/lazdebuggers/lazdebuggerfp/test/testapps/BreakPointThreadPrg.pas	2022-09-25 12:37:16.000000000 +0200
+++ lazarus-2.2.6+dfsg1/components/lazdebuggers/lazdebuggerfp/test/testapps/BreakPointThreadPrg.pas	2023-03-04 14:24:24.000000000 +0100
@@ -17,6 +17,7 @@
 
 var
   x, BreakDummy: Integer;
+  ThrCount: Integer = 0;
 
 {$asmMode intel}
 
@@ -27,23 +28,24 @@
 
 procedure TTestThread.Execute;
 begin
+  InterlockedIncrement(ThrCount);
   asm
     nop  // TEST_BREAKPOINT=BrkThreadBegin
     xor eax, eax
     xor ebx, ebx
-    add eax, 10
+    add eax, 1023
 testasmlbl1:
-    sub eax, 10
-    add eax, 1 // TEST_BREAKPOINT=BrkThread1
-    add eax, 1 // TEST_BREAKPOINT=BrkThread2
-    add eax, 1 // TEST_BREAKPOINT=BrkThread3
-    add eax, 1 // TEST_BREAKPOINT=BrkThread4
-    add eax, 1 // TEST_BREAKPOINT=BrkThread5
-    add eax, 1 // TEST_BREAKPOINT=BrkThread6
-    add eax, 1 // TEST_BREAKPOINT=BrkThread7
-    add eax, 1 // TEST_BREAKPOINT=BrkThread8
-    add eax, 1 // TEST_BREAKPOINT=BrkThread9
-    add eax, 1 // TEST_BREAKPOINT=BrkThread10
+    sub eax, 1023
+    add eax,   1 // TEST_BREAKPOINT=BrkThread1
+    add eax,   2 // TEST_BREAKPOINT=BrkThread2
+    add eax,   4 // TEST_BREAKPOINT=BrkThread3
+    add eax,   8 // TEST_BREAKPOINT=BrkThread4
+    add eax,  16 // TEST_BREAKPOINT=BrkThread5
+    add eax,  32 // TEST_BREAKPOINT=BrkThread6
+    add eax,  64 // TEST_BREAKPOINT=BrkThread7
+    add eax, 128 // TEST_BREAKPOINT=BrkThread8
+    add eax, 256 // TEST_BREAKPOINT=BrkThread9
+    add eax, 512 // TEST_BREAKPOINT=BrkThread10
 
     add ebx, 1 // TEST_BREAKPOINT=BrkThreadIncLoop
     jmp testasmlbl1 // TEST_BREAKPOINT=BrkThread11
@@ -67,6 +69,7 @@
   TTestThread.Create(False);
   TTestThread.Create(False);
 
+  while ThrCount < 10 do sleep(20);
   sleep(500);
   BreakDummy := 1;
 
diff -Nru lazarus-2.2.4+dfsg1/components/lazdebuggers/lazdebuggerfp/test/testbreakpoint.pas lazarus-2.2.6+dfsg1/components/lazdebuggers/lazdebuggerfp/test/testbreakpoint.pas
--- lazarus-2.2.4+dfsg1/components/lazdebuggers/lazdebuggerfp/test/testbreakpoint.pas	2022-09-25 12:37:16.000000000 +0200
+++ lazarus-2.2.6+dfsg1/components/lazdebuggers/lazdebuggerfp/test/testbreakpoint.pas	2023-03-04 14:24:24.000000000 +0100
@@ -12,19 +12,20 @@
 type
 
   // Info used by tests based on TestBreakPointThreadPrg
+  TBreakThreadPrgInfoEntry = record
+    ID: Integer;
+    Address: TDBGPtr;
+    Line, PreviousLine: Integer;
+    Val, LastVal: int64;           // AX register
+    Loop, PreviousLoop: int64;         // BX register
+    IsCurrent: Boolean;
+    LastBrkLine, LastBrkLoop: Integer;
+    PreviousLastBrkLine, PreviousLastBrkLoop: Integer;
+  end;
   TBreakThreadPrgInfo = record
-    ThrLoopFirst, ThrLoopLast, ThrLoopLine0, ThrLoopInc: Integer;
+    ThrLoopFirst, ThrLoopLast, ThrLoopLine0, ThrLoopInc: Integer; // Linenumbers of the breakpoints
     // -1 => Main thread
-    Threads: array[-1..10] of record
-      ID: Integer;
-      Address: TDBGPtr;
-      Line, LastLine: Integer;
-      Val, LastVal: int64;
-      Loop, LastLoop: int64;
-      IsCurrent: Boolean;
-      LastBrkLine, LastBrkLoop: Integer;
-      PrevLastBrkLine, PrevLastBrkLoop: Integer;
-    end;
+    Threads: array[-1..10] of TBreakThreadPrgInfoEntry;
   end;
 
   { TTestBreakPoint }
@@ -35,7 +36,19 @@
     FThrPrgInfo: TBreakThreadPrgInfo;
     procedure ThrPrgInitializeThreads(ATestName: String);
     procedure ThrPrgUpdateThreads(ATestName: String);
+
+    (* ThrPrgCheckNoSkip
+       Check that AX is correct for the line.
+       Ensure the instruction restored from "int3" was executed
+    *)
     procedure ThrPrgCheckNoSkip(ATestName: String='');
+    (* ThrPrgInfoHasGoneThroughLine
+       Has gone over the line WITHOUT stopping at the breakpoint
+     - If the thread was NOT on the line, it has gone over it at least once.
+     - if the thread was AT the line,
+       ~ and had NOT reorted yet for the line => it as gone away from the line anyway
+       ~ and had reported for the line => it has gone OVER the line in the NEXT loop already
+    *)
     function  ThrPrgInfoHasGoneThroughLine(AIndex, ALine: Integer): boolean;
   protected
     Src: TCommonSource;
@@ -330,7 +343,10 @@
     end;
 
     FThrPrgInfo.Threads[j].ID := t.ThreadId;
+    FThrPrgInfo.Threads[j].Line := -1;
+    FThrPrgInfo.Threads[j].Loop := -5;
     FThrPrgInfo.Threads[j].LastBrkLine := -1;
+    FThrPrgInfo.Threads[j].PreviousLastBrkLine := -1;
     debugln(['++ ADDED tid ',t.ThreadId]);
     inc(j);
     if j >= 11 then
@@ -372,9 +388,12 @@
       if (lowercase(r.Entries[j].Name) = 'ebx') or (lowercase(r.Entries[j].Name) = 'rbx')
       then
         bx := r.Entries[j];
-    FThrPrgInfo.Threads[i].LastLine := FThrPrgInfo.Threads[i].Line;
+
+    FThrPrgInfo.Threads[i].IsCurrent := FThrPrgInfo.Threads[i].ID = dbg.Threads.CurrentThreads.CurrentThreadId;
+
+    FThrPrgInfo.Threads[i].PreviousLine := FThrPrgInfo.Threads[i].Line;
     FThrPrgInfo.Threads[i].LastVal  := FThrPrgInfo.Threads[i].Val;
-    FThrPrgInfo.Threads[i].LastLoop  := FThrPrgInfo.Threads[i].Loop;
+    FThrPrgInfo.Threads[i].PreviousLoop  := FThrPrgInfo.Threads[i].Loop;
     FThrPrgInfo.Threads[i].Address := t.TopFrame.Address;
     FThrPrgInfo.Threads[i].Line    := t.TopFrame.Line;
     if ax <> nil then
@@ -382,25 +401,23 @@
     if bx <> nil then
       FThrPrgInfo.Threads[i].Loop   := StrToInt64Def(bx.Value,-1) and $7FFFFFFF;
 
-    FThrPrgInfo.Threads[i].IsCurrent := False;
     if FThrPrgInfo.Threads[i].ID = dbg.Threads.CurrentThreads.CurrentThreadId then begin
-      FThrPrgInfo.Threads[i].IsCurrent := True;
-
-      FThrPrgInfo.Threads[i].PrevLastBrkLine := FThrPrgInfo.Threads[i].LastBrkLine;
-      FThrPrgInfo.Threads[i].PrevLastBrkLoop := FThrPrgInfo.Threads[i].LastBrkLoop;
+      FThrPrgInfo.Threads[i].PreviousLastBrkLine := FThrPrgInfo.Threads[i].LastBrkLine;
+      FThrPrgInfo.Threads[i].PreviousLastBrkLoop := FThrPrgInfo.Threads[i].LastBrkLoop;
 
       FThrPrgInfo.Threads[i].LastBrkLine := FThrPrgInfo.Threads[i].Line;
       FThrPrgInfo.Threads[i].LastBrkLoop := FThrPrgInfo.Threads[i].Loop;
     end;
 
-    debugln('Thread %d %s (%x):   Line: %d (%d) (was %d)   Val: %d (was %d)  LOOP: %d (was %d)  Brk: %d %d (%d %d)', [
+    debugln('Thread %d: ID=%d Cur=%s (%x):   Line: %d (%d) (was %d)   Val: %d (was %d)  LOOP: %d (was %d)  Brk: %d %d (%d %d)', [
+      i,
       FThrPrgInfo.Threads[i].ID, dbgs(FThrPrgInfo.Threads[i].IsCurrent), FThrPrgInfo.Threads[i].Address,
       FThrPrgInfo.Threads[i].Line-FThrPrgInfo.ThrLoopLine0, FThrPrgInfo.Threads[i].Line,
-       FThrPrgInfo.Threads[i].LastLine-FThrPrgInfo.ThrLoopLine0,
+        FThrPrgInfo.Threads[i].PreviousLine-FThrPrgInfo.ThrLoopLine0,
       FThrPrgInfo.Threads[i].Val, FThrPrgInfo.Threads[i].LastVal,
-      FThrPrgInfo.Threads[i].Loop, FThrPrgInfo.Threads[i].LastLoop,
+      FThrPrgInfo.Threads[i].Loop, FThrPrgInfo.Threads[i].PreviousLoop,
       FThrPrgInfo.Threads[i].LastBrkLine, FThrPrgInfo.Threads[i].LastBrkLoop,
-      FThrPrgInfo.Threads[i].PrevLastBrkLine, FThrPrgInfo.Threads[i].PrevLastBrkLoop
+      FThrPrgInfo.Threads[i].PreviousLastBrkLine, FThrPrgInfo.Threads[i].PreviousLastBrkLoop
       ]);
   end;
 end;
@@ -409,43 +426,68 @@
 // Make sure no thread skipped any add. All EAX values must be correct
 var
   i, l: Integer;
+const
+  ExpVal: array[0..10] of integer = (
+      0,   1,   3,   7,  15,
+     31,  63, 127, 255, 511,
+   1023
+  );
 begin
   for i := 0 to 9 do begin
+    if FThrPrgInfo.Threads[i].Line = -1 then
+      continue;
     l := FThrPrgInfo.Threads[i].Line - FThrPrgInfo.ThrLoopLine0;
     TestTrue(ATestName+' line in range tid: '+inttostr(FThrPrgInfo.Threads[i].ID), (l>=-1) and (l<FThrPrgInfo.ThrLoopLast-FThrPrgInfo.ThrLoopLine0));
     if l > 9 then l := 10;
     if l < 0 then l := 10;
 
-    TestEquals(ATestName+' Reg val for '+inttostr(FThrPrgInfo.Threads[i].ID)+ ' / '+inttostr(FThrPrgInfo.Threads[i].Line - FThrPrgInfo.ThrLoopLine0), l, FThrPrgInfo.Threads[i].Val);
+    TestEquals(ATestName+' Reg val for '+inttostr(FThrPrgInfo.Threads[i].ID)+ ' / '+inttostr(FThrPrgInfo.Threads[i].Line - FThrPrgInfo.ThrLoopLine0),
+      ExpVal[l],
+      FThrPrgInfo.Threads[i].Val
+    );
   end;
 end;
 
 function TTestBreakPoint.ThrPrgInfoHasGoneThroughLine(AIndex, ALine: Integer): boolean;
 var
   LoopAdjust, LastLoopAdjust: Integer;
+  LoopDiff: Integer;
+  Entry: TBreakThreadPrgInfoEntry;
 begin
   Result := True;
   LoopAdjust := 0;
-  if FThrPrgInfo.Threads[AIndex].Line > FThrPrgInfo.ThrLoopInc then LoopAdjust := 1;
+  Entry := FThrPrgInfo.Threads[AIndex];
+
+  if Entry.Line > FThrPrgInfo.ThrLoopInc then LoopAdjust := 1;
   LastLoopAdjust := 0;
-  if FThrPrgInfo.Threads[AIndex].LastLine > FThrPrgInfo.ThrLoopInc then LastLoopAdjust := 1;
+  if Entry.PreviousLine > FThrPrgInfo.ThrLoopInc then LastLoopAdjust := 1;
+  LoopDiff :=
+      (Entry.Loop-LoopAdjust)
+    - (Entry.PreviousLoop-LastLoopAdjust);
+
   // Was in front of line,   and now after (or even in next loop)?
-  if (FThrPrgInfo.Threads[AIndex].LastLine < ALine) and
-     (  (FThrPrgInfo.Threads[AIndex].Line > ALine) or (FThrPrgInfo.Threads[AIndex].Loop-LoopAdjust <> FThrPrgInfo.Threads[AIndex].LastLoop-LastLoopAdjust) )
+  if (Entry.PreviousLine < ALine) and
+     (  (Entry.Line > ALine) or
+        (LoopDiff > 0)
+     )
   then
     exit;
-  // Was exactly at line,    and now after AND in next loop-LoopAdjust?
-  if (FThrPrgInfo.Threads[AIndex].LastLine = ALine) and
-     (FThrPrgInfo.Threads[AIndex].Line > ALine) and (FThrPrgInfo.Threads[AIndex].Loop-LoopAdjust <> FThrPrgInfo.Threads[AIndex].LastLoop-LastLoopAdjust)
+  // Was after line, and now after AND in next loop-LoopAdjust?
+  if (Entry.PreviousLine > ALine) and
+     (Entry.Line > ALine) and
+     (LoopDiff > 0)
   then
     exit;
-  // Was after front of line, and now after AND in next loop-LoopAdjust?
-  if (FThrPrgInfo.Threads[AIndex].LastLine < ALine) and
-     (FThrPrgInfo.Threads[AIndex].Line > ALine) and (FThrPrgInfo.Threads[AIndex].Loop-LoopAdjust <> FThrPrgInfo.Threads[AIndex].LastLoop-LastLoopAdjust)
+
+  // Was exactly at line,    and now after AND in next loop-LoopAdjust?
+  if (Entry.PreviousLine = ALine) and
+     (Entry.Line > ALine) and
+     (LoopDiff > 1)
   then
     exit;
+
   // More than one loop-LoopAdjust ...
-  if (FThrPrgInfo.Threads[AIndex].Loop-LoopAdjust > FThrPrgInfo.Threads[AIndex].LastLoop-LastLoopAdjust + 1)
+  if (LoopDiff > 1)
   then
     exit;
   Result := False;
@@ -462,16 +504,17 @@
       if FThrPrgInfo.Threads[i].Line = ALine then
         inc(AtLine)
       else
-      if FThrPrgInfo.Threads[i].LastLine = ALine then // Current line moved on, stepped over break
+      if FThrPrgInfo.Threads[i].PreviousLine = ALine then // Current line moved on, stepped over break
         inc(AfterLine);
-    if AtLine > 1    then Inc(AManyAt);
-    if AfterLine > 1 then Inc(AManyAfter);
+    if AtLine    > 3 then Inc(AManyAt);
+    if AfterLine > 2 then Inc(AManyAfter);
   end;
 var
   ExeName: String;
   i, j: Integer;
   MainBrk, Brk1, Brk2, Brk3, Brk4, Brk5: TDBGBreakPoint;
   ManyAtBrk1, ManyAfterBrk1: Integer;
+  Entry: TBreakThreadPrgInfoEntry;
 begin
   if SkipTest then exit;
   if not TestControlCanTest(ControlTestThreadNoSkip) then exit;
@@ -501,26 +544,37 @@
 
     Brk1 := Debugger.SetBreakPoint(Src, 'BrkThread1');
 
+    (* ManyAtBrk1 / ManyAfterBrk1
+       Cumulative count accross all "j" loop iterations.
+       ManyAtBrk1:    Count "j"-iterations with at least 3 threads have been at "Brk1"
+       ManyAfterBrk1: Count "j"-iterations with at least 3 threads just stepped/run away from "Brk1"
+    *)
     ManyAtBrk1 := 0;
     ManyAfterBrk1 := 0;
-    for j := 0 to 200 do begin
+
+    (* Each iteration the test checks that all "add eax, n" have been executed.
+    *)
+    for j := 0 to 300 do begin
       AssertDebuggerNotInErrorState;
       Debugger.RunToNextPause(dcRun);
       AssertDebuggerState(dsPause);
 
       ThrPrgUpdateThreads('loop fixed brk '+IntToStr(j));
-      ThrPrgCheckNoSkip('loop, fixed brk '+IntToStr(j));
+      ThrPrgCheckNoSkip('loop, fixed brk '+IntToStr(j));  // Compare AX with line
 
       for i := 0 to 9 do begin
+        Entry := FThrPrgInfo.Threads[i];
+        if Entry.PreviousLine < 0 then
+          continue;
+
         TestTrue('THread not gone over break 1 at line '+IntToStr(Brk1.Line)+' '+IntToStr(i),
                  not ThrPrgInfoHasGoneThroughLine(i, Brk1.Line)
           );
-
-        HasManyAtLine(Brk1.Line, ManyAtBrk1, ManyAfterBrk1);
       end;
 
-      if (i > 50) and (ManyAtBrk1 > 5) and (ManyAfterBrk1 > 5) then begin
-        DebugLn('~~~~~~~~~~~~~ End loop early i=%d  at=%d after=%d', [i, ManyAtBrk1, ManyAfterBrk1]);
+      HasManyAtLine(Brk1.Line, ManyAtBrk1, ManyAfterBrk1);
+      if (j > 50) and (ManyAtBrk1 > 20) and (ManyAfterBrk1 > 15) then begin
+        DebugLn('~~~~~~~~~~~~~ End loop early j=%d  at=%d after=%d', [j, ManyAtBrk1, ManyAfterBrk1]);
         break;
       end;
     end;
@@ -530,6 +584,11 @@
     // Add more breaks
     Brk3 := Debugger.SetBreakPoint(Src, 'BrkThread5');
     Brk5 := Debugger.SetBreakPoint(Src, 'BrkThread9');
+    // clear values from last loop
+    for i := 0 to 9 do begin
+      FThrPrgInfo.Threads[i].LastBrkLine := -1;
+      FThrPrgInfo.Threads[i].PreviousLastBrkLine := -1;
+    end;
 
     for j := 0 to 100 do begin
       AssertDebuggerNotInErrorState;
@@ -540,21 +599,47 @@
       ThrPrgCheckNoSkip('loop, fixed brk '+IntToStr(j));
 
       for i := 0 to 9 do begin
-        TestTrue('THread not gone over break 1 at line '+IntToStr(Brk1.Line)+' '+IntToStr(i),
+        Entry := FThrPrgInfo.Threads[i];
+        if Entry.PreviousLine < 0 then
+          continue;
+
+        TestTrue('THread not gone over break(n/3) 1 at line '+IntToStr(Brk1.Line)+' '+IntToStr(i),
                  not ThrPrgInfoHasGoneThroughLine(i, Brk1.Line)
           );
-        TestTrue('THread not gone over break 3 at line '+IntToStr(Brk3.Line)+' '+IntToStr(i),
+        TestTrue('THread not gone over break(n/3) 3 at line '+IntToStr(Brk3.Line)+' '+IntToStr(i),
                  not ThrPrgInfoHasGoneThroughLine(i, Brk3.Line)
           );
-        TestTrue('THread not gone over break 5 at line '+IntToStr(Brk5.Line)+' '+IntToStr(i),
+        TestTrue('THread not gone over break(n/3) 5 at line '+IntToStr(Brk5.Line)+' '+IntToStr(i),
                  not ThrPrgInfoHasGoneThroughLine(i, Brk5.Line)
           );
+
+        if Entry.PreviousLastBrkLine > 0 then begin
+          if Entry.LastBrkLine = Brk1.Line then begin
+            TestEquals('Previous break(n/3) before Brk1', Brk5.Line, Entry.PreviousLastBrkLine);
+            TestTrue  ('Previous break-loop(n/3) before Brk1', Entry.LastBrkLoop = Entry.PreviousLastBrkLoop + 1);
+          end
+          else
+          if Entry.LastBrkLine = Brk3.Line then begin
+            TestEquals('Previous break(n/3) before Brk3', Brk1.Line, Entry.PreviousLastBrkLine);
+            TestTrue  ('Previous break-loop(n/3) before Brk3', Entry.LastBrkLoop = Entry.PreviousLastBrkLoop);
+          end
+          else
+          if Entry.LastBrkLine = Brk5.Line then begin
+            TestEquals('Previous break(n/3) before Brk5', Brk3.Line, Entry.PreviousLastBrkLine);
+            TestTrue  ('Previous break-loop(n/3) before Brk5', Entry.LastBrkLoop = Entry.PreviousLastBrkLoop);
+          end;
+        end;
       end;
     end;
 
     // Add more breaks
     Brk2 := Debugger.SetBreakPoint(Src, 'BrkThread3');
     Brk4 := Debugger.SetBreakPoint(Src, 'BrkThread7');
+    // clear values from last loop
+    for i := 0 to 9 do begin
+      FThrPrgInfo.Threads[i].LastBrkLine := -1;
+      FThrPrgInfo.Threads[i].PreviousLastBrkLine := -1;
+    end;
 
     for j := 0 to 100 do begin
       AssertDebuggerNotInErrorState;
@@ -565,21 +650,26 @@
       ThrPrgCheckNoSkip('loop, fixed brk '+IntToStr(j));
 
       for i := 0 to 9 do begin
-        TestTrue('THread not gone over break 1 at line '+IntToStr(Brk1.Line)+' '+IntToStr(i),
+        Entry := FThrPrgInfo.Threads[i];
+        if Entry.PreviousLine < 0 then
+          continue;
+
+        TestTrue('THread not gone over break(n/5) 1 at line '+IntToStr(Brk1.Line)+' '+IntToStr(i),
                  not ThrPrgInfoHasGoneThroughLine(i, Brk1.Line)
           );
-        TestTrue('THread not gone over break 2 at line '+IntToStr(Brk2.Line)+' '+IntToStr(i),
+        TestTrue('THread not gone over break(n/5) 2 at line '+IntToStr(Brk2.Line)+' '+IntToStr(i),
                  not ThrPrgInfoHasGoneThroughLine(i, Brk2.Line)
           );
-        TestTrue('THread not gone over break 3 at line '+IntToStr(Brk3.Line)+' '+IntToStr(i),
+        TestTrue('THread not gone over break(n/5) 3 at line '+IntToStr(Brk3.Line)+' '+IntToStr(i),
                  not ThrPrgInfoHasGoneThroughLine(i, Brk3.Line)
           );
-        TestTrue('THread not gone over break 4 at line '+IntToStr(Brk4.Line)+' '+IntToStr(i),
+        TestTrue('THread not gone over break(n/5) 4 at line '+IntToStr(Brk4.Line)+' '+IntToStr(i),
                  not ThrPrgInfoHasGoneThroughLine(i, Brk4.Line)
           );
-        TestTrue('THread not gone over break 5 at line '+IntToStr(Brk5.Line)+' '+IntToStr(i),
+        TestTrue('THread not gone over break(n/5) 5 at line '+IntToStr(Brk5.Line)+' '+IntToStr(i),
                  not ThrPrgInfoHasGoneThroughLine(i, Brk5.Line)
           );
+
       end;
     end;
 
@@ -598,6 +688,7 @@
   ExeName: String;
   i, j: Integer;
   MainBrk, Brk1: TDBGBreakPoint;
+  Entry: TBreakThreadPrgInfoEntry;
 begin
   if SkipTest then exit;
   if not TestControlCanTest(ControlTestThreadMove1) then exit;
@@ -633,6 +724,9 @@
       ThrPrgCheckNoSkip('loop, one brk '+IntToStr(j));
 
       for i := 0 to 9 do begin
+        Entry := FThrPrgInfo.Threads[i];
+        if Entry.PreviousLine < 0 then
+          continue;
         TestTrue('THread not gone over break at line '+IntToStr(Brk1.Line)+' '+IntToStr(i),
                  not ThrPrgInfoHasGoneThroughLine(i, Brk1.Line)
           );
@@ -657,6 +751,7 @@
   ExeName: String;
   i, j: Integer;
   MainBrk, Brk1, Brk2, Brk3, Brk4, Brk5: TDBGBreakPoint;
+  Entry: TBreakThreadPrgInfoEntry;
 begin
   if SkipTest then exit;
   if not TestControlCanTest(ControlTestThreadMove2) then exit;
@@ -702,6 +797,9 @@
       ThrPrgCheckNoSkip('loop, changing brk '+IntToStr(j));
 
       for i := 0 to 9 do begin
+        Entry := FThrPrgInfo.Threads[i];
+        if Entry.PreviousLine < 0 then
+          continue;
         TestTrue('THread not gone over break '+IntToStr(i), not ThrPrgInfoHasGoneThroughLine(i, Brk1.Line) );
         TestTrue('THread not gone over break '+IntToStr(i), not ThrPrgInfoHasGoneThroughLine(i, Brk2.Line) );
         TestTrue('THread not gone over break '+IntToStr(i), not ThrPrgInfoHasGoneThroughLine(i, Brk3.Line) );
@@ -727,7 +825,7 @@
   begin
     Result := True; // defaults to ok, if Line is not in this range.
     if FThrPrgInfo.Threads[AnIdx].LastBrkLine = -1 then exit;
-    if FThrPrgInfo.Threads[AnIdx].PrevLastBrkLine = -1 then exit;
+    if FThrPrgInfo.Threads[AnIdx].PreviousLastBrkLine = -1 then exit;
 
     if FThrPrgInfo.Threads[AnIdx].Line = BrkLine then begin
       if FThrPrgInfo.Threads[AnIdx].IsCurrent then
@@ -738,8 +836,8 @@
     if FThrPrgInfo.Threads[AnIdx].Line = NextBrkLine then begin
       if (FThrPrgInfo.Threads[AnIdx].LastBrkLine = NextBrkLine) then
         Result := (FThrPrgInfo.Threads[AnIdx].LastBrkLoop = FThrPrgInfo.Threads[AnIdx].Loop) and
-                  (FThrPrgInfo.Threads[AnIdx].PrevLastBrkLine = BrkLine)
-                  // PrevLastBrkLoop can be equal or 1 less
+                  (FThrPrgInfo.Threads[AnIdx].PreviousLastBrkLine = BrkLine)
+                  // PreviousLastBrkLoop can be equal or 1 less
       else
         Result := (FThrPrgInfo.Threads[AnIdx].LastBrkLine = BrkLine)
       ;
@@ -768,6 +866,7 @@
   ExeName: String;
   i, j: Integer;
   MainBrk, Brk1, Brk2, Brk3, Brk4, Brk5: TDBGBreakPoint;
+  Entry: TBreakThreadPrgInfoEntry;
 begin
   if SkipTest then exit;
   if not TestControlCanTest(ControlTestThreadHit) then exit;
@@ -802,6 +901,9 @@
       ThrPrgCheckNoSkip('loop, changing brk '+IntToStr(j));
 
       for i := 0 to 9 do begin
+        Entry := FThrPrgInfo.Threads[i];
+        if Entry.PreviousLine < 0 then
+          continue;
         TestTrue('THread not gone over break '+IntToStr(i), not ThrPrgInfoHasGoneThroughLine(i, Brk1.Line) );
         TestTrue('THread not gone over break '+IntToStr(i), not ThrPrgInfoHasGoneThroughLine(i, Brk2.Line) );
         TestTrue('THread not gone over break '+IntToStr(i), not ThrPrgInfoHasGoneThroughLine(i, Brk3.Line) );
diff -Nru lazarus-2.2.4+dfsg1/components/lazutils/lazutf8.pas lazarus-2.2.6+dfsg1/components/lazutils/lazutf8.pas
--- lazarus-2.2.4+dfsg1/components/lazutils/lazutf8.pas	2022-09-25 12:37:17.000000000 +0200
+++ lazarus-2.2.6+dfsg1/components/lazutils/lazutf8.pas	2023-03-04 14:24:24.000000000 +0100
@@ -4056,7 +4056,10 @@
 
 function TStringListUTF8Fast.DoCompareText(const s1, s2: string): PtrInt;
 begin
-  Result:=UTF8CompareLatinTextFast(s1, s2);
+  if CaseSensitive then
+    Result := Utf8CompareStr(s1, s2)
+  else
+    Result:=UTF8CompareLatinTextFast(s1, s2);
 end;
 
 
diff -Nru lazarus-2.2.4+dfsg1/components/lazutils/lazversion.pas lazarus-2.2.6+dfsg1/components/lazutils/lazversion.pas
--- lazarus-2.2.4+dfsg1/components/lazutils/lazversion.pas	2022-09-25 12:37:17.000000000 +0200
+++ lazarus-2.2.6+dfsg1/components/lazutils/lazversion.pas	2023-03-04 14:24:24.000000000 +0100
@@ -22,10 +22,10 @@
 const
   laz_major = 2;
   laz_minor = 2;
-  laz_release = 4;
+  laz_release = 6;
   laz_patch = 0;
   laz_fullversion = ((laz_major *  100 + laz_minor) * 100 + laz_release) * 100 + laz_patch;
-  laz_version = '2.2.4.0';
+  laz_version = '2.2.6.0';
 
 implementation
 
diff -Nru lazarus-2.2.4+dfsg1/components/lazutils/masks.pas lazarus-2.2.6+dfsg1/components/lazutils/masks.pas
--- lazarus-2.2.4+dfsg1/components/lazutils/masks.pas	2022-09-25 12:37:17.000000000 +0200
+++ lazarus-2.2.6+dfsg1/components/lazutils/masks.pas	2023-03-04 14:24:24.000000000 +0100
@@ -73,11 +73,11 @@
     function GetCount: Integer;
     function GetItem(Index: Integer): TMask;
   public
-    constructor Create(const AValue: String; ASeparator: Char; const CaseSensitive: Boolean);
-    constructor Create(const AValue: String; ASeparator: Char = ';'; const AOptions: TMaskOptions = []);
+    constructor Create(const AValue: String; ASeparator: Char; const CaseSensitive: Boolean); virtual;
+    constructor Create(const AValue: String; ASeparator: Char = ';'; const AOptions: TMaskOptions = []); virtual;
     destructor Destroy; override;
 
-    function Matches(const AFileName: String): Boolean;
+    function Matches(const AFileName: String): Boolean; virtual;
     function MatchesWindowsMask(const AFileName: String): Boolean;
 
     property Count: Integer read GetCount;
diff -Nru lazarus-2.2.4+dfsg1/components/sqldb/generatesqldlg.lfm lazarus-2.2.6+dfsg1/components/sqldb/generatesqldlg.lfm
--- lazarus-2.2.4+dfsg1/components/sqldb/generatesqldlg.lfm	2022-09-25 12:37:17.000000000 +0200
+++ lazarus-2.2.6+dfsg1/components/sqldb/generatesqldlg.lfm	2023-03-04 14:24:24.000000000 +0100
@@ -1,19 +1,21 @@
 object GenerateSQLForm: TGenerateSQLForm
   Left = 364
-  Height = 423
+  Height = 419
   Top = 295
-  Width = 796
+  Width = 797
   ActiveControl = PCSQL
   Caption = 'Edit/Generate SQL statements'
-  ClientHeight = 423
-  ClientWidth = 796
+  ClientHeight = 419
+  ClientWidth = 797
+  OnActivate = FormActivate
   OnCreate = FormCreate
-  LCLVersion = '2.1.0.0'
+  Position = poScreenCenter
+  LCLVersion = '2.3.0.0'
   object PCSQL: TPageControl
     Left = 0
-    Height = 372
+    Height = 373
     Top = 0
-    Width = 796
+    Width = 797
     ActivePage = TSFields
     Align = alClient
     TabIndex = 0
@@ -25,151 +27,228 @@
       ChildSizing.ShrinkHorizontal = crsScaleChilds
       ChildSizing.ShrinkVertical = crsScaleChilds
       ChildSizing.ControlsPerLine = 3
-      ClientHeight = 341
-      ClientWidth = 786
+      ClientHeight = 345
+      ClientWidth = 789
       OnResize = TSResize
       object POptions: TPanel
         Left = 0
-        Height = 341
+        Height = 345
         Top = 0
-        Width = 254
+        Width = 263
         Align = alLeft
         BevelOuter = bvNone
-        ClientHeight = 341
-        ClientWidth = 254
-        Constraints.MinWidth = 180
+        ClientHeight = 345
+        ClientWidth = 263
         TabOrder = 0
         object LCBTables: TLabel
+          AnchorSideLeft.Control = CBTables
+          AnchorSideTop.Control = CBSystemTables
+          AnchorSideTop.Side = asrCenter
           Left = 8
-          Height = 16
-          Top = 8
-          Width = 64
-          Anchors = [akTop, akLeft, akRight]
-          AutoSize = False
+          Height = 15
+          Top = 5
+          Width = 27
           Caption = 'Ta&ble'
+          Color = clDefault
           FocusControl = CBTables
           ParentColor = False
         end
         object LSEIndent: TLabel
-          Left = 30
-          Height = 20
-          Top = 202
-          Width = 150
+          AnchorSideTop.Control = seIndent
+          AnchorSideTop.Side = asrCenter
+          AnchorSideRight.Control = seIndent
+          Left = 169
+          Height = 15
+          Top = 214
+          Width = 34
           Alignment = taRightJustify
-          Anchors = [akTop, akLeft, akRight]
-          AutoSize = False
+          Anchors = [akTop, akRight]
+          BorderSpacing.Right = 4
           Caption = 'I&ndent'
+          Color = clDefault
           Layout = tlCenter
           ParentColor = False
         end
         object LSELineLength: TLabel
-          Left = 22
-          Height = 20
-          Top = 231
-          Width = 154
+          AnchorSideTop.Control = seLineLength
+          AnchorSideTop.Side = asrCenter
+          AnchorSideRight.Control = seLineLength
+          Left = 141
+          Height = 15
+          Top = 245
+          Width = 62
           Alignment = taRightJustify
-          Anchors = [akTop, akLeft, akRight]
-          AutoSize = False
+          Anchors = [akTop, akRight]
+          BorderSpacing.Right = 4
           Caption = 'Line Length'
+          Color = clDefault
           Layout = tlCenter
           ParentColor = False
         end
         object CBTables: TComboBox
+          AnchorSideLeft.Control = POptions
+          AnchorSideTop.Control = CBSystemTables
+          AnchorSideTop.Side = asrBottom
+          AnchorSideRight.Control = POptions
+          AnchorSideRight.Side = asrBottom
           Left = 8
-          Height = 31
-          Top = 32
-          Width = 238
+          Height = 23
+          Top = 25
+          Width = 247
           Anchors = [akTop, akLeft, akRight]
-          ItemHeight = 0
+          BorderSpacing.Left = 8
+          BorderSpacing.Top = 3
+          BorderSpacing.Right = 8
+          ItemHeight = 15
           OnChange = CBTablesChange
           Sorted = True
           Style = csDropDownList
-          TabOrder = 0
+          TabOrder = 1
         end
         object BGenerate: TButton
+          AnchorSideLeft.Control = CBTables
+          AnchorSideRight.Control = CBTables
+          AnchorSideRight.Side = asrBottom
+          AnchorSideBottom.Control = POptions
+          AnchorSideBottom.Side = asrBottom
           Left = 8
           Height = 25
-          Top = 305
-          Width = 238
+          Top = 314
+          Width = 247
           Anchors = [akLeft, akRight, akBottom]
+          BorderSpacing.Top = 6
+          BorderSpacing.Bottom = 6
           BorderSpacing.InnerBorder = 4
           Caption = '&Generate SQL'
           OnClick = BGenerateClick
-          TabOrder = 1
+          TabOrder = 9
         end
         object seIndent: TSpinEdit
-          Left = 196
-          Height = 29
-          Top = 197
-          Width = 50
-          TabOrder = 2
+          AnchorSideTop.Control = cbFullyQualifiedFields
+          AnchorSideTop.Side = asrBottom
+          AnchorSideRight.Control = CBTables
+          AnchorSideRight.Side = asrBottom
+          Left = 207
+          Height = 23
+          Top = 210
+          Width = 48
+          Alignment = taRightJustify
+          Anchors = [akTop, akRight]
+          BorderSpacing.Top = 16
+          TabOrder = 7
           Value = 2
         end
         object seLineLength: TSpinEdit
-          Left = 196
-          Height = 29
-          Top = 229
-          Width = 50
-          TabOrder = 3
+          AnchorSideTop.Control = seIndent
+          AnchorSideTop.Side = asrBottom
+          AnchorSideRight.Control = CBTables
+          AnchorSideRight.Side = asrBottom
+          Left = 207
+          Height = 23
+          Top = 241
+          Width = 48
+          Alignment = taRightJustify
+          Anchors = [akTop, akRight]
+          BorderSpacing.Top = 8
+          TabOrder = 8
           Value = 72
         end
         object CBQuoteFields: TCheckBox
+          AnchorSideLeft.Control = POptions
+          AnchorSideTop.Control = edtQuoteChar
+          AnchorSideTop.Side = asrCenter
           Left = 8
-          Height = 23
-          Top = 72
-          Width = 95
+          Height = 19
+          Top = 70
+          Width = 84
+          BorderSpacing.Left = 8
           Caption = 'Quote Fields'
-          TabOrder = 4
+          TabOrder = 2
         end
         object CBSystemTables: TCheckBox
-          Left = 88
-          Height = 23
+          AnchorSideTop.Control = POptions
+          AnchorSideRight.Control = CBTables
+          AnchorSideRight.Side = asrBottom
+          Left = 134
+          Height = 19
           Top = 3
-          Width = 136
+          Width = 121
+          Anchors = [akTop, akRight]
+          BorderSpacing.Top = 3
           Caption = 'Show system tables'
           OnChange = CBSystemTablesChange
-          TabOrder = 5
+          TabOrder = 0
         end
         object CBOneFieldPerLine: TCheckBox
+          AnchorSideLeft.Control = POptions
+          AnchorSideTop.Control = CBQuoteFields
+          AnchorSideTop.Side = asrBottom
           Left = 8
-          Height = 23
-          Top = 104
-          Width = 121
+          Height = 19
+          Top = 105
+          Width = 108
+          BorderSpacing.Left = 8
+          BorderSpacing.Top = 16
           Caption = 'One field per line'
-          TabOrder = 6
+          TabOrder = 4
         end
         object cbUpperCaseKeywords: TCheckBox
+          AnchorSideLeft.Control = POptions
+          AnchorSideTop.Control = CBOneFieldPerLine
+          AnchorSideTop.Side = asrBottom
           Left = 8
-          Height = 23
-          Top = 136
-          Width = 143
+          Height = 19
+          Top = 140
+          Width = 126
+          BorderSpacing.Left = 8
+          BorderSpacing.Top = 16
           Caption = 'Uppercase keywords'
-          TabOrder = 7
+          TabOrder = 5
         end
         object cbFullyQualifiedFields: TCheckBox
+          AnchorSideLeft.Control = POptions
+          AnchorSideTop.Control = cbUpperCaseKeywords
+          AnchorSideTop.Side = asrBottom
           Left = 8
-          Height = 23
-          Top = 168
-          Width = 135
+          Height = 19
+          Top = 175
+          Width = 123
+          BorderSpacing.Left = 8
+          BorderSpacing.Top = 16
           Caption = 'Fully qualified fields'
-          TabOrder = 8
+          TabOrder = 6
         end
         object edtQuoteChar: TEdit
-          Left = 214
-          Height = 29
-          Top = 69
+          AnchorSideTop.Control = CBTables
+          AnchorSideTop.Side = asrBottom
+          AnchorSideRight.Control = CBTables
+          AnchorSideRight.Side = asrBottom
+          Left = 223
+          Height = 23
+          Top = 68
           Width = 32
+          Alignment = taCenter
+          Anchors = [akTop, akRight]
+          BorderSpacing.Top = 20
           MaxLength = 1
-          TabOrder = 9
+          TabOrder = 3
           Text = '"'
         end
         object lblQuoteChar: TLabel
-          Left = 143
-          Height = 17
-          Top = 74
-          Width = 62
+          AnchorSideTop.Control = edtQuoteChar
+          AnchorSideTop.Side = asrCenter
+          AnchorSideRight.Control = edtQuoteChar
+          Left = 160
+          Height = 15
+          Top = 72
+          Width = 59
           Alignment = taRightJustify
+          Anchors = [akTop, akRight]
+          BorderSpacing.Left = 16
+          BorderSpacing.Right = 4
           Caption = 'Quote char'
+          Color = clDefault
+          Layout = tlCenter
           ParentColor = False
         end
       end
@@ -177,90 +256,95 @@
         AnchorSideLeft.Control = POptions
         AnchorSideLeft.Side = asrBottom
         AnchorSideRight.Control = PSelectFields
-        Left = 254
-        Height = 341
+        Left = 263
+        Height = 345
         Top = 0
-        Width = 244
+        Width = 263
         Align = alClient
         BevelOuter = bvNone
-        ClientHeight = 341
-        ClientWidth = 244
+        ClientHeight = 345
+        ClientWidth = 263
         TabOrder = 1
         object LLBKeyFields: TLabel
           Left = 0
-          Height = 26
-          Top = 0
-          Width = 244
+          Height = 15
+          Top = 4
+          Width = 263
           Align = alTop
           Alignment = taCenter
-          AutoSize = False
+          BorderSpacing.Top = 4
           Caption = '&Key fields'
+          Color = clDefault
           Layout = tlCenter
           ParentColor = False
         end
         object LBKeyFields: TListBox
-          Left = 2
-          Height = 296
-          Top = 34
-          Width = 238
-          Anchors = [akTop, akLeft, akRight, akBottom]
+          Left = 6
+          Height = 314
+          Top = 25
+          Width = 247
+          Align = alClient
+          BorderSpacing.Right = 4
+          BorderSpacing.Around = 6
           ItemHeight = 0
           MultiSelect = True
-          ScrollWidth = 236
+          ScrollWidth = 240
           Sorted = True
           TabOrder = 0
-          TopIndex = -1
         end
       end
       object PSelectFields: TPanel
-        Left = 498
-        Height = 341
+        Left = 526
+        Height = 345
         Top = 0
-        Width = 288
+        Width = 263
         Align = alRight
         BevelOuter = bvNone
-        ClientHeight = 341
-        ClientWidth = 288
+        ClientHeight = 345
+        ClientWidth = 263
         TabOrder = 2
         object Label2: TLabel
+          AnchorSideRight.Side = asrBottom
           Left = 0
-          Height = 26
-          Top = 0
-          Width = 288
+          Height = 15
+          Top = 4
+          Width = 263
           Align = alTop
           Alignment = taCenter
-          AutoSize = False
+          BorderSpacing.Top = 4
           Caption = 'Select/Update/Insert fields'
+          Color = clDefault
           Layout = tlCenter
           ParentColor = False
         end
         object LBFields: TListBox
-          Left = 12
-          Height = 296
-          Top = 34
-          Width = 266
-          Anchors = [akTop, akLeft, akRight, akBottom]
+          Left = 6
+          Height = 314
+          Top = 25
+          Width = 247
+          Align = alClient
+          BorderSpacing.Right = 4
+          BorderSpacing.Around = 6
           ItemHeight = 0
           MultiSelect = True
-          ScrollWidth = 264
+          ScrollWidth = 240
           Sorted = True
           TabOrder = 0
-          TopIndex = -1
         end
       end
     end
     object TSSelect: TTabSheet
       Caption = 'Select'
-      ClientHeight = 341
-      ClientWidth = 786
+      ClientHeight = 345
+      ClientWidth = 789
       inline MSelect: TSynEdit
         Left = 0
-        Height = 328
+        Height = 345
         Top = 0
-        Width = 802
+        Width = 789
         Align = alClient
-        Font.Height = 13
-        Font.Name = 'DejaVu Sans Mono'
+        Font.Height = -13
+        Font.Name = 'Courier New'
         Font.Pitch = fpFixed
         Font.Quality = fqNonAntialiased
         ParentColor = False
@@ -756,16 +840,16 @@
     end
     object TSInsert: TTabSheet
       Caption = '&Insert'
-      ClientHeight = 341
-      ClientWidth = 786
+      ClientHeight = 345
+      ClientWidth = 789
       inline MInsert: TSynEdit
         Left = 0
-        Height = 328
+        Height = 345
         Top = 0
-        Width = 802
+        Width = 789
         Align = alClient
-        Font.Height = 13
-        Font.Name = 'DejaVu Sans Mono'
+        Font.Height = -13
+        Font.Name = 'Courier New'
         Font.Pitch = fpFixed
         Font.Quality = fqNonAntialiased
         ParentColor = False
@@ -1261,16 +1345,16 @@
     end
     object TSUpdate: TTabSheet
       Caption = '&Update'
-      ClientHeight = 341
-      ClientWidth = 786
+      ClientHeight = 345
+      ClientWidth = 789
       inline MUpdate: TSynEdit
         Left = 0
-        Height = 328
+        Height = 345
         Top = 0
-        Width = 802
+        Width = 789
         Align = alClient
-        Font.Height = 13
-        Font.Name = 'DejaVu Sans Mono'
+        Font.Height = -13
+        Font.Name = 'Courier New'
         Font.Pitch = fpFixed
         Font.Quality = fqNonAntialiased
         ParentColor = False
@@ -1766,16 +1850,16 @@
     end
     object TSDelete: TTabSheet
       Caption = '&Delete'
-      ClientHeight = 341
-      ClientWidth = 786
+      ClientHeight = 345
+      ClientWidth = 789
       inline MDelete: TSynEdit
         Left = 0
-        Height = 328
+        Height = 345
         Top = 0
-        Width = 802
+        Width = 789
         Align = alClient
-        Font.Height = 13
-        Font.Name = 'DejaVu Sans Mono'
+        Font.Height = -13
+        Font.Name = 'Courier New'
         Font.Pitch = fpFixed
         Font.Quality = fqNonAntialiased
         ParentColor = False
@@ -2271,16 +2355,16 @@
     end
     object TSRefresh: TTabSheet
       Caption = 'Refresh'
-      ClientHeight = 341
-      ClientWidth = 786
+      ClientHeight = 345
+      ClientWidth = 789
       inline MRefresh: TSynEdit
         Left = 0
-        Height = 328
+        Height = 345
         Top = 0
-        Width = 802
+        Width = 789
         Align = alClient
-        Font.Height = 13
-        Font.Name = 'DejaVu Sans Mono'
+        Font.Height = -13
+        Font.Name = 'Courier New'
         Font.Pitch = fpFixed
         Font.Quality = fqNonAntialiased
         ParentColor = False
@@ -2777,9 +2861,9 @@
   end
   object BPGenSQL: TButtonPanel
     Left = 6
-    Height = 39
-    Top = 378
-    Width = 784
+    Height = 34
+    Top = 379
+    Width = 785
     OKButton.Name = 'OKButton'
     OKButton.DefaultCaption = True
     HelpButton.Name = 'HelpButton'
@@ -2795,7 +2879,7 @@
     DefaultFilter = 'SQL Files (*.sql)|*.sql'
     Enabled = False
     SQLDialect = sqlFirebird40
-    left = 392
-    top = 64
+    Left = 392
+    Top = 64
   end
 end
diff -Nru lazarus-2.2.4+dfsg1/components/sqldb/generatesqldlg.pp lazarus-2.2.6+dfsg1/components/sqldb/generatesqldlg.pp
--- lazarus-2.2.4+dfsg1/components/sqldb/generatesqldlg.pp	2022-09-25 12:37:17.000000000 +0200
+++ lazarus-2.2.6+dfsg1/components/sqldb/generatesqldlg.pp	2023-03-04 14:24:24.000000000 +0100
@@ -73,12 +73,14 @@
     procedure BGenerateClick(Sender: TObject);
     procedure CBSystemTablesChange(Sender: TObject);
     procedure CBTablesChange(Sender: TObject);
+    procedure FormActivate(Sender: TObject);
     procedure FormCreate(Sender: TObject);
     procedure TSResize(Sender: TObject);
   private
     FConnection : TSQLConnection;
     FDataset: TSQLQuery;
     QuoteChar : Char;
+    FActivateCalled: Boolean;
     Function IndentString : string;
     Function SQLKeyWord(aKeyWord : TSQLKeyWord) : String;
     procedure GenDeleteSQL(const TableName : string; KeyFields, SQL: TStrings);
@@ -124,7 +126,7 @@
     try
       Dataset:=Q;
       Connection:=Q.SQLConnection;
-      SelectSQL.Text:=Q.SQL.text;
+      SelectSQL.Text:=Q.SQL.Text;
       UpdateSQL.Text:=Q.UpdateSQL.Text;
       DeleteSQL.Text:=Q.DeleteSQL.Text;
       InsertSQL.Text:=Q.insertSQL.Text;
@@ -132,7 +134,7 @@
       Result:=ShowModal=mrOK;
       if Result then
         begin
-        Q.SQL.text        := SelectSQL.Text;
+        Q.SQL.Text        := SelectSQL.Text;
         Q.UpdateSQL.Text  := UpdateSQL.Text;
         Q.DeleteSQL.Text  := DeleteSQL.Text;
         Q.insertSQL.Text  := InsertSQL.Text;
@@ -164,7 +166,7 @@
     L:=L+' '+Format('(%s = :%s%s)', [FieldName,ParamPrefix,KeyFields[I]]);
     if I<KeyFields.Count - 1 then
       L:=L+' '+SQLKeyWord(skAnd);
-    if CBOneFieldPerLine.Checked or ((Length(L)>MaxLen) and IsNotLast) then
+    if CBOneFieldPerLine.Checked or (Length(L)>MaxLen) or (not IsNotLast) then
       begin
       SQL.Add(L);
       L:=IndentString;
@@ -213,7 +215,7 @@
       L:=L+FN;
       if IsNotLast then
         L:=L+', ';
-      if CBOneFieldPerLine.Checked or ((Length(L)>MaxLen) and IsNotLast) then
+      if CBOneFieldPerLine.Checked or (Length(L)>MaxLen) or (not IsNotLast) then
         begin
         SQL.Add(L);
         L:=IndentString;
@@ -251,7 +253,7 @@
    L:=L+FN;
    if IsNotLast then
      L:=L+', ';
-   if CBOneFieldPerLine.Checked or ((Length(L)>MaxLen) and IsNotLast) then
+   if CBOneFieldPerLine.Checked or (Length(L)>MaxLen) or (not IsNotLast) then
      begin
      SQL.Add(L);
      L:=IndentString;
@@ -299,7 +301,7 @@
    L:=L+FN;
    if IsNotLast then
      L:=L+', ';
-   if CBOneFieldPerLine.Checked or ((Length(L)>MaxLen) and IsNotLast) then
+   if CBOneFieldPerLine.Checked or (Length(L)>MaxLen) or (not IsNotLast) then
      begin
      SQL.Add(L);
      L:=IndentString;
@@ -372,9 +374,9 @@
   W : Integer;
   
 begin
-  W:=TSFields.CLientWidth div 3;
-  POPtions.Width:=W;
-  PSelectFIelds.Width:=W;
+  W:=TSFields.ClientWidth div 3;
+  POptions.Width:=W;
+  PSelectFields.Width:= (TSFields.ClientWidth - POptions.Width) div 2;
 end;
 
 function TGenerateSQLForm.IndentString: string;
@@ -527,11 +529,36 @@
   ClearSQL;
 end;
 
+procedure TGenerateSQLForm.FormActivate(Sender: TObject);
+begin
+  if FActivateCalled then
+    exit;
+  FActivateCalled := true;
+  Constraints.MinHeight := PCSQL.Height - PCSQL.ClientHeight +
+    seLineLength.Top + seLineLength.Height +
+    bGenerate.Height + bGenerate.BorderSpacing.Top + bGenerate.BorderSpacing.Bottom +
+    BPGenSQL.Height + BPGenSQL.BorderSpacing.Around*2;
+  Constraints.MinWidth := 3 * (PCSQL.Width - PCSQL.ClientWidth +
+    CBQuoteFields.Left + CBQuoteFields.Width +
+    lblQuoteChar.BorderSpacing.Left + lblQuoteChar.Width + lblQuoteChar.BorderSpacing.Right +
+    edtQuoteChar.Width + CBTables.BorderSpacing.Right);
+end;
+
 procedure TGenerateSQLForm.FormCreate(Sender: TObject);
 
 begin
   Caption:= lrsGeneratesqlstatements;
   EdtQuoteChar.Text:='"';
+  MSelect.Font.Height := SynDefaultFontHeight;
+  MSelect.Font.Name := SynDefaultFontName;
+  MInsert.Font.Height := SynDefaultFontHeight;
+  MInsert.Font.Name := SynDefaultFontName;
+  MUpdate.Font.Height := SynDefaultFontHeight;
+  MUpdate.Font.Name := SynDefaultFontName;
+  MDelete.Font.Height := SynDefaultFontHeight;
+  MDelete.Font.Name := SynDefaultFontName;
+  MRefresh.Font.Height := SynDefaultFontHeight;
+  MRefresh.Font.Name := SynDefaultFontName;
 end;
 
 procedure TGenerateSQLForm.BGenerateClick(Sender: TObject);
diff -Nru lazarus-2.2.4+dfsg1/components/synedit/synedit.pp lazarus-2.2.6+dfsg1/components/synedit/synedit.pp
--- lazarus-2.2.4+dfsg1/components/synedit/synedit.pp	2022-09-25 12:37:17.000000000 +0200
+++ lazarus-2.2.6+dfsg1/components/synedit/synedit.pp	2023-03-04 14:24:24.000000000 +0100
@@ -7998,7 +7998,7 @@
   nFound: integer;
   bBackward, bFromCursor: boolean;
   bPrompt: boolean;
-  bReplace, bReplaceAll, SelIsColumn: boolean;
+  bReplace, bReplaceAll, SelIsColumn, ZeroLen: boolean;
   nAction: TSynReplaceAction;
   CurReplace: string;
   ptFoundStart, ptFoundEnd: TPoint;
@@ -8091,10 +8091,16 @@
     begin
       //DebugLn(['TCustomSynEdit.SearchReplace FOUND ptStart=',dbgs(ptStart),' ptEnd=',dbgs(ptEnd),' ptFoundStart=',dbgs(ptFoundStart),' ptFoundEnd=',dbgs(ptFoundEnd)]);
       // check if found place is entirely in range
-      if (not SelIsColumn) or
-         ( (ptFoundStart.Y=ptFoundEnd.Y) and
-           (ptFoundStart.X >= ReplaceBlockSelection.ColumnStartBytePos[ptFoundStart.Y]) and
-           (ptFoundEnd.X   <= ReplaceBlockSelection.ColumnEndBytePos[ptFoundStart.Y])
+      ZeroLen := ptFoundStart = ptFoundEnd;
+      if ( (not SelIsColumn) or
+           ( (ptFoundStart.Y=ptFoundEnd.Y) and
+             (ptFoundStart.X >= ReplaceBlockSelection.ColumnStartBytePos[ptFoundStart.Y]) and
+             (ptFoundEnd.X   <= ReplaceBlockSelection.ColumnEndBytePos[ptFoundStart.Y])
+           )
+         ) and (
+           not( ZeroLen and (ptStart = ptFoundStart) and
+                (ssoFindContinue in AOptions) and (not SelAvail)
+              )
          )
       then
       begin
@@ -8149,6 +8155,8 @@
         if not bReplaceAll then
           exit;
       end;
+      Exclude(AOptions, ssoFindContinue); // ZeroLen will now be handled below
+
       // shrink search range for next search
       if ssoSearchInReplacement in AOptions then begin
         if bBackward then begin
@@ -8163,6 +8171,21 @@
           ptStart:=ptFoundEnd;
         end;
       end;
+      if ZeroLen then begin
+        FInternalCaret.LineBytePos := ptStart;
+        if bBackward then begin
+          if not FInternalCaret.MoveHoriz(-1) then
+            ptStart := Point(length(FTheLinesView[ptStart.Y - 1]), ptStart.Y - 1)
+          else
+            ptStart := FInternalCaret.LineBytePos;
+        end
+        else begin
+          if not FInternalCaret.MoveHoriz(1) then
+            ptStart := Point(1, ptStart.Y + 1)
+          else
+            ptStart := FInternalCaret.LineBytePos;
+        end;
+      end;
       //DebugLn(['TCustomSynEdit.SearchReplace FIND NEXT ptStart=',dbgs(ptStart),' ptEnd=',dbgs(ptEnd)]);
     end;
   finally
diff -Nru lazarus-2.2.4+dfsg1/components/synedit/syneditsearch.pp lazarus-2.2.6+dfsg1/components/synedit/syneditsearch.pp
--- lazarus-2.2.4+dfsg1/components/synedit/syneditsearch.pp	2022-09-25 12:37:17.000000000 +0200
+++ lazarus-2.2.6+dfsg1/components/synedit/syneditsearch.pp	2023-03-04 14:24:24.000000000 +0100
@@ -757,7 +757,7 @@
     exit;
   end;
   MinY:=Max(0,StartPos.Y-1);
-  MaxY:=Min(Lines.Count,EndPos.Y-1);
+  MaxY:=Min(Lines.Count,EndPos.Y)-1;
   if MinY>MaxY then exit;
   if Backwards then begin
     // backwards
diff -Nru lazarus-2.2.4+dfsg1/components/synedit/test/testsearch.pas lazarus-2.2.6+dfsg1/components/synedit/test/testsearch.pas
--- lazarus-2.2.4+dfsg1/components/synedit/test/testsearch.pas	2022-09-25 12:37:17.000000000 +0200
+++ lazarus-2.2.6+dfsg1/components/synedit/test/testsearch.pas	2023-03-04 14:24:24.000000000 +0100
@@ -6,7 +6,7 @@
 
 uses
   Classes, SysUtils, testregistry, TestBase,
-  SynEdit, SynEditSearch, SynHighlighterPas;
+  SynEdit, SynEditSearch, SynHighlighterPas, SynEditTypes;
 
 type
 
@@ -17,6 +17,8 @@
   protected
     fTSearch: TSynEditSearch;
     //procedure ReCreateEdit; reintroduce;
+    function TextLinesSimple: TStringArray;
+    function TextLinesSimple2: TStringArray;
     procedure ReCreateEditWithLinesSimple;
     procedure TestFindNext(AName, ASearchTxt: String;
       AStartX, AStartY, AEndX, AEndY: Integer;
@@ -25,6 +27,7 @@
     procedure TestSearchSimple;
     procedure TestSearchSimpleUtf8;
     procedure TestSearchSimpleRegEx;
+    procedure TestSearchZeroLengthRegEx;
     procedure FindMatchingBracket;
     procedure TestSearchMultiLine; // not regex
   end;
@@ -33,24 +36,38 @@
 
 { TTestSynSearch }
 
+function TTestSynSearch.TextLinesSimple: TStringArray;
+begin
+  SetLength(Result, 12);
+  Result[ 0] := 'Some text to search Text';
+  Result[ 1] := 'Text and more Text, texting';
+  Result[ 2] := 'text and more text, texting';
+  Result[ 3] := 'Text';
+  Result[ 4] := '';
+  Result[ 5] := 'utf8: äöü äää äöü ÄÖÜ ÄÄÄ ÄÖÜ  äÖü ÄäÄ äääää äöüäöüä ä Ä';
+  Result[ 6] := '';
+  Result[ 7] := '';
+  Result[ 8] := '';
+  Result[ 9] := 'Test or Dest or Destination. Test.';
+  Result[10] := 'test or dest or destination. test.';
+  Result[11] := '';
+end;
+
+function TTestSynSearch.TextLinesSimple2: TStringArray;
+begin
+  SetLength(Result, 6);
+  Result[ 0] := 'foo bar some more';
+  Result[ 1] := 'äöü äää äöü';
+  Result[ 2] := 'abc def 123';
+  Result[ 3] := 'mno xyz 789';
+  Result[ 4] := 'Text';
+  Result[ 5] := '';
+end;
+
 procedure TTestSynSearch.ReCreateEditWithLinesSimple;
 begin
   ReCreateEdit;
-  SetLines
-    ([ 'Some text to search Text',
-       'Text and more Text, texting',
-       'text and more text, texting',
-       'Text',
-       '',
-       'utf8: äöü äää äöü ÄÖÜ ÄÄÄ ÄÖÜ  äÖü ÄäÄ äääää äöüäöüä ä Ä',
-       '',
-       '',
-       '',
-       'Test or Dest or Destination. Test.',
-       'test or dest or destination. test.',
-       ''
-    ]);
-
+  SetLines(TextLinesSimple);
 end;
 
 procedure TTestSynSearch.TestFindNext(AName, ASearchTxt: String; AStartX, AStartY, AEndX,
@@ -179,6 +196,213 @@
   TestFindNext('RegEx Case',           '(t...),',   1,2,  25,3,  true,   15,3, 20,3);
   AssertEquals('RegexRepl Case', 'atextB', fTSearch.RegExprReplace);
 
+  fTSearch.Free;
+end;
+
+procedure TTestSynSearch.TestSearchZeroLengthRegEx;
+var
+  aBackwards: Boolean;
+
+  procedure DoTestSearch(AName: String;
+    AStartX, AStartY: Integer; ASearch: String;
+    AExpX, AExpY: Integer;
+    AOpts: TSynSearchOptions = [ssoRegExpr]);
+  begin
+    AName := AName + ' # Search: "' + ASearch + '" ';
+    if aBackwards then
+      AOpts := AOpts + [ssoBackwards];
+    ReCreateEdit;
+    SetLines(TextLinesSimple2);
+    SetCaret(AStartX, AStartY);
+    SynEdit.SearchReplaceEx(ASearch, '', AOpts, SynEdit.CaretObj.LineBytePos);
+
+    TestIsCaret(AName+' (Caret): ', AExpX, AExpY);
+  end;
+
+  procedure DoTestRepl(AName: String;
+    AStartX, AStartY: Integer; ASearch, ARepl: String;
+    AExpX, AExpY: Integer; AExpTextRepl: Array of const;
+    AOpts: TSynSearchOptions = [ssoRegExpr, ssoReplaceAll]);
+  begin
+    AName := AName + ' # Replace "' + ASearch + '" => "' + ARepl + '"';
+    if aBackwards then
+      AOpts := AOpts + [ssoBackwards];
+    ReCreateEdit;
+    SetLines(TextLinesSimple2);
+    SetCaret(AStartX, AStartY);
+    SynEdit.SearchReplaceEx(ASearch, ARepl, AOpts, SynEdit.CaretObj.LineBytePos);
+
+    TestIsCaret(AName+' (Caret): ', AExpX, AExpY);
+    TestIsText(AName+' (Text): ', TextLinesSimple2, AExpTextRepl);
+  end;
+
+begin
+  aBackwards := False;
+
+  // Search ^
+  DoTestSearch('Cont',  3, 3,  '^',   1, 4, [ssoRegExpr, ssoFindContinue]);
+  DoTestSearch('',      3, 3,  '^',   1, 4);
+  DoTestSearch('',      1, 4,  '^',   1, 4);
+  DoTestSearch('Cont',  1, 4,  '^',   1, 5, [ssoRegExpr, ssoFindContinue]);
+
+  // Search $
+  DoTestSearch('Cont',  3, 3,  '$',  12, 3, [ssoRegExpr, ssoFindContinue]);
+  DoTestSearch('',      3, 3,  '$',  12, 3);
+// TODO: fTSearch.FindNextOne does not find the end in line 3 (when it is the start point)
+//  DoTestSearch('',     12, 3,  '$',  12, 3);
+  DoTestSearch('Cont', 12, 3,  '$',  12, 4, [ssoRegExpr, ssoFindContinue]);
+
+  // Search ^|$
+  DoTestSearch('',      3, 3,  '^|$',  12, 3);
+//  DoTestSearch('',     12, 3,  '^|$',  12, 3);
+  DoTestSearch('Cont', 12, 3,  '^|$',   1, 4, [ssoRegExpr, ssoFindContinue]);
+  DoTestSearch('',      1, 4,  '^|$',   1, 4);
+  DoTestSearch('Cont',  1, 4,  '^|$',  12, 4, [ssoRegExpr, ssoFindContinue]);
+
+  // Search ()
+  DoTestSearch('',      3, 3,  '()',  3, 3);
+  DoTestSearch('Cont',  3, 3,  '()',  4, 3, [ssoRegExpr, ssoFindContinue]);
+
+  DoTestSearch('UTF ',      3, 2,  '()',  3, 2);
+  DoTestSearch('UTF Cont',  3, 2,  '()',  5, 2, [ssoRegExpr, ssoFindContinue]);
+
+
+  // Replace ^
+  DoTestRepl('',  3, 3,  '^', 'X',    2, 4, [4, 'Xmno xyz 789'], [ssoRegExpr, ssoReplace]);
+  DoTestRepl('',  1, 4,  '^', 'X',    2, 4, [4, 'Xmno xyz 789'], [ssoRegExpr, ssoReplace]);
+  DoTestRepl('',  1, 4,  '^', 'X',    2, 5, [5, 'XText'], [ssoRegExpr, ssoReplace, ssoFindContinue]);
+
+  DoTestRepl('',  3, 3,  '^', '',    1, 5, []);
+  DoTestRepl('',  1, 4,  '^', '',    1, 5, []);
+  DoTestRepl('',  1, 4,  '^', '',    1, 5, [], [ssoRegExpr, ssoReplaceAll, ssoFindContinue]);
+
+  // Replace-All ^
+  DoTestRepl('',  3, 3,  '^', 'X',   2, 5, [4, 'Xmno xyz 789', 5, 'XText']);
+  DoTestRepl('',  1, 4,  '^', 'X',   2, 5, [4, 'Xmno xyz 789', 5, 'XText']);
+  DoTestRepl('',  1, 4,  '^', 'X',   2, 5, [5, 'XText'], [ssoRegExpr, ssoReplaceAll, ssoFindContinue]);
+
+  DoTestRepl('',  3, 3,  '^', '',    1, 4, [], [ssoRegExpr, ssoReplace]);
+  DoTestRepl('',  1, 4,  '^', '',    1, 4, [], [ssoRegExpr, ssoReplace]);
+  DoTestRepl('',  1, 4,  '^', '',    1, 5, [], [ssoRegExpr, ssoReplace, ssoFindContinue]);
+
+
+  // Replace $
+  DoTestRepl('',  4, 4,  '$', 'X',  13, 4, [4, 'mno xyz 789X'], [ssoRegExpr, ssoReplace]);
+//  DoTestRepl('', 12, 4,  '$', 'X',  13, 4, [4, 'mno xyz 789X'], [ssoRegExpr, ssoReplace]);
+  DoTestRepl('', 12, 4,  '$', 'X',   6, 5, [5, 'TextX'], [ssoRegExpr, ssoReplace, ssoFindContinue]);
+
+  DoTestRepl('',  4, 4,  '$', '',  12, 4, [], [ssoRegExpr, ssoReplace]);
+//  DoTestRepl('', 12, 4,  '$', '',  12, 4, [], [ssoRegExpr, ssoReplace]);
+  DoTestRepl('', 12, 4,  '$', '',   5, 5, [], [ssoRegExpr, ssoReplace, ssoFindContinue]);
+
+  // Replace-All $
+  DoTestRepl('',  4, 4,  '$', 'X',   6, 5, [4, 'mno xyz 789X', 5, 'TextX']);
+//  DoTestRepl('', 12, 4,  '$', 'X',   6, 5, [4, 'mno xyz 789X', 5, 'TextX']);
+  DoTestRepl('', 12, 4,  '$', 'X',   6, 5, [5, 'TextX'], [ssoRegExpr, ssoReplaceAll, ssoFindContinue]);
+
+  DoTestRepl('',  4, 4,  '$', '',    5, 5, []);
+  DoTestRepl('', 12, 4,  '$', '',    5, 5, []);
+  DoTestRepl('', 12, 4,  '$', '',    5, 5, [], [ssoRegExpr, ssoReplaceAll, ssoFindContinue]);
+
+
+  // Replace ^|$
+  DoTestRepl('',  1, 4,  '^|$', 'X',   2, 4, [4, 'Xmno xyz 789'], [ssoRegExpr, ssoReplace]);
+  DoTestRepl('',  1, 4,  '^|$', 'X',  13, 4, [4, 'mno xyz 789X'], [ssoRegExpr, ssoReplace, ssoFindContinue]);
+//  DoTestRepl('', 12, 4,  '^|$', 'X',  13, 4, [4, 'mno xyz 789X'], [ssoRegExpr, ssoReplace]);
+  DoTestRepl('', 12, 4,  '^|$', 'X',   2, 5, [5, 'XText'], [ssoRegExpr, ssoReplace, ssoFindContinue]);
+
+  // Replace-All ^|$
+  DoTestRepl('',  1, 4,  '^|$', 'X',   7, 5, [4, 'Xmno xyz 789X', 5, 'XTextX']);
+  DoTestRepl('',  4, 4,  '^|$', 'X',   7, 5, [4, 'mno xyz 789X', 5, 'XTextX']);
+//  DoTestRepl('', 12, 4,  '^|$', 'X',   7, 5, [4, 'mno xyz 789X', 5, 'XTextX']);
+  DoTestRepl('', 12, 4,  '^|$', 'X',   7, 5, [5, 'XTextX'], [ssoRegExpr, ssoReplaceAll, ssoFindContinue]);
+
+
+  // Replace ()
+  DoTestRepl('',  1,4,  '()', 'X',   2, 4, [4, 'Xmno xyz 789'], [ssoRegExpr, ssoReplace]);
+  DoTestRepl('',  1,4,  '()', 'X',   3, 4, [4, 'mXno xyz 789'], [ssoRegExpr, ssoReplace, ssoFindContinue]);
+  DoTestRepl('',  2,4,  '()', 'X',   3, 4, [4, 'mXno xyz 789'], [ssoRegExpr, ssoReplace]);
+  DoTestRepl('',  2,4,  '()', 'X',   4, 4, [4, 'mnXo xyz 789'], [ssoRegExpr, ssoReplace, ssoFindContinue]);
+//  DoTestRepl('', 12,4,  '()', 'X',  13, 4, [4, 'mno xyz 789X'], [ssoRegExpr, ssoReplace]);
+  DoTestRepl('', 12,4,  '()', 'X',   2, 5, [5, 'XText'], [ssoRegExpr, ssoReplace, ssoFindContinue]);
+
+  // Replace-All ()
+//  DoTestRepl('', 11,4,  '()', 'X',  10, 5, [4, 'mno xyz 78X9X', 5, 'XTXeXxXtX']);
+//  DoTestRepl('', 11,4,  '()', '',    5, 5, []);
+// Incorrect results BELOW (expect wrong caret and text, but test that it does not hang
+DoTestRepl('', 11,4,  '()', 'X',   8, 5, [4, 'mno xyz 78X9', 5, 'XTXeXxXt']);
+DoTestRepl('', 11,4,  '()', '',    4, 5, []);
+// << end incorrect result
+
+
+  // ****************************
+  aBackwards := True;
+//exit; // backward reg-ex is not (fully?) implemented
+
+  // Search ^
+  DoTestSearch('Cont',  3, 4,  '^',   1, 4, [ssoRegExpr, ssoFindContinue]);
+  DoTestSearch('',      3, 4,  '^',   1, 4);
+  DoTestSearch('',      1, 4,  '^',   1, 4);
+//  DoTestSearch('Cont',  1, 4,  '^',   1, 3, [ssoRegExpr, ssoFindContinue]);
+
+  // Search $
+//  DoTestSearch('',      4, 4,  '$',  12, 3);
+//  DoTestSearch('Cont',  1, 4,  '$',  12, 3);
+//  DoTestSearch('Cont',  1, 4,  '$',  12, 3, [ssoRegExpr, ssoFindContinue]);
+//  DoTestSearch('',     12, 4,  '$',  12, 4);
+//  DoTestSearch('Cont', 12, 4,  '$',  12, 3, [ssoRegExpr, ssoFindContinue]);
+
+  // Search ^|$
+//  DoTestSearch('',      4, 4,  '^|$',   1, 4);
+//  DoTestSearch('',      1, 4,  '^|$',   1, 4);
+//  DoTestSearch('Cont',  1, 4,  '^|$',  12, 3, [ssoRegExpr, ssoFindContinue]);
+//  DoTestSearch('Cont', 12, 3,  '^|$',  12, 3);
+//  DoTestSearch('Cont', 12, 3,  '^|$',   1, 3, [ssoRegExpr, ssoFindContinue]);
+
+  // Search ()
+//  DoTestSearch('',      3, 3,  '()',  3, 3);
+//  DoTestSearch('Cont',  3, 3,  '()',  2, 3, [ssoRegExpr, ssoFindContinue]);
+
+//  DoTestSearch('UTF ',      3, 2,  '()',  3, 2);
+//  DoTestSearch('UTF Cont',  5, 2,  '()',  3, 2, [ssoRegExpr, ssoFindContinue]);
+
+  // Replace ^  // selection is backward on inserted text
+//  DoTestRepl('',  3, 4,  '^', 'X',    1, 4, [4, 'Xmno xyz 789'], [ssoRegExpr, ssoReplace]);
+  DoTestRepl('',  1, 4,  '^', 'X',    1, 4, [4, 'Xmno xyz 789'], [ssoRegExpr, ssoReplace]);
+//  DoTestRepl('',  1, 4,  '^', 'X',    1, 3, [5, 'XText'], [ssoRegExpr, ssoReplace, ssoFindContinue]);
+
+//  DoTestRepl('',  3, 4,  '^', '',    1, 4, []);
+//  DoTestRepl('',  1, 4,  '^', '',    1, 4, []);
+//  DoTestRepl('',  1, 4,  '^', '',    1, 3, [], [ssoRegExpr, ssoReplaceAll, ssoFindContinue]);
+
+  // Replace-All ^
+//  DoTestRepl('',  3, 2,  '^', 'X',   1, 1, [1, 'Xfoo bar some more', 2, 'Xäöü äää äöü']);
+//  DoTestRepl('',  1, 2,  '^', 'X',   1, 1, [1, 'Xfoo bar some more', 2, 'Xäöü äää äöü']);
+//  DoTestRepl('',  1, 2,  '^', 'X',   1, 1, [1, 'Xfoo bar some more'], [ssoRegExpr, ssoReplaceAll, ssoFindContinue]);
+
+//  DoTestRepl('',  3, 2,  '^', '',   1, 1, []);
+//  DoTestRepl('',  1, 2,  '^', '',   1, 1, []);
+//  DoTestRepl('',  1, 2,  '^', '',   1, 1, [], [ssoRegExpr, ssoReplaceAll, ssoFindContinue]);
+
+  // Replace $
+//  DoTestRepl('',  4, 5,  '$', 'X',  12, 4, [4, 'mno xyz 789X'], [ssoRegExpr, ssoReplace]);
+//  DoTestRepl('', 12, 4,  '$', 'X',  12, 4, [4, 'mno xyz 789X', 5, 'TextX'], [ssoRegExpr, ssoReplace]);
+//  DoTestRepl('', 12, 4,  '$', 'X',  12, 3, [3, 'abc def 123X'], [ssoRegExpr, ssoReplace, ssoFindContinue]);
+
+//  DoTestRepl('',  4, 5,  '$', '',  12, 4, [], [ssoRegExpr, ssoReplace]);
+//  DoTestRepl('', 12, 4,  '$', '',  12, 4, [], [ssoRegExpr, ssoReplace]);
+//  DoTestRepl('', 12, 4,  '$', '',  12, 3, [], [ssoRegExpr, ssoReplace, ssoFindContinue]);
+
+  // Replace-All $
+//  DoTestRepl('',  3, 3,  '$', 'X',  18, 1, [1, 'foo bar some moreX', 2, 'äöü äää äöüX']);
+//  DoTestRepl('', 21, 2,  '$', 'X',  18, 1, [1, 'foo bar some moreX', 2, 'äöü äää äöüX']);
+//  DoTestRepl('', 21, 2,  '$', 'X',  18, 1, [1, 'foo bar some moreX'], [ssoRegExpr, ssoReplaceAll, ssoFindContinue]);
+
+//  DoTestRepl('',  3, 3,  '$', '',  18, 1, []);
+//  DoTestRepl('', 21, 2,  '$', '',  18, 1, []);
+//  DoTestRepl('', 21, 2,  '$', '',  18, 1, [], [ssoRegExpr, ssoReplaceAll, ssoFindContinue]);
+
+
 end;
 
 procedure TTestSynSearch.FindMatchingBracket;
@@ -280,6 +504,7 @@
   TestFindNext('3 lines middle empty',  'a'+LineEnding+LineEnding+'b',  1,1,  1,9,  true,   1,2, 2,4);
   TestFindNext('3 lines middle empty - no match',  'a'+LineEnding+LineEnding+'b',  1,5,  1,9,  False,   1,2, 2,4);
 
+  fTSearch.Free;
 end;
 
 //more ftsearch:
diff -Nru lazarus-2.2.4+dfsg1/components/tachart/tachartlistbox.pas lazarus-2.2.6+dfsg1/components/tachart/tachartlistbox.pas
--- lazarus-2.2.4+dfsg1/components/tachart/tachartlistbox.pas	2022-09-25 12:37:17.000000000 +0200
+++ lazarus-2.2.6+dfsg1/components/tachart/tachartlistbox.pas	2023-03-04 14:24:24.000000000 +0100
@@ -526,7 +526,7 @@
 procedure TChartListbox.MouseDown(
   AButton: TMouseButton; AShift: TShiftState; AX, AY: Integer);
 var
-  rcb, ricon: TRect;
+  R, rcb, ricon: TRect;
   index: Integer;
   p: TPoint;
 begin
@@ -537,7 +537,17 @@
     p := Point(AX, AY);
     index := GetIndexAtXY(AX, AY);
     if index < 0 then exit;
-    CalcRects(ItemRect(index), rcb, ricon);
+    R := ItemRect(index);
+    {$IFDEF DARWIN}
+    { Workaround for ItemRect returning something different than what is
+      passed to DrawItem in macOS Monterey.
+      See discussion in https://forum.lazarus.freepascal.org/index.php/topic,61074.0.html
+      The consequence of this workaround is that there can only be a single
+      column, but Columns > 1 does not work on cocoa anyway. }
+    R.Left := 0;
+    R.Right := ClientWidth;
+    {$ENDIF}
+    CalcRects(R, rcb, ricon);
     if (cloShowCheckboxes in Options) and IsPointInRect(p, rcb) then
       ClickedCheckbox(index)
     else if (cloShowIcons in Options) and IsPointInRect(p, ricon) then
diff -Nru lazarus-2.2.4+dfsg1/debian/changelog lazarus-2.2.6+dfsg1/debian/changelog
--- lazarus-2.2.4+dfsg1/debian/changelog	2023-03-25 12:11:51.000000000 +0100
+++ lazarus-2.2.6+dfsg1/debian/changelog	2023-03-31 19:51:15.000000000 +0200
@@ -1,3 +1,10 @@
+lazarus (2.2.6+dfsg1-1) unstable; urgency=medium
+
+  * New upstream version 2.2.6+dfsg1
+  * Updated patches list removing patch already integrated by upstream.
+
+ -- Abou Al Montacir <abou.almontacir@sfr.fr>  Fri, 31 Mar 2023 19:51:15 +0200
+
 lazarus (2.2.4+dfsg1-3) unstable; urgency=medium
 
   * Remove binary NMU number from revision.inc to avoid useless warning.
diff -Nru lazarus-2.2.4+dfsg1/debian/patches/dwarf-debug-info-type-ppc64el.patch lazarus-2.2.6+dfsg1/debian/patches/dwarf-debug-info-type-ppc64el.patch
--- lazarus-2.2.4+dfsg1/debian/patches/dwarf-debug-info-type-ppc64el.patch	2022-08-28 18:21:22.000000000 +0200
+++ lazarus-2.2.6+dfsg1/debian/patches/dwarf-debug-info-type-ppc64el.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,20 +0,0 @@
-Description: Use dwarf debug info type (-gw) for components/chmhelp/lhelp
-
-Stab debug info (-gs) used only in components/chmhelp/lhelp/Makefile.fp
-breaks ppc64el but not dwarf (-gw) also Dwarf is actually the
-recommended setting :
-https://wiki.freepascal.org/GDB_Debugger_Tips#Stabs_.28only_GDB.29
-Author: Frédéric Bonnard <frediz@debian.org>
----
-This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
---- a/components/chmhelp/lhelp/Makefile.fpc
-+++ b/components/chmhelp/lhelp/Makefile.fpc
-@@ -15,7 +15,7 @@
- packages=rtl
- 
- [compiler]
--options=-gs -gl -Sghi -O3 -dlcl$(LCL_PLATFORM) $(DBG_OPTIONS)
-+options=-gw -gl -Sghi -O3 -dlcl$(LCL_PLATFORM) $(DBG_OPTIONS)
- unittargetdir=lib/$(CPU_TARGET)-$(OS_TARGET)
- unitdir=. $(LAZDIR)/components/lazutils/lib/$(CPU_TARGET)-$(OS_TARGET) \
-           $(LAZDIR)/packager/units/$(CPU_TARGET)-$(OS_TARGET) \
diff -Nru lazarus-2.2.4+dfsg1/debian/patches/series lazarus-2.2.6+dfsg1/debian/patches/series
--- lazarus-2.2.4+dfsg1/debian/patches/series	2022-11-20 12:42:50.000000000 +0100
+++ lazarus-2.2.6+dfsg1/debian/patches/series	2023-03-31 19:51:08.000000000 +0200
@@ -5,7 +5,6 @@
 fix-fpdoc-crashes-on-lazarus-documentation.patch
 fix-perl-shbang.patch
 Fix-compilation-of-PascalScript.diff
-dwarf-debug-info-type-ppc64el.patch
 Fixed-end-of-line-for-resource-file.diff
 Fixed-allowing-arbitrary-FPPKG-path.patch
 Added-missing-source-file.patch
Binary files /tmp/IdHZXXQ1G9/lazarus-2.2.4+dfsg1/docs/chm/lazutils.chm and /tmp/5arYyC9vuS/lazarus-2.2.6+dfsg1/docs/chm/lazutils.chm differ
diff -Nru lazarus-2.2.4+dfsg1/docs/chm/lazutils.xct lazarus-2.2.6+dfsg1/docs/chm/lazutils.xct
--- lazarus-2.2.4+dfsg1/docs/chm/lazutils.xct	2022-09-25 12:18:59.000000000 +0200
+++ lazarus-2.2.6+dfsg1/docs/chm/lazutils.xct	2023-03-04 14:25:27.000000000 +0100
@@ -191,6 +191,7 @@
   ArrayCP437ToUTF8 codepagescommon/arraycp437toutf8.html
   ArrayCP850ToUTF8 codepagescommon/arraycp850toutf8.html
   ArrayCP852ToUTF8 codepagescommon/arraycp852toutf8.html
+  ArrayCP865ToUTF8 codepagescommon/arraycp865toutf8.html
   ArrayCP866ToUTF8 codepagescommon/arraycp866toutf8.html
   ArrayCP874ToUTF8 codepagescommon/arraycp874toutf8.html
   ArrayKOI8RToUTF8 codepagescommon/arraykoi8rtoutf8.html
@@ -2350,7 +2351,6 @@
   UTF16ToUTF8 lazutf8/utf16toutf8.html
   LazGetLanguageIDs lazutf8/lazgetlanguageids.html
   LazGetShortLanguageID lazutf8/lazgetshortlanguageid.html
-  ReplaceSubstring lazutf8/replacesubstring.html
   FPUpChars lazutf8/fpupchars.html
  LazUTF8Classes lazutf8classes/index.html
   TFileStreamUTF8 lazutf8classes/tfilestreamutf8.html
@@ -2554,6 +2554,7 @@
   EncodingCP437 lconvencoding/encodingcp437.html
   EncodingCP850 lconvencoding/encodingcp850.html
   EncodingCP852 lconvencoding/encodingcp852.html
+  EncodingCP865 lconvencoding/encodingcp865.html
   EncodingCP866 lconvencoding/encodingcp866.html
   EncodingCP874 lconvencoding/encodingcp874.html
   EncodingCP932 lconvencoding/encodingcp932.html
@@ -2618,6 +2619,7 @@
   CP437ToUTF8 lconvencoding/cp437toutf8.html
   CP850ToUTF8 lconvencoding/cp850toutf8.html
   CP852ToUTF8 lconvencoding/cp852toutf8.html
+  CP865ToUTF8 lconvencoding/cp865toutf8.html
   CP866ToUTF8 lconvencoding/cp866toutf8.html
   CP874ToUTF8 lconvencoding/cp874toutf8.html
   KOI8RToUTF8 lconvencoding/koi8rtoutf8.html
@@ -2651,6 +2653,7 @@
   UTF8ToCP437 lconvencoding/utf8tocp437.html
   UTF8ToCP850 lconvencoding/utf8tocp850.html
   UTF8ToCP852 lconvencoding/utf8tocp852.html
+  UTF8ToCP865 lconvencoding/utf8tocp865.html
   UTF8ToCP866 lconvencoding/utf8tocp866.html
   UTF8ToCP874 lconvencoding/utf8tocp874.html
   UTF8ToKOI8R lconvencoding/utf8tokoi8r.html
@@ -2782,6 +2785,7 @@
   TMaskOption masks/tmaskoption.html
   TMaskOptions masks/tmaskoptions.html
   TMaskClass masks/tmaskclass.html
+  TMaskListClass masks/tmasklistclass.html
   EMaskError masks/emaskerror.html
    TMaskExceptionCode masks/emaskerror.tmaskexceptioncode.html
    FCode masks/emaskerror.fcode.html
@@ -2808,7 +2812,7 @@
    fMatchMaximumLiteralBytes masks/tmaskbase.fmatchmaximumliteralbytes.html
    fMaskOpcodesAllowed masks/tmaskbase.fmaskopcodesallowed.html
    fMaskEscapeChar masks/tmaskbase.fmaskescapechar.html
-   Compile masks/tmaskbase.compile.html
+   PrepareCompile masks/tmaskbase.preparecompile.html
    Exception_InvalidCharMask masks/tmaskbase.exception_invalidcharmask.html
    Exception_MissingCloseChar masks/tmaskbase.exception_missingclosechar.html
    Exception_IncompleteMask masks/tmaskbase.exception_incompletemask.html
@@ -2862,7 +2866,6 @@
    GetMaskClass masks/twindowsmasklist.getmaskclass.html
    AddMasksToList masks/twindowsmasklist.addmaskstolist.html
    Create masks/twindowsmasklist.create.html
-   MatchesWindowsMask masks/twindowsmasklist.matcheswindowsmask.html
    Quirks masks/twindowsmasklist.quirks.html
   MatchesMask masks/matchesmask.html
   MatchesWindowsMask masks/matcheswindowsmask.html
@@ -3730,7 +3733,7 @@
 2VfMatchMaximumLiteralBytes
 2VfMaskOpcodesAllowed
 2VfMaskEscapeChar
-2MCompile
+2MPrepareCompile
 2MException_InvalidCharMask
 2MException_MissingCloseChar
 2MException_IncompleteMask
@@ -3817,7 +3820,6 @@
 2MGetMaskClass
 2MAddMasksToList
 3MCreate
-3MMatchesWindowsMask
 3PQuirks rw
 #lazutils.GraphType.TRawImageDescription 
 0VFormat
Binary files /tmp/IdHZXXQ1G9/lazarus-2.2.4+dfsg1/docs/chm/lcl.chm and /tmp/5arYyC9vuS/lazarus-2.2.6+dfsg1/docs/chm/lcl.chm differ
diff -Nru lazarus-2.2.4+dfsg1/docs/chm/lcl.xct lazarus-2.2.6+dfsg1/docs/chm/lcl.xct
--- lazarus-2.2.4+dfsg1/docs/chm/lcl.xct	2022-09-25 12:18:59.000000000 +0200
+++ lazarus-2.2.6+dfsg1/docs/chm/lcl.xct	2023-03-04 14:25:27.000000000 +0100
@@ -88,9 +88,9 @@
    ShortCut actnlist/tcustomaction.shortcut.html
    Visible actnlist/tcustomaction.visible.html
   TAction actnlist/taction.html
+   Create actnlist/taction.create.html
    OnExecute actnlist/taction.onexecute.html
    OnUpdate actnlist/taction.onupdate.html
-   Create actnlist/tcustomaction.create.html
    AutoCheck actnlist/tcustomaction.autocheck.html
    Caption actnlist/tcustomaction.caption.html
    Checked actnlist/tcustomaction.checked.html
@@ -286,6 +286,7 @@
   BitBtnResNames buttons/bitbtnresnames.html
   TButtonLayout buttons/tbuttonlayout.html
   TButtonState buttons/tbuttonstate.html
+  TButtonImage buttons/tbuttonimage.html
   TNumGlyphs buttons/tnumglyphs.html
   TGlyphTransparencyMode buttons/tglyphtransparencymode.html
   TBitBtnKind buttons/tbitbtnkind.html
@@ -339,6 +340,7 @@
    LoadGlyphFromResourceName buttons/tcustombitbtn.loadglyphfromresourcename.html
    LoadGlyphFromLazarusResource buttons/tcustombitbtn.loadglyphfromlazarusresource.html
    LoadGlyphFromStock buttons/tcustombitbtn.loadglyphfromstock.html
+   LoadGlyphFromResource buttons/tcustombitbtn.loadglyphfromresource.html
    CanShowGlyph buttons/tcustombitbtn.canshowglyph.html
    Caption buttons/tcustombitbtn.caption.html
    DefaultCaption buttons/tcustombitbtn.defaultcaption.html
@@ -551,9 +553,11 @@
   LoadGlyphFromResourceName buttons/loadglyphfromresourcename.html
   LoadGlyphFromLazarusResource buttons/loadglyphfromlazarusresource.html
   LoadGlyphFromStock buttons/loadglyphfromstock.html
+  LoadGlyphFromResource buttons/loadglyphfromresource.html
   GetButtonCaption buttons/getbuttoncaption.html
   GetDefaultButtonIcon buttons/getdefaultbuttonicon.html
   GetButtonIcon buttons/getbuttonicon.html
+  GetButtonImageIndex buttons/getbuttonimageindex.html
   BidiAdjustButtonLayout buttons/bidiadjustbuttonlayout.html
   dbgs buttons/dbgs.html
   Register buttons/register.html
@@ -701,7 +705,6 @@
    FormClose calendarpopup/tcalendarpopupform.formclose.html
    FormCreate calendarpopup/tcalendarpopupform.formcreate.html
    FormDeactivate calendarpopup/tcalendarpopupform.formdeactivate.html
-   Paint calendarpopup/tcalendarpopupform.paint.html
   ShowCalendarPopup calendarpopup/showcalendarpopup.html
  CheckLst checklst/index.html
   TCheckListClicked checklst/tchecklistclicked.html
@@ -1606,6 +1609,7 @@
    CreateWnd comctrls/tcustomtabcontrol.createwnd.html
    Loaded comctrls/tcustomtabcontrol.loaded.html
    DoChange comctrls/tcustomtabcontrol.dochange.html
+   InitializeWnd comctrls/tcustomtabcontrol.initializewnd.html
    Change comctrls/tcustomtabcontrol.change.html
    KeyDown comctrls/tcustomtabcontrol.keydown.html
    DialogChar comctrls/tcustomtabcontrol.dialogchar.html
@@ -1663,14 +1667,17 @@
    TabWidth comctrls/tcustomtabcontrol.tabwidth.html
    TabStop comctrls/tcustomtabcontrol.tabstop.html
    WSRegisterClass lclclasses/tlclcomponent.wsregisterclass.html
-   InitializeWnd controls/twincontrol.initializewnd.html
    ReadState controls/tcontrol.readstate.html
   TTabSheet comctrls/ttabsheet.html
    Create comctrls/ttabsheet.create.html
    Destroy comctrls/ttabsheet.destroy.html
    PageControl comctrls/ttabsheet.pagecontrol.html
    TabIndex comctrls/ttabsheet.tabindex.html
+   Height comctrls/ttabsheet.height.html
+   Left comctrls/ttabsheet.left.html
    TabVisible comctrls/ttabsheet.tabvisible.html
+   Top comctrls/ttabsheet.top.html
+   Width comctrls/ttabsheet.width.html
    WSRegisterClass lclclasses/tlclcomponent.wsregisterclass.html
    AutoSize controls/tcontrol.autosize.html
    BorderWidth controls/twincontrol.borderwidth.html
@@ -1681,9 +1688,7 @@
    ClientWidth controls/tcontrol.clientwidth.html
    Enabled controls/tcontrol.enabled.html
    Font controls/tcontrol.font.html
-   Height controls/tcontrol.height.html
    ImageIndex comctrls/tcustompage.imageindex.html
-   Left controls/tcontrol.left.html
    OnContextPopup controls/tcontrol.oncontextpopup.html
    OnDragDrop controls/tcontrol.ondragdrop.html
    OnDragOver controls/tcontrol.ondragover.html
@@ -1708,12 +1713,12 @@
    ParentShowHint controls/tcontrol.parentshowhint.html
    PopupMenu controls/tcontrol.popupmenu.html
    ShowHint controls/tcontrol.showhint.html
-   Top controls/tcontrol.top.html
-   Width controls/tcontrol.width.html
   TPageControl comctrls/tpagecontrol.html
    GetPageClass comctrls/tpagecontrol.getpageclass.html
    DoAddDockClient comctrls/tpagecontrol.doadddockclient.html
+   DockOver comctrls/tpagecontrol.dockover.html
    DoRemoveDockClient comctrls/tpagecontrol.doremovedockclient.html
+   ChildClassAllowed comctrls/tpagecontrol.childclassallowed.html
    Clear comctrls/tpagecontrol.clear.html
    FindNextPage comctrls/tpagecontrol.findnextpage.html
    SelectNextPage comctrls/tpagecontrol.selectnextpage.html
@@ -1721,11 +1726,8 @@
    ActivePageIndex comctrls/tpagecontrol.activepageindex.html
    Pages comctrls/tpagecontrol.pages.html
    ActivePage comctrls/tpagecontrol.activepage.html
-   OnChange comctrls/tpagecontrol.onchange.html
    WSRegisterClass lclclasses/tlclcomponent.wsregisterclass.html
-   DockOver controls/twincontrol.dockover.html
    DoUndockClientMsg controls/twincontrol.doundockclientmsg.html
-   ChildClassAllowed controls/twincontrol.childclassallowed.html
    IndexOfTabAt comctrls/tcustomtabcontrol.indexoftabat.html
    IndexOfPageAt comctrls/tcustomtabcontrol.indexofpageat.html
    OnGetDockCaption controls/twincontrol.ongetdockcaption.html
@@ -1761,6 +1763,7 @@
    TabStop controls/twincontrol.tabstop.html
    TabWidth comctrls/tcustomtabcontrol.tabwidth.html
    Visible controls/tcontrol.visible.html
+   OnChange comctrls/tcustomtabcontrol.onchange.html
    OnChanging comctrls/tcustomtabcontrol.onchanging.html
    OnCloseTabClicked comctrls/tcustomtabcontrol.onclosetabclicked.html
    OnContextPopup controls/tcontrol.oncontextpopup.html
@@ -2827,6 +2830,7 @@
    ShouldAutoAdjust comctrls/tcustomtrackbar.shouldautoadjust.html
    Create comctrls/tcustomtrackbar.create.html
    SetTick comctrls/tcustomtrackbar.settick.html
+   SetParams comctrls/tcustomtrackbar.setparams.html
    Frequency comctrls/tcustomtrackbar.frequency.html
    LineSize comctrls/tcustomtrackbar.linesize.html
    Max comctrls/tcustomtrackbar.max.html
@@ -3072,8 +3076,11 @@
    TopLvlItems comctrls/ttreenodes.toplvlitems.html
    DefineProperties 
   TCustomTreeView comctrls/tcustomtreeview.html
+   TFindOption comctrls/tcustomtreeview.tfindoption.html
+   TFindOptions comctrls/tcustomtreeview.tfindoptions.html
    FChangeTimer comctrls/tcustomtreeview.fchangetimer.html
    FEditor comctrls/tcustomtreeview.feditor.html
+   FFindOptions comctrls/tcustomtreeview.ffindoptions.html
    GetControlClassDefaultSize comctrls/tcustomtreeview.getcontrolclassdefaultsize.html
    Added comctrls/tcustomtreeview.added.html
    EditorEditingDone comctrls/tcustomtreeview.editoreditingdone.html
@@ -3136,6 +3143,7 @@
    NodeChanged comctrls/tcustomtreeview.nodechanged.html
    NodeHasChildren comctrls/tcustomtreeview.nodehaschildren.html
    Notification comctrls/tcustomtreeview.notification.html
+   Paint comctrls/tcustomtreeview.paint.html
    ScrollView comctrls/tcustomtreeview.scrollview.html
    SetDragMode comctrls/tcustomtreeview.setdragmode.html
    SetOptions comctrls/tcustomtreeview.setoptions.html
@@ -3184,6 +3192,7 @@
    OnHasChildren comctrls/tcustomtreeview.onhaschildren.html
    OnNodeChanged comctrls/tcustomtreeview.onnodechanged.html
    OnSelectionChanged comctrls/tcustomtreeview.onselectionchanged.html
+   PathDelimiter comctrls/tcustomtreeview.pathdelimiter.html
    ReadOnly comctrls/tcustomtreeview.readonly.html
    RightClickSelect comctrls/tcustomtreeview.rightclickselect.html
    RowSelect comctrls/tcustomtreeview.rowselect.html
@@ -3273,7 +3282,6 @@
    DoDragMsg 
    DoEndDrag controls/tcontrol.doenddrag.html
    DoMouseWheel controls/tcontrol.domousewheel.html
-   Paint controls/tcustomcontrol.paint.html
    GetChildAccessibleObjectAtPos controls/tcontrol.getchildaccessibleobjectatpos.html
   TTreeView comctrls/ttreeview.html
    ParentColor comctrls/ttreeview.parentcolor.html
@@ -3907,6 +3915,7 @@
    SetReplacingControl controls/tdockmanager.setreplacingcontrol.html
    AutoFreeByControl controls/tdockmanager.autofreebycontrol.html
    IsEnabledControl controls/tdockmanager.isenabledcontrol.html
+   CanBeDoubleDocked controls/tdockmanager.canbedoubledocked.html
   TSizeConstraints controls/tsizeconstraints.html
    Change controls/tsizeconstraints.change.html
    AssignTo controls/tsizeconstraints.assignto.html
@@ -4176,6 +4185,7 @@
    UpdateMouseCursor controls/tcontrol.updatemousecursor.html
    Changed controls/tcontrol.changed.html
    GetPalette controls/tcontrol.getpalette.html
+   GetParentBackground controls/tcontrol.getparentbackground.html
    ChildClassAllowed controls/tcontrol.childclassallowed.html
    ReadState controls/tcontrol.readstate.html
    Loaded controls/tcontrol.loaded.html
@@ -4197,6 +4207,7 @@
    SetHint controls/tcontrol.sethint.html
    SetName controls/tcontrol.setname.html
    SetParent controls/tcontrol.setparent.html
+   SetParentBackground controls/tcontrol.setparentbackground.html
    SetParentComponent controls/tcontrol.setparentcomponent.html
    WndProc controls/tcontrol.wndproc.html
    ParentFormHandleInitialized controls/tcontrol.parentformhandleinitialized.html
@@ -4238,6 +4249,7 @@
    DragKind controls/tcontrol.dragkind.html
    DragMode controls/tcontrol.dragmode.html
    MouseCapture controls/tcontrol.mousecapture.html
+   ParentBackground controls/tcontrol.parentbackground.html
    ParentColor controls/tcontrol.parentcolor.html
    ParentFont controls/tcontrol.parentfont.html
    ParentShowHint controls/tcontrol.parentshowhint.html
@@ -4378,6 +4390,7 @@
    InitiateAction controls/tcontrol.initiateaction.html
    ShowHelp controls/tcontrol.showhelp.html
    HasHelp controls/tcontrol.hashelp.html
+   RemoveAllHandlersOfObject controls/tcontrol.removeallhandlersofobject.html
    AddHandlerOnResize controls/tcontrol.addhandleronresize.html
    RemoveHandlerOnResize controls/tcontrol.removehandleronresize.html
    AddHandlerOnChangeBounds controls/tcontrol.addhandleronchangebounds.html
@@ -4386,8 +4399,10 @@
    RemoveHandlerOnVisibleChanging controls/tcontrol.removehandleronvisiblechanging.html
    AddHandlerOnVisibleChanged controls/tcontrol.addhandleronvisiblechanged.html
    RemoveHandlerOnVisibleChanged controls/tcontrol.removehandleronvisiblechanged.html
+   AddHandlerOnEnabledChanging controls/tcontrol.addhandleronenabledchanging.html
+   RemoveHandlerOnEnabledChanging controls/tcontrol.removehandleronenabledchanging.html
    AddHandlerOnEnabledChanged controls/tcontrol.addhandleronenabledchanged.html
-   RemoveHandlerOnEnableChanging controls/tcontrol.removehandleronenablechanging.html
+   RemoveHandlerOnEnabledChanged controls/tcontrol.removehandleronenabledchanged.html
    AddHandlerOnKeyDown controls/tcontrol.addhandleronkeydown.html
    RemoveHandlerOnKeyDown controls/tcontrol.removehandleronkeydown.html
    AddHandlerOnBeforeDestruction controls/tcontrol.addhandleronbeforedestruction.html
@@ -4459,7 +4474,6 @@
    HelpKeyword controls/tcontrol.helpkeyword.html
    HelpContext controls/tcontrol.helpcontext.html
    WSRegisterClass lclclasses/tlclcomponent.wsregisterclass.html
-   RemoveAllHandlersOfObject lclclasses/tlclcomponent.removeallhandlersofobject.html
   TControlChildSizing controls/tcontrolchildsizing.html
    Change controls/tcontrolchildsizing.change.html
    Create controls/tcontrolchildsizing.create.html
@@ -4603,7 +4617,6 @@
    GetClientRect controls/twincontrol.getclientrect.html
    GetControlOrigin controls/twincontrol.getcontrolorigin.html
    GetDeviceContext controls/twincontrol.getdevicecontext.html
-   GetParentBackground controls/twincontrol.getparentbackground.html
    IsControlMouseMsg controls/twincontrol.iscontrolmousemsg.html
    CreateHandle controls/twincontrol.createhandle.html
    CreateParams controls/twincontrol.createparams.html
@@ -4627,7 +4640,6 @@
    SetBorderStyle controls/twincontrol.setborderstyle.html
    SetColor controls/twincontrol.setcolor.html
    SetChildZPosition controls/twincontrol.setchildzposition.html
-   SetParentBackground controls/twincontrol.setparentbackground.html
    ShowControl controls/twincontrol.showcontrol.html
    UpdateControlState controls/twincontrol.updatecontrolstate.html
    UpdateShowing controls/twincontrol.updateshowing.html
@@ -4637,7 +4649,6 @@
    BorderStyle controls/twincontrol.borderstyle.html
    OnGetSiteInfo controls/twincontrol.ongetsiteinfo.html
    OnGetDockCaption controls/twincontrol.ongetdockcaption.html
-   ParentBackground controls/twincontrol.parentbackground.html
    BorderWidth controls/twincontrol.borderwidth.html
    BoundsLockCount controls/twincontrol.boundslockcount.html
    Brush controls/twincontrol.brush.html
@@ -4793,6 +4804,7 @@
    SetHeight controls/tdockzone.setheight.html
    SetLeft controls/tdockzone.setleft.html
    SetTop controls/tdockzone.settop.html
+   SetWidth controls/tdockzone.setwidth.html
    Create controls/tdockzone.create.html
    FindZone controls/tdockzone.findzone.html
    FirstVisibleChild controls/tdockzone.firstvisiblechild.html
@@ -4822,7 +4834,6 @@
    Width controls/tdockzone.width.html
    NextSibling controls/tdockzone.nextsibling.html
    PrevSibling controls/tdockzone.prevsibling.html
-   SetWidth controls/tdockzone.width.html
   TDockTree controls/tdocktree.html
    HitTest controls/tdocktree.hittest.html
    PaintDockFrame controls/tdocktree.paintdockframe.html
@@ -6921,6 +6932,9 @@
    BorderSpacing controls/tcontrol.borderspacing.html
    CellHintPriority grids/tcustomgrid.cellhintpriority.html
    Color controls/tcontrol.color.html
+   ColRowDraggingCursor grids/tcustomgrid.colrowdraggingcursor.html
+   ColRowDragIndicatorColor grids/tcustomgrid.colrowdragindicatorcolor.html
+   ColSizingCursor grids/tcustomgrid.colsizingcursor.html
    Constraints controls/tcontrol.constraints.html
    DataSource dbgrids/tcustomdbgrid.datasource.html
    DefaultDrawing grids/tcustomgrid.defaultdrawing.html
@@ -7001,6 +7015,13 @@
    Create dblogdlg/tlogindialog.create.html
   LoginDialogEx dblogdlg/logindialogex.html
  DefaultTranslator defaulttranslator/index.html
+ DialogRes dialogres/index.html
+  DialogResName dialogres/dialogresname.html
+  TDialogImage dialogres/tdialogimage.html
+  TDialogImageList dialogres/tdialogimagelist.html
+   Create dialogres/tdialogimagelist.create.html
+   DialogIcon dialogres/tdialogimagelist.dialogicon.html
+  DialogGlyphs dialogres/dialogglyphs.html
  Dialogs dialogs/index.html
   mtWarning dialogs/mtwarning.html
   mtError dialogs/mterror.html
@@ -7110,6 +7131,7 @@
    CheckFile dialogs/topendialog.checkfile.html
    CheckFileMustExist dialogs/topendialog.checkfilemustexist.html
    CheckAllFiles dialogs/topendialog.checkallfiles.html
+   DoExecute dialogs/topendialog.doexecute.html
    DefaultTitle dialogs/topendialog.defaulttitle.html
    Create dialogs/topendialog.create.html
    DoCanClose dialogs/topendialog.docanclose.html
@@ -7120,25 +7142,25 @@
    OnFolderChange dialogs/topendialog.onfolderchange.html
    OnSelectionChange dialogs/topendialog.onselectionchange.html
    WSRegisterClass lclclasses/tlclcomponent.wsregisterclass.html
-   DoExecute dialogs/tcommondialog.doexecute.html
   TSaveDialog dialogs/tsavedialog.html
+   DefaultTitle dialogs/tsavedialog.defaulttitle.html
    Create dialogs/tsavedialog.create.html
    WSRegisterClass lclclasses/tlclcomponent.wsregisterclass.html
-   DefaultTitle dialogs/topendialog.defaulttitle.html
   TSelectDirectoryDialog dialogs/tselectdirectorydialog.html
+   CheckFileMustExist dialogs/tselectdirectorydialog.checkfilemustexist.html
+   DefaultTitle dialogs/tselectdirectorydialog.defaulttitle.html
+   Create dialogs/tselectdirectorydialog.create.html
    WSRegisterClass lclclasses/tlclcomponent.wsregisterclass.html
-   CheckFileMustExist dialogs/topendialog.checkfilemustexist.html
-   DefaultTitle dialogs/tcommondialog.defaulttitle.html
-   Create dialogs/topendialog.create.html
   TColorDialog dialogs/tcolordialog.html
+   DefaultTitle dialogs/tcolordialog.defaulttitle.html
    Create dialogs/tcolordialog.create.html
    Destroy dialogs/tcolordialog.destroy.html
    Title dialogs/tcolordialog.title.html
    Color dialogs/tcolordialog.color.html
    CustomColors dialogs/tcolordialog.customcolors.html
    WSRegisterClass lclclasses/tlclcomponent.wsregisterclass.html
-   DefaultTitle dialogs/tcommondialog.defaulttitle.html
   TColorButton dialogs/tcolorbutton.html
+   DoAutoAdjustLayout dialogs/tcolorbutton.doautoadjustlayout.html
    DrawGlyph dialogs/tcolorbutton.drawglyph.html
    GetDisabledPattern dialogs/tcolorbutton.getdisabledpattern.html
    GetGlyphSize dialogs/tcolorbutton.getglyphsize.html
@@ -7244,14 +7266,15 @@
    DefaultTitle dialogs/treplacedialog.defaulttitle.html
    ReplaceClick dialogs/treplacedialog.replaceclick.html
    ReplaceAllClick dialogs/treplacedialog.replaceallclick.html
+   CreateForm dialogs/treplacedialog.createform.html
+   SetFormValues dialogs/treplacedialog.setformvalues.html
+   GetFormValues dialogs/treplacedialog.getformvalues.html
    Create dialogs/treplacedialog.create.html
-   CreateForm dialogs/tfinddialog.createform.html
-   SetFormValues dialogs/tfinddialog.setformvalues.html
-   GetFormValues dialogs/tfinddialog.getformvalues.html
    ReplaceText dialogs/tfinddialog.replacetext.html
    OnReplace dialogs/tfinddialog.onreplace.html
   TCustomPrinterSetupDialog dialogs/tcustomprintersetupdialog.html
   TCustomPrintDialog dialogs/tcustomprintdialog.html
+   Create dialogs/tcustomprintdialog.create.html
    Collate dialogs/tcustomprintdialog.collate.html
    Copies dialogs/tcustomprintdialog.copies.html
    FromPage dialogs/tcustomprintdialog.frompage.html
@@ -7261,7 +7284,6 @@
    PrintToFile dialogs/tcustomprintdialog.printtofile.html
    PrintRange dialogs/tcustomprintdialog.printrange.html
    ToPage dialogs/tcustomprintdialog.topage.html
-   Create ms-its:rtl.chm::/classes/tcomponent.create.html
   TTaskDialogBaseButtonItem dialogs/ttaskdialogbasebuttonitem.html
    Client dialogs/ttaskdialogbasebuttonitem.client.html
    GetDisplayName dialogs/ttaskdialogbasebuttonitem.getdisplayname.html
@@ -7309,6 +7331,7 @@
    Text dialogs/tcustomtaskdialog.text.html
    Title dialogs/tcustomtaskdialog.title.html
    VerificationText dialogs/tcustomtaskdialog.verificationtext.html
+   Width dialogs/tcustomtaskdialog.width.html
    OnButtonClicked dialogs/tcustomtaskdialog.onbuttonclicked.html
   TTaskDialog dialogs/ttaskdialog.html
    Buttons dialogs/tcustomtaskdialog.buttons.html
@@ -7325,6 +7348,7 @@
    Text dialogs/tcustomtaskdialog.text.html
    Title dialogs/tcustomtaskdialog.title.html
    VerificationText dialogs/tcustomtaskdialog.verificationtext.html
+   Width dialogs/tcustomtaskdialog.width.html
    OnButtonClicked dialogs/tcustomtaskdialog.onbuttonclicked.html
   TCustomCopyToClipboardDialog dialogs/tcustomcopytoclipboarddialog.html
    DoCreate dialogs/tcustomcopytoclipboarddialog.docreate.html
@@ -7498,13 +7522,13 @@
    fOnFilterItemEx editbtn/tcustomcontrolfilteredit.fonfilteritemex.html
    fOnCheckItem editbtn/tcustomcontrolfilteredit.foncheckitem.html
    DestroyWnd editbtn/tcustomcontrolfilteredit.destroywnd.html
+   ActivateFilter editbtn/tcustomcontrolfilteredit.activatefilter.html
    DoDefaultFilterItem editbtn/tcustomcontrolfilteredit.dodefaultfilteritem.html
    DoFilterItem editbtn/tcustomcontrolfilteredit.dofilteritem.html
    EditKeyDown editbtn/tcustomcontrolfilteredit.editkeydown.html
    EditChange editbtn/tcustomcontrolfilteredit.editchange.html
    BuddyClick editbtn/tcustomcontrolfilteredit.buddyclick.html
    SortAndFilter editbtn/tcustomcontrolfilteredit.sortandfilter.html
-   ApplyFilter editbtn/tcustomcontrolfilteredit.applyfilter.html
    ApplyFilterCore editbtn/tcustomcontrolfilteredit.applyfiltercore.html
    MoveNext editbtn/tcustomcontrolfilteredit.movenext.html
    MovePrev editbtn/tcustomcontrolfilteredit.moveprev.html
@@ -8324,10 +8348,14 @@
    Canvas extctrls/tcustomimage.canvas.html
    DestRect extctrls/tcustomimage.destrect.html
    Invalidate extctrls/tcustomimage.invalidate.html
+   HasGraphic extctrls/tcustomimage.hasgraphic.html
    AntialiasingMode extctrls/tcustomimage.antialiasingmode.html
    Center extctrls/tcustomimage.center.html
    KeepOriginXWhenClipped extctrls/tcustomimage.keeporiginxwhenclipped.html
    KeepOriginYWhenClipped extctrls/tcustomimage.keeporiginywhenclipped.html
+   ImageIndex extctrls/tcustomimage.imageindex.html
+   ImageWidth extctrls/tcustomimage.imagewidth.html
+   Images extctrls/tcustomimage.images.html
    Picture extctrls/tcustomimage.picture.html
    Stretch extctrls/tcustomimage.stretch.html
    StretchOutEnabled extctrls/tcustomimage.stretchoutenabled.html
@@ -8350,6 +8378,9 @@
    OnMouseWheelDown controls/tcontrol.onmousewheeldown.html
    OnMouseWheelUp controls/tcontrol.onmousewheelup.html
   TImage extctrls/timage.html
+   ImageIndex extctrls/timage.imageindex.html
+   ImageWidth extctrls/timage.imagewidth.html
+   Images extctrls/timage.images.html
    AntialiasingMode extctrls/tcustomimage.antialiasingmode.html
    Align controls/tcontrol.align.html
    Anchors controls/tcontrol.anchors.html
@@ -8495,7 +8526,7 @@
    OnSelectionChanged extctrls/tcustomradiogroup.onselectionchanged.html
    OnStartDrag controls/tcontrol.onstartdrag.html
    OnUTF8KeyPress controls/twincontrol.onutf8keypress.html
-   ParentBackground controls/twincontrol.parentbackground.html
+   ParentBackground 
    ParentBidiMode controls/tcontrol.parentbidimode.html
    ParentFont controls/tcontrol.parentfont.html
    ParentColor controls/tcontrol.parentcolor.html
@@ -8572,7 +8603,7 @@
    OnResize controls/tcontrol.onresize.html
    OnStartDrag controls/tcontrol.onstartdrag.html
    OnUTF8KeyPress controls/twincontrol.onutf8keypress.html
-   ParentBackground controls/twincontrol.parentbackground.html
+   ParentBackground 
    ParentBiDiMode controls/tcontrol.parentbidimode.html
    ParentFont controls/tcontrol.parentfont.html
    ParentColor controls/tcontrol.parentcolor.html
@@ -8700,6 +8731,7 @@
    Paint extctrls/tcustompanel.paint.html
    SetParentBackground extctrls/tcustompanel.setparentbackground.html
    UpdateParentColorChange extctrls/tcustompanel.updateparentcolorchange.html
+   ShowAccelChar extctrls/tcustompanel.showaccelchar.html
    VerticalAlignment extctrls/tcustompanel.verticalalignment.html
    WordWrap extctrls/tcustompanel.wordwrap.html
    Create extctrls/tcustompanel.create.html
@@ -8718,6 +8750,7 @@
    CMParentColorChanged controls/tcontrol.cmparentcolorchanged.html
    GetDefaultDockCaption controls/tcontrol.getdefaultdockcaption.html
   TPanel extctrls/tpanel.html
+   ShowAccelChar extctrls/tcustompanel.showaccelchar.html
    UseDockManager extctrls/tpanel.usedockmanager.html
    Align extctrls/tcustompanel.align.html
    Alignment extctrls/tcustompanel.alignment.html
@@ -9523,6 +9556,10 @@
    WSRegisterClass lclclasses/tlclcomponent.wsregisterclass.html
    GetControlClassDefaultSize controls/tcontrol.getcontrolclassdefaultsize.html
   TScrollBox forms/tscrollbox.html
+   SetParentBackground forms/tscrollbox.setparentbackground.html
+   CMParentColorChanged forms/tscrollbox.cmparentcolorchanged.html
+   Loaded forms/tscrollbox.loaded.html
+   UpdateParentColorChange forms/tscrollbox.updateparentcolorchange.html
    Create forms/tscrollbox.create.html
    AutoScroll forms/tscrollbox.autoscroll.html
    BorderStyle forms/tscrollbox.borderstyle.html
@@ -9946,12 +9983,12 @@
   TCustomDockForm forms/tcustomdockform.html
    DoAddDockClient forms/tcustomdockform.doadddockclient.html
    DoRemoveDockClient forms/tcustomdockform.doremovedockclient.html
+   GetSiteInfo forms/tcustomdockform.getsiteinfo.html
    Loaded forms/tcustomdockform.loaded.html
    Create forms/tcustomdockform.create.html
    AutoScroll forms/tcustomdockform.autoscroll.html
    BorderStyle forms/tcustomdockform.borderstyle.html
    FormStyle forms/tcustomdockform.formstyle.html
-   GetSiteInfo controls/twincontrol.getsiteinfo.html
    PixelsPerInch forms/tcustomdesigncontrol.pixelsperinch.html
   THintWindow forms/thintwindow.html
    WMNCHitTest forms/thintwindow.wmnchittest.html
@@ -10192,6 +10229,10 @@
    RemoveOnShowHintHandler forms/tapplication.removeonshowhinthandler.html
    AddOnGetMainFormHandleHandler forms/tapplication.addongetmainformhandlehandler.html
    RemoveOnGetMainFormHandleHandler forms/tapplication.removeongetmainformhandlehandler.html
+   AddOnActionExecuteHandler forms/tapplication.addonactionexecutehandler.html
+   RemoveOnActionExecuteHandler forms/tapplication.removeonactionexecutehandler.html
+   AddOnActionUpdateHandler forms/tapplication.addonactionupdatehandler.html
+   RemoveOnActionUpdateHandler forms/tapplication.removeonactionupdatehandler.html
    RemoveAllHandlersOfObject forms/tapplication.removeallhandlersofobject.html
    DoBeforeMouseMessage forms/tapplication.dobeforemousemessage.html
    IsShortcut forms/tapplication.isshortcut.html
@@ -10299,6 +10340,8 @@
    SetOnHint forms/tapplicationproperties.setonhint.html
    SetOnShowHint forms/tapplicationproperties.setonshowhint.html
    SetOnUserInput forms/tapplicationproperties.setonuserinput.html
+   SetOnActionExecute forms/tapplicationproperties.setonactionexecute.html
+   SetOnActionUpdate forms/tapplicationproperties.setonactionupdate.html
    Create forms/tapplicationproperties.create.html
    Destroy forms/tapplicationproperties.destroy.html
    ExceptionDialog forms/tapplicationproperties.exceptiondialog.html
@@ -10332,6 +10375,8 @@
    OnHint forms/tapplication.onhint.html
    OnShowHint forms/tapplication.onshowhint.html
    OnUserInput forms/tapplication.onuserinput.html
+   OnActionExecute forms/tapplication.onactionexecute.html
+   OnActionUpdate forms/tapplication.onactionupdate.html
   TIDesigner forms/tidesigner.html
    FLookupRoot forms/tidesigner.flookuproot.html
    FDefaultFormBoundsValid forms/tidesigner.fdefaultformboundsvalid.html
@@ -11355,6 +11400,7 @@
   DrawVerticalGradient graphutil/drawverticalgradient.html
   DrawGradientWindow graphutil/drawgradientwindow.html
   AntiAliasedStretchDrawBitmap graphutil/antialiasedstretchdrawbitmap.html
+  BitmapGrayscale graphutil/bitmapgrayscale.html
   DrawArrow graphutil/drawarrow.html
   FloodFill graphutil/floodfill.html
   ScaleImg graphutil/scaleimg.html
@@ -11447,6 +11493,7 @@
   TSizingRec grids/tsizingrec.html
   TGridDataCache grids/tgriddatacache.html
   TGridCursorState grids/tgridcursorstate.html
+  TGridScrollerDoScroll grids/tgridscrollerdoscroll.html
   TGetEditEvent grids/tgeteditevent.html
   TSetEditEvent grids/tseteditevent.html
   TGetCheckboxStateEvent grids/tgetcheckboxstateevent.html
@@ -11632,6 +11679,10 @@
    Items grids/tgridcolumns.items.html
    VisibleCount grids/tgridcolumns.visiblecount.html
    Enabled grids/tgridcolumns.enabled.html
+  TGridScroller grids/tgridscroller.html
+   Create grids/tgridscroller.create.html
+   Destroy grids/tgridscroller.destroy.html
+   Start grids/tgridscroller.start.html
   TCustomGrid grids/tcustomgrid.html
    fGridState grids/tcustomgrid.fgridstate.html
    RTLSign grids/tcustomgrid.rtlsign.html
@@ -13057,6 +13108,7 @@
    AppRemoveStayOnTopFlags interfacebase/twidgetset.appremovestayontopflags.html
    AppRestoreStayOnTopFlags interfacebase/twidgetset.apprestorestayontopflags.html
    AppSetMainFormOnTaskBar interfacebase/twidgetset.appsetmainformontaskbar.html
+   AppSetupMainForm interfacebase/twidgetset.appsetupmainform.html
    LCLPlatform interfacebase/twidgetset.lclplatform.html
    GetLCLCapability interfacebase/twidgetset.getlclcapability.html
    DCGetPixel interfacebase/twidgetset.dcgetpixel.html
@@ -13711,6 +13763,7 @@
    DoDrawImage lazcanvas/tlazcanvas.dodrawimage.html
    CanvasCopyRect lazcanvas/tlazcanvas.canvascopyrect.html
    FillColor lazcanvas/tlazcanvas.fillcolor.html
+   Polygon lazcanvas/tlazcanvas.polygon.html
    AssignPenData lazcanvas/tlazcanvas.assignpendata.html
    AssignBrushData lazcanvas/tlazcanvas.assignbrushdata.html
    AssignFontData lazcanvas/tlazcanvas.assignfontdata.html
@@ -14574,6 +14627,8 @@
   TLCLPlatform lclplatformdef/tlclplatform.html
   TLCLPlatforms lclplatformdef/tlclplatforms.html
   DirNameToLCLPlatform lclplatformdef/dirnametolclplatform.html
+  DirNameToDisplayName lclplatformdef/dirnametodisplayname.html
+  DisplayNameToDirName lclplatformdef/displaynametodirname.html
   GetBuildLCLWidgetType lclplatformdef/getbuildlclwidgettype.html
   BuildLCLWidgetType lclplatformdef/buildlclwidgettype.html
  LCLProc lclproc/index.html
@@ -18389,8 +18444,15 @@
   TObjectTypes shellctrls/tobjecttypes.html
   TFileSortType shellctrls/tfilesorttype.html
   TMaskCaseSensitivity shellctrls/tmaskcasesensitivity.html
+  TExpandCollapseMode shellctrls/texpandcollapsemode.html
+  TFileItemCompareEvent shellctrls/tfileitemcompareevent.html
   TAddItemEvent shellctrls/tadditemevent.html
   TCSLVFileAddedEvent shellctrls/tcslvfileaddedevent.html
+  TFileItem shellctrls/tfileitem.html
+   isFolder shellctrls/tfileitem.isfolder.html
+   Create shellctrls/tfileitem.create.html
+   BasePath shellctrls/tfileitem.basepath.html
+   FileInfo shellctrls/tfileitem.fileinfo.html
   TCustomShellTreeView shellctrls/tcustomshelltreeview.html
    WSRegisterClass 
    DoCreateNodeClass shellctrls/tcustomshelltreeview.docreatenodeclass.html
@@ -18400,9 +18462,11 @@
    DoSelectionChanged shellctrls/tcustomshelltreeview.doselectionchanged.html
    DoAddItem shellctrls/tcustomshelltreeview.doadditem.html
    CanExpand shellctrls/tcustomshelltreeview.canexpand.html
+   Collapse shellctrls/tcustomshelltreeview.collapse.html
    DrawBuiltInIcon shellctrls/tcustomshelltreeview.drawbuiltinicon.html
    GetBuiltinIconSize shellctrls/tcustomshelltreeview.getbuiltiniconsize.html
    NodeHasChildren shellctrls/tcustomshelltreeview.nodehaschildren.html
+   ExpandCollapseMode shellctrls/tcustomshelltreeview.expandcollapsemode.html
    Create shellctrls/tcustomshelltreeview.create.html
    Destroy shellctrls/tcustomshelltreeview.destroy.html
    GetBasePath shellctrls/tcustomshelltreeview.getbasepath.html
@@ -18417,8 +18481,10 @@
    Root shellctrls/tcustomshelltreeview.root.html
    Path shellctrls/tcustomshelltreeview.path.html
    OnAddItem shellctrls/tcustomshelltreeview.onadditem.html
+   OnSortCompare shellctrls/tcustomshelltreeview.onsortcompare.html
    Items comctrls/tcustomtreeview.items.html
   TShellTreeView shellctrls/tshelltreeview.html
+   ExpandCollapseMode shellctrls/tshelltreeview.expandcollapsemode.html
    ParentColor shellctrls/tshelltreeview.parentcolor.html
    TabStop shellctrls/tshelltreeview.tabstop.html
    Tag shellctrls/tshelltreeview.tag.html
@@ -18493,6 +18559,7 @@
    OnMouseWheelRight controls/tcontrol.onmousewheelright.html
    OnSelectionChanged comctrls/tcustomtreeview.onselectionchanged.html
    OnShowHint controls/tcontrol.onshowhint.html
+   OnSortCompare shellctrls/tcustomshelltreeview.onsortcompare.html
    OnUTF8KeyPress controls/twincontrol.onutf8keypress.html
    Options comctrls/tcustomtreeview.options.html
    TreeLineColor comctrls/tcustomtreeview.treelinecolor.html
@@ -18597,6 +18664,7 @@
    Root shellctrls/tcustomshelllistview.root.html
    ShellTreeView shellctrls/tcustomshelllistview.shelltreeview.html
   TShellTreeNode shellctrls/tshelltreenode.html
+   FFileInfo shellctrls/tshelltreenode.ffileinfo.html
    SetBasePath shellctrls/tshelltreenode.setbasepath.html
    ShortFilename shellctrls/tshelltreenode.shortfilename.html
    FullFilename shellctrls/tshelltreenode.fullfilename.html
@@ -20175,6 +20243,8 @@
    IsMixed themes/tthemeservices.ismixed.html
    GetElementDetails themes/tthemeservices.getelementdetails.html
    GetDetailSize themes/tthemeservices.getdetailsize.html
+   GetDetailSizeForWindow themes/tthemeservices.getdetailsizeforwindow.html
+   GetDetailSizeForPPI themes/tthemeservices.getdetailsizeforppi.html
    GetDetailRegion themes/tthemeservices.getdetailregion.html
    GetStockImage themes/tthemeservices.getstockimage.html
    GetOption themes/tthemeservices.getoption.html
@@ -22361,6 +22431,7 @@
 3MAppRemoveStayOnTopFlags
 3MAppRestoreStayOnTopFlags
 3MAppSetMainFormOnTaskBar
+3MAppSetupMainForm
 3MLCLPlatform
 3MGetLCLCapability
 3MDCGetPixel
@@ -22997,6 +23068,8 @@
 3MIsMixed
 3MGetElementDetails
 3MGetDetailSize
+3MGetDetailSizeForWindow
+3MGetDetailSizeForPPI
 3MGetDetailRegion
 3MGetStockImage
 3MGetOption
@@ -24738,6 +24811,7 @@
 3MSetReplacingControl
 3MAutoFreeByControl
 3MIsEnabledControl
+3MCanBeDoubleDocked
 #lcl.Controls.TSizeConstraints #rtl.Classes.TPersistent
 1VFControl
 1VFMaxHeight
@@ -25226,6 +25300,7 @@
 2MUpdateMouseCursor
 2MChanged
 2MGetPalette
+2MGetParentBackground
 2MChildClassAllowed
 2MReadState
 2MLoaded
@@ -25247,6 +25322,7 @@
 2MSetHint
 2MSetName
 2MSetParent
+2MSetParentBackground
 2MSetParentComponent
 2MWndProc
 2MParentFormHandleInitialized
@@ -25288,6 +25364,7 @@
 2PDragKind rw
 2PDragMode rw
 2PMouseCapture rw
+2PParentBackground rw
 2PParentColor rw
 2PParentFont rw
 2PParentShowHint rw
@@ -25437,8 +25514,10 @@
 3MRemoveHandlerOnVisibleChanging
 3MAddHandlerOnVisibleChanged
 3MRemoveHandlerOnVisibleChanged
+3MAddHandlerOnEnabledChanging
+3MRemoveHandlerOnEnabledChanging
 3MAddHandlerOnEnabledChanged
-3MRemoveHandlerOnEnableChanging
+3MRemoveHandlerOnEnabledChanged
 3MAddHandlerOnKeyDown
 3MRemoveHandlerOnKeyDown
 3MAddHandlerOnBeforeDestruction
@@ -25743,7 +25822,6 @@
 2MGetClientRect
 2MGetControlOrigin
 2MGetDeviceContext
-2MGetParentBackground
 2MIsControlMouseMsg
 2MCreateHandle
 2MCreateParams
@@ -25767,7 +25845,6 @@
 2MSetBorderStyle
 2MSetColor
 2MSetChildZPosition
-2MSetParentBackground
 2MShowControl
 2MUpdateControlState
 2MUpdateShowing
@@ -25777,7 +25854,6 @@
 2PBorderStyle rw
 2POnGetSiteInfo rw
 2POnGetDockCaption rw
-2PParentBackground rw
 3PBorderWidth rw
 3PBoundsLockCount r
 3PBrush r
@@ -27889,6 +27965,10 @@
 4PVertScrollBar rw
 #lcl.Forms.TScrollBox #lcl.Forms.TScrollingWinControl
 2MWSRegisterClass
+2MSetParentBackground
+2MCMParentColorChanged
+2MLoaded
+2MUpdateParentColorChange
 3MCreate
 4PAlign
 4PAnchors
@@ -28869,6 +28949,10 @@
 3MRemoveOnShowHintHandler
 3MAddOnGetMainFormHandleHandler
 3MRemoveOnGetMainFormHandleHandler
+3MAddOnActionExecuteHandler
+3MRemoveOnActionExecuteHandler
+3MAddOnActionUpdateHandler
+3MRemoveOnActionUpdateHandler
 3MRemoveAllHandlersOfObject
 3MDoBeforeMouseMessage
 3MIsShortcut
@@ -28976,6 +29060,8 @@
 1VFOnQueryEndSession
 1VFOnMinimize
 1VFOnRestore
+1VFOnActionExecute
+1VFOnActionUpdate
 1MSetExceptionDialog
 2MSetCaptureExceptions
 2MSetHelpFile
@@ -29007,6 +29093,8 @@
 2MSetOnHint
 2MSetOnShowHint
 2MSetOnUserInput
+2MSetOnActionExecute
+2MSetOnActionUpdate
 3MCreate
 3MDestroy
 4PCaptureExceptions rw
@@ -29040,6 +29128,8 @@
 4POnHint rw
 4POnShowHint rw
 4POnUserInput rw
+4POnActionExecute rw
+4POnActionUpdate rw
 #lcl.Forms.TIDesigner #rtl.System.TObject
 2VFLookupRoot
 2VFDefaultFormBoundsValid
@@ -29541,6 +29631,7 @@
 1MSetButtonColorAutoSize
 1MSetButtonColorSize
 2MWSRegisterClass
+2MDoAutoAdjustLayout
 2MDrawGlyph
 2MGetDisabledPattern
 2MGetGlyphSize
@@ -29746,6 +29837,7 @@
 1VFText
 1VFTitle
 1VFVerificationText
+1VFWidth
 1VFOnButtonClicked
 1MDoOnButtonClickedHandler
 1MSetButtons
@@ -29773,6 +29865,7 @@
 3PText rw
 3PTitle rw
 3PVerificationText rw
+3PWidth rw
 3POnButtonClicked rw
 #lcl.Dialogs.TTaskDialog #lcl.Dialogs.TCustomTaskDialog
 4PButtons
@@ -29789,6 +29882,7 @@
 4PText
 4PTitle
 4PVerificationText
+4PWidth
 4POnButtonClicked
 #lcl.Dialogs.TCustomCopyToClipboardDialog #lcl.Forms.TForm
 2MDoCreate
@@ -29899,6 +29993,7 @@
 3MLoadGlyphFromResourceName
 3MLoadGlyphFromLazarusResource
 3MLoadGlyphFromStock
+3MLoadGlyphFromResource
 3MCanShowGlyph
 3PCaption s
 3PDefaultCaption rw
@@ -30581,6 +30676,9 @@
 4POnStartDrag
 #lcl.ExtCtrls.TCustomImage #lcl.Controls.TGraphicControl
 1VFAntialiasingMode
+1VFImageIndex
+1VFImages
+1VFImageWidth
 1VFOnPictureChanged
 1VFOnPaintBackground
 1VFPicture
@@ -30595,7 +30693,11 @@
 1VFUseAncestorCanvas
 1VFPainting
 1MGetCanvas
+1MGetHasGraphic
 1MSetAntialiasingMode
+1MSetImageIndex
+1MSetImages
+1MSetImageWidth
 1MSetPicture
 1MSetCenter
 1MSetKeepOriginX
@@ -30615,6 +30717,7 @@
 3PCanvas r
 3MDestRect
 3MInvalidate
+3PHasGraphic r
 3PAntialiasingMode rw
 3PAlign
 3PAutoSize
@@ -30622,6 +30725,9 @@
 3PKeepOriginXWhenClipped rw
 3PKeepOriginYWhenClipped rw
 3PConstraints
+3PImageIndex rw
+3PImageWidth rw
+3PImages rw
 3PPicture rw
 3PVisible
 3POnClick
@@ -30653,6 +30759,9 @@
 4PDragCursor
 4PDragMode
 4PEnabled
+4PImageIndex
+4PImageWidth
+4PImages
 4POnChangeBounds
 4POnClick
 4POnContextPopup
@@ -31053,6 +31162,7 @@
 1VFAlignment
 1VFVertAlignment
 1VFFullRepaint
+1VFShowAccelChar
 1VFWordWrap
 1MPaintBevel
 1MSetAlignment
@@ -31060,6 +31170,7 @@
 1MSetBevelInner
 1MSetBevelOuter
 1MSetBevelWidth
+1MSetShowAccelChar
 1MSetVertAlignment
 1MSetWordwrap
 2MWSRegisterClass
@@ -31072,6 +31183,7 @@
 2MPaint
 2MSetParentBackground
 2MUpdateParentColorChange
+2PShowAccelChar rw
 2PVerticalAlignment rw
 2PWordWrap rw
 3MCreate
@@ -31120,6 +31232,7 @@
 4PParentFont
 4PParentShowHint
 4PPopupMenu
+4PShowAccelChar
 4PShowHint
 4PTabOrder
 4PTabStop
@@ -31609,6 +31722,12 @@
 3VCombo
 3VEdit
 3VVerif
+#lcl.DialogRes.TDialogImageList #lcl.ImgList.TLCLGlyphs
+1VfDialogIndexes
+1MLoadImage
+1MGetDialogIcon
+3MCreate
+3PDialogIcon r
 #lcl.ComCtrls.TStatusPanel #rtl.Classes.TCollectionItem
 1VFBidiMode
 1VFText
@@ -33613,7 +33732,6 @@
 1MSetMin
 1MSetOrientation
 1MSetPageSize
-1MSetParams
 1MSetPosition
 1MSetReversed
 1MSetScalePos
@@ -33634,6 +33752,7 @@
 2MShouldAutoAdjust
 3MCreate
 3MSetTick
+3MSetParams
 4PAutoSize
 4PFrequency rw
 4PLineSize rw
@@ -34038,6 +34157,7 @@
 1VFOnNodeChanged
 1VFOnSelectionChanged
 1VFOptions
+1VFPathDelimiter
 1VFRClickNode
 1VFSaveItems
 1VFScrollBars
@@ -34147,8 +34267,11 @@
 1MAllowMultiSelectWithShift
 1MSetExpandSignSize
 1MSetExpandSignWidth
+2MTFindOption
+2MTFindOptions
 2VFChangeTimer
 2VFEditor
+2VFFindOptions
 2MWSRegisterClass
 2MGetControlClassDefaultSize
 2MAdded
@@ -34266,6 +34389,7 @@
 2POnHasChildren rw
 2POnNodeChanged rw
 2POnSelectionChanged rw
+2PPathDelimiter rw
 2PReadOnly rw
 2PRightClickSelect rw
 2PRowSelect rw
@@ -35194,6 +35318,8 @@
 1MSetReadOnly
 1MSetValueChecked
 1MSetValueUnchecked
+1MNonDefaultValueChecked
+1MNonDefaultValueUnchecked
 1MCMGetDataLink
 2MGetFieldCheckState
 2MDataChange
@@ -35254,8 +35380,8 @@
 4PShowHint
 4PTabOrder
 4PTabStop
-4PValueChecked rw
-4PValueUnchecked rw
+4PValueChecked rws
+4PValueUnchecked rws
 4PVisible
 #lcl.DBCtrls.TCustomDBComboBox #lcl.StdCtrls.TCustomComboBox
 1VFDataLink
@@ -36535,6 +36661,9 @@
 4PBorderStyle
 4PCellHintPriority
 4PColor
+4PColRowDraggingCursor
+4PColRowDragIndicatorColor
+4PColSizingCursor
 4PColumns
 4PConstraints
 4PDataSource
@@ -36915,6 +37044,14 @@
 3PItems rw
 3PVisibleCount r
 3PEnabled r
+#lcl.Grids.TGridScroller #rtl.System.TObject
+1VDir
+1VTimer
+1VCallback
+1MTimerTick
+3MCreate
+3MDestroy
+3MStart
 #lcl.Grids.TCustomGrid #lcl.Controls.TCustomControl
 1VFAlternateColor
 1VFAutoAdvance
@@ -37031,6 +37168,7 @@
 1VFSavedHint
 1VFCellHintPriority
 1VFOnGetCellHint
+1VFScroller
 1MAdjustCount
 1MCacheVisibleGrid
 1MCancelSelection
@@ -37052,6 +37190,8 @@
 1MSetAltColorStartNormal
 1MSetFlat
 1MSetFocusRectVisible
+1MScrollerDoScroll
+1MSetScroller
 1MSetTitleImageList
 1MSetTitleImageListWidth
 1MSetTitleFont
@@ -38422,17 +38562,27 @@
 4POnStartDrag
 4POnSelect
 4POnUTF8KeyPress
+#lcl.ShellCtrls.TFileItem #rtl.System.TObject
+1VFFileInfo
+1VFBasePath
+3VisFolder
+3MCreate
+3PBasePath r
+3PFileInfo rw
 #lcl.ShellCtrls.TCustomShellTreeView #lcl.ComCtrls.TCustomTreeView
 1VFObjectTypes
 1VFRoot
 1VFShellListView
+1VFExpandCollapseMode
 1VFFileSortType
 1VFInitialRoot
 1VFUseBuiltinIcons
 1VFOnAddItem
+1VFOnSortCompare
 1MGetPath
 1MSetFileSortType
 1MSetObjectTypes
+1MSetOnSortCompare
 1MSetPath
 1MSetRoot
 1MSetShellListView
@@ -38445,9 +38595,11 @@
 2MDoSelectionChanged
 2MDoAddItem
 2MCanExpand
+2MCollapse
 2MDrawBuiltInIcon
 2MGetBuiltinIconSize
 2MNodeHasChildren
+2PExpandCollapseMode rw
 3MCreate
 3MDestroy
 3MGetBasePath
@@ -38462,6 +38614,7 @@
 3PRoot rw
 3PPath rw
 3POnAddItem rw
+3POnSortCompare rw
 3PItems
 #lcl.ShellCtrls.TShellTreeView #lcl.ShellCtrls.TCustomShellTreeView
 4PAlign
@@ -38474,6 +38627,7 @@
 4PColor
 4PConstraints
 4PEnabled
+4PExpandCollapseMode
 4PExpandSignType
 4PFont
 4PFileSortType
@@ -38538,6 +38692,7 @@
 4POnMouseWheelRight
 4POnSelectionChanged
 4POnShowHint
+4POnSortCompare
 4POnUTF8KeyPress
 4POptions
 4PTreeLineColor
@@ -38656,8 +38811,8 @@
 4PRoot
 4PShellTreeView
 #lcl.ShellCtrls.TShellTreeNode #lcl.ComCtrls.TTreeNode
-1VFFileInfo
 1VFBasePath
+2VFFileInfo
 2MSetBasePath
 3MShortFilename
 3MFullFilename
@@ -40316,14 +40471,17 @@
 4PTextHint
 4PVisible
 #lcl.EditBtn.TCustomControlFilterEdit #lcl.EditBtn.TCustomEditButton
-1VfFilter
 1VfFilterLowercase
 1VfFilterOptions
 1VfIdleConnected
 1VfSortData
 1VfIsFirstSetFormActivate
 1VfOnAfterFilter
+1MApplyFilter
+1MGetFilter
 1MSetFilter
+1MSetFilterOptions
+1MSetSortData
 1MSetIdleConnected
 1MOnIdle
 1MIsTextHintStored
@@ -40334,13 +40492,13 @@
 2VfOnFilterItemEx
 2VfOnCheckItem
 2MDestroyWnd
+2MActivateFilter
 2MDoDefaultFilterItem
 2MDoFilterItem
 2MEditKeyDown
 2MEditChange
 2MBuddyClick
 2MSortAndFilter
-2MApplyFilter
 2MApplyFilterCore
 2MMoveNext
 2MMovePrev
@@ -41246,7 +41404,6 @@
 1MInitialize
 1MKeepInView
 1MReturnDate
-2MPaint
 #lcl.JSONPropStorage.TCustomJSONPropStorage #lcl.Forms.TFormPropertyStorage
 1VFCount
 1VFJSONFileName
@@ -41816,6 +41973,7 @@
 1VFAssignedFont
 1VFAssignedPen
 1VFBaseWindowOrg
+1VFPolygonWindingMode
 1VFWindowOrg
 1VGraphicStateList
 1MGetAssignedBrush
@@ -41848,6 +42006,7 @@
 3MDoDrawImage
 3MCanvasCopyRect
 3MFillColor
+3MPolygon
 3MAssignPenData
 3MAssignBrushData
 3MAssignFontData
diff -Nru lazarus-2.2.4+dfsg1/ide/lazarus.lpi lazarus-2.2.6+dfsg1/ide/lazarus.lpi
--- lazarus-2.2.4+dfsg1/ide/lazarus.lpi	2022-09-25 12:37:17.000000000 +0200
+++ lazarus-2.2.6+dfsg1/ide/lazarus.lpi	2023-03-04 14:24:25.000000000 +0100
@@ -25,7 +25,7 @@
       <UseVersionInfo Value="True"/>
       <MajorVersionNr Value="2"/>
       <MinorVersionNr Value="2"/>
-      <RevisionNr Value="4"/>
+      <RevisionNr Value="6"/>
       <CharSet Value="04B0"/>
       <StringTable ProductName="Lazarus IDE"/>
     </VersionInfo>
Binary files /tmp/IdHZXXQ1G9/lazarus-2.2.4+dfsg1/ide/lazarus.res and /tmp/5arYyC9vuS/lazarus-2.2.6+dfsg1/ide/lazarus.res differ
diff -Nru lazarus-2.2.4+dfsg1/ide/version.inc lazarus-2.2.6+dfsg1/ide/version.inc
--- lazarus-2.2.4+dfsg1/ide/version.inc	2022-09-25 12:37:17.000000000 +0200
+++ lazarus-2.2.6+dfsg1/ide/version.inc	2023-03-04 14:24:25.000000000 +0100
@@ -1 +1 @@
-'2.2.4'
+'2.2.6'
diff -Nru lazarus-2.2.4+dfsg1/languages/lazaruside.sk.po lazarus-2.2.6+dfsg1/languages/lazaruside.sk.po
--- lazarus-2.2.4+dfsg1/languages/lazaruside.sk.po	2022-09-25 12:37:18.000000000 +0200
+++ lazarus-2.2.6+dfsg1/languages/lazaruside.sk.po	2023-03-04 14:24:25.000000000 +0100
@@ -3,7 +3,7 @@
 "Project-Id-Version: lazaruside\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2007-12-26 15:21+0100\n"
-"PO-Revision-Date: 2022-06-10 10:51+0200\n"
+"PO-Revision-Date: 2022-12-09 10:55+0100\n"
 "Last-Translator: Slavko <slavino@slavino.sk>\n"
 "Language-Team: Slovenský <sk@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -682,7 +682,7 @@
 
 #: lazarusidestrconsts.dlgaddnewmode
 msgid "Add new mode"
-msgstr ""
+msgstr "Pridať nový režim"
 
 #: lazarusidestrconsts.dlgaddsemicolon
 msgid "Add semicolon"
@@ -757,7 +757,7 @@
 
 #: lazarusidestrconsts.dlgautohidecursor
 msgid "Hide mouse pointer when typing"
-msgstr ""
+msgstr "Pri písaní skryť ukazovateľ myši"
 
 #: lazarusidestrconsts.dlgautoindent
 msgctxt "lazarusidestrconsts.dlgautoindent"
@@ -1649,7 +1649,6 @@
 msgstr ""
 
 #: lazarusidestrconsts.dlgedmisc
-#, fuzzy
 msgctxt "lazarusidestrconsts.dlgedmisc"
 msgid "Miscellaneous"
 msgstr "Rôzne"
@@ -2906,7 +2905,7 @@
 #: lazarusidestrconsts.dlgmouseoptions
 msgctxt "lazarusidestrconsts.dlgmouseoptions"
 msgid "Mouse"
-msgstr ""
+msgstr "Myš"
 
 #: lazarusidestrconsts.dlgmouseoptionsadv
 msgid "Advanced"
@@ -4720,11 +4719,11 @@
 
 #: lazarusidestrconsts.lisaddanewseparatoraboveselecteditem
 msgid "Add a new separator above selected item"
-msgstr ""
+msgstr "Pridať nový oddeľovač nad vybratú položku"
 
 #: lazarusidestrconsts.lisaddanewseparatorbelowselecteditem
 msgid "Add a new separator below selected item"
-msgstr ""
+msgstr "Pridať nový oddeľovač pod vybratú položku"
 
 #: lazarusidestrconsts.lisadddelphidefine
 msgid "Add defines simulating Delphi7"
@@ -4791,7 +4790,7 @@
 
 #: lazarusidestrconsts.lisaddnewmacro
 msgid "Add new macro"
-msgstr ""
+msgstr "Pridať nové makro"
 
 #: lazarusidestrconsts.lisaddnewset
 msgid "Add new set"
@@ -5150,7 +5149,7 @@
 
 #: lazarusidestrconsts.lisautomatically
 msgid "Automatically"
-msgstr ""
+msgstr "Automaticky"
 
 #: lazarusidestrconsts.lisautomaticallyconvertlfmtolrs
 msgid "Automatically convert .lfm files to .lrs resource files"
@@ -5214,7 +5213,7 @@
 
 #: lazarusidestrconsts.lisavailableforinstallation
 msgid "Available for installation"
-msgstr ""
+msgstr "Dostupné na inštaláciu"
 
 #: lazarusidestrconsts.lisavailableprojectbuildmodes
 msgid "Available project build modes:"
@@ -5372,7 +5371,7 @@
 
 #: lazarusidestrconsts.lisbtndlgadd
 msgid "&Add ..."
-msgstr ""
+msgstr "Prid&ať ..."
 
 #: lazarusidestrconsts.lisbtndlgreplace
 msgctxt "lazarusidestrconsts.lisbtndlgreplace"
@@ -6372,7 +6371,7 @@
 
 #: lazarusidestrconsts.liscleancommonfiles
 msgid "Clean common files"
-msgstr ""
+msgstr "Vyčistiť bežné súbory"
 
 #: lazarusidestrconsts.liscleanlazarussource
 msgid "Clean Lazarus Source"
@@ -6384,7 +6383,7 @@
 
 #: lazarusidestrconsts.liscleanup
 msgid "Clean up"
-msgstr ""
+msgstr "Vyčistiť"
 
 #: lazarusidestrconsts.liscleanupandbuild
 msgctxt "lazarusidestrconsts.liscleanupandbuild"
@@ -6398,7 +6397,7 @@
 #: lazarusidestrconsts.liscleanuppackage
 #, object-pascal-format
 msgid "Clean up package \"%s\"."
-msgstr ""
+msgstr "Vyčistiť balíček \"%s\"."
 
 #: lazarusidestrconsts.liscleanupunitpath
 msgid "Clean up unit path?"
@@ -6423,7 +6422,7 @@
 
 #: lazarusidestrconsts.lisclicktoseethechoices
 msgid "Click to see the choices"
-msgstr ""
+msgstr "Kliknutím zobraziť možnosti"
 
 #: lazarusidestrconsts.lisclicktoselectpalettepage
 msgid "Click to Select Palette Page"
@@ -6431,7 +6430,7 @@
 
 #: lazarusidestrconsts.lisclone
 msgid "Clone"
-msgstr ""
+msgstr "Klonovať"
 
 #: lazarusidestrconsts.lisclose
 msgctxt "lazarusidestrconsts.lisclose"
@@ -6491,7 +6490,7 @@
 
 #: lazarusidestrconsts.liscmppages
 msgid "Pages"
-msgstr ""
+msgstr "Stránky"
 
 #: lazarusidestrconsts.liscmppalettevisible
 msgid "Palette is &visible"
@@ -7070,7 +7069,7 @@
 
 #: lazarusidestrconsts.liscodetoolsoptsbracket
 msgid "Bracket"
-msgstr ""
+msgstr "Zátvorka"
 
 #: lazarusidestrconsts.liscodetoolsoptscaret
 msgid "Caret (^)"
@@ -8141,7 +8140,7 @@
 
 #: lazarusidestrconsts.liscreatefilter
 msgid "Create Filter"
-msgstr ""
+msgstr "Vytvoriť filter"
 
 #: lazarusidestrconsts.liscreatefppkgconfig
 msgid "Restore Fppkg configuration"
@@ -8182,7 +8181,7 @@
 
 #: lazarusidestrconsts.liscreateupdatepofilewhensavingalfmfile
 msgid "Create/update .po file when saving a lfm file"
-msgstr ""
+msgstr "Vytvoriť/aktualizovať súbor .po pri ukladaní súboru lfm"
 
 #: lazarusidestrconsts.liscreatingfileindexoffpcsources
 #, object-pascal-format
@@ -8309,7 +8308,7 @@
 
 #: lazarusidestrconsts.lisdadimagename
 msgid "Image Name"
-msgstr ""
+msgstr "Názov obrázka"
 
 #: lazarusidestrconsts.lisdadpid
 msgid "PID"
@@ -8532,7 +8531,7 @@
 
 #: lazarusidestrconsts.lisdebugoptionsfrmaddexception
 msgid "Add Exception"
-msgstr ""
+msgstr "Pridať výnimku"
 
 #: lazarusidestrconsts.lisdebugoptionsfrmadditionalsearchpath
 msgid "Additional search path"
@@ -8632,14 +8631,13 @@
 msgstr "Modul"
 
 #: lazarusidestrconsts.lisdebugoptionsfrmname
-#, fuzzy
 msgctxt "lazarusidestrconsts.lisdebugoptionsfrmname"
 msgid "Name:"
 msgstr "Meno:"
 
 #: lazarusidestrconsts.lisdebugoptionsfrmnotifyonlazarusexceptions
 msgid "Notify on Exceptions"
-msgstr ""
+msgstr "Upozorniť pri výnimkách"
 
 #: lazarusidestrconsts.lisdebugoptionsfrmosexceptions
 msgid "OS Exceptions"
@@ -8818,7 +8816,7 @@
 #: lazarusidestrconsts.lisdeletemacro
 #, object-pascal-format
 msgid "Delete macro \"%s\"?"
-msgstr ""
+msgstr "Zmazať makro \"%s\"?"
 
 #: lazarusidestrconsts.lisdeletemode
 #, object-pascal-format
@@ -8832,7 +8830,7 @@
 
 #: lazarusidestrconsts.lisdeleteoldfile2
 msgid "Delete old file?"
-msgstr "Zmazať staré súbory?"
+msgstr "Zmazať starý súbor?"
 
 #: lazarusidestrconsts.lisdeleteselectedmacro
 msgid "Delete selected macro?"
@@ -8947,11 +8945,11 @@
 
 #: lazarusidestrconsts.lisdirectories
 msgid "Directories"
-msgstr ""
+msgstr "Adresáre"
 
 #: lazarusidestrconsts.lisdirectory
 msgid "Directory: "
-msgstr ""
+msgstr "Adresár:"
 
 #: lazarusidestrconsts.lisdirectorynotfound
 #, object-pascal-format
@@ -9047,7 +9045,7 @@
 
 #: lazarusidestrconsts.lisdiscardchangescreatenewproject
 msgid "Discard changes, create new project"
-msgstr ""
+msgstr "Zahodiť zmeny, vytvoriť nový projekt"
 
 #: lazarusidestrconsts.lisdiskdiffclickononeoftheaboveitemstoseethediff
 msgid "Click on one of the above items to see the diff"
@@ -9079,8 +9077,6 @@
 msgstr "Rozoznávať veľké a malé písmená, napr. C a c"
 
 #: lazarusidestrconsts.lisdlgadd
-#, fuzzy
-#| msgid "Add..."
 msgctxt "lazarusidestrconsts.lisdlgadd"
 msgid "Add ..."
 msgstr "Pridať..."
@@ -9112,7 +9108,7 @@
 #: lazarusidestrconsts.lisdlgimport
 msgctxt "lazarusidestrconsts.lisdlgimport"
 msgid "Import ..."
-msgstr ""
+msgstr "Importovať ..."
 
 #: lazarusidestrconsts.lisdlgmore
 msgctxt "lazarusidestrconsts.lisdlgmore"
@@ -9770,7 +9766,7 @@
 
 #: lazarusidestrconsts.liserroropeningform
 msgid "Error opening form"
-msgstr ""
+msgstr "Chyba otvárania formulára"
 
 #: lazarusidestrconsts.liserrorparsinglfmcomponentstream
 msgid "Error parsing lfm component stream."
@@ -9786,10 +9782,9 @@
 msgstr "Chyba čítania XML"
 
 #: lazarusidestrconsts.liserrorreadingxmlfile
-#, object-pascal-format, fuzzy, badformat
-#| msgid "Error reading xml file %s%s%s%s%s"
+#, object-pascal-format
 msgid "Error reading xml file \"%s\"%s%s"
-msgstr "Chyba čítania XML súboru %s%s%s%s%s"
+msgstr "Chyba čítania XML súboru \"%s\"%s%s"
 
 #: lazarusidestrconsts.liserrorrenamingfile
 msgid "Error renaming file"
@@ -9803,7 +9798,7 @@
 #: lazarusidestrconsts.liserrors2
 #, object-pascal-format
 msgid ", Errors: %s"
-msgstr ""
+msgstr ", Chyby: %s"
 
 #: lazarusidestrconsts.liserrorsavingform
 msgid "Error saving form"
@@ -9964,7 +9959,7 @@
 
 #: lazarusidestrconsts.lisexportallitemstofile
 msgid "Export All Items to File"
-msgstr ""
+msgstr "Exportovať všetky položky do súboru"
 
 #: lazarusidestrconsts.lisexportenvironmentoptions
 msgctxt "lazarusidestrconsts.lisexportenvironmentoptions"
@@ -9989,7 +9984,7 @@
 
 #: lazarusidestrconsts.lisexportselected
 msgid "Export selected"
-msgstr ""
+msgstr "Exportovať vybraté"
 
 #: lazarusidestrconsts.lisexportsub
 msgid "Export >>"
@@ -10106,7 +10101,7 @@
 
 #: lazarusidestrconsts.lisfilefilters
 msgid "File Filters"
-msgstr ""
+msgstr "Filtre súborov"
 
 #: lazarusidestrconsts.lisfilefiltersaddrow
 msgid "Add Row"
@@ -10162,10 +10157,9 @@
 msgstr "Súbor je symbolický odkaz"
 
 #: lazarusidestrconsts.lisfileisvirtual
-#, object-pascal-format, fuzzy, badformat
-#| msgid "File %s%s%s is virtual."
+#, object-pascal-format
 msgid "File \"%s\" is virtual."
-msgstr "Súbor %s%s%s je virtuálny."
+msgstr "Súbor \"%s\" je virtuálny."
 
 #: lazarusidestrconsts.lisfilelinkerror
 msgid "File link error"
@@ -10834,10 +10828,8 @@
 msgstr "Šestnástkovo"
 
 #: lazarusidestrconsts.lishfmhelpforfreepascalcompilermessage
-#, fuzzy
-#| msgid "Help for FreePascal Compiler message"
 msgid "Help for Free Pascal Compiler message"
-msgstr "Pomoc pre správu FreePascal Compiler"
+msgstr "Pomoc pre správu FreePascal prekladača"
 
 #: lazarusidestrconsts.lishideallhintsandwarningsbyinsertingidedirectivesh
 msgid "Hide all hints and warnings by inserting IDE directives {%H-}"
@@ -10989,7 +10981,7 @@
 
 #: lazarusidestrconsts.lisidecompileandrestart
 msgid "The IDE will be recompiled and restarted during installation/uninstallation of packages."
-msgstr ""
+msgstr "IDE bude znova preložené a reštartované počas inštalácie/odinštalácie balíčkov."
 
 #: lazarusidestrconsts.lisideconficurationfoundmaybelongtootherlazarus
 #, object-pascal-format
@@ -11139,7 +11131,7 @@
 
 #: lazarusidestrconsts.lisignoreexceptiontype
 msgid "Ignore this exception type"
-msgstr ""
+msgstr "Ignorovať tento typ výnimky"
 
 #: lazarusidestrconsts.lisignoreuseasancestor
 #, object-pascal-format
@@ -11179,7 +11171,7 @@
 
 #: lazarusidestrconsts.lisimportlist
 msgid "Import list"
-msgstr "Importný zoznam"
+msgstr "Importovať zoznam"
 
 #: lazarusidestrconsts.lisimportpackagelistxml
 msgid "Import package list (*.xml)"
@@ -11387,7 +11379,7 @@
 
 #: lazarusidestrconsts.lisinsession
 msgid "In session"
-msgstr ""
+msgstr "V relácii"
 
 #: lazarusidestrconsts.lisinspect
 msgid "&Inspect"
@@ -11516,7 +11508,7 @@
 
 #: lazarusidestrconsts.lisinvalidfilename
 msgid "Invalid file name"
-msgstr ""
+msgstr "Neplatné meno súboru"
 
 #: lazarusidestrconsts.lisinvalidfilter
 msgid "Invalid filter"
@@ -11596,7 +11588,7 @@
 #: lazarusidestrconsts.lisinvalidversionin
 #, object-pascal-format
 msgid "invalid version in %s"
-msgstr ""
+msgstr "neplatná verzia v %s"
 
 #: lazarusidestrconsts.lisisalreadypartoftheproject
 #, object-pascal-format
@@ -11616,7 +11608,7 @@
 
 #: lazarusidestrconsts.lisisddirectorynotfound
 msgid "directory not found"
-msgstr ""
+msgstr "adresár nenájdený"
 
 #: lazarusidestrconsts.lisissues
 msgid "Issues"
@@ -11985,15 +11977,15 @@
 #: lazarusidestrconsts.liskmopenrecent
 msgctxt "lazarusidestrconsts.liskmopenrecent"
 msgid "Open Recent"
-msgstr ""
+msgstr "Otvoriť posledné"
 
 #: lazarusidestrconsts.liskmopenrecentpackage
 msgid "Open recent package"
-msgstr ""
+msgstr "Otvoriť nedávny balíček"
 
 #: lazarusidestrconsts.liskmopenrecentproject
 msgid "Open recent project"
-msgstr ""
+msgstr "Otvoriť nedávny projekt"
 
 #: lazarusidestrconsts.liskmpastecomponentsfromclipboard
 msgid "Paste Components"
@@ -12298,7 +12290,7 @@
 
 #: lazarusidestrconsts.lislastopened
 msgid "Last opened"
-msgstr ""
+msgstr "Naposledy otvorené"
 
 #: lazarusidestrconsts.lislaunchingapplicationinvalid
 msgid "Launching application invalid"
@@ -12454,7 +12446,7 @@
 
 #: lazarusidestrconsts.lislazbuildrenameprofinfo
 msgid "New name for profile:"
-msgstr ""
+msgstr "Nové meno pre profil:"
 
 #: lazarusidestrconsts.lislazbuildrestartafterbuild
 #, fuzzy
@@ -13126,19 +13118,19 @@
 
 #: lazarusidestrconsts.lismenueditoraddnewitemabove
 msgid "&Add new item above"
-msgstr ""
+msgstr "Prid&ať novú položku nad"
 
 #: lazarusidestrconsts.lismenueditoraddnewitemafter
 msgid "Add ne&w item after"
-msgstr ""
+msgstr "Pridať novú položku za"
 
 #: lazarusidestrconsts.lismenueditoraddnewitembefore
 msgid "&Add new item before"
-msgstr ""
+msgstr "Prid&ať novú položku pred"
 
 #: lazarusidestrconsts.lismenueditoraddnewitembelow
 msgid "Add ne&w item below"
-msgstr ""
+msgstr "Pridať &novú položku pod"
 
 #: lazarusidestrconsts.lismenueditoraddonclickhandler
 msgid "Add &OnClick handler"
@@ -13146,23 +13138,23 @@
 
 #: lazarusidestrconsts.lismenueditoraddseparatorafter
 msgid "Add separator &after"
-msgstr ""
+msgstr "Pridať oddeľovač &za"
 
 #: lazarusidestrconsts.lismenueditoraddseparatorbefore
 msgid "Add separator &before"
-msgstr ""
+msgstr "Pridať oddeľovač &pred"
 
 #: lazarusidestrconsts.lismenueditoraddsubmenu
 msgid "Add submenu"
-msgstr ""
+msgstr "Pridať podmenu"
 
 #: lazarusidestrconsts.lismenueditoraddsubmenubelow
 msgid "Add &submenu below"
-msgstr ""
+msgstr "Pridať &podmenu pod"
 
 #: lazarusidestrconsts.lismenueditoraddsubmenuright
 msgid "Add &submenu right"
-msgstr ""
+msgstr "Pridať &podmenu vpravo"
 
 #: lazarusidestrconsts.lismenueditoranewmenutemplatehasbeensaved
 #, object-pascal-format
@@ -13387,7 +13379,7 @@
 
 #: lazarusidestrconsts.lismenueditormenuitemactions
 msgid "Menu Item actions"
-msgstr ""
+msgstr "Akcie položky menu"
 
 #: lazarusidestrconsts.lismenueditormenuitemshortcutconflictsins
 #, object-pascal-format
@@ -13400,39 +13392,37 @@
 
 #: lazarusidestrconsts.lismenueditormoveitemdown
 msgid "Mo&ve item down"
-msgstr ""
+msgstr "Posunúť položku nadol"
 
 #: lazarusidestrconsts.lismenueditormoveitemleft
 msgid "&Move item left"
-msgstr ""
+msgstr "Posunúť položku doľava"
 
 #: lazarusidestrconsts.lismenueditormoveitemright
 msgid "Mo&ve item right"
-msgstr ""
+msgstr "Posunúť položku doprava"
 
 #: lazarusidestrconsts.lismenueditormoveitemup
 msgid "&Move item up"
-msgstr ""
+msgstr "&Posunúť položku nahor"
 
 #: lazarusidestrconsts.lismenueditormoveselecteditemdown
-#, fuzzy
 msgctxt "lazarusidestrconsts.lismenueditormoveselecteditemdown"
 msgid "Move selected item down"
-msgstr "Presuň vybratú položku nadol"
+msgstr "Presunúť vybratú položku nadol"
 
 #: lazarusidestrconsts.lismenueditormoveselecteditemtotheleft
 msgid "Move selected item to the left"
-msgstr ""
+msgstr "Presunúť vybranú položku doľava"
 
 #: lazarusidestrconsts.lismenueditormoveselecteditemtotheright
 msgid "Move selected item to the right"
-msgstr ""
+msgstr "Presunúť vybranú položku doprava"
 
 #: lazarusidestrconsts.lismenueditormoveselecteditemup
-#, fuzzy
 msgctxt "lazarusidestrconsts.lismenueditormoveselecteditemup"
 msgid "Move selected item up"
-msgstr "Presuň vybratú položku nahor"
+msgstr "Presunúť vybratú položku nahor"
 
 #: lazarusidestrconsts.lismenueditormoveup
 msgid "Move Up (or left)"
@@ -13483,7 +13473,7 @@
 
 #: lazarusidestrconsts.lismenueditorremoveallseparators
 msgid "&Remove all separators"
-msgstr ""
+msgstr "Odst&rániť všetky oddeľovače"
 
 #: lazarusidestrconsts.lismenueditorresolvedconflictss
 #, object-pascal-format
@@ -13525,7 +13515,7 @@
 
 #: lazarusidestrconsts.lismenueditorseparators
 msgid "Se&parators"
-msgstr ""
+msgstr "Oddelovače"
 
 #: lazarusidestrconsts.lismenueditorshortcutitemss
 #, object-pascal-format
@@ -13615,7 +13605,7 @@
 #: lazarusidestrconsts.lismenueditorssubmenu
 #, object-pascal-format
 msgid "%s submenu"
-msgstr ""
+msgstr "%s podmenu"
 
 #: lazarusidestrconsts.lismenueditorstandardtemplates
 msgid "Standard templates"
@@ -14635,15 +14625,15 @@
 
 #: lazarusidestrconsts.lismmstoredinideenvironmentoptionsxml
 msgid "Stored in IDE (environmentoptions.xml)"
-msgstr ""
+msgstr "Uložené v IDE (environmentoptions.xml)"
 
 #: lazarusidestrconsts.lismmstoredinprojectlpi
 msgid "Stored in project (.lpi)"
-msgstr ""
+msgstr "Uložené v projekte (.lpi)"
 
 #: lazarusidestrconsts.lismmstoredinsessionofprojectlps
 msgid "Stored in session of project (.lps)"
-msgstr ""
+msgstr "Uložené v relácii projektu (.lps)"
 
 #: lazarusidestrconsts.lismmtargets
 msgid "Targets: "
@@ -14746,12 +14736,12 @@
 #: lazarusidestrconsts.lismoveonepositiondown
 #, object-pascal-format
 msgid "Move \"%s\" one position down"
-msgstr ""
+msgstr "Presunúť \"%s\" o jednu pozíciu nadol"
 
 #: lazarusidestrconsts.lismoveonepositionup
 #, object-pascal-format
 msgid "Move \"%s\" one position up"
-msgstr ""
+msgstr "Presunúť \"%s\" o jednu pozíciu nahor"
 
 #: lazarusidestrconsts.lismoveorcopyfiles
 msgid "Move or Copy files?"
@@ -15723,7 +15713,7 @@
 
 #: lazarusidestrconsts.lispckeditaddfilesfromfilesystem
 msgid "Add Files from File System"
-msgstr ""
+msgstr "Pridať súbory zo systému súborov"
 
 #: lazarusidestrconsts.lispckeditaddotheritems
 msgid "Add other items"
@@ -15753,7 +15743,7 @@
 
 #: lazarusidestrconsts.lispckeditcleanupdependencies
 msgid "Clean up dependencies ..."
-msgstr ""
+msgstr "Vyčistiť závislosti ..."
 
 #: lazarusidestrconsts.lispckeditcleardefaultpreferredfilenameofdependency
 msgid "Clear default/preferred filename of dependency"
@@ -15876,14 +15866,10 @@
 msgstr "Len na čítanie: %s"
 
 #: lazarusidestrconsts.lispckeditrecompileallrequired
-#, fuzzy
-#| msgid "Recompile all required"
 msgid "Recompile All Required"
 msgstr "Znova preložiť všetky vyžadované"
 
 #: lazarusidestrconsts.lispckeditrecompileclean
-#, fuzzy
-#| msgid "Recompile clean"
 msgid "Recompile Clean"
 msgstr "Vyčistiť a znova preložiť"
 
@@ -16212,25 +16198,23 @@
 
 #: lazarusidestrconsts.lispesavepackageas
 msgid "Save Package As ..."
-msgstr ""
+msgstr "Uložiť balíček ako ..."
 
 #: lazarusidestrconsts.lispeshowdirectoryhierarchy
 msgid "Show directory hierarchy"
-msgstr ""
+msgstr "Zobraziť hierarchiu adresárov"
 
 #: lazarusidestrconsts.lispeshowmissingfiles
 msgid "Show Missing Files"
-msgstr ""
+msgstr "Zobraziť chýbajúce súbory"
 
 #: lazarusidestrconsts.lispesortfiles
-#, fuzzy
-#| msgid "Sort Files"
 msgid "Sort Files Permanently"
-msgstr "Zoradiť súbory"
+msgstr "Zoradiť súbory natrvalo"
 
 #: lazarusidestrconsts.lispesortfilesalphabetically
 msgid "Sort files alphabetically"
-msgstr ""
+msgstr "Zoradiť súbory podľa abecedy"
 
 #: lazarusidestrconsts.lispethefileiscurrentlynotintheincludepathofthepackagea
 #, object-pascal-format
@@ -16713,16 +16697,14 @@
 msgstr "Meno balíčka %s%s%s %ssúboru %s%s%s je neplatné."
 
 #: lazarusidestrconsts.lispkgmangthepackagewasmarkedcurrentlylazarus
-#, object-pascal-format, fuzzy, badformat
-#| msgid "The package %s%s%s was marked.%sCurrently Lazarus only supports static linked packages. The real un-installation needs rebuilding and restarting of Lazarus.%s%sDo you want to rebuild Lazarus now?"
+#, object-pascal-format
 msgid "The package \"%s\" was marked.%sCurrently Lazarus only supports static linked packages. The real un-installation needs rebuilding and restarting of Lazarus.%sDo you want to rebuild Lazarus now?"
-msgstr "Balíček %s%s%s bol označený na odinštaláciu.%sMomentálne Lazarus podporuje builen staticky pripojené balíčky, preto odinštalácia vyžaduje prebudovanie a reštart Lazarus.%s%sChcete teraz prebudovať Lazarus?"
+msgstr "Balíček \"%s\" bol označený.%sMomentálne Lazarus podporuje len staticky pripojené balíčky, preto odinštalácia vyžaduje prebudovanie a reštart Lazarusu.%sChcete teraz prebudovať Lazarus?"
 
 #: lazarusidestrconsts.lispkgmangthepackagewasmarkedforinstallationcurrentlylazarus
-#, object-pascal-format, fuzzy, badformat
-#| msgid "The package %s%s%s was marked for installation.%sCurrently Lazarus only supports static linked packages. The real installation needs rebuilding and restarting of Lazarus.%s%sDo you want to rebuild Lazarus now?"
+#, object-pascal-format
 msgid "The package \"%s\" was marked for installation.%sCurrently Lazarus only supports static linked packages. The real installation needs rebuilding and restarting of Lazarus.%sDo you want to rebuild Lazarus now?"
-msgstr "Balíček %s%s%s bol označený na inštaláciu.%sMomentálne Lazarus podporuje len staticky pripojené balíčky, preto inštalácia vyžaduje prebudovanie a reštart Lazarus.%s%sChcete teraz prebudovať Lazarus?"
+msgstr "Balíček \"%s\" bol označený na inštaláciu.%sMomentálne Lazarus podporuje len staticky pripojené balíčky, preto inštalácia vyžaduje prebudovanie a reštart Lazarus.%sChcete teraz prebudovať Lazarus?"
 
 #: lazarusidestrconsts.lispkgmangtheprojectrequiresthepackagebutitwasnotfound
 #, object-pascal-format, fuzzy, badformat
@@ -18777,7 +18759,7 @@
 
 #: lazarusidestrconsts.lisstorepathdelimitersandas
 msgid "Store path delimiters \\ and / as"
-msgstr ""
+msgstr "Ukladať oddeľovače cesty \\ a / ako"
 
 #: lazarusidestrconsts.lisstrangelpifile
 msgid "Strange lpi file"
@@ -19340,10 +19322,9 @@
 msgstr ""
 
 #: lazarusidestrconsts.listheprogrammakewasnotfoundthistoolisneededtobuildla
-#, object-pascal-format, fuzzy, badformat
-#| msgid "The program %smake%s was not found.%sThis tool is needed to build Lazarus.%s"
+#, object-pascal-format
 msgid "The program \"make\" was not found.%sThis tool is needed to build Lazarus."
-msgstr "Program %smake%s nebol nájdený.%sTento nástroj je potrebný na prebudovanie Lazarus.%s"
+msgstr "Program \"make\" nebol nájdený.%sTento nástroj je potrebný na prebudovanie Lazarusu."
 
 #: lazarusidestrconsts.listheprojectcompileroptionsandthedirectivesinthemain
 msgid "The project compiler options and the directives in the main source differ. For the new unit the mode and string type of the project options are used:"
@@ -20139,10 +20120,9 @@
 msgstr "Nemožno vyčistiť cieľový adresár"
 
 #: lazarusidestrconsts.lisunabletocleanuppleasecheckpermissions
-#, object-pascal-format, fuzzy, badformat
-#| msgid "Unable to clean up %s%s%s.%sPlease check permissions."
+#, object-pascal-format
 msgid "Unable to clean up \"%s\".%sPlease check permissions."
-msgstr "Nemožno vyčistiť %s%s%s.%sProsím skontrolujte prístupové práva."
+msgstr "Nemožno vyčistiť \"%s\".%sProsím skontrolujte prístupové práva."
 
 #: lazarusidestrconsts.lisunabletoconvertcomponenttextintobinaryformat
 #, object-pascal-format
@@ -21284,7 +21264,7 @@
 
 #: lazarusidestrconsts.rscloseall
 msgid "Close all pages"
-msgstr ""
+msgstr "Zatvoriť všetky stránky"
 
 #: lazarusidestrconsts.rsclosecurrentpage
 msgid "Close current page"
@@ -21328,11 +21308,11 @@
 
 #: lazarusidestrconsts.rsi18nexcluded
 msgid "Excluded"
-msgstr ""
+msgstr "Vylúčené"
 
 #: lazarusidestrconsts.rsi18nforceupdatepofilesonnextbuild
 msgid "Force update PO files on next build"
-msgstr ""
+msgstr "Vynútiť aktualizáciu súborov PO pri ďalšom vybudovaní"
 
 #: lazarusidestrconsts.rsi18nidentifiers
 msgid "Identifiers:"
@@ -21525,7 +21505,7 @@
 
 #: lazarusidestrconsts.srkmcarhelpmenu
 msgid "Help menu commands"
-msgstr "Príkazu menu Help"
+msgstr "Príkazy menu Help"
 
 #: lazarusidestrconsts.srkmcatcmdcmd
 msgid "Command commands"
diff -Nru lazarus-2.2.4+dfsg1/lazarus.app/Contents/Info.plist lazarus-2.2.6+dfsg1/lazarus.app/Contents/Info.plist
--- lazarus-2.2.4+dfsg1/lazarus.app/Contents/Info.plist	2022-09-25 12:37:18.000000000 +0200
+++ lazarus-2.2.6+dfsg1/lazarus.app/Contents/Info.plist	2023-03-04 14:24:25.000000000 +0100
@@ -148,7 +148,7 @@
 	<key>CFBundlePackageType</key>
 	<string>APPL</string>
 	<key>CFBundleShortVersionString</key>
-	<string>2.2.4</string>
+	<string>2.2.6</string>
 	<key>CFBundleSignature</key>
 	<string>laza</string>
 	<key>CFBundleVersion</key>
diff -Nru lazarus-2.2.4+dfsg1/lcl/dialogs.pp lazarus-2.2.6+dfsg1/lcl/dialogs.pp
--- lazarus-2.2.4+dfsg1/lcl/dialogs.pp	2022-09-25 12:37:18.000000000 +0200
+++ lazarus-2.2.6+dfsg1/lcl/dialogs.pp	2023-03-04 14:24:25.000000000 +0100
@@ -307,6 +307,8 @@
     procedure SetButtonColorSize(const AValue: Integer);
   protected
     class procedure WSRegisterClass; override;
+    procedure DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy;
+      const AXProportion, AYProportion: Double); override;
     function DrawGlyph(ACanvas: TCanvas; const AClient: TRect; const AOffset: TPoint;
       AState: TButtonState; ATransparent: Boolean; BiDiFlags: Longint): TRect; override;
     function GetDisabledPattern: TBitmap; virtual;
diff -Nru lazarus-2.2.4+dfsg1/lcl/grids.pas lazarus-2.2.6+dfsg1/lcl/grids.pas
--- lazarus-2.2.4+dfsg1/lcl/grids.pas	2022-09-25 12:37:18.000000000 +0200
+++ lazarus-2.2.6+dfsg1/lcl/grids.pas	2023-03-04 14:24:25.000000000 +0100
@@ -6532,7 +6532,10 @@
   aColRow: Integer;
 begin
   if FromIndex=ToIndex then
+  begin
+    VisualChange;
     exit;
+  end;
 
   CheckIndex(IsColumn, FromIndex);
   CheckIndex(IsColumn, ToIndex);
diff -Nru lazarus-2.2.4+dfsg1/lcl/include/colorbutton.inc lazarus-2.2.6+dfsg1/lcl/include/colorbutton.inc
--- lazarus-2.2.4+dfsg1/lcl/include/colorbutton.inc	2022-09-25 12:37:18.000000000 +0200
+++ lazarus-2.2.6+dfsg1/lcl/include/colorbutton.inc	2023-03-04 14:24:25.000000000 +0100
@@ -117,6 +117,17 @@
   //debugln(['TColorButton.GetGlyphSize ',DbgSName(Self),' Drawing=',Drawing,' PaintRect=',dbgs(PaintRect),' Result=',dbgs(Result),' BoundsRect=',dbgs(BoundsRect),' Spacing=',Spacing,' Margin=',Margin]);
 end;
 
+procedure TColorButton.DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy;
+  const AXProportion, AYProportion: Double);
+begin
+  inherited;
+  if AMode in [lapAutoAdjustWithoutHorizontalScrolling, lapAutoAdjustForDPI] then
+  begin
+    FButtonColorSize := round(FButtonColorSize * AXProportion);
+    FBorderWidth := round(FBorderWidth * AXProportion);
+  end;
+end;
+
 function TColorButton.DrawGlyph(ACanvas: TCanvas; const AClient: TRect;
   const AOffset: TPoint; AState: TButtonState; ATransparent: Boolean;
   BiDiFlags: Longint): TRect;
diff -Nru lazarus-2.2.4+dfsg1/lcl/include/customflowpanel.inc lazarus-2.2.6+dfsg1/lcl/include/customflowpanel.inc
--- lazarus-2.2.4+dfsg1/lcl/include/customflowpanel.inc	2022-09-25 12:37:18.000000000 +0200
+++ lazarus-2.2.6+dfsg1/lcl/include/customflowpanel.inc	2023-03-04 14:24:25.000000000 +0100
@@ -398,6 +398,8 @@
     for I := 0 to ControlCount-1 do
     begin
       xControl := FControlList.Items[I].Control;
+      if not xControl.Visible then
+        Continue;
       if FFlowStyle in [fsLeftRightTopBottom, fsRightLeftTopBottom, fsLeftRightBottomTop, fsRightLeftBottomTop] then
       begin
         PreferredHeight := Max(PreferredHeight,
diff -Nru lazarus-2.2.4+dfsg1/lcl/include/customform.inc lazarus-2.2.6+dfsg1/lcl/include/customform.inc
--- lazarus-2.2.4+dfsg1/lcl/include/customform.inc	2022-09-25 12:37:18.000000000 +0200
+++ lazarus-2.2.6+dfsg1/lcl/include/customform.inc	2023-03-04 14:24:25.000000000 +0100
@@ -706,7 +706,7 @@
   end;
   { call onShow() or onActivate() for the first time,
     after first OnResize() and OnChangeBounds() }
-  if FDelayedOnResize and FDelayedOnChangeBounds then
+  if (FDelayedOnResize or FDelayedOnChangeBounds) and Visible then
   begin
     if FIsFirstOnShow then
     begin
diff -Nru lazarus-2.2.4+dfsg1/lcl/include/speedbutton.inc lazarus-2.2.6+dfsg1/lcl/include/speedbutton.inc
--- lazarus-2.2.4+dfsg1/lcl/include/speedbutton.inc	2022-09-25 12:37:18.000000000 +0200
+++ lazarus-2.2.6+dfsg1/lcl/include/speedbutton.inc	2023-03-04 14:24:25.000000000 +0100
@@ -1119,7 +1119,6 @@
   if FShowCaption and (Caption <> '') then
   begin
     TMP := Caption;
-    DeleteAmpersands(TMP);
     Flags := DT_CalcRect;
     if not Canvas.TextStyle.SingleLine then
       Inc(Flags, DT_WordBreak);
diff -Nru lazarus-2.2.4+dfsg1/lcl/include/wincontrol.inc lazarus-2.2.6+dfsg1/lcl/include/wincontrol.inc
--- lazarus-2.2.4+dfsg1/lcl/include/wincontrol.inc	2022-09-25 12:37:18.000000000 +0200
+++ lazarus-2.2.6+dfsg1/lcl/include/wincontrol.inc	2023-03-04 14:24:25.000000000 +0100
@@ -4050,7 +4050,7 @@
       or (Height<>InterfaceHeight) then
       begin
         // the LCL is not in sync with the interface
-        if wcfBoundsRealized in FWinControlFlags then
+        if not (wcfBoundsRealized in FWinControlFlags) then
         begin
           // no bounds were sent yet to the interface and it didn't initialize
           // them on its own
@@ -4058,12 +4058,16 @@
           // they will probably change
           // to avoid resizes it is better use the defaults
           GetDefaults(Result);
-        end else begin
+        end else
+        if not (self is TCustomForm) then
+        begin
           // -> adjust client rect based on LCL bounds
           // for example: if the Width in LCL differ from the Width of the Interface
           // object, then adjust the clientwidth accordingly
           // this often anticipates later LM_SIZE messages from the interface
           // and reduces resizes
+          // BUT: Do this only when not a form. Form has its own clientrect specification:
+          // https://wiki.lazarus.freepascal.org/Lazarus_FAQ#Why_are_TForm.ClientWidth.2FClientHeight_the_same_as_TForm.Width.2FHeight
           inc(Result.Right,Width-InterfaceWidth);
           inc(Result.Bottom,Height-InterfaceHeight);
         end;
diff -Nru lazarus-2.2.4+dfsg1/lcl/interfaces/lcl.lpk lazarus-2.2.6+dfsg1/lcl/interfaces/lcl.lpk
--- lazarus-2.2.4+dfsg1/lcl/interfaces/lcl.lpk	2022-09-25 12:37:18.000000000 +0200
+++ lazarus-2.2.6+dfsg1/lcl/interfaces/lcl.lpk	2023-03-04 14:24:25.000000000 +0100
@@ -129,7 +129,7 @@
 "/>
     <License Value="modified LGPL-2
 "/>
-    <Version Major="2" Minor="2" Release="4"/>
+    <Version Major="2" Minor="2" Release="6"/>
     <Files Count="488">
       <Item1>
         <Filename Value="carbon/agl.pp"/>
diff -Nru lazarus-2.2.4+dfsg1/lcl/interfaces/win32/win32wscomctrls.pp lazarus-2.2.6+dfsg1/lcl/interfaces/win32/win32wscomctrls.pp
--- lazarus-2.2.4+dfsg1/lcl/interfaces/win32/win32wscomctrls.pp	2022-09-25 12:37:18.000000000 +0200
+++ lazarus-2.2.6+dfsg1/lcl/interfaces/win32/win32wscomctrls.pp	2023-03-04 14:24:25.000000000 +0100
@@ -1009,8 +1009,16 @@
       Windows.SendMessage(wHandle, TBM_CLEARSEL, Windows.WPARAM(True), 0)
     else
     begin
-      Windows.SendMessage(wHandle, TBM_SETSELSTART, Windows.WParam(False), SelStart);
-      Windows.SendMessage(wHandle, TBM_SETSELEND, Windows.WParam(True), SelEnd)
+      if (GetWindowLong(ATrackBar.Handle, GWL_STYLE) and TBS_REVERSED) <> 0 then
+      begin
+      Windows.SendMessage(wHandle, TBM_SETSELSTART, Windows.WParam(False), ATrackBar.Max-SelEnd); //SelStart/SelEnd are not relative to Min/Max
+      Windows.SendMessage(wHandle, TBM_SETSELEND, Windows.WParam(True), ATrackBar.Max-SelStart)
+      end
+      else
+      begin
+        Windows.SendMessage(wHandle, TBM_SETSELSTART, Windows.WParam(False), SelStart);
+        Windows.SendMessage(wHandle, TBM_SETSELEND, Windows.WParam(True), SelEnd)
+      end;
     end;
   end;
 end;
diff -Nru lazarus-2.2.4+dfsg1/lcl/interfaces/win32/win32wsmenus.pp lazarus-2.2.6+dfsg1/lcl/interfaces/win32/win32wsmenus.pp
--- lazarus-2.2.4+dfsg1/lcl/interfaces/win32/win32wsmenus.pp	2022-09-25 12:37:18.000000000 +0200
+++ lazarus-2.2.6+dfsg1/lcl/interfaces/win32/win32wsmenus.pp	2023-03-04 14:24:25.000000000 +0100
@@ -1166,13 +1166,10 @@
     AImageIndex := AMenuItem.ImageIndex;
   end;
 
-  if not AMenuItem.Enabled then
-    AEffect := gdeDisabled
+  if AMenuItem.Enabled then
+    AEffect := gdeNormal
   else
-  if ASelected then
-    AEffect := gdeHighlighted
-  else
-    AEffect := gdeNormal;
+    AEffect := gdeDisabled;
 
   if AImageIndex < AImageList.Count then
   begin
diff -Nru lazarus-2.2.4+dfsg1/lcl/lazcanvas.pas lazarus-2.2.6+dfsg1/lcl/lazcanvas.pas
--- lazarus-2.2.4+dfsg1/lcl/lazcanvas.pas	2022-09-25 12:37:18.000000000 +0200
+++ lazarus-2.2.6+dfsg1/lcl/lazcanvas.pas	2023-03-04 14:24:25.000000000 +0100
@@ -406,7 +406,7 @@
         if (nodeX[i  ] < lBoundingBox.Left) then nodeX[i] := lBoundingBox.Left;
         if (nodeX[i+1] > lBoundingBox.Right) then nodeX[i+1] := lBoundingBox.Right;
         for X := nodeX[i] to nodeX[i+1]-1 do
-          SetColor(X, Y, Brush.FPColor);
+          DrawPixel(X, Y, Brush.FPColor);
       end;
 
       i := i + 2;
diff -Nru lazarus-2.2.4+dfsg1/lcl/lclbase.lpk lazarus-2.2.6+dfsg1/lcl/lclbase.lpk
--- lazarus-2.2.4+dfsg1/lcl/lclbase.lpk	2022-09-25 12:37:18.000000000 +0200
+++ lazarus-2.2.6+dfsg1/lcl/lclbase.lpk	2023-03-04 14:24:25.000000000 +0100
@@ -26,7 +26,7 @@
 "/>
     <License Value="modified LGPL-2
 "/>
-    <Version Major="2" Minor="2" Release="4"/>
+    <Version Major="2" Minor="2" Release="6"/>
     <Files Count="287">
       <Item1>
         <Filename Value="checklst.pas"/>
diff -Nru lazarus-2.2.4+dfsg1/packager/globallinks/lcl-2.2.4.lpl lazarus-2.2.6+dfsg1/packager/globallinks/lcl-2.2.4.lpl
--- lazarus-2.2.4+dfsg1/packager/globallinks/lcl-2.2.4.lpl	2022-09-25 12:37:18.000000000 +0200
+++ lazarus-2.2.6+dfsg1/packager/globallinks/lcl-2.2.4.lpl	1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-$(LazarusDir)/lcl/interfaces/lcl.lpk
diff -Nru lazarus-2.2.4+dfsg1/packager/globallinks/lcl-2.2.6.lpl lazarus-2.2.6+dfsg1/packager/globallinks/lcl-2.2.6.lpl
--- lazarus-2.2.4+dfsg1/packager/globallinks/lcl-2.2.6.lpl	1970-01-01 01:00:00.000000000 +0100
+++ lazarus-2.2.6+dfsg1/packager/globallinks/lcl-2.2.6.lpl	2023-03-04 14:24:25.000000000 +0100
@@ -0,0 +1 @@
+$(LazarusDir)/lcl/interfaces/lcl.lpk
diff -Nru lazarus-2.2.4+dfsg1/packager/globallinks/lclbase-2.2.4.lpl lazarus-2.2.6+dfsg1/packager/globallinks/lclbase-2.2.4.lpl
--- lazarus-2.2.4+dfsg1/packager/globallinks/lclbase-2.2.4.lpl	2022-09-25 12:37:18.000000000 +0200
+++ lazarus-2.2.6+dfsg1/packager/globallinks/lclbase-2.2.4.lpl	1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-$(LazarusDir)/lcl/lclbase.lpk
diff -Nru lazarus-2.2.4+dfsg1/packager/globallinks/lclbase-2.2.6.lpl lazarus-2.2.6+dfsg1/packager/globallinks/lclbase-2.2.6.lpl
--- lazarus-2.2.4+dfsg1/packager/globallinks/lclbase-2.2.6.lpl	1970-01-01 01:00:00.000000000 +0100
+++ lazarus-2.2.6+dfsg1/packager/globallinks/lclbase-2.2.6.lpl	2023-03-04 14:24:25.000000000 +0100
@@ -0,0 +1 @@
+$(LazarusDir)/lcl/lclbase.lpk
diff -Nru lazarus-2.2.4+dfsg1/tools/install/linux/environmentoptions.xml lazarus-2.2.6+dfsg1/tools/install/linux/environmentoptions.xml
--- lazarus-2.2.4+dfsg1/tools/install/linux/environmentoptions.xml	2022-09-25 12:37:18.000000000 +0200
+++ lazarus-2.2.6+dfsg1/tools/install/linux/environmentoptions.xml	2023-03-04 14:24:26.000000000 +0100
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <CONFIG>
   <EnvironmentOptions>
-    <Version Value="110" Lazarus="2.2.4"/>
+    <Version Value="110" Lazarus="2.2.6"/>
     <LazarusDirectory Value="__LAZARUSDIR__">
       <History Count="1">
         <Item1 Value="/usr/lib/lazarus/"/>
diff -Nru lazarus-2.2.4+dfsg1/tools/install/macosx/environmentoptions.xml lazarus-2.2.6+dfsg1/tools/install/macosx/environmentoptions.xml
--- lazarus-2.2.4+dfsg1/tools/install/macosx/environmentoptions.xml	2022-09-25 12:37:18.000000000 +0200
+++ lazarus-2.2.6+dfsg1/tools/install/macosx/environmentoptions.xml	2023-03-04 14:24:26.000000000 +0100
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <CONFIG>
   <EnvironmentOptions>
-    <Version Value="110" Lazarus="2.2.4"/>
+    <Version Value="110" Lazarus="2.2.6"/>
     <LazarusDirectory Value="/Developer/lazarus/">
       <History Count="1">
         <Item1 Value="/Developer/lazarus/"/>
diff -Nru lazarus-2.2.4+dfsg1/tools/install/win/environmentoptions.xml lazarus-2.2.6+dfsg1/tools/install/win/environmentoptions.xml
--- lazarus-2.2.4+dfsg1/tools/install/win/environmentoptions.xml	2022-09-25 12:37:18.000000000 +0200
+++ lazarus-2.2.6+dfsg1/tools/install/win/environmentoptions.xml	2023-03-04 14:24:26.000000000 +0100
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <CONFIG>
   <EnvironmentOptions>
-    <Version Value="110" Lazarus="2.2.4"/>
+    <Version Value="110" Lazarus="2.2.6"/>
     <LazarusDirectory Value="%LazDir%">
     </LazarusDirectory>
     <CompilerFilename Value="%FpcBinDir%\fpc.exe">

Attachment: signature.asc
Description: This is a digitally signed message part


Reply to: