mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-30 23:22:42 +02:00
SynCompletion: Cancel on Topline change (window would be misplaced otherwise)
git-svn-id: trunk@26548 -
This commit is contained in:
parent
edd9101c91
commit
662e9519a7
@ -144,7 +144,11 @@ type
|
||||
fCurrentEditor: TComponent;
|
||||
FOnMeasureItem: TSynBaseCompletionMeasureItem;
|
||||
FOnPositionChanged: TNotifyEvent;
|
||||
procedure SetCurrentEditor(const AValue: TComponent);
|
||||
procedure SetLongLineHintTime(const AValue: Integer);
|
||||
procedure EditorStatusChanged(Sender: TObject; Changes: TSynStatusChanges);
|
||||
protected
|
||||
procedure SetVisible(Value: Boolean); override;
|
||||
public
|
||||
constructor Create(AOwner: Tcomponent); override;
|
||||
destructor Destroy; override;
|
||||
@ -166,7 +170,7 @@ type
|
||||
write SetNbLinesInWindow;
|
||||
property ClSelect: TColor read FClSelect write FClSelect;
|
||||
property CaseSensitive: boolean read FCaseSensitive write FCaseSensitive;
|
||||
property CurrentEditor: TComponent read fCurrentEditor write fCurrentEditor;
|
||||
property CurrentEditor: TComponent read fCurrentEditor write SetCurrentEditor;
|
||||
property FontHeight:integer read FFontHeight;
|
||||
property OnSearchPosition:TSynBaseCompletionSearchPosition
|
||||
read FOnSearchPosition write FOnSearchPosition;
|
||||
@ -812,6 +816,34 @@ begin
|
||||
FHintTimer.Interval := AValue;
|
||||
end;
|
||||
|
||||
procedure TSynBaseCompletionForm.EditorStatusChanged(Sender: TObject;
|
||||
Changes: TSynStatusChanges);
|
||||
begin
|
||||
if (scTopLine in Changes) and Assigned(OnCancel) then
|
||||
OnCancel(Self);
|
||||
end;
|
||||
|
||||
procedure TSynBaseCompletionForm.SetCurrentEditor(const AValue: TComponent);
|
||||
begin
|
||||
if fCurrentEditor = AValue then exit;
|
||||
if fCurrentEditor <> nil then
|
||||
TSynEdit(fCurrentEditor).UnRegisterStatusChangedHandler({$IFDEF FPC}@{$ENDIF}EditorStatusChanged);
|
||||
fCurrentEditor := AValue;
|
||||
if (fCurrentEditor <> nil) and Visible then
|
||||
TSynEdit(fCurrentEditor).RegisterStatusChangedHandler({$IFDEF FPC}@{$ENDIF}EditorStatusChanged);
|
||||
end;
|
||||
|
||||
procedure TSynBaseCompletionForm.SetVisible(Value: Boolean);
|
||||
begin
|
||||
inherited SetVisible(Value);
|
||||
if (fCurrentEditor <> nil) then begin
|
||||
if Visible then
|
||||
TSynEdit(fCurrentEditor).RegisterStatusChangedHandler({$IFDEF FPC}@{$ENDIF}EditorStatusChanged)
|
||||
else
|
||||
TSynEdit(fCurrentEditor).UnRegisterStatusChangedHandler({$IFDEF FPC}@{$ENDIF}EditorStatusChanged);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TSynBaseCompletionForm.SetItemList(const Value: TStrings);
|
||||
begin
|
||||
FItemList.Assign(Value);
|
||||
|
@ -306,6 +306,13 @@ type
|
||||
var Command: TSynEditorCommand; var ComboKeyStrokes: TSynEditKeyStrokes);
|
||||
end;
|
||||
|
||||
{ TSynStatusChangedHandlerList }
|
||||
|
||||
TSynStatusChangedHandlerList = Class(TMethodList)
|
||||
public
|
||||
procedure CallStatusChangedHandlers(Sender: TObject; Changes: TSynStatusChanges);
|
||||
end;
|
||||
|
||||
TSynMouseLinkEvent = procedure (
|
||||
Sender: TObject; X, Y: Integer; var AllowMouseLink: Boolean) of object;
|
||||
|
||||
@ -418,6 +425,7 @@ type
|
||||
fTSearch: TSynEditSearch;
|
||||
fHookedCommandHandlers: TList;
|
||||
FHookedKeyTranslationList: TSynHookedKeyTranslationList;
|
||||
FStatusChangedList: TSynStatusChangedHandlerList;
|
||||
FPlugins: TList;
|
||||
fScrollTimer: TTimer;
|
||||
fScrollDeltaX, fScrollDeltaY: Integer;
|
||||
@ -798,6 +806,10 @@ type
|
||||
|
||||
procedure RegisterKeyTranslationHandler(AHandlerProc: THookedKeyTranslationEvent);
|
||||
procedure UnRegisterKeyTranslationHandler(AHandlerProc: THookedKeyTranslationEvent);
|
||||
|
||||
procedure RegisterStatusChangedHandler(AStatusChangeProc: TStatusChangeEvent);
|
||||
procedure UnRegisterStatusChangedHandler(AStatusChangeProc: TStatusChangeEvent);
|
||||
|
||||
function RowColumnToPixels(
|
||||
{$IFDEF SYN_LAZARUS}const {$ENDIF}RowCol: TPoint): TPoint;
|
||||
function SearchReplace(const ASearch, AReplace: string;
|
||||
@ -1633,6 +1645,7 @@ begin
|
||||
Cursor := crIBeam;
|
||||
fPlugins := TList.Create;
|
||||
FHookedKeyTranslationList := TSynHookedKeyTranslationList.Create;
|
||||
FStatusChangedList := TSynStatusChangedHandlerList.Create;
|
||||
{$IFDEF SYN_LAZARUS}
|
||||
// needed before setting color
|
||||
fMarkupHighCaret := TSynEditMarkupHighlightAllCaret.Create(self);
|
||||
@ -1887,6 +1900,7 @@ begin
|
||||
RemoveHandlers;
|
||||
|
||||
FreeAndNil(FHookedKeyTranslationList);
|
||||
FreeAndNil(FStatusChangedList);
|
||||
fHookedCommandHandlers:=nil;
|
||||
fPlugins:=nil;
|
||||
FCaret.Lines := nil;
|
||||
@ -8420,6 +8434,16 @@ begin
|
||||
FHookedKeyTranslationList.Remove(TMEthod(AHandlerProc));
|
||||
end;
|
||||
|
||||
procedure TCustomSynEdit.RegisterStatusChangedHandler(AStatusChangeProc: TStatusChangeEvent);
|
||||
begin
|
||||
FStatusChangedList.Add(TMethod(AStatusChangeProc));
|
||||
end;
|
||||
|
||||
procedure TCustomSynEdit.UnRegisterStatusChangedHandler(AStatusChangeProc: TStatusChangeEvent);
|
||||
begin
|
||||
FStatusChangedList.Remove(TMethod(AStatusChangeProc));
|
||||
end;
|
||||
|
||||
procedure TCustomSynEdit.NotifyHookedCommandHandlers(AfterProcessing: boolean;
|
||||
var Command: TSynEditorCommand;
|
||||
var AChar: TUTF8Char; Data: pointer);
|
||||
@ -8474,6 +8498,7 @@ end;
|
||||
|
||||
procedure TCustomSynEdit.DoOnStatusChange(Changes: TSynStatusChanges);
|
||||
begin
|
||||
FStatusChangedList.CallStatusChangedHandlers(Self, Changes);
|
||||
if Assigned(fOnStatusChange) then begin
|
||||
fOnStatusChange(Self, fStatusChanges);
|
||||
fStatusChanges := [];
|
||||
@ -8647,6 +8672,18 @@ begin
|
||||
IsStartOfCombo, Handled, Command, False, ComboKeyStrokes);
|
||||
end;
|
||||
|
||||
{ TSynStatusChangedHandlerList }
|
||||
|
||||
procedure TSynStatusChangedHandlerList.CallStatusChangedHandlers(Sender: TObject;
|
||||
Changes: TSynStatusChanges);
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
i:=Count;
|
||||
while NextDownIndex(i) do
|
||||
TStatusChangeEvent(Items[i])(Sender, Changes);
|
||||
end;
|
||||
|
||||
initialization
|
||||
InitSynDefaultFont;
|
||||
SynDefaultBeautifier := TSynBeautifier.Create(Application);
|
||||
|
Loading…
Reference in New Issue
Block a user