From 27928b9aba62ee404951b2e242335389f2826f9d Mon Sep 17 00:00:00 2001
From: Chase <chinkle3@illinois.edu>
Date: Thu, 27 Nov 2025 23:06:18 -0500
Subject: [PATCH] dtsession: split ShowWaitState into Enter and LeaveWaitState

---
 cde/programs/dtsession/SmMain.c |  4 ++--
 cde/programs/dtsession/SmSave.c |  8 ++++----
 cde/programs/dtsession/SmUI.c   | 35 ++++++++++++++++-----------------
 cde/programs/dtsession/SmUI.h   |  3 ++-
 cde/programs/dtsession/SmXSMP.c |  4 ++--
 cde/programs/dtwm/WmFeedback.c  |  3 ++-
 6 files changed, 29 insertions(+), 28 deletions(-)

diff --git a/cde/programs/dtsession/SmMain.c b/cde/programs/dtsession/SmMain.c
index 30366e1c5..1d6d9a23f 100644
--- a/cde/programs/dtsession/SmMain.c
+++ b/cde/programs/dtsession/SmMain.c
@@ -428,7 +428,7 @@ main (int argc, char **argv)
     /*
      * Put the program into a wait state
      */
-    ShowWaitState(True);
+    EnterWaitState();
 
     InitErrorHandler();
 
@@ -491,7 +491,7 @@ main (int argc, char **argv)
     XSelectInput(smGD.display, smGD.topLevelWindow,
 		 windAtt.your_event_mask | PropertyChangeMask);
 
-    ShowWaitState(False);
+    LeaveWaitState();
 
     /*
      * Register for events
diff --git a/cde/programs/dtsession/SmSave.c b/cde/programs/dtsession/SmSave.c
index 5315b12b0..cba64acd1 100644
--- a/cde/programs/dtsession/SmSave.c
+++ b/cde/programs/dtsession/SmSave.c
@@ -340,7 +340,7 @@ CompleteSave (void)
    * Start a wait state - don't want anything to happen while
    * ICCC clients are being saved
    */
-  ShowWaitState(True);
+  EnterWaitState();
   
   resSpec = (char *) SM_MALLOC(resSize * sizeof(char));
   if (resSpec==NULL)
@@ -350,7 +350,7 @@ CompleteSave (void)
   }
 
   if (!WriteClientDatabase ()) {
-      ShowWaitState(False);
+      LeaveWaitState();
       SM_FREE(resSpec);
       return (-1);
   }
@@ -381,7 +381,7 @@ CompleteSave (void)
    */
   if(OutputResource())
   {
-      ShowWaitState(False);
+      LeaveWaitState();
       SM_FREE(resSpec);
       return(-1);
   }
@@ -398,7 +398,7 @@ CompleteSave (void)
  
   PruneSessionDirectory ();
 
-  ShowWaitState(False);
+  LeaveWaitState();
 
   return(0);
 }
diff --git a/cde/programs/dtsession/SmUI.c b/cde/programs/dtsession/SmUI.c
index 5ea4232a4..740804dba 100644
--- a/cde/programs/dtsession/SmUI.c
+++ b/cde/programs/dtsession/SmUI.c
@@ -1389,8 +1389,8 @@ DialogUp(
 
 /*************************************<->*************************************
  *
- *  ShowWaitState (flag)
- *
+ *  EnterWaitState (void)
+ *  LeaveWaitState (void)
  *
  *  Description:
  *  -----------
@@ -1399,7 +1399,7 @@ DialogUp(
  *
  *  Inputs:
  *  ------
- *  flag = TRUE for Enter, FALSE for Leave.
+ *  None.
  *
  *
  *  Outputs:
@@ -1414,25 +1414,24 @@ DialogUp(
  *************************************<->***********************************/
 
 void
-ShowWaitState(
-        Boolean flag )
+EnterWaitState(void)
 {
-    if (flag)
-    {
-	XGrabPointer (smGD.display, DefaultRootWindow(smGD.display), FALSE,
-		      0, GrabModeAsync, GrabModeAsync, None,
-		      smGD.waitCursor, CurrentTime);
-	XGrabKeyboard (smGD.display, DefaultRootWindow(smGD.display), FALSE,
-		       GrabModeAsync, GrabModeAsync, CurrentTime);
-    }
-    else
-    {
-	XUngrabPointer (smGD.display, CurrentTime);
-	XUngrabKeyboard (smGD.display, CurrentTime);
-    }
+    XGrabPointer (smGD.display, DefaultRootWindow(smGD.display), FALSE,
+	      0, GrabModeAsync, GrabModeAsync, None,
+	      smGD.waitCursor, CurrentTime);
+    XGrabKeyboard (smGD.display, DefaultRootWindow(smGD.display), FALSE,
+	      GrabModeAsync, GrabModeAsync, CurrentTime);
+    XSync(smGD.display,0);
+}
+
+void LeaveWaitState(void){
+    XUngrabPointer (smGD.display, CurrentTime);
+    XUngrabKeyboard (smGD.display, CurrentTime);
     XSync(smGD.display, 0);
 }
 
+
+
 
 /*************************************<->*************************************
  *
diff --git a/cde/programs/dtsession/SmUI.h b/cde/programs/dtsession/SmUI.h
index 6d3e19b40..8e65dc501 100644
--- a/cde/programs/dtsession/SmUI.h
+++ b/cde/programs/dtsession/SmUI.h
@@ -104,7 +104,8 @@ extern int WarnMsgFailure( void ) ;
 extern Widget CreateLockDialogWithCover( Widget ) ;
 extern Widget CreateCoverDialog( int, Boolean ) ;
 extern void ImmediateExit( int, Tt_message, Boolean ) ;
-extern void ShowWaitState( Boolean ) ; 
+extern void EnterWaitState();
+extern void LeaveWaitState();
 extern Boolean InitCursorInfo( void ) ; 
 extern void UpdatePasswdField( int );
 extern int WarnNoStartup( void );
diff --git a/cde/programs/dtsession/SmXSMP.c b/cde/programs/dtsession/SmXSMP.c
index a16248557..3fd2fa6bf 100644
--- a/cde/programs/dtsession/SmXSMP.c
+++ b/cde/programs/dtsession/SmXSMP.c
@@ -803,9 +803,9 @@ SaveYourselfReqProc (
 	 * appropriate location.
 	*/
 	if (notify) {
-		ShowWaitState(True);
+		EnterWaitState();
 		NotifyProxyClients ();
-		ShowWaitState(False);
+		LeaveWaitState();
 	}
 
 	for (pClientRec = connectedList; pClientRec != NULL; 
diff --git a/cde/programs/dtwm/WmFeedback.c b/cde/programs/dtwm/WmFeedback.c
index 3e49e6e5b..c173d5faa 100644
--- a/cde/programs/dtwm/WmFeedback.c
+++ b/cde/programs/dtwm/WmFeedback.c
@@ -898,7 +898,8 @@ void ConfirmAction (WmScreenData *pSD, int nbr)
 
 void EnterWaitState(void)
 {
-    waitCursor = _DtGetHourGlassCursor(DISPLAY);
+    if (!waitCursor)
+	waitCursor = _DtGetHourGlassCursor(DISPLAY);
 
     XGrabPointer (DISPLAY, DefaultRootWindow(DISPLAY), FALSE,
 		0, GrabModeAsync, GrabModeAsync, None,
