mirror of
https://github.com/doublecmd/doublecmd.git
synced 2026-06-21 09:58:13 +00:00
FIX: Viewer - crash under macOS (issue #2815)
(cherry picked from commit 151b8faf18)
This commit is contained in:
parent
20fabf2504
commit
b7dc318a3b
1 changed files with 38 additions and 23 deletions
|
|
@ -216,6 +216,7 @@ type
|
|||
FTextWidth: Integer; // max char count or width in window
|
||||
FTextHeight: Integer; // measured values of font, rec calc at font changed
|
||||
FOnPositionChanged: TNotifyEvent;
|
||||
FScrollBarsLock: Integer;
|
||||
FUpdateScrollBarPos: Boolean; // used to block updating of scrollbar
|
||||
FScrollBarPosition: Integer; // for updating vertical scrollbar based on Position
|
||||
FHScrollBarPosition: Integer; // for updating horizontal scrollbar based on HPosition
|
||||
|
|
@ -845,15 +846,19 @@ var
|
|||
begin
|
||||
if HandleAllocated then
|
||||
begin
|
||||
ScrollInfo:= Default(TScrollInfo);
|
||||
ScrollInfo.cbSize:= SizeOf(ScrollInfo);
|
||||
ScrollVisible:= (Which = SB_VERT) or (FViewerControlMode = vcmText);
|
||||
ShowScrollBar(Handle, Which, ScrollVisible);
|
||||
ScrollInfo.fMask:= SIF_POS or SIF_RANGE or SIF_PAGE;
|
||||
ScrollInfo.nPage:= 1;
|
||||
ScrollInfo.nMax:= 100;
|
||||
ScrollInfo.nPos:= Value;
|
||||
SetScrollInfo(Handle, Which, ScrollInfo, ScrollVisible);
|
||||
|
||||
if ScrollVisible then
|
||||
begin
|
||||
ScrollInfo:= Default(TScrollInfo);
|
||||
ScrollInfo.cbSize:= SizeOf(ScrollInfo);
|
||||
ScrollInfo.fMask:= SIF_POS or SIF_RANGE or SIF_PAGE;
|
||||
ScrollInfo.nPage:= 1;
|
||||
ScrollInfo.nMax:= 100;
|
||||
ScrollInfo.nPos:= Value;
|
||||
SetScrollInfo(Handle, Which, ScrollInfo, ScrollVisible);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
|
@ -3624,22 +3629,32 @@ var
|
|||
ScrollVisibleH: Boolean;
|
||||
ScrollInfo: TScrollInfo;
|
||||
begin
|
||||
if HandleAllocated then
|
||||
// ShowScrollBar may send a resize message
|
||||
// and trigger DoOnResize -> UpdateScrollbars
|
||||
if HandleAllocated and (FScrollBarsLock = 0) then
|
||||
begin
|
||||
ScrollInfo:= Default(TScrollInfo);
|
||||
ScrollInfo.cbSize:= SizeOf(ScrollInfo);
|
||||
ScrollVisibleH:= (FViewerControlMode = vcmText);
|
||||
ScrollInfo.fMask:= SIF_POS or SIF_RANGE or SIF_PAGE or SIF_DISABLENOSCROLL;
|
||||
ScrollInfo.nPage:= 1;
|
||||
ScrollInfo.nMax:= 100;
|
||||
// Vertical
|
||||
ScrollInfo.nPos:= FScrollBarPosition;
|
||||
ShowScrollBar(Handle, SB_Vert, True);
|
||||
SetScrollInfo(Handle, SB_Vert, ScrollInfo, True);
|
||||
// Horizontal
|
||||
ScrollInfo.nPos:= FHScrollBarPosition;
|
||||
ShowScrollBar(Handle, SB_Horz, ScrollVisibleH);
|
||||
SetScrollInfo(Handle, SB_Horz, ScrollInfo, ScrollVisibleH);
|
||||
Inc(FScrollBarsLock);
|
||||
try
|
||||
ScrollInfo:= Default(TScrollInfo);
|
||||
ScrollInfo.cbSize:= SizeOf(ScrollInfo);
|
||||
ScrollInfo.fMask:= SIF_POS or SIF_RANGE or SIF_PAGE or SIF_DISABLENOSCROLL;
|
||||
ScrollInfo.nPage:= 1;
|
||||
ScrollInfo.nMax:= 100;
|
||||
// Vertical
|
||||
ScrollInfo.nPos:= FScrollBarPosition;
|
||||
ShowScrollBar(Handle, SB_Vert, True);
|
||||
SetScrollInfo(Handle, SB_Vert, ScrollInfo, True);
|
||||
// Horizontal
|
||||
ScrollVisibleH:= (FViewerControlMode = vcmText);
|
||||
ShowScrollBar(Handle, SB_Horz, ScrollVisibleH);
|
||||
if ScrollVisibleH then
|
||||
begin
|
||||
ScrollInfo.nPos:= FHScrollBarPosition;
|
||||
SetScrollInfo(Handle, SB_Horz, ScrollInfo, ScrollVisibleH);
|
||||
end;
|
||||
finally
|
||||
Dec(FScrollBarsLock);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue