diff -U 3 -H -b -w -B -E -d -r -N -- tmp/kdebase-3.4.3/kwin/client.cpp home/jezz/kde/kdebase-3.4.3/kwin/client.cpp
--- tmp/kdebase-3.4.3/kwin/client.cpp	2005-10-05 15:38:59.000000000 +0200
+++ home/jezz/kde/kdebase-3.4.3/kwin/client.cpp	2005-11-24 00:27:18.000000000 +0100
@@ -76,6 +76,7 @@
         bridge( new Bridge( this )),
         move_faked_activity( false ),
         move_resize_grab_window( None ),
+        resizeOk( true ),
         transient_for( NULL ),
         transient_for_id( None ),
         original_transient_for_id( None ),
diff -U 3 -H -b -w -B -E -d -r -N -- tmp/kdebase-3.4.3/kwin/client.h home/jezz/kde/kdebase-3.4.3/kwin/client.h
--- tmp/kdebase-3.4.3/kwin/client.h	2005-10-05 15:38:59.000000000 +0200
+++ home/jezz/kde/kdebase-3.4.3/kwin/client.h	2005-11-24 00:11:12.000000000 +0100
@@ -436,6 +436,7 @@
             }
 
         Position mode;
+        bool resizeOk;
         QPoint moveOffset;
         QPoint invertedMoveOffset;
         QRect moveResizeGeom;
diff -U 3 -H -b -w -B -E -d -r -N -- tmp/kdebase-3.4.3/kwin/geometry.cpp home/jezz/kde/kdebase-3.4.3/kwin/geometry.cpp
--- tmp/kdebase-3.4.3/kwin/geometry.cpp	2005-10-05 15:38:59.000000000 +0200
+++ home/jezz/kde/kdebase-3.4.3/kwin/geometry.cpp	2005-11-24 22:11:50.000000000 +0100
@@ -2366,6 +2366,37 @@
         {
         // first resize (without checking constrains), then snap, then check bounds, then check constrains
         QRect orig = initialMoveResizeGeom;
+       QPoint mouseOffset = QPoint(moveOffset + topleft - orig.topLeft());
+       int mx = mouseOffset.x(), my = mouseOffset.y();
+       if (!resizeOk) {
+         resizeOk = true; 
+         if (mx <= 0)
+           mode = PositionLeft;
+         else if (mx >= orig.size().width())
+           mode = PositionRight;
+         else if (my <= 0)
+           mode = PositionTop;
+         else if (my >= orig.size().height())
+           mode = PositionBottom;
+         else
+           resizeOk = false;
+       } else {
+//      if (config) {
+        topleft = mouseOffset + orig.topLeft();
+        bottomright = mouseOffset + orig.topLeft();
+        if (mx <= 0 && mode == PositionTop
+             || my <= 0 && mode == PositionLeft)
+           mode = PositionTopLeft;
+        if (mx >= orig.size().width() && mode == PositionTop
+             || my <= 0 && mode == PositionRight)
+           mode = PositionTopRight;
+        if (mx <= 0 && mode == PositionBottom
+             || my >= orig.size().height() && mode == PositionLeft)
+           mode = PositionBottomLeft;
+        if (mx >= orig.size().width() && mode == PositionBottom
+             || my >= orig.size().height() && mode == PositionRight)
+           mode = PositionBottomRight;
+//      }
         Sizemode sizemode = SizemodeAny;
         switch ( mode )
             {
@@ -2460,7 +2491,7 @@
         if( moveResizeGeom.size() != previousMoveResizeGeom.size())
             update = true;
         }
-    else if( isMove())
+    } else if( isMove())
         {
         assert( mode == PositionCenter );
         // first move, then snap, then check bounds
diff -U 3 -H -b -w -B -E -d -r -N -- tmp/kdebase-3.4.3/kwin/useractions.cpp home/jezz/kde/kdebase-3.4.3/kwin/useractions.cpp
--- tmp/kdebase-3.4.3/kwin/useractions.cpp	2005-10-05 15:38:59.000000000 +0200
+++ home/jezz/kde/kdebase-3.4.3/kwin/useractions.cpp	2005-11-24 01:47:25.000000000 +0100
@@ -510,6 +510,8 @@
                 mode = left ? PositionBottomLeft : (right ? PositionBottomRight : PositionBottom);
             else
                 mode = (x < width() / 2) ? PositionLeft : PositionRight;
+            // if (config)
+              resizeOk = false;
             invertedMoveOffset = rect().bottomRight() - moveOffset;
             unrestrictedMoveResize = ( command == Options::MouseUnrestrictedResize );
             setCursor( mode );

