Path: utzoo!utgpu!cs.utexas.edu!wuarchive!uunet!mcsun!hp4nl!charon!guido From: guido@cwi.nl (Guido van Rossum) Newsgroups: alt.sources Subject: stdwin temporary patch, and note Message-ID: <3020@charon.cwi.nl> Date: 25 Feb 91 16:02:28 GMT Sender: news@cwi.nl Lines: 162 There is a small problem with the stdwin 0.9.4 that I put on wuarchive (see announcement in alt.sources.d). Programs called without any X options would not find resources specified in your .Xresources file. The diff below fixes this. There is another problem with the distribution that is easier explained than fixed by patches: all calls to winitnew() in the test applications should really be calls to winitargs() with the same arguments. (This shows how much I test before putting out a distribution. :-) Finally, there is a section of code in window.c which doesn't compile on X11R3: it references PWinGravity and win_gravity which aren't defined in R3. If this bites you, you can comment out this section with no bad conseqences. -- Guido van Rossum, CWI, Amsterdam Honary Member, Royal Society for Putting Things on Top of Other Things Here is the patch (use patch -p!): *** .../stdwin-dist/stdwin/Ports/x11/general.c Tue Feb 19 10:47:59 1991 --- Ports/x11/general.c Mon Feb 25 14:26:35 1991 *************** *** 173,179 **** You can also set the environment variable RESOURCE_NAME. */ ! XrmDatabase db = NULL; /* Passed between wargs() and winit() */ /* Part one of the initialization -- process command line arguments */ --- 173,180 ---- You can also set the environment variable RESOURCE_NAME. */ ! static XrmDatabase db = NULL; /* Passed between wargs() and winit() */ ! static int wargs_called; /* Set when wargs is called */ /* Part one of the initialization -- process command line arguments */ *************** *** 185,190 **** --- 186,195 ---- char **argv= *pargv; char *value; + if (wargs_called) + _wfatal("wargs: called more than once"); + wargs_called = 1; + /* Get the program name (similar to basename(argv[0])) */ if (*pargc > 0 && argv[0] != NULL && argv[0][0] != EOS) { *************** *** 254,273 **** /* Call wargs() with dummy arguments if not already called */ ! if (db == NULL) { static char* def_args[]= {"stdwin", (char*)NULL}; int argc= 1; char **argv= def_args; wargs(&argc, &argv); ! } /* Open the display, die if we can't */ _wd= XOpenDisplay(_wdisplayname); if (_wd == NULL) { ! _wfatal("winit: can't open display (%s)", ! _wdisplayname ? _wdisplayname : ! getenv("DISPLAY") ? getenv("DISPLAY") : ""); } #ifdef AMOEBA --- 259,279 ---- /* Call wargs() with dummy arguments if not already called */ ! if (!wargs_called) { static char* def_args[]= {"stdwin", (char*)NULL}; int argc= 1; char **argv= def_args; + _wdebug(0, "winit: wargs not called, faking argv[0]=stdwin"); wargs(&argc, &argv); ! } /* Open the display, die if we can't */ _wd= XOpenDisplay(_wdisplayname); if (_wd == NULL) { ! _wfatal("winit: can't open display (%s)", ! _wdisplayname ? _wdisplayname : ! getenv("DISPLAY") ? getenv("DISPLAY") : ""); } #ifdef AMOEBA *************** *** 274,280 **** /* Set the semaphore. This must be done before doing anything else with the connection. */ if (_wsema != NULL) ! XamSetSema(_wd, _wsema); #endif /* Turn on synchronous mode if required. --- 280,286 ---- /* Set the semaphore. This must be done before doing anything else with the connection. */ if (_wsema != NULL) ! XamSetSema(_wd, _wsema); #endif /* Turn on synchronous mode if required. *************** *** 282,288 **** since some bugs disappear in synchronous mode! */ if (getoption(db, "synchronous", "Synchronous") != NULL) ! XSynchronize(_wd, True); /* Call XGetDefault() once. We don't use it to get our defaults, since it doesn't let the caller specify the class --- 288,294 ---- since some bugs disappear in synchronous mode! */ if (getoption(db, "synchronous", "Synchronous") != NULL) ! XSynchronize(_wd, True); /* Call XGetDefault() once. We don't use it to get our defaults, since it doesn't let the caller specify the class *************** *** 301,313 **** value= _wgetdefault("debugLevel", "DebugLevel"); if (value != 0) { ! int k= atoi(value); ! if (k > _wdebuglevel) { ! _wtracelevel= _wdebuglevel= k; ! _wdebug(1, "winit: new debuglevel %d (%s)", ! _wdebuglevel, value); ! XSynchronize(_wd, True); ! } } /* Merge the command line options with the defaults database. --- 307,319 ---- value= _wgetdefault("debugLevel", "DebugLevel"); if (value != 0) { ! int k= atoi(value); ! if (k > _wdebuglevel) { ! _wtracelevel= _wdebuglevel= k; ! _wdebug(1, "winit: new debuglevel %d (%s)", ! _wdebuglevel, value); ! XSynchronize(_wd, True); ! } } /* Merge the command line options with the defaults database. Brought to you by Super Global Mega Corp .com