[Lazarus] Made dockable IDE work :-)

Hans-Peter Diettrich DrDiettrich1 at aol.com
Wed Dec 22 14:48:48 CET 2010

Today I could find another workaround for the last severe bug in the 
dockable IDE. Now it's possible at least to drag and dock the IDE 
windows with the mouse :-)

How to proceed?

Some of the problems:

My work is based on Graeme's Git repository, so that it's not easy to 
supply SVN patches.

My patches are workarounds for several problems, in detail with 
TControl, TWinControl and the DragManager. More analysis is required, in 
order to find out the real reasons of the misbehaviour[1].

Many bugs only manifest in the IDE, not in ordinary applications or the 
DragManager examples, what makes it even harder to find the appropriate 
cure, that does not break other application or component code[2]. Many 
patches have to be applied before it's even possible to start debugging 
the IDE. Afterwards every fix may result in different remaining 
problems, possibly not covered by the remaining workarounds.

Last not least I'm still offline, and cannot report the many observed 
bugs one by one. I only can try to write down the observed misbehaviour 
during my recent work, and let somebody else care for the rest.

[1] One of my experiments resulted in a refactored (stripped down) 
DragManager, with the Performers removed and their code moved into the 
DragObject classes. An according patch can be applied easily, because it 
essentially exchanges the dragmanager.inc by a very new version, and 
extends dragobject.inc. OTOH it has to be applied as a whole, impossible 
to break it down into smaller steps.

[2] Since many bugs can be observed only in the IDE, they also should be 
fixed in the IDE code. This is not so easy, due to the many methods and 
event handlers that may be involved. Many bugs definitely originate in 
the TControl and TWinControl implementation, where I suspect workarounds 
for other components (IDE, csCaptureMouse, anchor docking...). Removal 
of these workarounds may cause malfunction of the affected components, 
perhaps only in specific widgetsets. Nonetheless I'd suggest to trim 
that code, to achive the Delphi compatible behaviour again, and then 
think about a separate or combined implementation of 
platform-independent (Lazarus specific) dragging.


More information about the Lazarus mailing list