Return to BSD News archive
Path: sserve!newshost.anu.edu.au!munnari.oz.au!network.ucsd.edu!ogicse!emory!europa.eng.gtefsd.com!uunet!email.tuwien.ac.at!not-for-mail From: martin@hal.nt.tuwien.ac.at (Martin Birgmeier) Newsgroups: comp.os.386bsd.questions Subject: Re: tvtwm and/or olvwm ported to xxxBSD/XFree2.0 ? Keywords: olvwm, tvtwm, window manager, xxxxBSD, XFree2.0 Message-ID: <2d24oo$a35@hal.nt.tuwien.ac.at> Date: 25 Nov 93 13:26:16 GMT Article-I.D.: hal.2d24oo$a35 References: <2759@hcshh.hcs.de> Organization: Dept. of Comm. Engr., Tech. Univ. of Vienna, Austria Lines: 525 NNTP-Posting-Host: hal.nt.tuwien.ac.at In article <2759@hcshh.hcs.de>, Hellmuth Michaelis <hm@hcshh.hcs.de> wrote: >Has anyone ported olvwm and/or tvtwm to anyBSD and XFree86 2.0 ? Following are patches for tvtwm.pl9b5, they also add some new functionality as reflected in the man page and fix a few bugs: ============================== cut here ============================== *** tvtwm.pl9b5/tvtwm.man.ORIG Mon Jan 25 19:30:36 1993 --- tvtwm.pl9b5/tvtwm.man Wed Nov 10 13:11:53 1993 *************** *** 393,402 **** The following variables may be specified at the top of a \fItwm\fP startup file. Lists of Window name prefix strings are indicated by \fIwin-list\fP. Optional arguments are shown in square brackets: ! .IP "\fBAutoRaise\fP { \fIwin-list\fP }" 8 ! This variable specifies a list of windows that should automatically be ! raised whenever the pointer enters the window. This action can be ! interactively enabled or disabled on individual windows using the function \fBf.autoraise\fP. .IP "\fBAutoRelativeResize\fP" 8 This variable indicates that dragging out a window size (either when --- 393,405 ---- The following variables may be specified at the top of a \fItwm\fP startup file. Lists of Window name prefix strings are indicated by \fIwin-list\fP. Optional arguments are shown in square brackets: ! .IP "\fBAutoRaise\fP [{ \fIwin-list\fP }]" 8 ! This variable specifies a list of windows ! (all windows if the list is defaulted) ! to be automatically ! raised whenever the pointer has come to rest in a window for the amount of ! time specified by the \fBRaiseDelay\fP variable. ! This action can be interactively enabled or disabled on individual windows using the function \fBf.autoraise\fP. .IP "\fBAutoRelativeResize\fP" 8 This variable indicates that dragging out a window size (either when *************** *** 925,930 **** --- 928,938 ---- The default for \fITitleHighlight\fP is to use an even stipple pattern. The \fIVirtualDesktopBackgroundPixmap\fP and \fIPannerBackgroundPixmap\fP pixmaps can be set as detailed in each of their own sections. + .IP "\fBRaiseDelay\fP \fImilliseconds\fP" 8 + For windows that are to be automatically raised when the pointer enters + (see the \fBAutoRaise\fP variable and the \fIf.autoraise\fP function) + this variable specifies the length of time the pointer should rest in + the window before it is raised. The default is 0 milliseconds. .IP "\fBRandomPlacement\fP" 8 This variable indicates that windows with no specified geometry should should be placed in a pseudo-random location instead of having the user drag out *** tvtwm.pl9b5/twm.c.ORIG Thu Jan 21 02:35:45 1993 --- tvtwm.pl9b5/twm.c Wed Nov 10 13:11:54 1993 *************** *** 910,915 **** --- 910,916 ---- Scr->SizeStringOffset = 0; Scr->BorderWidth = BW; Scr->IconBorderWidth = BW; + Scr->AutoRaiseDefault = FALSE; Scr->NumAutoRaises = 0; Scr->NoDefaults = FALSE; Scr->UsePPosition = PPOS_OFF; *** tvtwm.pl9b5/gram.y.ORIG Sat May 9 04:26:34 1992 --- tvtwm.pl9b5/gram.y Wed Nov 10 13:11:54 1993 *************** *** 251,256 **** --- 251,258 ---- win_list | AUTO_RAISE { list = &Scr->AutoRaise; } win_list + | AUTO_RAISE { if (Scr->FirstTime) + Scr->AutoRaiseDefault = TRUE; } | STICKY { list = &Scr->StickyL; } win_list | FUNCTION string { root = GetRoot($2, NULLSTR, NULLSTR); } *** tvtwm.pl9b5/events.c.ORIG Thu Jan 21 00:14:51 1993 --- tvtwm.pl9b5/events.c Wed Nov 10 13:11:53 1993 *************** *** 120,125 **** --- 120,126 ---- ***********************************************************************/ #include <stdio.h> + #include <sys/time.h> #include "twm.h" #include <X11/Xatom.h> #include "add_window.h" *************** *** 2438,2443 **** --- 2439,2445 ---- XEnterWindowEvent *ewp = &Event.xcrossing; HENScanArgs scanArgs; XEvent dummy; + extern int RaiseDelay; /* * if we aren't in the middle of menu processing *************** *** 2467,2472 **** --- 2469,2544 ---- InstallWindowColormaps(EnterNotify, &Scr->TwmRoot); return; } + + /* Handle RaiseDelay, if any..... + */ + if (RaiseDelay > 0) { + if (Tmp_win && Tmp_win->auto_raise + && (!Tmp_win->list || Tmp_win->list->w != ewp->window)) { + ColormapWindow *cwin; + static struct timeval timeout = {0,12500}; + + if (XFindContext(dpy, Tmp_win->w, ColormapContext, + (caddr_t *)&cwin) == XCNOENT) { + cwin = (ColormapWindow *)NULL; + } + + if ((ewp->detail != NotifyInferior + || Tmp_win->frame == ewp->window) + && (!cwin || cwin->visibility != VisibilityUnobscured)) { + int x, y, px, py, d, i; + Window w; + + XQueryPointer(dpy, Scr->Root, &w, &w, &px, &py, + &d, &d, (unsigned int *)&d); + + /* The granularity of RaiseDelay is about 25 ms. + * The timeout variable is set to 12.5 ms since we + * pass this way twice each time a twm window is + * entered. + */ + for (i = 25; i < RaiseDelay; i += 25) { + select(0, 0, 0, 0, &timeout); + /* Did we leave this window already? */ + scanArgs.w = ewp->window; + scanArgs.leaves = scanArgs.enters = False; + (void) XCheckIfEvent(dpy, &dummy, HENQueueScanner, + (char *) &scanArgs); + if (scanArgs.leaves && !scanArgs.inferior) return; + + XQueryPointer(dpy, Scr->Root, &w, &w, &x, &y, + &d, &d, (unsigned int *)&d); + + /* Has the pointer moved? If so reset the loop cnt. + * We want the pointer to be still for RaiseDelay + * milliseconds before terminating the loop + */ + if (x != px || y != py) { + i = 0; px = x; py = y; + } + } + } + } + + /* + * Scan for Leave and Enter Notify events to see if we can avoid some + * unnecessary processing. + */ + scanArgs.w = ewp->window; + scanArgs.leaves = scanArgs.enters = False; + (void) XCheckIfEvent(dpy, &dummy, HENQueueScanner, (char *) &scanArgs); + + /* + * if entering root window, restore twm default colormap so that + * titlebars are legible + */ + if (ewp->window == Scr->Root) { + if (!scanArgs.leaves && !scanArgs.enters) + InstallWindowColormaps(EnterNotify, &Scr->TwmRoot); + return; + } + } + /* End of RaiseDelay modification. */ /* * if we have an event for a specific one of our windows *** tvtwm.pl9b5/lex.l.ORIG Wed Feb 19 03:18:40 1992 --- tvtwm.pl9b5/lex.l Wed Nov 10 13:11:54 1993 *************** *** 43,48 **** --- 43,56 ---- extern int ParseError; + #ifdef FLEX_SCANNER + #undef YY_INPUT + #define YY_INPUT(buf, result, max_size) \ + result = ((buf[0] = (*twmInputFunc)()) ? 1 : 0) + + int yylineno = 1; + #endif + %} string \"([^"]|\\.)*\" *************** *** 83,90 **** {number} { (void)sscanf(yytext, "%d", &yylval.num); return (NUMBER); } ! \#[^\n]*\n {;} ! [\n\t ] {;} . { twmrc_error_prefix(); fprintf (stderr, --- 91,109 ---- {number} { (void)sscanf(yytext, "%d", &yylval.num); return (NUMBER); } ! \#[^\n]*\n { ! #ifdef FLEX_SCANNER ! yylineno++ ! #endif ! ; ! } ! [\t ] {;} ! \n { ! #ifdef FLEX_SCANNER ! yylineno++ ! #endif ! ; ! } . { twmrc_error_prefix(); fprintf (stderr, *************** *** 93,98 **** --- 112,118 ---- ParseError = 1; } %% + #ifndef FLEX_SCANNER yywrap() { return(1);} #undef unput *************** *** 103,105 **** --- 123,126 ---- #define input() (*twmInputFunc)() #define output(c) TwmOutput(c) #define feof() (1) + #endif *** tvtwm.pl9b5/screen.h.ORIG Thu Apr 9 23:51:15 1992 --- tvtwm.pl9b5/screen.h Wed Nov 10 13:11:53 1993 *************** *** 308,313 **** --- 308,314 ---- short WrapVirtual; /* wrap-around on the virtual desktop panning */ short SetupDone; char *AfterSetupRun; /* program to run when tvtwm is running */ + short AutoRaiseDefault; /* AutoRaise all windows if true */ FuncKey FuncKeyRoot; } ScreenInfo; *** tvtwm.pl9b5/parse.c.ORIG Thu Jan 21 01:25:21 1993 --- tvtwm.pl9b5/parse.c Wed Nov 10 13:11:54 1993 *************** *** 81,86 **** --- 81,88 ---- int ConstrainedMoveTime = 400; /* milliseconds, event times */ + int RaiseDelay = 0; /* msec, for AutoRaise */ + static int twmFileInput(), twmStringListInput(), twmMenuInput(); void twmUnput(); int (*twmInputFunc)(); *************** *** 523,528 **** --- 525,531 ---- #define kwn_TitleFontPadding 14 #define kwn_PopupSensitivity 15 #define kwn_MenuShadowWidth 16 + #define kwn_RaiseDelay 17 #define kwcl_BorderColor 1 #define kwcl_IconManagerHighlight 2 *************** *** 769,774 **** --- 772,778 ---- { "popupsensitivity", NKEYWORD, kwn_PopupSensitivity }, { "pullrightpixmap", PKEYWORD, kwp_PullRightPixmap }, { "r", ROOT, 0 }, + { "raisedelay", NKEYWORD, kwn_RaiseDelay }, { "randomplacement", KEYWORD, kw0_RandomPlacement }, { "rememberscreenposition", KEYWORD, kw0_RememberScreenPosition }, { "resclass", MKEYWORD, kwm_ResClass }, *************** *** 1207,1212 **** --- 1211,1220 ---- case kwn_TitleButtonBorderWidth: if (Scr->FirstTime) Scr->TBInfo.border = num; + return 1; + + case kwn_RaiseDelay: + RaiseDelay = num; return 1; case kwn_PopupSensitivity: *** tvtwm.pl9b5/menus.c.ORIG Wed Mar 10 15:38:26 1993 --- tvtwm.pl9b5/menus.c Wed Nov 10 13:14:23 1993 *************** *** 208,214 **** extern char *Action; extern int Context; ! extern TwmWindow *ButtonWindow, *Tmp_win; extern XEvent Event, ButtonEvent; extern char *InitFile; static void Identify(); --- 208,214 ---- extern char *Action; extern int Context; ! extern TwmWindow *ButtonWindow; extern XEvent Event, ButtonEvent; extern char *InitFile; static void Identify(); *** tvtwm.pl9b5/move.c.ORIG Mon Oct 26 21:29:54 1992 --- tvtwm.pl9b5/move.c Wed Nov 10 13:15:43 1993 *************** *** 451,456 **** --- 451,457 ---- Window junkChild; int doingFine; XEvent event,bakevent; + ScreenInfo *bakScr; int xdest, ydest; unsigned mask; *************** *** 557,565 **** --- 558,568 ---- /* handle other generic events here */ case Expose: bakevent = Event; + bakScr = Scr; Event=event; DispatchEvent(); Event=bakevent; + Scr = bakScr; break; } } *** tvtwm.pl9b5/util.c.ORIG Wed Mar 10 15:36:30 1993 --- tvtwm.pl9b5/util.c Wed Nov 10 13:16:28 1993 *************** *** 94,99 **** --- 94,108 ---- lastRoot = root; r = outline; + #define ADDSEGMENT(a, b, c, e) \ + { \ + r->x1 = a; \ + r->y1 = b; \ + r->x2 = c; \ + r->y2 = e; \ + r++; \ + } + #define DRAWIT() \ if (lastWidth || lastHeight) \ { \ *************** *** 108,167 **** xthird = (xinnerr - xinnerl) / 3; \ ythird = (yinnerb - yinnert) / 3; \ \ ! r->x1 = xl; \ ! r->y1 = yt; \ ! r->x2 = xr; \ ! r->y2 = yt; \ ! r++; \ \ - r->x1 = xl; \ - r->y1 = yb; \ - r->x2 = xr; \ - r->y2 = yb; \ - r++; \ - \ - r->x1 = xl; \ - r->y1 = yt; \ - r->x2 = xl; \ - r->y2 = yb; \ - r++; \ - \ - r->x1 = xr; \ - r->y1 = yt; \ - r->x2 = xr; \ - r->y2 = yb; \ - r++; \ - \ - r->x1 = xinnerl + xthird; \ - r->y1 = yinnert; \ - r->x2 = r->x1; \ - r->y2 = yinnerb; \ - r++; \ - \ - r->x1 = xinnerl + (2 * xthird); \ - r->y1 = yinnert; \ - r->x2 = r->x1; \ - r->y2 = yinnerb; \ - r++; \ - \ - r->x1 = xinnerl; \ - r->y1 = yinnert + ythird; \ - r->x2 = xinnerr; \ - r->y2 = r->y1; \ - r++; \ - \ - r->x1 = xinnerl; \ - r->y1 = yinnert + (2 * ythird); \ - r->x2 = xinnerr; \ - r->y2 = r->y1; \ - r++; \ - \ if (lastTH != 0) { \ ! r->x1 = xl; \ ! r->y1 = yt + lastTH; \ ! r->x2 = xr; \ ! r->y2 = r->y1; \ ! r++; \ } \ } --- 117,138 ---- xthird = (xinnerr - xinnerl) / 3; \ ythird = (yinnerb - yinnert) / 3; \ \ ! ADDSEGMENT(xl, yt, xr, yt); \ ! ADDSEGMENT(xl, yb, xr, yb); \ ! ADDSEGMENT(xl, yt, xl, yb); \ ! ADDSEGMENT(xr, yt, xr, yb); \ ! ADDSEGMENT(xinnerl + xthird, yinnert, \ ! xinnerl + xthird, yinnerb); \ ! ADDSEGMENT(xinnerl + 2 * xthird, yinnert, \ ! xinnerl + 2 * xthird, yinnerb); \ ! ADDSEGMENT(xinnerl, yinnert + ythird, \ ! xinnerr, yinnert + ythird); \ ! ADDSEGMENT(xinnerl, yinnert + 2 * ythird, \ ! xinnerr, yinnert + 2 * ythird); \ \ if (lastTH != 0) { \ ! ADDSEGMENT(xl, yt + lastTH, \ ! xr, yt + lastTH); \ } \ } *************** *** 179,185 **** DRAWIT (); #undef DRAWIT ! if (r != outline) { --- 150,156 ---- DRAWIT (); #undef DRAWIT ! #undef ADDSEGMENT if (r != outline) { *** tvtwm.pl9b5/Imakefile.ORIG Mon Jan 25 09:02:24 1993 --- tvtwm.pl9b5/Imakefile Wed Nov 10 13:11:54 1993 *************** *** 65,70 **** --- 65,72 ---- #endif TWM_DEFS = $(XLOADIM_DEF) $(M4_DEF) $(WAITPID_DEF) + CDEBUGFLAGS = -O2 -g + LOCAL_LIBRARIES = $(XMULIB) $(EXTENSIONLIB) $(XPMLIB) $(XLIB) LINTLIBS = $(LINTXMU) $(LINTEXTENSIONLIB) $(LINTXLIB) DEFINES = -DSHAPE $(RELEASE_DEFINES) $(LOCAL_DEFINES) $(SIGNAL_DEFINES) *** tvtwm.pl9b5/add_window.c.ORIG Wed Nov 4 02:27:24 1992 --- tvtwm.pl9b5/add_window.c Wed Nov 10 13:11:53 1993 *************** *** 247,253 **** (!(short)(int) LookInList(Scr->NoTitleHighlight, tmp_win->full_name, &tmp_win->class)); ! tmp_win->auto_raise = (short)(int) LookInList(Scr->AutoRaise, tmp_win->full_name, &tmp_win->class); if (tmp_win->auto_raise) Scr->NumAutoRaises++; --- 247,254 ---- (!(short)(int) LookInList(Scr->NoTitleHighlight, tmp_win->full_name, &tmp_win->class)); ! tmp_win->auto_raise = Scr->AutoRaiseDefault || ! (short)(int) LookInList(Scr->AutoRaise, tmp_win->full_name, &tmp_win->class); if (tmp_win->auto_raise) Scr->NumAutoRaises++; *************** *** 857,863 **** */ if ((tmp_win->root == Scr->VirtualDesktop) && ((!FromVirtualDesktop && tmp_win->transient) || ! (ask_user == FALSE && (tmp_win->hints.flags & PPosition)))) { tmp_win->frame_x += Scr->vdtPositionX; tmp_win->frame_y += Scr->vdtPositionY; --- 858,865 ---- */ if ((tmp_win->root == Scr->VirtualDesktop) && ((!FromVirtualDesktop && tmp_win->transient) || ! (ask_user == FALSE && ! ((tmp_win->hints.flags & PPosition) || tmp_win->sticky)))) { tmp_win->frame_x += Scr->vdtPositionX; tmp_win->frame_y += Scr->vdtPositionY; ============================== cut here ============================== Cheers, Martin -- Martin Birgmeier Technical University of Vienna mbirgmei@email.tuwien.ac.at