The patch converts desktop_grid[] from Boolean array into array of
counters of objects, which are placed on cells. When object is
placed on /removed from the screen the counter gets incremented/decremented.
The panel registration code rather stupidly assumed that display
size is always 1280x1024 pixels. Because of this, depending on screen
size, the panel could be registered somewhere in the center of the screen
or completely or partially beyond of it.
The panels were registered only on startup, not those, which were added
from UI.
The fix moves panel registration into separate routine and removes assumption
about display size. The fix yet is not complete since it still makes assumption
about panel's geometry: from dtfile there is still no way to find out
dinamically the size of panel and it's location.
On small screens segfaults could be also triggered without any icons on dtfile
startup if dtwm panel (or part of it) was registered beyond the screen when
RegisterInGrid() was called by InitializeDesktopGrid().
The patch also makes grid registration work for large objects (larger than
2 cells in any direction, like dtwm panel or icon with long file name).
Previously only rectangle vertices were registered.
Add missing prototypes and header files to the dtfile
code in order to move closer towards 64-bit compatibility.
Extract the following functions from Motif internal headers:
_XmGetWidgetExtData
_XmRecordEvent
_XmStringUngenerate
_XmTextFieldSetDestination
_XmGetActiveTopLevelMenu
Extract manually prototypes of the obsolete Motif interface:
_XmHighlightBorder
_XmUnhighlightBorder
Remove XmPrivate.h if extractprototype.awk fails
Make the following header files available via -I:
codelibs/boolean.h
codelibs/pathutils.h
codelibs/shellutils.h
and remove shellutils.h from dtwm directory.