Index: kdesktop/lock/lockdlg.cc
===================================================================
--- kdesktop/lock/lockdlg.cc	(revision 1261452)
+++ kdesktop/lock/lockdlg.cc	(working copy)
@@ -115,7 +115,7 @@
         frame->setFrameStyle( TQFrame::Panel | TQFrame::Raised );
     frame->setLineWidth( 2 );
 
-    TQLabel *pixLabel;
+    TQLabel *pixLabel = NULL;
     if (!trinity_desktop_lock_use_system_modal_dialogs) {
         pixLabel = new TQLabel( frame, "pixlabel" );
         pixLabel->setPixmap(DesktopIcon("lock"));
@@ -134,7 +134,7 @@
                 i18n("<nobr><b>The session was locked by %1</b><br>").arg( user.fullName() ), frame );
     }
 
-    TQLabel *lockDTLabel;
+    TQLabel *lockDTLabel = NULL;
     if ((trinity_desktop_lock_use_system_modal_dialogs) && (!m_lockStartDT.isNull())) {
         lockDTLabel = new TQLabel(i18n("This session has been locked since %1").arg(m_lockStartDT.toString()), frame);
     }
Index: kdesktop/lock/lockprocess.cc
===================================================================
--- kdesktop/lock/lockprocess.cc	(revision 1261452)
+++ kdesktop/lock/lockprocess.cc	(working copy)
@@ -173,6 +173,7 @@
       mDialogControlLock(false),
       mForceReject(false),
       currentDialog(NULL),
+      mEnsureScreenHiddenTimer(NULL),
       mForceContinualLockDisplayTimer(NULL),
       mEnsureVRootWindowSecurityTimer(NULL),
       mHackDelayStartupTimer(NULL),
@@ -288,6 +289,10 @@
         hackResumeTimer->stop();
         delete hackResumeTimer;
     }
