Path: utzoo!utgpu!utstat!jarvis.csri.toronto.edu!mailrus!csd4.milw.wisc.edu!leah!bingvaxu!sunybcs!rutgers!bellcore!dana From: dana@dino.bellcore.com (Dana A. Chee) Newsgroups: comp.windows.x Subject: Re: Running X11 under Sun Overview Message-ID: Date: 10 Feb 89 13:11:42 GMT References: <8902090237.AA15615@venera.isi.edu> Sender: news@bellcore.bellcore.com Organization: Bellcore, Morristown, NJ USA Lines: 220 In-reply-to: katz@VENERA.ISI.EDU's message of 9 Feb 89 02:37:37 GMT A real long time ago, someone posted a patch for X10R4 which allowed you to freeze the X server and pop back up to suntools when you ran X10 under Sun's Overview (by typing LEFT-L2). Has anyone done this for X11? Alan (Katz@Isi.Edu) Below are the R2 patches (should just be a slight offset for R3) to restore that functionality. You may not still need the changes to xinit.c but the rest should still be fine. ==================== VERSION: X11 release 2 CLIENT MACHINE: Sun 3/75 CLIENT OPERATING SYSTEM: SunOS 3.2 DISPLAY: Sun SYNOPSIS: Add Meta-L2 support for running X under Sunview. DESCRIPTION: These diff add the Meta-L2 support present in X10R4 which allowed an X server running under Sunview to return to Sunview by typing Meta-L2. When the overview icon was clicked, the X server was restarted. Affected files: clients/xinit/xinit.c server/ddx/sun/sunInit.c server/ddx/sun/sunKbd.c FIX: *** clients/xinit/xinit.c.orig Thu Feb 25 23:53:54 1988 --- clients/xinit/xinit.c Thu Apr 21 14:29:11 1988 *************** *** 148,156 **** #endif /* SYSV */ if ((serverpid = startServer(server)) > 0 && (clientpid = startClient(client)) > 0) { ! pid = -1; ! while (pid != clientpid && pid != serverpid) ! pid = wait(NULL); } signal(SIGQUIT, SIG_IGN); signal(SIGINT, SIG_IGN); --- 148,173 ---- #endif /* SYSV */ if ((serverpid = startServer(server)) > 0 && (clientpid = startClient(client)) > 0) { ! while( 1 ) ! { ! union wait status; ! ! do ! { ! pid = wait3(&status, WUNTRACED, NULL); ! } while (pid != clientpid && pid != serverpid); ! ! if (pid == serverpid && ! (WIFSTOPPED(status))) ! { ! kill (getpid(), SIGSTOP); ! kill (serverpid, SIGCONT); ! } ! else ! { ! break; ! } ! } } signal(SIGQUIT, SIG_IGN); signal(SIGINT, SIG_IGN); *************** *** 222,227 **** --- 239,245 ---- break; } laststring = string; + fprintf(stderr, "\n"); return( pid != pidfound ); } *** server/ddx/sun/sunInit.c.orig Sat Jan 16 12:40:55 1988 --- server/ddx/sun/sunInit.c Thu Apr 21 14:20:51 1988 *************** *** 63,68 **** --- 63,69 ---- extern void SetInputCheck(); extern char *strncpy(); extern GCPtr CreateScratchGC(); + extern WindowRec WindowTable[]; #define XDEVICE "XDEVICE" #define PARENT "WINDOW_GFX" *************** *** 704,706 **** --- 705,773 ---- return (fd); } + + /* + * stopme - stop window for suntools + */ + #ifdef SUN_WINDOWS + stopme() + { + DevicePtr pKbd; + int i; + + if( !sunUseSunWindows()) + return; + + /* + * on our way out -- shut down keyboard and mouse + * and remove the window + */ + pKbd = LookupKeyboardDevice(); + sunKbdProc(pKbd, DEVICE_OFF); + sunMouseProc(pKbd, DEVICE_OFF); + win_remove(windowFd); + kill(0, SIGSTOP); + + /* + * we're back, restore the window, and turn on the + * keyboard and mouse + */ + win_insert(windowFd); + sunMouseProc(pKbd, DEVICE_ON); + sunKbdProc(pKbd, DEVICE_ON); + + /* + * refresh all screens + */ + for( i = 0; i < screenInfo.numScreens; i++ ) + { + ExposeEveryone(&WindowTable[i], &screenInfo.screen[i]); + HandleExposures(&WindowTable[i]); + } + } + + static + ExposeEveryone(pWin, pScreen) + WindowPtr pWin; + ScreenPtr pScreen; + { + WindowPtr pChild; + + pChild = pWin; + while( pChild ) + { + if( pChild->mapped ) + { + (* pScreen->RegionCopy)(pChild->exposed, pChild->clipList); + (* pScreen->RegionCopy)(pChild->borderExposed, pChild->borderClip); + ExposeEveryone(pChild->firstChild, pScreen); + } + pChild = pChild->nextSib; + } + } + #endif SUN_WINDOWS + + + + + *** server/ddx/sun/sunKbd.c.orig Tue Feb 9 17:19:51 1988 --- server/ddx/sun/sunKbd.c Thu Apr 21 14:23:58 1988 *************** *** 734,744 **** --- 734,763 ---- register struct inputevent *se; { Firm_event fe; + int loc; + static Meta_On, Meta_hold; fe.time = event_time(se); fe.id = event_id(se); fe.value = (event_is_up(se) ? VKEY_UP : VKEY_DOWN); + loc = (fe.id - 1) * sunKeySyms[sysKbPriv.type].mapWidth; + + if( sunKeySyms[sysKbPriv.type].map[loc] == XK_Meta_L || + sunKeySyms[sysKbPriv.type].map[loc] == XK_Meta_R ) /* Meta */ + { + Meta_hold = fe.id; + Meta_On = (fe.value == VKEY_DOWN); + } + if( sunKeySyms[sysKbPriv.type].map[loc] == XK_L2 ) /* L2 */ + { + if( fe.value == VKEY_DOWN && Meta_On ) + { + stopme(); + fe.id = Meta_hold; + fe.value = VKEY_UP; + } + } sunKbdProcessEvent (pKeyboard, &fe); } #endif SUN_WINDOWS -- +*************************************************************************+ * Dana Chee (201) 829-4488 * * Bellcore * * Room 2Q-250 * * 445 South Street ARPA: dana@bellcore.com * * Morristown, NJ 07960-1910 UUCP: {gateways}!bellcore!dana * +*************************************************************************+