- Needs further review...
if(!visible)
{
ReleaseCapture();
if(!visible)
{
ReleaseCapture();
- this.rolledOver = this.dragging = false;
+ rolledOver = dragging = false;
}
// ADDED THIS CHECK FOR FieldDropBox LEAKS
}
// ADDED THIS CHECK FOR FieldDropBox LEAKS
- if(/*!mods.isSideEffect && */(this.rolledOver || !this.dragging))
+ if(/*!mods.isSideEffect && */(rolledOver || !dragging))
{
int rowY = (style.header) ? rowHeight : 0;
{
int rowY = (style.header) ? rowHeight : 0;
+ DataRow row = null, nextRow;
int rowIndex;
mouseX = x;
mouseY = y;
int rowIndex;
mouseX = x;
mouseY = y;
((vertScroll && vertScroll.visible &&
(y < 0 || y >= clientSize.h)) ||
(horzScroll && horzScroll.visible &&
((vertScroll && vertScroll.visible &&
(y < 0 || y >= clientSize.h)) ||
(horzScroll && horzScroll.visible &&
// This must be done after the scrolling took place
rowIndex = firstRowShown ? firstRowShown.index : -1;
y = Max(y, 0);
// This must be done after the scrolling took place
rowIndex = firstRowShown ? firstRowShown.index : -1;
y = Max(y, 0);
- y = Min(y, clientSize.h-1);
- for(row = firstRowShown; row; row = row.GetNextRow(), rowIndex ++)
+ y = Min(y, clientSize.h-rowHeight-1);
+ for(row = firstRowShown; row; row = nextRow, rowIndex ++)
+ nextRow = row.GetNextRow();
+ if(rowY > y || !nextRow)
+ if(row && row == currentRow)
+ row = row.GetNextRow();
+ if(row && row.parent == currentRow)
+ row = row.GetNextRow();
if(row && currentRow != row)
{
if(row && currentRow != row)
{
this.movedRow = true;
}
}
this.movedRow = true;
}
}
- else if((style.freeSelect || this.dragging) && ((realX>= 0 && realY >= 0 && realX< clientSize.w && realY < clientSize.h) || this.rolledOver))
+ else if((style.freeSelect || this.dragging) && ((realX>= 0 && realY >= 0 && realX< clientSize.w && realY < clientSize.h) || rolledOver))
{
if(!(style.multiSelect))
{
{
if(!(style.multiSelect))
{
bool OnMouseOver(int x, int y, Modifiers mods)
{
bool OnMouseOver(int x, int y, Modifiers mods)
{
- if(this.dragging)
- this.rolledOver = true;
+ if(dragging)
+ rolledOver = true;
this.dragRow = currentRow;
this.dropIndex = -1;
this.movedRow = false;
this.dragRow = currentRow;
this.dropIndex = -1;
this.movedRow = false;
}
if(editData && editData.visible && style.alwaysEdit)
{
}
if(editData && editData.visible && style.alwaysEdit)
{
{
if(!style.noDragging)
{
{
if(!style.noDragging)
{
Capture();
}
if(x >= 0 && y >= 0 && x < clientSize.w && y < clientSize.h)
Capture();
}
if(x >= 0 && y >= 0 && x < clientSize.w && y < clientSize.h)
- this.rolledOver = true;
{
DataRow row, switchRow = rows.last;
int rowY = (style.header) ? rowHeight : 0;
{
DataRow row, switchRow = rows.last;
int rowY = (style.header) ? rowHeight : 0;
+ while(switchRow.lastRow) switchRow = switchRow.lastRow;
for(row = firstRowShown; row; row = row.GetNextRow())
{
rowY += rowHeight;
for(row = firstRowShown; row; row = row.GetNextRow())
{
rowY += rowHeight;
+ if(dragRow)
+ ReleaseCapture();
dragRow = null;
editRow = null;
movedRow = false;
dragRow = null;
editRow = null;
movedRow = false;
- if(this.dragging || style.freeSelect)
+ if(dragging || style.freeSelect)
- this.rolledOver = this.dragging = false;
+ rolledOver = dragging = false;
}
if(x >= 0 && y >= 0 && x < clientSize.w && y < clientSize.h && currentRow && style.freeSelect)
{
}
if(x >= 0 && y >= 0 && x < clientSize.w && y < clientSize.h && currentRow && style.freeSelect)
{
}
else if(key == escape)
{
}
else if(key == escape)
{
- if(resizingField || this.movingFields || (editData && editData.visible) || this.dragRow)
+ if(resizingField || this.movingFields || (editData && editData.visible) || dragRow)
{
if(editData && editData.visible && style.alwaysEdit && !editData.active)
return true;
{
if(editData && editData.visible && style.alwaysEdit && !editData.active)
return true;
resizingField = null;
ReleaseCapture();
}
resizingField = null;
ReleaseCapture();
}
- this.dragRow = null;
- if(this.dragging)
+ if(dragRow)
+ ReleaseCapture();
+
+ dragRow = null;
+ if(dragging)