+    if (mEnsureScreenHiddenTimer != NULL) {
+        mEnsureScreenHiddenTimer->stop();
+        delete mEnsureScreenHiddenTimer;
+    }
     if (mForceContinualLockDisplayTimer != NULL) {
         mForceContinualLockDisplayTimer->stop();
         delete mForceContinualLockDisplayTimer;
@@ -410,7 +415,7 @@
         if (numread > 0) {
             if (readbuf[0] == 'C') {
                 mInfoMessageDisplayed=false;
-                while (mDialogControlLock == true) sleep(1);
+                while (mDialogControlLock == true) usleep(100000);
                 mDialogControlLock = true;
                 if (currentDialog != NULL) {
                     mForceReject = true;
@@ -423,7 +428,7 @@
                 to_display = to_display.remove(0,1);
                 // Lock out password dialogs and close any active dialog
                 mInfoMessageDisplayed=true;
-                while (mDialogControlLock == true) sleep(1);
+                while (mDialogControlLock == true) usleep(100000);
                 mDialogControlLock = true;
                 if (currentDialog != NULL) {
                     mForceReject = true;
@@ -444,7 +449,7 @@
                 to_display = to_display.remove(0,1);
                 // Lock out password dialogs and close any active dialog
                 mInfoMessageDisplayed=true;
-                while (mDialogControlLock == true) sleep(1);
+                while (mDialogControlLock == true) usleep(100000);
                 mDialogControlLock = true;
                 if (currentDialog != NULL) {
                     mForceReject = true;
@@ -468,7 +473,7 @@
                 to_display = to_display.remove(0,1);
                 // Lock out password dialogs and close any active dialog
                 mInfoMessageDisplayed=true;
-                while (mDialogControlLock == true) sleep(1);
+                while (mDialogControlLock == true) usleep(100000);
                 mDialogControlLock = true;
                 if (currentDialog != NULL) {
                     mForceReject = true;
@@ -887,8 +892,13 @@
     mRootWidth = rootAttr.width;
     mRootHeight = rootAttr.height;
 
+    // Resize the background widget
     setGeometry(0, 0, mRootWidth, mRootHeight);
 
+    // Black out the background widget to hide ugly resize tiling artifacts
+    setBackgroundColor(black);
+    erase();
+
     // This slot needs to be able to execute very rapidly so as to prevent the user's desktop from ever
     // being displayed, so we finish the hack restarting/display prettying operations in a separate timed slot
     if (resizeTimer == NULL) {
@@ -902,7 +912,7 @@
 {
     stopHack();
 
-    while (mDialogControlLock == true) sleep(1);
+    while (mDialogControlLock == true) usleep(100000);
     mDialogControlLock = true;
     if (closeCurrentWindow()) {
         TQTimer::singleShot( 0, this, SLOT(doDesktopResizeFinish()) );
@@ -911,7 +921,13 @@
     mDialogControlLock = false;
 
     // Restart the hack as the window size is now different
-    startHack();
+    if (trinity_desktop_lock_delay_screensaver_start && trinity_desktop_lock_forced && trinity_desktop_lock_use_system_modal_dialogs) {
+        ENABLE_CONTINUOUS_LOCKDLG_DISPLAY
+        if (mHackStartupEnabled) mHackDelayStartupTimer->start(mHackDelayStartupTimeout, TRUE);
+    }
+    else {
+        startHack();
+    }
 
     mBusy = false;
 }
@@ -1064,7 +1080,7 @@
 
     if (!grabKeyboard())
     {
-        sleep(1);
+        usleep(100000);
         if (!grabKeyboard())
         {
             return false;
@@ -1073,7 +1089,7 @@
 
     if (!grabMouse())
     {
-        sleep(1);
+        usleep(100000);
         if (!grabMouse())
         {
             XUngrabKeyboard(qt_xdisplay(), CurrentTime);
@@ -1117,7 +1133,7 @@
 	m_grayImage.fill(0);	// Set the alpha buffer to 0 (fully transparent)
 	m_grayImage.setAlphaBuffer(true);
 	TQPixmap m_root;
-	m_root.resize( TQApplication::desktop()->geometry().width(), TQApplication::desktop()->geometry().height() );
+	m_root.resize(mRootWidth, mRootHeight);
 	TQPainter p;
 	p.begin( &m_root );
 	m_grayImage.setAlphaBuffer(false);
@@ -1144,14 +1160,21 @@
 			setBackgroundColor(black);
 		else
 			setBackgroundPixmap(backingPixmap);
+		setGeometry(0, 0, mRootWidth, mRootHeight);
 		erase();
 	}
 	if (trinity_desktop_lock_use_system_modal_dialogs) {
 		// Try to get the root pixmap
-		m_rootPixmap = new KRootPixmap(this);
+		if (!m_rootPixmap) m_rootPixmap = new KRootPixmap(this);
 		m_rootPixmap->setCustomPainting(true);
 		connect(m_rootPixmap, TQT_SIGNAL(backgroundUpdated(const TQPixmap &)), this, TQT_SLOT(slotPaintBackground(const TQPixmap &)));
 		m_rootPixmap->start();
+		// Sometimes KRootPixmap fails...make sure the desktop is hidden regardless
+		if (!mEnsureScreenHiddenTimer) {
+			mEnsureScreenHiddenTimer = new TQTimer( this );
+			connect( mEnsureScreenHiddenTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(slotForcePaintBackground()) );
+		}
+		mEnsureScreenHiddenTimer->start(2000, true);
 	}
 
 	if (trinity_desktop_lock_in_sec_dlg == FALSE) {
@@ -1275,6 +1298,7 @@
 		if (!mHackProc.isRunning()) {
 			if (backingPixmap.isNull()) {
 				setBackgroundColor(black);
+				setGeometry(0, 0, mRootWidth, mRootHeight);
 				erase();
 			}
 			else {
@@ -1298,6 +1322,7 @@
 		setBackgroundColor(black);
 	else
 		setBackgroundPixmap(backingPixmap);
+	setGeometry(0, 0, mRootWidth, mRootHeight);
 	erase();
         return false;
     }
@@ -1344,6 +1369,7 @@
 				setBackgroundColor(black);
 			else
 				setBackgroundPixmap(backingPixmap);
+			setGeometry(0, 0, mRootWidth, mRootHeight);
 			erase();
 			mSuspended = false;
 		}
@@ -1377,7 +1403,10 @@
 			else
 				setBackgroundPixmap(backingPixmap);
 		}
-		if (backingPixmap.isNull()) erase();
+		if (backingPixmap.isNull()) {
+			setGeometry(0, 0, mRootWidth, mRootHeight);
+			erase();
+		}
 		else bitBlt(this, 0, 0, &backingPixmap);
 		if (trinity_desktop_lock_use_system_modal_dialogs) {
 			ENABLE_CONTINUOUS_LOCKDLG_DISPLAY
@@ -1416,7 +1445,10 @@
 		else
 			setBackgroundPixmap(backingPixmap);
 	}
-	if (backingPixmap.isNull()) erase();
+	if (backingPixmap.isNull()) {
+		setGeometry(0, 0, mRootWidth, mRootHeight);
+		erase();
+	}
 	else bitBlt(this, 0, 0, &backingPixmap);
 	if (!mSuspended) {
 		if (trinity_desktop_lock_use_system_modal_dialogs) {
@@ -1492,6 +1524,7 @@
 		setBackgroundColor(black);
 	else
 		setBackgroundPixmap(backingPixmap);
+	setGeometry(0, 0, mRootWidth, mRootHeight);
 	erase();
         return;
     }
@@ -1597,10 +1630,13 @@
     }
     mDialogs.prepend( dlg );
     fakeFocusIn( dlg->winId());
-    if (backingPixmap.isNull() && trinity_desktop_lock_use_system_modal_dialogs) erase();
+    if (backingPixmap.isNull() && trinity_desktop_lock_use_system_modal_dialogs) {
+        setGeometry(0, 0, mRootWidth, mRootHeight);
+        erase();
+    }
     else bitBlt(this, 0, 0, &backingPixmap);
     int rt = dlg->exec();
-    while (mDialogControlLock == true) sleep(1);
+    while (mDialogControlLock == true) usleep(100000);
     currentDialog = NULL;
     mDialogs.remove( dlg );
     if( mDialogs.isEmpty() ) {
@@ -1624,8 +1660,18 @@
     return rt;
 }
 
+void LockProcess::slotForcePaintBackground()
+{
+	TQPixmap blankPixmap(mRootWidth, mRootHeight);
+	blankPixmap.fill(Qt::black);
+	slotPaintBackground(blankPixmap);
+	printf("[WARNING] Unable to obtain desktop wallpaper in a timely manner.  High system load or possibly a TDE bug!\n\r"); fflush(stdout);
+}
+
 void LockProcess::slotPaintBackground(const TQPixmap &rpm)
 {
+	mEnsureScreenHiddenTimer->stop();
+
 	TQPixmap pm = rpm;
 
 	if (TQPaintDevice::x11AppDepth() == 32) {
@@ -1652,6 +1698,7 @@
 	backingPixmap = pm;
 	if (trinity_desktop_lock_delay_screensaver_start && trinity_desktop_lock_forced) {
 		setBackgroundPixmap(backingPixmap);
+		setGeometry(0, 0, mRootWidth, mRootHeight);
 		erase();
 	}
 }
@@ -1677,7 +1724,7 @@
         mBusy=true;
         TQTimer::singleShot(1000, this, TQT_SLOT(slotDeadTimePassed()));
         if (mkeyCode == XKeysymToKeycode(qt_xdisplay(), XF86XK_Display)) {
-            while (mDialogControlLock == true) sleep(1);
+            while (mDialogControlLock == true) usleep(100000);
             mDialogControlLock = true;
             currentDialog->close();		// DO NOT use closeCurrentWindow() here!
             mDialogControlLock = false;
Index: kdesktop/lock/lockprocess.h
===================================================================
--- kdesktop/lock/lockprocess.h	(revision 1261452)
+++ kdesktop/lock/lockprocess.h	(working copy)
@@ -74,6 +74,7 @@
     void doDesktopResizeFinish();
     void doFunctionKeyBroadcast();
     void slotPaintBackground(const TQPixmap &pm);
+    void slotForcePaintBackground();
 
 protected:
     virtual bool x11Event(XEvent *);
@@ -181,6 +182,7 @@
     bool        mForceReject;
     TQDialog     *currentDialog;
 
+    TQTimer*    mEnsureScreenHiddenTimer;
     TQTimer*    mForceContinualLockDisplayTimer;
     TQTimer*    mEnsureVRootWindowSecurityTimer;
     TQTimer*    mHackDelayStartupTimer;