Description: SIGSEGV when changing workspaces
Author: Michael O'Donnell <mod.reportbug@spineless.org>
Bug-Debian: https://bugs.debian.org/662860

--- ctwm-3.7.orig/events.c
+++ ctwm-3.7/events.c
@@ -437,6 +437,7 @@ Bool DispatchEvent2 (void)
 {
     Window w = Event.xany.window;
     StashEventTime (&Event);
+    ScreenInfo *lastScr = Scr;   /* XXX_MIKE - assume Scr OK on entry... */
 
     if (XFindContext (dpy, w, TwmContext, (XPointer *) &Tmp_win) == XCNOENT)
       Tmp_win = NULL;
@@ -447,7 +448,10 @@ Bool DispatchEvent2 (void)
 
     dumpevent(&Event);
 
-    if (!Scr) return False;
+    if (!Scr) {
+        Scr = lastScr;           /* XXX_MIKE - try not to leave Scr NULL */
+        return False;
+    }
     if (Scr->Root != Scr->RealRoot) FixRootEvent (&Event);
 
 #ifdef SOUNDS
@@ -475,6 +479,7 @@ Bool DispatchEvent (void)
 {
     Window w = Event.xany.window;
     StashEventTime (&Event);
+    ScreenInfo *lastScr = Scr;   /* XXX_MIKE - assume Scr OK on entry... */
 
     if (XFindContext (dpy, w, TwmContext, (XPointer *) &Tmp_win) == XCNOENT)
       Tmp_win = NULL;
@@ -485,7 +490,10 @@ Bool DispatchEvent (void)
 
     dumpevent(&Event);
 
-    if (!Scr) return False;
+    if (!Scr) {
+        Scr = lastScr;           /* XXX_MIKE - try not to leave Scr NULL */
+        return False;
+    }
 
     if (captive) {
       if ((Event.type == ConfigureNotify) && (Event.xconfigure.window == Scr->CaptiveRoot)) {
