+#else
+
+bool
+wxLayoutList::MoveCursor(int dx, int dy)
+{
+   CoordType diff;
+
+   m_CursorMoved = true;  
+   
+   enum { up, down} direction;
+
+   wxPoint newPos = wxPoint(m_CursorPos.x + dx,
+                            m_CursorPos.y + dy);
+
+   // check for bounds
+   if(newPos.x < 0) newPos.x = 0;
+   if(newPos.y < 0) newPos.y = 0;
+   else if(newPos.y > m_MaxLine) newPos.y = m_MaxLine;
+
+   if(newPos.y > m_CursorPos.y ||
+      newPos.y == m_CursorPos.y &&
+      newPos.x >= m_CursorPos.x)
+      direction = up;
+   else
+      direction = down;
+      
+   // now move cursor forwards until at the new position:
+
+   // first, go to the right line:
+   while(newPos.y != m_CursorPos.y)
+   {
+      if(direction == up)
+      {
+         m_CursorPos.x +=
+            (**m_CursorObject).CountPositions() - m_CursorOffset;
+         if(m_CursorObject == tail())
+            break;  // can't go any further
+         if((**m_CursorObject).GetType() == WXLO_TYPE_LINEBREAK
+            && m_CursorOffset == 1)
+         {
+            m_CursorPos.y++; m_CursorPos.x = 0;
+         }
+         m_CursorObject ++; m_CursorOffset = 0;
+      }
+      else // down
+      {
+         m_CursorPos.x -= m_CursorOffset;
+         if(m_CursorObject == begin())
+            break;  // can't go any further
+         if((**m_CursorObject).GetType() == WXLO_TYPE_LINEBREAK &&
+            m_CursorOffset == 0)
+         {
+            m_CursorPos.y--;
+            m_CursorPos.x = GetLineLength(m_CursorObject);
+         }
+         m_CursorObject --; m_CursorOffset = (**m_CursorObject).CountPositions();
+      }
+   }
+   if(newPos.y != m_CursorPos.y) // reached begin/end of list,
+      newPos.y = m_CursorPos.y;  // exited by break
+      
+   // now line is right, go to right column:
+   direction = newPos.x >= m_CursorPos.x ? up : down;
+   while(newPos.x != m_CursorPos.x)
+   {
+      if(direction == up)
+      {
+         diff = newPos.x - m_CursorPos.x;
+         if(diff >= (**m_CursorObject).CountPositions())
+         {
+            m_CursorPos.x += (**m_CursorObject).CountPositions();
+            if(m_CursorObject == tail())
+            {
+               m_CursorOffset = (**m_CursorObject).CountPositions();
+               break; // cannot go further
+            }
+            m_CursorObject++; m_CursorOffset = 0;
+         }
+         else
+         {
+            m_CursorPos.x += diff;
+            m_CursorOffset += diff;
+         }
+      }
+      else // down
+      {
+         diff = m_CursorPos.x - newPos.x;
+         if(diff >= m_CursorOffset)
+         {
+            if(m_CursorObject == begin())
+            {
+               m_CursorOffset = 0;
+               m_CursorPos.x = 0;
+               break; // cannot go further
+            }
+            m_CursorObject--;
+            m_CursorOffset = (**m_CursorObject).CountPositions();
+         }
+         else
+         {
+            m_CursorPos.x -= diff;
+            m_CursorOffset -= diff;
+         }
+      }
+   }
+   return true; // FIXME: when return what?
+}
+#endif
+