[Lazarus] Code Folding mess and Code Divider feature

Graeme Geldenhuys graemeg.lists at gmail.com
Fri Mar 13 12:22:23 CET 2009


I suspect at least one error in the Controls.DragTo procedure:

 >>
     if DragImageList <> nil then
     begin
       if (Target = nil) or (csDisplayDragImage in Target.ControlStyle) or
           DragObject.AlwaysShowDragImages then
       begin
         DragImageList.DragCursor := DragCursor;
         if not DragImageList.Dragging then
           DragImageList.BeginDrag(GetDeskTopWindow, Pos.X, Pos.Y)
         else DragImageList.DragMove(Pos.X, Pos.Y);
       end
       else
       begin
         DragImageList.EndDrag; <-------------------------------- 1
         Windows.SetCursor(Screen.Cursors[DragCursor]);
       end;
     end; <------------------------------------------------------ 2
     Windows.SetCursor(Screen.Cursors[DragCursor]);
     if ActiveDrag = dopDock then
[...]
<<

1) EndDrag is called whenever the mouse moves over no valid target 
(Target=nil). IMO EndDrag should be called only once, when dragging is 
finished. EndDrag is not appropriate for hiding the drag image temporarily.

2) The duplicate call to SetCursor (and more) suggests to me that the 
second SetCursor should reside in the Else branch of the outer If, so 
that it is *not* called after DragImageList.DragMove, just as 
implemented in the inner If.


Opinions?


Lazarus uses almost the same implementation in TDragPerformer, what IMO 
should be fixed.

Furthermore I wonder whether it makes sense to show both a drag image 
*and* an docking frame (in the code below the above snippet, when 
ActiveDrag=dopDock).

DoDi




More information about the Lazarus mailing list