diff --git a/ide/sourceeditor.pp b/ide/sourceeditor.pp index 303f09e083..1bd2aa82ab 100644 --- a/ide/sourceeditor.pp +++ b/ide/sourceeditor.pp @@ -3064,6 +3064,7 @@ begin // HintTimer FHintTimer := TTimer.Create(Self); with FHintTimer do begin + Name:=Self.Name+'_HintTimer'; Interval := 1000; Enabled := False; OnTimer := @HintTimer; @@ -3072,6 +3073,7 @@ begin // HintWindow FHintWindow := THintWindow.Create(Self); with FHintWindow do begin + Name:=Self.Name+'_HintWindow'; Visible := False; Caption := ''; HideInterval := 4000; @@ -5133,6 +5135,7 @@ end; procedure TSourceNotebook.HideHint; begin + //DebugLn(['TSourceNotebook.HideHint ']); if FHintTimer<>nil then FHintTimer.Enabled:=false; if SourceCompletionTimer<>nil then @@ -6233,6 +6236,7 @@ Procedure TSourceNotebook.EditorMouseMove(Sender: TObject; Shift: TShiftstate; X,Y: Integer); begin // restart hint timer + //DebugLn(['TSourceNotebook.EditorMouseMove ']); FHintTimer.Enabled := False; FHintTimer.Enabled := (EditorOpts.AutoToolTipSymbTools or EditorOpts.AutoToolTipExprEval) @@ -6243,8 +6247,8 @@ procedure TSourceNotebook.EditorMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); begin // restart hint timer + //DebugLn(['TSourceNotebook.EditorMouseWheel ']); HideHint; - FHintTimer.Enabled := False; FHintTimer.Enabled := (EditorOpts.AutoToolTipSymbTools or EditorOpts.AutoToolTipExprEval) and Visible; //handled:=true; //The scrooling is not done: it's not handled! See TWinControl.DoMouseWheel @@ -6261,6 +6265,7 @@ var MousePos: TPoint; AControl: TControl; begin + //DebugLn(['TSourceNotebook.HintTimer ']); FHintTimer.Enabled := False; MousePos := Mouse.CursorPos; AControl:=FindLCLControl(MousePos); diff --git a/lcl/customtimer.pas b/lcl/customtimer.pas index 709b7248d0..d9085dce53 100644 --- a/lcl/customtimer.pas +++ b/lcl/customtimer.pas @@ -26,7 +26,7 @@ unit CustomTimer; interface uses - Classes, SysUtils, LCLStrConsts, LCLType, InterfaceBase; + Classes, SysUtils, LCLProc, LCLStrConsts, LCLType, InterfaceBase; type @@ -106,6 +106,7 @@ end; procedure TCustomTimer.KillTimer; begin if FTimerHandle <> cIdNoTimer then begin + //DebugLn(['TCustomTimer.KillTimer ',dbgsName(Self)]); WidgetSet.DestroyTimer(FTimerHandle); FTimerHandle := cIdNoTimer; if Assigned(OnStopTimer) then OnStopTimer(Self); @@ -129,8 +130,9 @@ procedure TCustomTimer.UpdateTimer; begin KillTimer; if (FEnabled) and (FInterval > 0) - and (([csDesigning,csLoading]*ComponentState=[])) + and (([csDesigning,csLoading,csDestroying]*ComponentState=[])) and Assigned (FOnTimer) then begin + //DebugLn(['TCustomTimer.UpdateTimer ',dbgsName(Self),' WidgetSet.CreateTimer']); FTimerHandle := WidgetSet.CreateTimer(FInterval, @Timer); if FTimerHandle=0 then begin FTimerHandle:=cIdNoTimer; @@ -148,6 +150,9 @@ end; ------------------------------------------------------------------------------} procedure TCustomTimer.Timer; begin + {$IFDEF VerboseTimer} + DebugLn(['TCustomTimer.Timer ',dbgsName(Self),' ',FEnabled,' ',FInterval]); + {$ENDIF} if (FEnabled) and (FInterval > 0) then DoOnTimer; end; diff --git a/lcl/interfaces/gtk/gtkcallback.inc b/lcl/interfaces/gtk/gtkcallback.inc index fcc15d31a3..baccab190c 100644 --- a/lcl/interfaces/gtk/gtkcallback.inc +++ b/lcl/interfaces/gtk/gtkcallback.inc @@ -1091,6 +1091,7 @@ begin // (Posting the message via queue // has the risk of getting out of sync with the gtk) NotifyApplicationUserInput(Msg.Msg); + //DebugLn(['DeliverMouseMoveMessage ',dbgsName(AWinControl)]); DeliverMessage(AWinControl, Msg); end; @@ -2152,6 +2153,7 @@ begin if TimerInfo^.TimerFunc <> nil then begin // Call users timer function + //DebugLn(['gtkTimerCB ']); TimerInfo^.TimerFunc; Result:=GdkTrue; // timer will go on end diff --git a/lcl/interfaces/gtk/gtkwidgetset.inc b/lcl/interfaces/gtk/gtkwidgetset.inc index c3cdb42a8f..ea733bba1a 100644 --- a/lcl/interfaces/gtk/gtkwidgetset.inc +++ b/lcl/interfaces/gtk/gtkwidgetset.inc @@ -1416,9 +1416,10 @@ begin Result := 0 else begin New(TimerInfo); + FillByte(TimerInfo^,SizeOf(TGtkITimerinfo),0); TimerInfo^.TimerFunc := TimerFunc; {$IFDEF VerboseTimer} - DebugLn('TGtkWidgetSet.SetTimer %p CurTimerCount=%d OldTimerCount=%d', [TimerInfo, FTimerData.Count, FOldTimerData.Count]); + DebugLn(['TGtkWidgetSet.CreateTimer Interval=',dbgs(Interval)]); {$ENDIF} Result:= gtk_timeout_add(Interval, @gtkTimerCB, TimerInfo); if Result = 0 then @@ -1452,7 +1453,7 @@ begin if (TimerInfo^.TimerHandle=guint(TimerHandle)) then begin {$IFDEF VerboseTimer} - DebugLn('TGtkWidgetSet.KillTimer TimerInfo=',DbgS(TimerInfo),' TimerHandle=',TimerHandle,' CurTimerCount=',FTimerData.Count,' OldTimerCount=',FOldTimerData.Count); + DebugLn(['TGtkWidgetSet.DestroyTimer TimerInfo=',DbgS(TimerInfo),' TimerHandle=',TimerInfo^.TimerHandle]); {$ENDIF} gtk_timeout_remove(TimerInfo^.TimerHandle); FTimerData.Delete(n);