diff -urNwb -x CVS -x WIN32_20.1_i386_DBG -x WIN32_20.1_i386_OBJ -x abidiff.cmd -x patch.txt -x .#*.* abi.org\src\/wp/ap/xp/ap_TopRuler.cpp abi.ruler\src\/wp/ap/xp/ap_TopRuler.cpp
--- abi.org\src\/wp/ap/xp/ap_TopRuler.cpp	Fri May 19 08:49:44 2000
+++ abi.ruler\src\/wp/ap/xp/ap_TopRuler.cpp	Thu May 25 20:23:36 2000
@@ -1547,10 +1547,7 @@
             m_draggingCenter = iRightIndentPos - m_minColumnWidth;
 		}
         iIndentShift = UT_MIN(0,UT_MIN(m_infoCache.m_xrLeftIndent,m_infoCache.m_xrLeftIndent + m_infoCache.m_xrFirstLineIndent));
-        if (m_draggingCenter - xAbsLeft + iIndentShift < 0)
-        {
-            m_draggingCenter = xAbsLeft - iIndentShift;
-        }
+        m_draggingCenter = UT_MAX(m_draggingCenter, xAbsLeft - iIndentShift);
 
 		if(m_draggingCenter == oldDragCenter)
 		{
@@ -1602,25 +1599,30 @@
 	case DW_RIGHTMARGIN:
 		{
 		UT_sint32 oldDragCenter = m_draggingCenter;
-
 		UT_sint32 xAbsRight = _getFirstPixelInColumn(&m_infoCache, m_infoCache.m_iNumColumns - 1) + 
 								m_infoCache.u.c.m_xColumnWidth + m_infoCache.u.c.m_xaRightMargin;
+        UT_sint32 iAbsLeft = _getFirstPixelInColumn(&m_infoCache,m_infoCache.m_iCurrentColumn);
+        UT_sint32 iRightShift = UT_MAX(0,m_infoCache.m_xrRightIndent);
+        UT_sint32 iLeftShift = UT_MAX(0,UT_MAX(m_infoCache.m_xrLeftIndent,m_infoCache.m_xrLeftIndent + m_infoCache.m_xrFirstLineIndent));
+        UT_sint32 newMargin;
+        UT_sint32 deltaRightMargin;
+        UT_sint32 newColumnWidth;
+
+        x = UT_MIN(x,xAbsRight + UT_MIN(0,m_infoCache.m_xrRightIndent));
+        while(1){
+            newMargin = xAbsRight - x;
+            deltaRightMargin = newMargin - m_infoCache.u.c.m_xaRightMargin;
+            newColumnWidth = m_infoCache.u.c.m_xColumnWidth - deltaRightMargin / (UT_sint32)m_infoCache.m_iNumColumns;
 
-		m_draggingCenter = _snapPixelToGrid(x, tick);
-
-		UT_sint32 iAbsLeft = _getFirstPixelInColumn(&m_infoCache,0);
-		UT_sint32 iLeftIndentPos = iAbsLeft + UT_MAX(0,UT_MAX(m_infoCache.m_xrLeftIndent,m_infoCache.m_xrLeftIndent + m_infoCache.m_xrFirstLineIndent)) + UT_MAX(0,m_infoCache.m_xrRightIndent);
-		if(m_draggingCenter - iLeftIndentPos < m_minColumnWidth)
-		{
-			m_draggingCenter = iLeftIndentPos + m_minColumnWidth;
+            if(newColumnWidth - iRightShift - iLeftShift < m_minColumnWidth){
+                x += (m_minColumnWidth - (newColumnWidth - iRightShift - iLeftShift)) * (UT_sint32)m_infoCache.m_iNumColumns;
+            } else {
+                break;
 		}
-
-        UT_sint32 iIndentShift = UT_MIN(0,m_infoCache.m_xrRightIndent);
-        if (xAbsRight - m_draggingCenter + iIndentShift < 0 )
-        {
-            m_draggingCenter = xAbsRight + iIndentShift;
         }
 
+        m_draggingCenter = _snapPixelToGrid(x,tick);
+
 		if(m_draggingCenter == oldDragCenter)
 		{
 			// Position not changing so finish here.
@@ -1628,18 +1630,6 @@
 			return;
 		}
 
-		UT_sint32 newMargin = xAbsRight - m_draggingCenter;
-		UT_sint32 deltaRightMargin = newMargin - m_infoCache.u.c.m_xaRightMargin;
-		UT_sint32 newColumnWidth = m_infoCache.u.c.m_xColumnWidth - deltaRightMargin / (UT_sint32)m_infoCache.m_iNumColumns;
-		if(newColumnWidth < m_minColumnWidth)
-		{
-			x += (m_minColumnWidth - newColumnWidth) * (UT_sint32)m_infoCache.m_iNumColumns;
-
-			m_draggingCenter = _snapPixelToGrid(x, tick);
-			newMargin = xAbsRight - m_draggingCenter;
-			deltaRightMargin = newMargin - m_infoCache.u.c.m_xaRightMargin;
-			
-		}
 		m_infoCache.u.c.m_xaRightMargin += deltaRightMargin;
 		m_infoCache.u.c.m_xColumnWidth -= deltaRightMargin / (UT_sint32)m_infoCache.m_iNumColumns;