jkh@ardent.UUCP (Jordan Hubbard) (07/25/88)
Here is awm patch #5. It appears short enough to be mailed, so with
crossed fingers... It will also be available on the usual internet ftp
servers in a couple of days. I'd like to mail this specifically to individuals
that request it (as I have done with patch #3), but I'll be leaving the country
at the end of the week and this just isn't possible. Support will pick
back up again once I have established myself at my new location. Bugs
should continue to go to the address given in the README.
Jordan
----- patch #5 -----
/*
* CHANGES:
*
* Handling of colors has changed significantly to deal with
* alternate colormaps. Colors are now allocated on the fly from
* the client's colormap. The maxColors variable has also now gone away.
* Awm will install colormaps for windows if the new boolean installColormap
* is set.
* The wm_option set of resources has been expanded and made more robust.
* It's now possible to turn different decorations on and off for individual
* windows, classes or awm itself.
* Undecorated windows should now behave properly (I.E. awm will "recognise"
* them).
* Many nits beaten into submission.
*
* UPDATED:
*
* FocusChng.c now rev 1.5
* Gadget.c now rev 1.3
* GetButton.c now rev 1.4
* Iconify.c now rev 1.3
* NewIconify.c now rev 1.2
* Restart.c now rev 1.2
* TitleBar.c now rev 1.3
* awm.c now rev 1.3
* awm.h now rev 1.2
* globals.c now rev 1.3
* gram.y now rev 1.3
* support.h now rev 1.2
*/
diff -c awm.dst/FocusChng.c awm/FocusChng.c
*** awm.dst/FocusChng.c Tue Jul 5 21:26:25 1988
--- awm/FocusChng.c Sun Jul 24 18:14:00 1988
***************
*** 3,9 ****
#ifndef lint
! static char *rcsid_FocusChng_c = "$Header: FocusChng.c,v 1.4 88/07/02 01:26:00 jkh Exp $";
#endif lint
#include "X11/copyright.h"
--- 3,9 ----
#ifndef lint
! static char *rcsid_FocusChng_c = "$Header: FocusChng.c,v 1.5 88/07/23 17:36:00 jkh Exp $";
#endif lint
#include "X11/copyright.h"
***************
*** 36,43 ****
--- 36,45 ----
* Window pixmap changes on focus in/out.
* 1.4 -- Fixed Focus In/Out handling. Created LightsOn() and LightsOff()
* to break out the actual process of "highlighting".
+ * 1.5 -- Added dynamic installation of colormaps.
*/
+
#include "awm.h"
#if defined(sun) || defined(ibm032) || defined(titan) || defined(vax)
***************
*** 55,64 ****
Window w = e->window;
AwmInfoPtr awi;
XEvent event;
!
Entry("HandleFocusIn")
! if (!(Hilite || Autoraise) || Snatched)
Leave(FALSE)
awi = GetAwmInfo(w);
--- 57,66 ----
Window w = e->window;
AwmInfoPtr awi;
XEvent event;
!
Entry("HandleFocusIn")
! if (!(Hilite || Autoraise || InstallColormap) || Snatched)
Leave(FALSE)
awi = GetAwmInfo(w);
***************
*** 65,70 ****
--- 67,73 ----
if (!awi) /* probably a menu or something */
Leave(FALSE)
w = (FrameFocus && awi->frame) ? awi->frame : awi->client;
+
if (e->detail != NotifyInferior && (e->focus || FrameFocus)) {
struct timeval foo;
***************
*** 77,85 ****
*/
select(0, 0, 0, 0, &foo);
/* Did we leave this window already? */
! if (XCheckTypedWindowEvent(dpy, w, LeaveNotify, &event)) {
if (event.xcrossing.detail != NotifyInferior)
Leave(FALSE)
}
if (!FocusSetByUser && FocusWindow != awi->client &&
(awi->attrs & AT_INPUT)) {
--- 80,93 ----
*/
select(0, 0, 0, 0, &foo);
/* Did we leave this window already? */
! if (XCheckTypedWindowEvent(dpy, w, LeaveNotify, &event))
if (event.xcrossing.detail != NotifyInferior)
Leave(FALSE)
+ if (InstallColormap) {
+ XWindowAttributes xwa;
+
+ XGetWindowAttributes(dpy, w, &xwa);
+ XInstallColormap(dpy, xwa.colormap);
}
if (!FocusSetByUser && FocusWindow != awi->client &&
(awi->attrs & AT_INPUT)) {
***************
*** 97,102 ****
--- 105,111 ----
FocusWindow = awi->client;
FocusSetByWM = FALSE;
}
+
/*
* If Autoraise is set, raise that puppy..
*/
***************
*** 121,127 ****
if (!awi) /* probably a menu or something */
Leave(FALSE)
! if (!(Hilite || Autoraise) || Snatched)
Leave(FALSE)
w = (FrameFocus && awi->frame) ? awi->frame : awi->client;
--- 130,136 ----
if (!awi) /* probably a menu or something */
Leave(FALSE)
! if (!(Hilite || Autoraise || InstallColormap) || Snatched)
Leave(FALSE)
w = (FrameFocus && awi->frame) ? awi->frame : awi->client;
***************
*** 147,152 ****
--- 156,163 ----
FocusWindow = RootWindow(dpy, scr);
FocusSetByWM = FALSE;
}
+ if (InstallColormap)
+ XInstallColormap(dpy, DefaultColormap(dpy, scr));
LightsOff(awi);
}
Leave(FALSE)
***************
*** 168,174 ****
if (awi->back && awi->title)
XSetWindowBackgroundPixmap(dpy, awi->title,
awi->back);
! if (awi->BC_back && BContext) {
XSetWindowBackgroundPixmap(dpy, awi->frame,
awi->BC_back);
XClearWindow(dpy, awi->frame);
--- 179,185 ----
if (awi->back && awi->title)
XSetWindowBackgroundPixmap(dpy, awi->title,
awi->back);
! if (awi->BC_back && (awi->attrs & AT_BORDER)) {
XSetWindowBackgroundPixmap(dpy, awi->frame,
awi->BC_back);
XClearWindow(dpy, awi->frame);
***************
*** 199,205 ****
awi->bold);
PaintTitle(awi->title, TRUE);
}
! if (awi->BC_bold && BContext) {
XSetWindowBackgroundPixmap(dpy, awi->frame,
awi->BC_bold);
XClearWindow(dpy, awi->frame);
--- 210,216 ----
awi->bold);
PaintTitle(awi->title, TRUE);
}
! if (awi->BC_bold && (awi->attrs & AT_BORDER)) {
XSetWindowBackgroundPixmap(dpy, awi->frame,
awi->BC_bold);
XClearWindow(dpy, awi->frame);
diff -c awm.dst/Gadget.c awm/Gadget.c
*** awm.dst/Gadget.c Sat Jul 2 16:57:21 1988
--- awm/Gadget.c Sun Jul 24 17:30:40 1988
***************
*** 3,9 ****
#ifndef lint
! static char *rcsid_Gadget_c = "$Header: Gadget.c,v 1.2 88/06/17 15:26:00 jkh Exp $";
#endif lint
#include "X11/copyright.h"
--- 3,9 ----
#ifndef lint
! static char *rcsid_Gadget_c = "$Header: Gadget.c,v 1.3 88/07/23 17:26:00 jkh Exp $";
#endif lint
#include "X11/copyright.h"
***************
*** 35,40 ****
--- 35,41 ----
* 1.2 -- Jordan Hubbard, Ardent Computer.
* GadgetBorders used in placement calculations, initial
* gadget positions calculated correcly. (Chris Thewalt fixes).
+ * 1.3 -- Color handling changed to deal with multiple colormaps.
*
*/
***************
*** 68,75 ****
}
/*
! * This routine adds and gadgets onto title bar 'w' (though just
! * about any window would do, I suppose).
*/
int PutGadgets(w)
Window w;
--- 69,75 ----
}
/*
! * This routine adds and/or places gadgets onto a title bar.
*/
int PutGadgets(w)
Window w;
***************
*** 78,83 ****
--- 78,84 ----
int rx, lx, nx, ny;
XWindowAttributes xwa;
XSetWindowAttributes swa;
+ Colormap cmap;
unsigned long valuemask;
GadgetDecl *gdec;
AwmInfo *awi;
***************
*** 94,101 ****
/* does this window have a title? */
if (!(awi = IsTitled(w)))
Leave_void
! else
! w = awi->title;
if (!(awi->attrs & AT_GADGETS))
Leave_void
/* if the window already has gadgets, this is a reshuffle */
--- 95,101 ----
/* does this window have a title? */
if (!(awi = IsTitled(w)))
Leave_void
!
if (!(awi->attrs & AT_GADGETS))
Leave_void
/* if the window already has gadgets, this is a reshuffle */
***************
*** 107,114 ****
fprintf(stderr, "PutGadgets: Can't allocate memory for gadgets!\n");
Leave(FALSE)
}
! if (XGetWindowAttributes(dpy, w, &xwa) == BadWindow) {
! fprintf(stderr, "PutGadgets: Can't get attributes for title window %x\n",
w);
Leave_void
}
--- 107,114 ----
fprintf(stderr, "PutGadgets: Can't allocate memory for gadgets!\n");
Leave(FALSE)
}
! if (XGetWindowAttributes(dpy, awi->title, &xwa) == BadWindow) {
! fprintf(stderr, "PutGadgets: Can't get attrs for client window %x\n",
w);
Leave_void
}
***************
*** 116,123 ****
dir = RightGadgetGravity;
lx = 0;
rx = xwa.width;
! valuemask = CWBackPixel | CWEventMask;
swa.event_mask = (ButtonPressMask | ButtonReleaseMask | ExposureMask);
for (i = 0; i < NumGadgets && Gadgets[i]; i++) {
XGCValues gcv;
--- 116,125 ----
dir = RightGadgetGravity;
lx = 0;
rx = xwa.width;
! cmap = xwa.colormap;
! valuemask = CWBackPixel | CWEventMask | CWColormap;
swa.event_mask = (ButtonPressMask | ButtonReleaseMask | ExposureMask);
+ swa.colormap = cmap;
for (i = 0; i < NumGadgets && Gadgets[i]; i++) {
XGCValues gcv;
***************
*** 136,153 ****
if (ny < 0)
ny = 0;
if (dir == LeftGadgetGravity) {
! nx = lx + gdec->offset;
if (lx != 0) /* not first time through, add pad */
nx = lx + GadgetPad;
if (nx < 0)
nx = 0;
! lx = nx + gdec->wide + GadgetBorder;
dir = RightGadgetGravity;
}
else if (dir == RightGadgetGravity) {
! nx = rx - gdec->wide - gdec->offset;
if (rx != xwa.width)
! nx -= (2 * GadgetBorder + GadgetPad);
rx = nx - GadgetBorder;
dir = LeftGadgetGravity;
}
--- 138,155 ----
if (ny < 0)
ny = 0;
if (dir == LeftGadgetGravity) {
! nx = lx + gdec->offset + GadgetBorder;
if (lx != 0) /* not first time through, add pad */
nx = lx + GadgetPad;
if (nx < 0)
nx = 0;
! lx = nx + gdec->wide;
dir = RightGadgetGravity;
}
else if (dir == RightGadgetGravity) {
! nx = rx - gdec->wide - gdec->offset - (2 * GadgetBorder);
if (rx != xwa.width)
! nx -= GadgetPad;
rx = nx - GadgetBorder;
dir = LeftGadgetGravity;
}
***************
*** 154,166 ****
else /* Center Gravity */
nx = ((xwa.width - gdec->wide) / 2) + gdec->offset;
if (change == FALSE || !awi->gadgets[i]) {
! swa.background_pixel = gdec->backcolor;
! tmp = awi->gadgets[i] = XCreateWindow(dpy, w, nx, ny, gdec->wide,
! gdec->high, GadgetBorder,
! xwa.depth, xwa.class,
! xwa.visual, valuemask, &swa);
if (!tmp) {
! fprintf(stderr, "PutGadgets: Unable to create gadget window #%d\n",
i);
Leave_void
}
--- 156,170 ----
else /* Center Gravity */
nx = ((xwa.width - gdec->wide) / 2) + gdec->offset;
if (change == FALSE || !awi->gadgets[i]) {
! swa.background_pixel = GetPixel(gdec->backcolor, cmap);
! tmp = awi->gadgets[i] = XCreateWindow(dpy, awi->title, nx, ny,
! gdec->wide, gdec->high,
! GadgetBorder,
! xwa.depth, xwa.class,
! xwa.visual, valuemask,
! &swa);
if (!tmp) {
! fprintf(stderr, "PutGadgets: Can't create gadget #%d\n",
i);
Leave_void
}
***************
*** 169,175 ****
pix = XCreatePixmapFromBitmapData(dpy, tmp, gdec->data,
gdec->wide, gdec->high,
! gdec->forecolor, gdec->backcolor,
xwa.depth);
if (!pix) {
fprintf(stderr, "PutGadgets: Unable to create pixmap for #%d\n",
--- 173,180 ----
pix = XCreatePixmapFromBitmapData(dpy, tmp, gdec->data,
gdec->wide, gdec->high,
! GetPixel(gdec->forecolor, cmap),
! GetPixel(gdec->backcolor, cmap),
xwa.depth);
if (!pix) {
fprintf(stderr, "PutGadgets: Unable to create pixmap for #%d\n",
***************
*** 201,214 ****
XFree(Gadgets[n]->data);
if (Gadgets[n]->name)
free(Gadgets[n]->name);
- /* They tell me that this is not necessary for read-only cells. True?
- if (Gadgets[n]->forecolor)
- XFreeColors(dpy, DefaultColormap(dpy, scr),
- &(Gadgets[n]->forecolor), 1, AllPlanes);
- if (Gadgets[n]->backcolor)
- XFreeColors(dpy, DefaultColormap(dpy, scr),
- &(Gadgets[n]->backcolor), 1, AllPlanes);
- */ /* color free's commented out */
}
int CheckGadgets()
--- 206,211 ----
***************
*** 269,274 ****
--- 266,272 ----
int i, y, x = 0;
AwmInfoPtr awi;
GadgetDecl *gdec;
+ XWindowAttributes xwa;
Entry("PaintGadgets")
***************
*** 276,281 ****
--- 274,280 ----
Leave_void
if (!awi->gadgets)
Leave_void
+ XGetWindowAttributes(dpy, awi->client, &xwa);
for (i = 0; i < NumGadgets && Gadgets[i]; i++) {
gdec = Gadgets[i];
if (!gdec->data) {
***************
*** 282,291 ****
XGCValues gcv;
gcv.font = gdec->fontInfo->fid;
! gcv.foreground = gdec->forecolor;
! gcv.background = gdec->backcolor;
! XChangeGC(dpy, awi->winGC, (GCFont | GCForeground | GCBackground),
! &gcv);
if (strlen(gdec->name) == 1) { /* it's a glyph (we think) */
XFontStruct *real_font;
XCharStruct char_info;
--- 281,290 ----
XGCValues gcv;
gcv.font = gdec->fontInfo->fid;
! gcv.foreground = GetPixel(gdec->forecolor, xwa.colormap);
! gcv.background = GetPixel(gdec->backcolor, xwa.colormap);
! XChangeGC(dpy, awi->winGC, (GCFont | GCForeground |
! GCBackground), &gcv);
if (strlen(gdec->name) == 1) { /* it's a glyph (we think) */
XFontStruct *real_font;
XCharStruct char_info;
***************
*** 320,326 ****
}
char_info = real_font->per_char[index];
}
! x = GadgetBorder - char_info.lbearing;
y = char_info.ascent;
}
else {
--- 319,325 ----
}
char_info = real_font->per_char[index];
}
! x = 1 - GadgetBorder - char_info.lbearing;
y = char_info.ascent;
}
else {
diff -c awm.dst/GetButton.c awm/GetButton.c
*** awm.dst/GetButton.c Tue Jul 5 21:26:30 1988
--- awm/GetButton.c Sun Jul 24 17:32:23 1988
***************
*** 3,9 ****
#ifndef lint
! static char *rcsid_GetButton_c = "$Header: GetButton.c,v 1.3 88/07/05 21:20:45 jjkh Exp $";
#endif lint
#include "X11/copyright.h"
--- 3,9 ----
#ifndef lint
! static char *rcsid_GetButton_c = "$Header: GetButton.c,v 1.4 88/07/23 18:20:45 jkh Exp $";
#endif lint
#include "X11/copyright.h"
***************
*** 129,137 ****
* The event occured on the root window, check for substructure
* changes. Otherwise, it must be a mouse button event.
*/
- win = b_ev->xany.window;
! if (win == RootWindow(dpy, scr)) {
switch (b_ev->xany.type) {
case CreateNotify:
case UnmapNotify:
--- 129,136 ----
* The event occured on the root window, check for substructure
* changes. Otherwise, it must be a mouse button event.
*/
! if (b_ev->xany.window == RootWindow(dpy, scr)) {
switch (b_ev->xany.type) {
case CreateNotify:
case UnmapNotify:
***************
*** 201,207 ****
* If it's a Notify, we've probably frobbed a titled window.
*/
- awi = GetAwmInfo(win);
switch (b_ev->type) {
XEvent e_fake;
--- 200,205 ----
***************
*** 215,221 ****
if (!FocusSetByWM) {
e_fake.xcrossing.type = FocusIn;
e_fake.xcrossing.focus = TRUE;
! e_fake.xcrossing.window = win;
HandleFocusIn(&e_fake);
}
Leave(FALSE)
--- 213,219 ----
if (!FocusSetByWM) {
e_fake.xcrossing.type = FocusIn;
e_fake.xcrossing.focus = TRUE;
! e_fake.xcrossing.window = b_ev->xcrossing.window;
HandleFocusIn(&e_fake);
}
Leave(FALSE)
***************
*** 225,231 ****
if (!FocusSetByWM) {
e_fake.xcrossing.type = FocusOut;
e_fake.xcrossing.focus = TRUE;
! e_fake.xcrossing.window = win;
HandleFocusOut(&e_fake);
}
Leave(FALSE)
--- 223,229 ----
if (!FocusSetByWM) {
e_fake.xcrossing.type = FocusOut;
e_fake.xcrossing.focus = TRUE;
! e_fake.xcrossing.window = b_ev->xcrossing.window;
HandleFocusOut(&e_fake);
}
Leave(FALSE)
***************
*** 248,290 ****
Leave(FALSE);
case MapNotify:
! if (!awi)
Leave(FALSE)
if (IsIcon(win, FALSE))
Leave(FALSE)
! if (awi->frame)
! XMapWindow(dpy, awi->frame);
! else
! XMapWindow(dpy, awi->client);
Leave(FALSE)
break;
case UnmapNotify:
! if (!awi)
! Leave(FALSE)
if (IsIcon(win, FALSE))
Leave(FALSE)
! if (awi->frame)
! XUnmapWindow(dpy, awi->frame);
! else
! XUnmapWindow(dpy, awi->client);
Leave(FALSE)
break;
case DestroyNotify:
! if (!awi)
Leave(FALSE)
! /* remove any icon associated with this window */
! RemoveIcon(win);
! /* remove the frame/titlebar (if present) */
! DestroyFrame(win);
! /* punt the rest of the per-window info */
! XDeleteContext(dpy, awi->client, AwmContext);
! free(awi);
Leave(FALSE)
case PropertyNotify:
! if (!awi)
Leave(FALSE)
switch(b_ev->xproperty.atom) {
--- 246,290 ----
Leave(FALSE);
case MapNotify:
! win = b_ev->xmap.window;
! if (!(awi = GetAwmInfo(win)))
Leave(FALSE)
if (IsIcon(win, FALSE))
Leave(FALSE)
! XMapWindow(dpy, awi->frame);
! XMapWindow(dpy, awi->client);
Leave(FALSE)
break;
case UnmapNotify:
! win = b_ev->xunmap.window;
! if (!(awi = GetAwmInfo(win)))
! Leave(FALSE)
!
if (IsIcon(win, FALSE))
Leave(FALSE)
! XUnmapWindow(dpy, awi->frame);
Leave(FALSE)
break;
case DestroyNotify:
! win = b_ev->xdestroywindow.window;
! if (!(awi = GetAwmInfo(win)))
Leave(FALSE)
! if (win != awi->title) {
! /* remove any icon associated with this window */
! RemoveIcon(win);
! /* remove the frame/titlebar (if present) */
! NoDecorate(win, TRUE);
! /* punt the rest of the per-window info */
! XDeleteContext(dpy, awi->client, AwmContext);
! free(awi);
! }
Leave(FALSE)
case PropertyNotify:
! win = b_ev->xproperty.window;
! if (!(awi = GetAwmInfo(win)))
Leave(FALSE)
switch(b_ev->xproperty.atom) {
***************
*** 353,359 ****
case Expose:
! if (!awi) /* probably a menu */
Leave(FALSE)
if (awi->title == win) {
if (b_ev->xexpose.count == 0) {
--- 353,360 ----
case Expose:
! win = b_ev->xexpose.window;
! if (!(awi = GetAwmInfo(win))) /* probably a menu */
Leave(FALSE)
if (awi->title == win) {
if (b_ev->xexpose.count == 0) {
***************
*** 377,384 ****
/*
* If we got this far, the event must be for an icon.
*/
!
! if (!awi)
Leave(FALSE)
status = XGetWindowAttributes(dpy, win, &win_info);
if (status == FAILURE)
--- 378,385 ----
/*
* If we got this far, the event must be for an icon.
*/
! win = b_ev->xany.window;
! if (!(awi = GetAwmInfo(win)))
Leave(FALSE)
status = XGetWindowAttributes(dpy, win, &win_info);
if (status == FAILURE)
***************
*** 598,604 ****
awi = RegisterWindow(window);
Decorate(awi->client);
event_mask = PropertyChangeMask | FocusChangeMask;
! if (!awi->frame || !FrameFocus)
event_mask |= (EnterWindowMask | LeaveWindowMask);
XSelectInput(dpy, window, event_mask);
SetBorderPixmaps(dpy, GrayPixmap);
--- 599,605 ----
awi = RegisterWindow(window);
Decorate(awi->client);
event_mask = PropertyChangeMask | FocusChangeMask;
! if (!FrameFocus)
event_mask |= (EnterWindowMask | LeaveWindowMask);
XSelectInput(dpy, window, event_mask);
SetBorderPixmaps(dpy, GrayPixmap);
***************
*** 620,631 ****
if (awi->state & ST_WINDOW) {
if (!transient_for)
PlaceWindow(window);
! if (awi->frame) {
! XMapRaised(dpy, awi->frame);
! XMapWindow(dpy, awi->client);
! }
! else
! XMapRaised(dpy, awi->client);
XSync(dpy, 0);
}
Leave_void
--- 621,628 ----
if (awi->state & ST_WINDOW) {
if (!transient_for)
PlaceWindow(window);
! XMapRaised(dpy, awi->frame);
! XMapWindow(dpy, awi->client);
XSync(dpy, 0);
}
Leave_void
***************
*** 696,702 ****
if (y < 0)
y += DisplayHeight(dpy, scr) - h - (border_width<<1);
}
! if (IsTitled(window))
XSetSizeHints(dpy, awi->frame, &wsh, XA_WM_NORMAL_HINTS);
XSetSizeHints(dpy, awi->client, &wsh, XA_WM_NORMAL_HINTS);
#ifdef titan /* 5x4 alignment */
--- 693,699 ----
if (y < 0)
y += DisplayHeight(dpy, scr) - h - (border_width<<1);
}
! if (awi->frame)
XSetSizeHints(dpy, awi->frame, &wsh, XA_WM_NORMAL_HINTS);
XSetSizeHints(dpy, awi->client, &wsh, XA_WM_NORMAL_HINTS);
#ifdef titan /* 5x4 alignment */
***************
*** 718,723 ****
--- 715,721 ----
{
XWindowAttributes xwa;
AwmInfoPtr awi;
+ int height, width, x, y;
int bch = 0, bcv = 0;
Entry("ConfigureWindow")
***************
*** 729,777 ****
bcv = BContext + 1;
bch = bcv * 2;
}
- if (awi->frame) {
- int height, width, x, y;
! height = xwc->height;
! width = xwc->width;
! x = y = 0;
! /* width */
! xwc->width += bch;
! if (awi->title)
! XResizeWindow(dpy, awi->title, xwc->width, titleHeight);
! /* height */
! if (awi->attrs & AT_TITLE) {
! y = titleHeight + 2;
! xwc->height += y;
}
! if (awi->attrs & AT_BORDER) {
! if (!(awi->attrs & AT_TITLE)) {
! xwc->height += (bcv * 2);
! y = bcv;
! }
! else
! xwc->height += bcv;
! xwc->x -= (BContext + (awi->border_width ? awi->border_width :
! 1));
! x = BContext;
! }
! if (PushDown == FALSE) {
! if (awi->attrs & AT_TITLE)
! xwc->y -= (titleHeight + 2);
! else if (awi->attrs & AT_BORDER)
! xwc->y -= (BContext + (awi->border_width ?
! awi->border_width : 1));
! }
! if (xwc->y < 0)
! xwc->y = 0;
! XConfigureWindow(dpy, awi->frame, mask, xwc);
! if (awi->gadgets)
! PutGadgets(w);
! xwc->width = width;
! xwc->height = height;
! xwc->x = x;
! xwc->y = y;
}
XConfigureWindow(dpy, awi->client, mask, xwc);
Leave(TRUE)
}
--- 727,769 ----
bcv = BContext + 1;
bch = bcv * 2;
}
! height = xwc->height;
! width = xwc->width;
! x = y = 0;
! /* width */
! xwc->width += bch;
! if (awi->title)
! XResizeWindow(dpy, awi->title, xwc->width, titleHeight);
! /* height */
! if (awi->attrs & AT_TITLE) {
! y = titleHeight + 2;
! xwc->height += y;
! }
! if (awi->attrs & AT_BORDER) {
! if (!(awi->attrs & AT_TITLE)) {
! xwc->height += (bcv * 2);
! y = bcv;
}
! else
! xwc->height += bcv;
! xwc->x -= (BContext + (awi->border_width ? awi->border_width : 1));
! x = BContext;
}
+ if (PushDown == FALSE) {
+ if (awi->attrs & AT_TITLE)
+ xwc->y -= (titleHeight + 2);
+ else if (awi->attrs & AT_BORDER)
+ xwc->y -= (BContext + (awi->border_width ?
+ awi->border_width : 1));
+ }
+ XConfigureWindow(dpy, awi->frame, mask, xwc);
+ if (awi->gadgets)
+ PutGadgets(w);
+ xwc->width = width;
+ xwc->height = height;
+ xwc->x = x;
+ xwc->y = y;
XConfigureWindow(dpy, awi->client, mask, xwc);
Leave(TRUE)
}
diff -c awm.dst/Icons.c awm/Icons.c
*** awm.dst/Icons.c Sat Jul 2 16:57:26 1988
--- awm/Icons.c Sun Jul 24 18:02:19 1988
***************
*** 3,9 ****
#ifndef lint
! static char *rcsid_Iconify_c = "$Header: Iconify.c,v 1.2 88/06/17 17:24:56 jkh Exp $";
#endif lint
#include "X11/copyright.h"
--- 3,9 ----
#ifndef lint
! static char *rcsid_Icons_c = "$Header: Iconify.c,v 1.3 88/07/23 17:24:56 jkh Exp $";
#endif lint
#include "X11/copyright.h"
***************
*** 61,66 ****
--- 61,67 ----
* 1.2 -- Jordan Hubbard, Ardent Computer.
* vPad and hPad usage corrected (Chris Thewalt fix).
* Clipping now set on right GC.
+ * 1.3 -- Changed the way icon button events are handled.
*/
#include "awm.h"
***************
*** 190,196 ****
if (awi->iconPixmap != IBackPixmap)
XFreePixmap(dpy, awi->iconPixmap);
}
! awi->icon = 0;
awi->state |= ST_WINDOW;
}
Leave_void
--- 191,198 ----
if (awi->iconPixmap != IBackPixmap)
XFreePixmap(dpy, awi->iconPixmap);
}
! awi->icon = (Drawable)NULL;
! awi->state ^= ST_ICON;
awi->state |= ST_WINDOW;
}
Leave_void
***************
*** 356,368 ****
* Select "key pressed", "window exposure" and "unmap window"
* events for the icon window.
*/
! XSelectInput(dpy, icon, mask);
! /*
! * Handle any registered grabs for the icon window.
! */
! for (bptr = Blist; bptr; bptr = bptr->next)
! if (bptr->context & ICON)
! Grab(bptr->mask, icon);
awi = GetAwmInfo(window);
awi->icon = icon;
awi->own = own;
--- 358,365 ----
* Select "key pressed", "window exposure" and "unmap window"
* events for the icon window.
*/
! XSelectInput(dpy, icon, mask | ButtonPressMask | ButtonReleaseMask);
!
awi = GetAwmInfo(window);
awi->icon = icon;
awi->own = own;
diff -c awm.dst/Imakefile awm/Imakefile
*** awm.dst/Imakefile Sat Jul 2 16:57:27 1988
--- awm/Imakefile Sun Jul 24 13:52:44 1988
***************
*** 44,50 ****
ComplexProgramTarget(awm)
! InstallNonExec(system.awmrc, $(LIBDIR))
$(MENU_ARCH)::
@echo Making menu package...
--- 44,50 ----
ComplexProgramTarget(awm)
! InstallNonExec(system.awmrc, $(AWMDIR))
$(MENU_ARCH)::
@echo Making menu package...
diff -c awm.dst/Makefile awm/Makefile
*** awm.dst/Makefile Sat Jul 2 16:57:28 1988
--- awm/Makefile Sun Jul 24 13:52:58 1988
***************
*** 167,173 ****
$(RM) $(PROGRAM)
install:: system.awmrc
! $(INSTALL) -c $(INSTALLFLAGS) system.awmrc $(LIBDIR)
$(MENU_ARCH)::
@echo Making menu package...
--- 167,173 ----
$(RM) $(PROGRAM)
install:: system.awmrc
! $(INSTALL) -c $(INSTALLFLAGS) system.awmrc $(AWMDIR)
$(MENU_ARCH)::
@echo Making menu package...
diff -c awm.dst/Menu.c awm/Menu.c
*** awm.dst/Menu.c Sat Jul 2 16:57:29 1988
--- awm/Menu.c Tue Jul 19 17:25:16 1988
***************
*** 58,64 ****
pos.x = x;
pos.y = y;
!
RTLMenu_Enter(menu, button, 0, window, pos);
Leave(TRUE)
}
--- 58,65 ----
pos.x = x;
pos.y = y;
! if (!menu)
! Leave(FALSE)
RTLMenu_Enter(menu, button, 0, window, pos);
Leave(TRUE)
}
***************
*** 140,147 ****
TargetCursor, CurrentTime )
!= GrabSuccess ) {
fprintf(stderr, "awm (Select_Window): Can't grab the mouse.");
! Cleanup();
! exit(1);
}
Snatched = TRUE;
/* Select a window */
--- 141,147 ----
TargetCursor, CurrentTime )
!= GrabSuccess ) {
fprintf(stderr, "awm (Select_Window): Can't grab the mouse.");
! Leave(RootWindow(dpy, scr))
}
Snatched = TRUE;
/* Select a window */
diff -c awm.dst/NewIconify.c awm/NewIconify.c
*** awm.dst/NewIconify.c Sat Jul 2 16:57:32 1988
--- awm/NewIconify.c Sun Jul 24 18:02:34 1988
***************
*** 3,9 ****
#ifndef lint
! static char *rcsid_NewIconify_c = "$Header: NewIconify.c,v 1.1 88/06/15 15:24:56 jkh Exp $";
#endif lint
#include "X11/copyright.h"
--- 3,9 ----
#ifndef lint
! static char *rcsid_NewIconify_c = "$Header: NewIconify.c,v 1.2 88/07/23 17:24:56 jkh Exp $";
#endif lint
#include "X11/copyright.h"
***************
*** 339,345 ****
if (awi->state & ST_ICON) {
awi->state ^= ST_ICON;
awi->state |= (ST_WINDOW | ST_PLACED);
! if (!awi->title)
XRemoveFromSaveSet(dpy, awi->client);
}
else if (awi->state & ST_WINDOW) {
--- 339,345 ----
if (awi->state & ST_ICON) {
awi->state ^= ST_ICON;
awi->state |= (ST_WINDOW | ST_PLACED);
! if (!awi->frame)
XRemoveFromSaveSet(dpy, awi->client);
}
else if (awi->state & ST_WINDOW) {
diff -c awm.dst/Resize.c awm/Resize.c
*** awm.dst/Resize.c Sat Jul 2 16:57:37 1988
--- awm/Resize.c Thu Jul 14 16:53:54 1988
***************
*** 136,154 ****
if (awi->frame) { /* we have to compensate */
status = XGetWindowAttributes(dpy, awi->frame, &frame_info);
if (status == FAILURE)
Leave(FALSE)
if (awi->attrs & AT_TITLE)
! client_info.y = frame_info.y + titleHeight + 2;
if (awi->attrs & AT_BORDER) {
! client_info.x = frame_info.x + BContext + 1;
if (!(awi->attrs & AT_TITLE))
! client_info.y = frame_info.y + BContext + 1;
}
}
/*
! * Clear the vector buffers.
*/
bzero(box, sizeof(box));
if (Zap)
--- 136,156 ----
if (awi->frame) { /* we have to compensate */
status = XGetWindowAttributes(dpy, awi->frame, &frame_info);
+ client_info.y = frame_info.y;
+ client_info.x = frame_info.x;
if (status == FAILURE)
Leave(FALSE)
if (awi->attrs & AT_TITLE)
! client_info.y += titleHeight + 2;
if (awi->attrs & AT_BORDER) {
! client_info.x += BContext + 1;
if (!(awi->attrs & AT_TITLE))
! client_info.y += BContext + 1;
}
}
/*
! * Clear The vector buffers.
*/
bzero(box, sizeof(box));
if (Zap)
diff -c awm.dst/Restart.c awm/Restart.c
*** awm.dst/Restart.c Sat Jul 2 16:57:38 1988
--- awm/Restart.c Sun Jul 24 17:31:14 1988
***************
*** 3,9 ****
#ifndef lint
! static char *rcsid_Restart_c = "$Header: Restart.c,v 1.1 88/06/15 15:24:56 jkh Exp $";
#endif lint
#include "X11/copyright.h"
--- 3,9 ----
#ifndef lint
! static char *rcsid_Restart_c = "$Header: Restart.c,v 1.2 88/07/23 17:24:56 jkh Exp $";
#endif lint
#include "X11/copyright.h"
***************
*** 136,149 ****
unsigned int i;
for (i = 0; i < nwins; i++) {
awi = GetAwmInfo(windows[i]);
if (!awi)
continue;
if (awi->state & ST_ICON)
XMapWindow(dpy, awi->client);
RemoveIcon(windows[i]);
! DestroyFrame(windows[i]);
! XDeleteContext(dpy, awi->client, AwmContext);
free(awi);
}
XFree(windows);
--- 136,164 ----
unsigned int i;
for (i = 0; i < nwins; i++) {
+ XWindowAttributes xwa;
+ int bw;
+
awi = GetAwmInfo(windows[i]);
if (!awi)
continue;
+ bw = awi->border_width;
if (awi->state & ST_ICON)
XMapWindow(dpy, awi->client);
RemoveIcon(windows[i]);
! XGetWindowAttributes(dpy, awi->frame, &xwa);
! if (PushDown == FALSE) {
! if (awi->attrs & AT_TITLE)
! xwa.y += (titleHeight + 2);
! else if (awi->attrs & AT_BORDER)
! xwa.y += BContext;
! }
! if (awi->attrs & AT_BORDER)
! xwa.x -= (BContext + (bw ? bw : 1));
! XReparentWindow(dpy, awi->client, RootWindow(dpy, scr),
! xwa.x, xwa.y);
! XRemoveFromSaveSet(dpy, awi->client);
! XSetWindowBorderWidth(dpy, awi->client, awi->border_width);
free(awi);
}
XFree(windows);
diff -c awm.dst/Titlebar.c awm/Titlebar.c
*** awm.dst/Titlebar.c Tue Jul 5 21:26:34 1988
--- awm/Titlebar.c Sun Jul 24 17:28:55 1988
***************
*** 3,9 ****
#ifndef lint
! static char *rcsid_TitleBar_c = "$Header: TitleBar.c,v 1.2 88/07/02 02:26:00 jkh Exp $";
#endif lint
#include "X11/copyright.h"
--- 3,9 ----
#ifndef lint
! static char *rcsid_TitleBar_c = "$Header: TitleBar.c,v 1.3 88/07/23 17:26:00 jkh Exp $";
#endif lint
#include "X11/copyright.h"
***************
*** 34,39 ****
--- 34,41 ----
Title bar support routines.
* 1.2 -- Fairly major restructuring to uncouple title bars and
* border contexts.
+ * 1.3 -- Handling of colors revamped significantly to deal with
+ * different colormaps.
*/
#include "awm.h"
***************
*** 61,70 ****
TBackPixmapData = GetPixmapDataRes("title.pixmap", &TB_wide, &TB_high);
TBoldPixmapData = GetPixmapDataRes("title.boldPixmap", &TBB_wide,
&TBB_high);
! TForeground = GetColorRes("title.foreground", ForeColor);
! TBackground = GetColorRes("title.background", BackColor);
! TTextForeground = GetColorRes("title.text.foreground", TForeground);
! TTextBackground = GetColorRes("title.text.background", TBackground);
TCursor = GetIntRes("title.cursor", DEF_TITLE_CURSOR);
--- 63,72 ----
TBackPixmapData = GetPixmapDataRes("title.pixmap", &TB_wide, &TB_high);
TBoldPixmapData = GetPixmapDataRes("title.boldPixmap", &TBB_wide,
&TBB_high);
! TForeground = GetStringRes("title.foreground", Foreground);
! TBackground = GetStringRes("title.background", Background);
! TTextForeground = GetStringRes("title.text.foreground", TForeground);
! TTextBackground = GetStringRes("title.text.background", TBackground);
TCursor = GetIntRes("title.cursor", DEF_TITLE_CURSOR);
***************
*** 108,115 ****
Entry("Init_Frames")
! BForeground = GetColorRes("borderContext.foreground", ForeColor);
! BBackground = GetColorRes("borderContext.background", BackColor);
BCursor = GetIntRes("borderContext.cursor", DEF_BCONTEXT_CURSOR);
--- 110,117 ----
Entry("Init_Frames")
! BForeground = GetStringRes("borderContext.foreground", Foreground);
! BBackground = GetStringRes("borderContext.background", Background);
BCursor = GetIntRes("borderContext.cursor", DEF_BCONTEXT_CURSOR);
***************
*** 155,161 ****
/*
* Reparent window 'w' into a frame, making the frame the right
* size to hold any other window related decorations that may be
! * added later.
*/
Window Reparent(w)
Window w;
--- 157,164 ----
/*
* Reparent window 'w' into a frame, making the frame the right
* size to hold any other window related decorations that may be
! * added later. If window 'w' already has a frame, then it resizes
! * it if necessary.
*/
Window Reparent(w)
Window w;
***************
*** 171,176 ****
--- 174,182 ----
int bch, bcv, x, y, bw, width, height;
int clnt_x, clnt_y;
unsigned long valuemask;
+ Boolean decorated = FALSE;
+ Colormap cmap;
+ Pixel bfore, bback;
Entry("Reparent")
***************
*** 179,198 ****
fprintf(stderr, "Reparent: Window %x isn't registered!\n", w);
Leave((Window)NULL)
}
! if (awi->frame) {
! fprintf(stderr, "Reparent: Window %x already has a frame.\n", w);
Leave((Window)NULL)
- }
- if (!(awi->attrs & AT_BORDER) && !(awi->attrs & AT_TITLE))
- Leave((Window)NULL)
if (awi->attrs & AT_BORDER && !Frame_res)
Init_Frames();
if (awi->attrs & AT_TITLE && !Title_res)
Init_Titles();
! XGetWindowAttributes(dpy, awi->client, &xwa);
! valuemask = CWEventMask | CWBorderPixel | CWBackPixel;
swa.event_mask = (SubstructureRedirectMask | SubstructureNotifyMask);
bw = xwa.border_width;
x = xwa.x;
--- 185,204 ----
fprintf(stderr, "Reparent: Window %x isn't registered!\n", w);
Leave((Window)NULL)
}
! if (awi->frame && (awi->state & ST_DECORATED))
Leave((Window)NULL)
if (awi->attrs & AT_BORDER && !Frame_res)
Init_Frames();
+
if (awi->attrs & AT_TITLE && !Title_res)
Init_Titles();
! if (!awi->frame)
! XGetWindowAttributes(dpy, awi->client, &xwa);
! else
! XGetWindowAttributes(dpy, awi->frame, &xwa);
! valuemask = CWEventMask | CWBorderPixel | CWBackPixel | CWColormap;
swa.event_mask = (SubstructureRedirectMask | SubstructureNotifyMask);
bw = xwa.border_width;
x = xwa.x;
***************
*** 199,204 ****
--- 205,214 ----
y = xwa.y;
height = xwa.height;
width = xwa.width;
+ cmap = xwa.colormap;
+ bfore = GetPixel(BForeground, cmap);
+ bback = GetPixel(BBackground, cmap);
+ clnt_y = clnt_x = 0;
if (awi->attrs & AT_BORDER) {
XSetWindowAttributes cswa;
***************
*** 215,232 ****
if (FrameFocus)
swa.event_mask |= (LeaveWindowMask | EnterWindowMask);
if (awi->attrs & AT_BORDER) {
! swa.background_pixel = BBackground;
! swa.border_pixel = BForeground;
}
else {
! swa.background_pixel = TBackground;
! swa.border_pixel = TForeground;
}
if (PushDown == FALSE) {
if (awi->attrs & AT_TITLE)
y -= (titleHeight + 2);
else if (awi->attrs & AT_BORDER)
! y -= (BContext + (bw ? bw : 1));
}
/* calculate size for frame */
if (awi->attrs & AT_TITLE)
--- 225,248 ----
if (FrameFocus)
swa.event_mask |= (LeaveWindowMask | EnterWindowMask);
if (awi->attrs & AT_BORDER) {
! swa.background_pixel = bfore;
! swa.border_pixel = bback;
! decorated = TRUE;
}
+ else if (awi->attrs & AT_TITLE) {
+ swa.background_pixel = GetPixel(TBackground, cmap);
+ swa.border_pixel = GetPixel(TForeground, cmap);
+ }
else {
! swa.background_pixel = GetPixel(Background, cmap);
! swa.border_pixel = GetPixel(Foreground, cmap);
}
+ swa.colormap = cmap;
if (PushDown == FALSE) {
if (awi->attrs & AT_TITLE)
y -= (titleHeight + 2);
else if (awi->attrs & AT_BORDER)
! y -= BContext;
}
/* calculate size for frame */
if (awi->attrs & AT_TITLE)
***************
*** 238,308 ****
height += bcv;
width += bch;
}
- if (y < 0)
- y = 0;
- foster = XCreateWindow(dpy, RootWindow(dpy, scr), x, y, width,
- height, (bw ? bw : 1), xwa.depth, xwa.class,
- xwa.visual, valuemask, &swa);
- if (!foster)
- Error("Reparent: Can't create foster parent!");
- if (BBackPixmapData) { /* we have a border context tile */
- awi->BC_back = GetPixmapFromCache(foster,
- BBackPixmapData,
- BC_wide, BC_high,
- BForeground, BBackground,
- xwa.depth);
- if (!awi->BC_back)
- Error("Reparent: Can't get pixmap for border context.");
- else
- XSetWindowBackgroundPixmap(dpy, foster, awi->BC_back);
- }
- if (BBoldPixmapData) { /* we have a bold border context tile */
- awi->BC_bold = GetPixmapFromCache(foster,
- BBoldPixmapData,
- BCB_wide, BCB_high,
- BForeground, BBackground,
- xwa.depth);
- if (!awi->BC_bold)
- Error("Reparent: Can't get bold pixmap for border context.");
- }
- clnt_y = BContext;
- clnt_x = 0;
-
if (awi->attrs & AT_TITLE)
clnt_y = titleHeight + 2;
!
if (awi->attrs & AT_BORDER) {
clnt_x = BContext;
-
- XDefineCursor(dpy, foster, FrameCursor);
}
- XAddToSaveSet(dpy, awi->client);
- XReparentWindow(dpy, awi->client, foster, clnt_x, clnt_y);
! XMapWindow(dpy, awi->client);
! XSync(dpy, FALSE);
! awi->frame = foster;
! awi->border_width = bw;
! awi->name = GetTitleName(awi->client);
! /* Make titlebar "frame" inherit characteristics of victim */
! XStoreName(dpy, foster, awi->name);
! if (XGetIconName(dpy, w, &icon_name)) {
! XSetIconName(dpy, foster, icon_name);
! free(icon_name);
}
! if (wm_hints = XGetWMHints(dpy, awi->client)) {
! XSetWMHints(dpy, foster, wm_hints);
! XFree(wm_hints);
}
! XGetNormalHints(dpy, awi->client, &sz_hints);
! XSetNormalHints(dpy, foster, &sz_hints);
! XGetZoomHints(dpy, awi->client, &sz_hints);
! XSetZoomHints(dpy, foster, &sz_hints);
! class_hints.res_name = class_hints.res_class = (char *)NULL;
! if (XGetClassHint(dpy, awi->client, &class_hints) == Success)
! XSetClassHint(dpy, foster, &class_hints);
!
! XSaveContext(dpy, foster, AwmContext, awi);
Leave(foster)
}
--- 254,336 ----
height += bcv;
width += bch;
}
if (awi->attrs & AT_TITLE)
clnt_y = titleHeight + 2;
!
if (awi->attrs & AT_BORDER) {
+ if (!(awi->attrs & AT_TITLE))
+ clnt_y = BContext;
clnt_x = BContext;
}
! if (!awi->frame) {
! foster = XCreateWindow(dpy, RootWindow(dpy, scr), x, y, width,
! height, (bw ? bw : 1), xwa.depth, xwa.class,
! xwa.visual, valuemask, &swa);
! if (!foster)
! Error("Reparent: Can't create foster parent!");
!
! if (awi->attrs & AT_BORDER)
! XDefineCursor(dpy, foster, FrameCursor);
!
! XAddToSaveSet(dpy, awi->client);
! XReparentWindow(dpy, awi->client, foster, clnt_x, clnt_y);
! XMapWindow(dpy, awi->client);
! XSync(dpy, FALSE);
!
! if (BBackPixmapData) { /* we have a border context tile */
! awi->BC_back = GetPixmapFromCache(foster,
! BBackPixmapData,
! BC_wide, BC_high,
! bfore, bback,
! xwa.depth);
! if (!awi->BC_back)
! Error("Reparent: Can't get pixmap for border context.");
! else
! XSetWindowBackgroundPixmap(dpy, foster, awi->BC_back);
! }
! if (BBoldPixmapData) { /* we have a bold border context tile */
! awi->BC_bold = GetPixmapFromCache(foster,
! BBoldPixmapData,
! BCB_wide, BCB_high,
! bfore, bback,
! xwa.depth);
! if (!awi->BC_bold)
! Error("Reparent: Can't get bold pixmap for border context.");
! }
! awi->frame = foster;
! awi->border_width = bw;
! awi->name = GetTitleName(awi->client);
!
! /* Make titlebar "frame" inherit characteristics of victim */
! XStoreName(dpy, foster, awi->name);
! if (XGetIconName(dpy, w, &icon_name)) {
! XSetIconName(dpy, foster, icon_name);
! free(icon_name);
! }
! if (wm_hints = XGetWMHints(dpy, awi->client)) {
! XSetWMHints(dpy, foster, wm_hints);
! XFree(wm_hints);
! }
! XGetNormalHints(dpy, awi->client, &sz_hints);
! XSetNormalHints(dpy, foster, &sz_hints);
! XGetZoomHints(dpy, awi->client, &sz_hints);
! XSetZoomHints(dpy, foster, &sz_hints);
! class_hints.res_name = class_hints.res_class = (char *)NULL;
! if (XGetClassHint(dpy, awi->client, &class_hints) == Success)
! XSetClassHint(dpy, foster, &class_hints);
!
! XSaveContext(dpy, foster, AwmContext, awi);
}
! else {
! XMoveResizeWindow(dpy, awi->frame, xwa.x, xwa.y, width, height);
! XMoveWindow(dpy, awi->client, clnt_x, clnt_y);
! if (awi->attrs & AT_BORDER)
! decorated = TRUE;
! foster = awi->frame;
}
! if (decorated)
! awi->state |= ST_DECORATED;
Leave(foster)
}
***************
*** 316,321 ****
--- 344,350 ----
XWindowAttributes xwa;
XSetWindowAttributes swa;
XWindowChanges wc;
+ Pixel tfore, tback;
Entry("AddTitle")
***************
*** 325,345 ****
fprintf(stderr, "AddTitle: Window %x is not registered!\n", w);
Leave_void
}
! if (!awi->frame) {
! fprintf(stderr, "AddTitle: Window %x doesn't have a frame!\n", w);
Leave_void
! }
! if (awi->title) {
! fprintf(stderr, "AddTitle: Window %x already has a title!\n", w);
Leave_void
- }
if (!(awi->attrs & AT_TITLE))
Leave_void
XGetWindowAttributes(dpy, awi->client, &xwa);
- swa.bit_gravity = CenterGravity;
swa.event_mask = (ExposureMask | ButtonPressMask | ButtonReleaseMask);
! valuemask |= CWBitGravity;
if (awi->attrs & AT_BORDER)
bch = (BContext * 2) + 2;
else
--- 354,374 ----
fprintf(stderr, "AddTitle: Window %x is not registered!\n", w);
Leave_void
}
! if (!awi->frame)
Leave_void
! if (awi->title)
Leave_void
if (!(awi->attrs & AT_TITLE))
Leave_void
XGetWindowAttributes(dpy, awi->client, &xwa);
swa.event_mask = (ExposureMask | ButtonPressMask | ButtonReleaseMask);
! swa.colormap = xwa.colormap;
! tfore = GetPixel(TForeground, xwa.colormap);
! tback = GetPixel(TBackground, xwa.colormap);
! swa.background_pixel = tback;
! swa.border_pixel = tfore;
! valuemask = (CWEventMask | CWColormap | CWBackPixel | CWBorderPixel);
if (awi->attrs & AT_BORDER)
bch = (BContext * 2) + 2;
else
***************
*** 346,352 ****
bch = 0;
title = XCreateWindow(dpy, awi->frame, 0, 0, (xwa.width - 2) + bch,
titleHeight,
! 1, 0, CopyFromParent, CopyFromParent,
valuemask, &swa);
if (!title)
Error("AddTitle: Can't create title bar!");
--- 375,381 ----
bch = 0;
title = XCreateWindow(dpy, awi->frame, 0, 0, (xwa.width - 2) + bch,
titleHeight,
! 1, xwa.depth, xwa.class, xwa.visual,
valuemask, &swa);
if (!title)
Error("AddTitle: Can't create title bar!");
***************
*** 353,359 ****
if (TBackPixmapData) {
awi->back = GetPixmapFromCache(title, TBackPixmapData,
TB_wide, TB_high,
! TForeground, TBackground,
xwa.depth);
if (!awi->back)
Error("AddTitle: Can't create pixmap for title background");
--- 382,388 ----
if (TBackPixmapData) {
awi->back = GetPixmapFromCache(title, TBackPixmapData,
TB_wide, TB_high,
! tfore, tback,
xwa.depth);
if (!awi->back)
Error("AddTitle: Can't create pixmap for title background");
***************
*** 363,375 ****
if (TBoldPixmapData) {
awi->bold = GetPixmapFromCache(title, TBoldPixmapData,
TBB_wide, TBB_high,
! TForeground, TBackground,
xwa.depth);
if (!awi->bold)
Error("AddTitle: Can't create pixmap for bold background");
}
XSetWindowBorderWidth(dpy, awi->client,
! (awi->attrs & AT_BORDER ? 1 : 0));
wc.sibling = awi->client;
wc.stack_mode = Above;
XConfigureWindow(dpy, title, CWSibling|CWStackMode, &wc);
--- 392,404 ----
if (TBoldPixmapData) {
awi->bold = GetPixmapFromCache(title, TBoldPixmapData,
TBB_wide, TBB_high,
! tfore, tback,
xwa.depth);
if (!awi->bold)
Error("AddTitle: Can't create pixmap for bold background");
}
XSetWindowBorderWidth(dpy, awi->client,
! ((awi->attrs & AT_BORDER) ? 1 : 0));
wc.sibling = awi->client;
wc.stack_mode = Above;
XConfigureWindow(dpy, title, CWSibling|CWStackMode, &wc);
***************
*** 378,383 ****
--- 407,413 ----
ButtonReleaseMask));
XMapWindow(dpy, title);
awi->title = title;
+ awi->state |= ST_DECORATED;
XSaveContext(dpy, title, AwmContext, awi);
}
***************
*** 389,410 ****
if (w == RootWindow(dpy, scr))
Leave(FALSE)
! DestroyFrame(w, FALSE);
Leave(TRUE)
}
! void DestroyFrame(w)
Window w;
{
XWindowAttributes xwa;
AwmInfoPtr awi;
-
- Entry("DestroyFrame")
awi = GetAwmInfo(w);
if (!awi || !awi->frame)
Leave_void
! XGetWindowAttributes(dpy, awi->frame, &xwa);
if (awi->gadgets)
DestroyGadgets(w);
if (awi->title) {
--- 419,443 ----
if (w == RootWindow(dpy, scr))
Leave(FALSE)
! NoDecorate(w, FALSE);
Leave(TRUE)
}
! void NoDecorate(w, destroy)
Window w;
+ Boolean destroy;
{
XWindowAttributes xwa;
AwmInfoPtr awi;
+ Entry("NoDecorate")
+
awi = GetAwmInfo(w);
if (!awi || !awi->frame)
Leave_void
!
! if (!(awi->state & ST_DECORATED))
! Leave_void
if (awi->gadgets)
DestroyGadgets(w);
if (awi->title) {
***************
*** 414,443 ****
if (awi->bold)
FreePixmapFromCache(awi->bold);
XDestroyWindow(dpy, awi->title);
! awi->title = (Drawable)NULL;
}
! if (awi->BC_back)
! FreePixmapFromCache(awi->BC_back);
! if (awi->BC_bold)
! FreePixmapFromCache(awi->BC_bold);
! free(awi->name);
! if (PushDown == FALSE) {
! if (awi->attrs & AT_TITLE)
! xwa.y += (titleHeight + 2);
! else if (awi->attrs & AT_BORDER)
! xwa.y += (BContext +
! (awi->border_width ? awi->border_width : 1));
}
! XReparentWindow(dpy, awi->client, RootWindow(dpy, scr), xwa.x,
! xwa.y);
! XDeleteContext(dpy, awi->frame, AwmContext);
! XDestroyWindow(dpy, awi->frame);
! XSetWindowBorderWidth(dpy, awi->client, awi->border_width);
! if (!(awi->state & ST_ICON))
! XRemoveFromSaveSet(dpy, awi->client);
! awi->frame = awi->back = awi->bold =
! awi->BC_back = awi->BC_bold = (Drawable)NULL;
! awi->name = (char *)NULL;
XSync(dpy, FALSE);
Leave_void
}
--- 447,471 ----
if (awi->bold)
FreePixmapFromCache(awi->bold);
XDestroyWindow(dpy, awi->title);
! awi->title = awi->back = awi->bold = (Drawable)NULL;
}
! if (destroy) {
! XDeleteContext(dpy, awi->frame, AwmContext);
! if (awi->BC_back)
! FreePixmapFromCache(awi->BC_back);
! if (awi->BC_bold)
! FreePixmapFromCache(awi->BC_bold);
! free(awi->name);
! awi->name = (char *)NULL;
! XDestroyWindow(dpy, awi->frame);
! awi->frame = awi->BC_back = awi->BC_bold = (Drawable)NULL;
}
! else {
! XGetWindowAttributes(dpy, awi->client, &xwa);
! XResizeWindow(dpy, awi->frame, xwa.width, xwa.height);
! XMoveWindow(dpy, awi->client, 0, 0);
! awi->state ^= ST_DECORATED;
! }
XSync(dpy, FALSE);
Leave_void
}
***************
*** 465,470 ****
--- 493,499 ----
Window w;
{
Window ret;
+ AwmInfoPtr awi;
Entry("Decorate")
***************
*** 487,492 ****
--- 516,522 ----
XFontStruct *f_info;
AwmInfoPtr awi;
XGCValues gcv;
+ Colormap cmap;
Entry("PaintTitle")
***************
*** 493,498 ****
--- 523,529 ----
if (!(awi = IsTitled(w)))
Leave_void
XGetWindowAttributes(dpy, awi->title, &xwa);
+ cmap = xwa.colormap;
if (reversed && TFontBoldInfo)
f_info = TFontBoldInfo;
else
***************
*** 499,507 ****
f_info = TFontInfo;
gcv.font = f_info->fid;
gcv.foreground = (reversed && !TFontBoldInfo) ?
! TTextBackground : TTextForeground;
gcv.background = (reversed && !TFontBoldInfo) ?
! TTextForeground : TTextBackground;
XChangeGC(dpy, awi->winGC, (GCFont | GCForeground | GCBackground), &gcv);
XClearWindow(dpy, awi->title);
if (ShowName) { /* print window names? */
--- 530,538 ----
f_info = TFontInfo;
gcv.font = f_info->fid;
gcv.foreground = (reversed && !TFontBoldInfo) ?
! GetPixel(TTextBackground, cmap) : GetPixel(TTextForeground, cmap);
gcv.background = (reversed && !TFontBoldInfo) ?
! GetPixel(TTextForeground, cmap) : GetPixel(TTextBackground, cmap);
XChangeGC(dpy, awi->winGC, (GCFont | GCForeground | GCBackground), &gcv);
XClearWindow(dpy, awi->title);
if (ShowName) { /* print window names? */
diff -c awm.dst/awm.c awm/awm.c
*** awm.dst/awm.c Tue Jul 5 21:26:38 1988
--- awm/awm.c Sun Jul 24 17:24:11 1988
***************
*** 3,9 ****
#ifndef lint
! static char *rcsid_awm_c = "$Header: awm.c,v 1.2 88/07/02 01:24:56 jkh Exp $";
#endif lint
#include "X11/copyright.h"
--- 3,9 ----
#ifndef lint
! static char *rcsid_awm_c = "$Header: awm.c,v 1.3 88/07/23 17:24:56 jkh Exp $";
#endif lint
#include "X11/copyright.h"
***************
*** 204,210 ****
fprintf(stderr, "awm: Unable to open display\n");
exit(1);
}
! scr = DefaultScreen(dpy);
/*
* Set XErrorFunction to be non-terminating.
--- 204,211 ----
fprintf(stderr, "awm: Unable to open display\n");
exit(1);
}
!
! scr = DefaultScreen(dpy);
/*
* Set XErrorFunction to be non-terminating.
***************
*** 271,279 ****
if (Startup_File_Error)
Error("Bad startup file...aborting");
}
!
if (Startup_File_Error)
Error("Bad startup file...aborting");
/*
* Catch some of the basic signals so we don't get rudely killed without
* cleaning up first.
--- 272,281 ----
if (Startup_File_Error)
Error("Bad startup file...aborting");
}
!
if (Startup_File_Error)
Error("Bad startup file...aborting");
+
/*
* Catch some of the basic signals so we don't get rudely killed without
* cleaning up first.
***************
*** 282,288 ****
signal(SIGTERM, Quit);
signal(SIGQUIT, Quit);
signal(SIGINT, Quit);
!
/*
* If the root window has not been named, name it.
*/
--- 284,290 ----
signal(SIGTERM, Quit);
signal(SIGQUIT, Quit);
signal(SIGINT, Quit);
!
/*
* If the root window has not been named, name it.
*/
***************
*** 289,307 ****
status = XFetchName(dpy, RootWindow(dpy, scr), &root_name);
if (root_name == NULL)
XStoreName(dpy, RootWindow(dpy, scr), " X Root Window ");
! else free(root_name);
/* register the root window */
RegisterWindow(RootWindow(dpy, scr));
!
ScreenHeight = DisplayHeight(dpy, scr);
ScreenWidth = DisplayWidth(dpy, scr);
!
/*
* Create the menus. This function also sticks the RTL menu "handle"
* into the appropriate binding after it's been created and initialized.
*/
Create_Menus();
!
/*
* check the gadgets.
*/
--- 291,310 ----
status = XFetchName(dpy, RootWindow(dpy, scr), &root_name);
if (root_name == NULL)
XStoreName(dpy, RootWindow(dpy, scr), " X Root Window ");
! else
! free(root_name);
/* register the root window */
RegisterWindow(RootWindow(dpy, scr));
!
ScreenHeight = DisplayHeight(dpy, scr);
ScreenWidth = DisplayWidth(dpy, scr);
!
/*
* Create the menus. This function also sticks the RTL menu "handle"
* into the appropriate binding after it's been created and initialized.
*/
Create_Menus();
!
/*
* check the gadgets.
*/
***************
*** 310,316 ****
Cleanup();
exit(1);
}
!
/*
* Store all the cursors.
*/
--- 313,319 ----
Cleanup();
exit(1);
}
!
/*
* Store all the cursors.
*/
***************
*** 321,331 ****
*/
Grab_Buttons();
- /*
- * Initialize titlebar data.
- */
- if (Titles)
- Init_Titles();
/*
* watch for initial window mapping and window destruction
*/
--- 324,329 ----
***************
*** 332,338 ****
errorStatus = False;
swa.event_mask = (SubstructureRedirectMask | FocusChangeMask |
! (NeedRootInput ? EVENTMASK | OwnerGrabButtonMask : 0));
XChangeWindowAttributes(dpy, RootWindow(dpy, scr), CWEventMask, &swa);
XSync(dpy, False);
if (errorStatus == True) {
--- 330,337 ----
errorStatus = False;
swa.event_mask = (SubstructureRedirectMask | FocusChangeMask |
! (NeedRootInput ? EVENTMASK |
! OwnerGrabButtonMask : 0));
XChangeWindowAttributes(dpy, RootWindow(dpy, scr), CWEventMask, &swa);
XSync(dpy, False);
if (errorStatus == True) {
***************
*** 410,423 ****
/*
* Create graphics context.
*/
- xgc.foreground = ITextForeground;
- xgc.background = ITextBackground;
xgc.font = IFontInfo->fid;
xgc.graphics_exposures = FALSE;
IconGC = XCreateGC(dpy,
RootWindow(dpy, scr),
! (GCForeground|GCBackground|GCGraphicsExposures|GCFont),
! &xgc);
xgc.foreground = PForeground;
xgc.background = PBackground;
--- 409,422 ----
/*
* Create graphics context.
*/
xgc.font = IFontInfo->fid;
xgc.graphics_exposures = FALSE;
+ xgc.foreground = IForeground;
+ xgc.background = IBackground;
IconGC = XCreateGC(dpy,
RootWindow(dpy, scr),
! (GCForeground | GCBackground | GCGraphicsExposures |
! GCFont), &xgc);
xgc.foreground = PForeground;
xgc.background = PBackground;
***************
*** 424,437 ****
xgc.font = PFontInfo->fid;
PopGC = XCreateGC(dpy,
RootWindow(dpy, scr),
! (GCForeground|GCBackground|GCFont), &xgc);
xgc.line_width = DRAW_WIDTH;
xgc.foreground = DRAW_VALUE;
xgc.function = DRAW_FUNC;
xgc.subwindow_mode = IncludeInferiors;
DrawGC = XCreateGC(dpy, RootWindow(dpy, scr),
! GCLineWidth|GCForeground|GCFunction|GCSubwindowMode,
! &xgc);
/*
* As our last "startup" task, invoke the execfile if was specified.
--- 423,436 ----
xgc.font = PFontInfo->fid;
PopGC = XCreateGC(dpy,
RootWindow(dpy, scr),
! (GCForeground | GCBackground | GCFont), &xgc);
xgc.line_width = DRAW_WIDTH;
xgc.foreground = DRAW_VALUE;
xgc.function = DRAW_FUNC;
xgc.subwindow_mode = IncludeInferiors;
DrawGC = XCreateGC(dpy, RootWindow(dpy, scr),
! GCLineWidth | GCForeground | GCFunction |
! GCSubwindowMode, &xgc);
/*
* As our last "startup" task, invoke the execfile if was specified.
***************
*** 492,497 ****
--- 491,499 ----
continue;
awi = GetAwmInfo(bwin);
+ if (!awi)
+ continue;
+
if (awi->frame == bwin)
context = BORDER;
else if (awi->title == bwin)
***************
*** 506,511 ****
--- 508,514 ----
}
else
context = WINDOW;
+
/*
* Get the button event detail.
*/
***************
*** 520,528 ****
(((int)bptr->mask & ModMask) != hi))
continue;
! if ((bptr->context & context) != context)
continue;
!
if (!(bptr->mask & ButtonDown))
continue;
--- 523,531 ----
(((int)bptr->mask & ModMask) != hi))
continue;
! if ((bptr->context & context) != context) {
continue;
! }
if (!(bptr->mask & ButtonDown))
continue;
***************
*** 549,555 ****
*/
if (XPending(dpy) && GetButton(&button_event)) {
bwin = button_event.xbutton.window;
-
/*
* If it's not a release of button that was pressed,
* don't do the function bound to 'ButtonUp'.
--- 552,557 ----
***************
*** 572,579 ****
&event_win);
if (status == BadWindow)
break;
-
awi = GetAwmInfo(bwin);
if (awi->frame == bwin)
context = BORDER;
else if (awi->title == bwin)
--- 574,582 ----
&event_win);
if (status == BadWindow)
break;
awi = GetAwmInfo(bwin);
+ if (!awi)
+ continue;
if (awi->frame == bwin)
context = BORDER;
else if (awi->title == bwin)
***************
*** 580,588 ****
context = TITLE;
else if (IsGadgetWin(bwin, &num))
context = GADGET | (1 << (num + BITS_USED));
! else if (bwin == awi->icon)
context = ICON;
! else if (!event_win || awi->client == RootWindow(dpy, scr)) {
event_win = RootWindow(dpy, scr);
context = ROOT;
}
--- 583,591 ----
context = TITLE;
else if (IsGadgetWin(bwin, &num))
context = GADGET | (1 << (num + BITS_USED));
! else if (awi->icon == bwin)
context = ICON;
! else if (awi->client == RootWindow(dpy, scr)) {
event_win = RootWindow(dpy, scr);
context = ROOT;
}
***************
*** 597,604 ****
(((int)bptr->mask & ModMask) != hi))
continue;
! if (!((bptr->context & context) == context))
continue;
if (!(bptr->mask & ButtonUp))
continue;
--- 600,608 ----
(((int)bptr->mask & ModMask) != hi))
continue;
! if (!((bptr->context & context) == context)) {
continue;
+ }
if (!(bptr->mask & ButtonUp))
continue;
***************
*** 636,652 ****
&junk);
if (status == BadWindow)
break;
/*
* Determine the event window and context.
*/
! if (awi->title == bwin)
context = TITLE;
else if (IsGadgetWin(bwin, &num))
context = GADGET | (1 << (num + BITS_USED));
- else if (event_win == RootWindow(dpy, scr))
- context = ROOT;
else if (awi->icon == bwin)
context = ICON;
else
context = WINDOW;
/*
--- 640,661 ----
&junk);
if (status == BadWindow)
break;
+
/*
* Determine the event window and context.
*/
! if (awi->frame == bwin)
! context = BORDER;
! else if (awi->title == bwin)
context = TITLE;
else if (IsGadgetWin(bwin, &num))
context = GADGET | (1 << (num + BITS_USED));
else if (awi->icon == bwin)
context = ICON;
+ else if (awi->client == RootWindow(dpy, scr)) {
+ event_win = RootWindow(dpy, scr);
+ context = ROOT;
+ }
else
context = WINDOW;
/*
***************
*** 701,713 ****
--- 710,737 ----
* Get the pixmap search path, if it exists.
*/
awmPath = GetStringRes("path", NULL);
+
+ /* Default foreground/background colors (text) */
+ Foreground = GetStringRes("foreground", "black");
+ Background = GetStringRes("background", "white");
+ if (Reverse) { /* Swap the foreground and background */
+ char *tmp;
+
+ tmp = Foreground;
+ Foreground = Background;
+ Background = tmp;
+ }
+ WBorder = GetStringRes("border.foreground", Foreground);
+
Autoselect = GetBoolRes("autoselect", FALSE);
Autoraise = GetBoolRes("autoraise", FALSE);
+ Borders = GetBoolRes("borderContexts", FALSE);
ConstrainResize = GetBoolRes("constrainResize", FALSE);
FrameFocus = GetBoolRes("frameFocus", FALSE);
Freeze = GetBoolRes("freeze", FALSE);
Grid = GetBoolRes("grid", FALSE);
+ InstallColormap = GetBoolRes("installColormap", FALSE);
Titles = GetBoolRes("titles", FALSE);
PushDown = GetBoolRes("title.push", FALSE);
UseGadgets = GetBoolRes("gadgets", FALSE);
***************
*** 730,736 ****
HIconPad = GetIntRes("icon.hPad", DEF_ICON_PAD);
VIconPad = GetIntRes("icon.vPad", DEF_ICON_PAD);
RaiseDelay = GetIntRes("raiseDelay", DEF_RAISE_DELAY);
- MaxColors = GetIntRes("maxColors", DEF_MAX_COLORS);
PBorderWidth = GetIntRes("popup.borderWidth", DEF_POP_BORDER_WIDTH);
IBorderWidth = GetIntRes("icon.borderWidth", DEF_ICON_BORDER_WIDTH);
PPadding = GetIntRes("popup.pad", DEF_POP_PAD);
--- 754,759 ----
***************
*** 742,764 ****
Volume = GetIntRes("volume", DEF_VOLUME);
Pushval = GetIntRes("push", DEF_PUSH);
BContext = GetIntRes("borderContext.width", DEF_BCONTEXT_WIDTH);
!
! /*
! * Retrieve the information structure for the specifed fonts and
! * set the global font information pointers.
! */
! /* Default foreground/background colors */
ForeColor = GetColorRes("foreground", BlackPixel(dpy, scr));
BackColor = GetColorRes("background", WhitePixel(dpy, scr));
!
! if (Reverse) { /* Swap the forecolor and backcolor */
! Pixel tmp;
!
! tmp = ForeColor;
! ForeColor = BackColor;
! BackColor = tmp;
! }
!
/*
* Create and store the grey and solid pixmaps
*/
--- 765,785 ----
Volume = GetIntRes("volume", DEF_VOLUME);
Pushval = GetIntRes("push", DEF_PUSH);
BContext = GetIntRes("borderContext.width", DEF_BCONTEXT_WIDTH);
!
ForeColor = GetColorRes("foreground", BlackPixel(dpy, scr));
BackColor = GetColorRes("background", WhitePixel(dpy, scr));
! IForeground = GetColorRes("icon.foreground", ForeColor);
! IBackground = GetColorRes("icon.background", BackColor);
! IBorder = GetColorRes("icon.border", IForeground);
! ITextForeground = GetColorRes("icon.text.foreground", IForeground);
! ITextBackground = GetColorRes("icon.text.background", IBackground);
! PBorder = GetColorRes("popup.border", ForeColor);
! PForeground = GetColorRes("popup.foreground", PBorder);
! PBackground = GetColorRes("popup.background", BackColor);
! MForeground = GetColorRes("menu.foreground", ForeColor);
! MBackground = GetColorRes("menu.background", BackColor);
! MBorder = GetColorRes("menu.border", MForeground);
!
/*
* Create and store the grey and solid pixmaps
*/
***************
*** 781,798 ****
MFontInfo = GetFontRes("menu.font", DEF_MENU_FONT);
MBoldFontInfo = GetFontRes("menu.boldFont", DEF_BOLD_FONT);
- WBorder = GetColorRes("border.foreground", ForeColor);
- IForeground = GetColorRes("icon.foreground", ForeColor);
- IBackground = GetColorRes("icon.background", BackColor);
- IBorder = GetColorRes("icon.border", IForeground);
- ITextForeground = GetColorRes("icon.text.foreground", IForeground);
- ITextBackground = GetColorRes("icon.text.background", IBackground);
- PBorder = GetColorRes("popup.border", ForeColor);
- PForeground = GetColorRes("popup.foreground", PBorder);
- PBackground = GetColorRes("popup.background", BackColor);
- MForeground = GetColorRes("menu.foreground", ForeColor);
- MBackground = GetColorRes("menu.background", BackColor);
- MBorder = GetColorRes("menu.border", MForeground);
IBackPixmap = GetPixmapRes("icon.pixmap", GrayPixmap, IForeground,
IBackground);
--- 802,807 ----
***************
*** 849,855 ****
if ((cp = XGetDefault(dpy, NAME, string)) ||
(cp = XGetDefault(dpy, CLASS, string)))
! if (Pred(cp, TRUE))
def_val = TRUE;
Leave(def_val)
}
--- 858,864 ----
if ((cp = XGetDefault(dpy, NAME, string)) ||
(cp = XGetDefault(dpy, CLASS, string)))
! if (Pred(cp) > 0)
def_val = TRUE;
Leave(def_val)
}
***************
*** 944,950 ****
/*
* Try to allocate color resource named by "string", return "color"
! * if not found.
*/
Pixel GetColorRes(string, color)
char *string;
--- 953,960 ----
/*
* Try to allocate color resource named by "string", return "color"
! * if not found.This routine is only used for allocating colors from
! * the default colormap.
*/
Pixel GetColorRes(string, color)
char *string;
***************
*** 952,963 ****
{
char *cp;
Pixel tmp_color;
Entry("GetColorRes")
if ((cp = XGetDefault(dpy, NAME, string)) ||
(cp = XGetDefault(dpy, CLASS, string))) {
! if ((tmp_color = LookupColor(cp)) != NOCOLOR)
Leave(tmp_color)
else
tmp_color = color;
--- 962,975 ----
{
char *cp;
Pixel tmp_color;
+ Boolean status;
Entry("GetColorRes")
if ((cp = XGetDefault(dpy, NAME, string)) ||
(cp = XGetDefault(dpy, CLASS, string))) {
! tmp_color = LookupColor(cp, DefaultColormap(dpy, scr), &status);
! if (!status) /* lookup succeeded */
Leave(tmp_color)
else
tmp_color = color;
***************
*** 1020,1025 ****
--- 1032,1038 ----
AwmInfoPtr tmp;
XClassHint clh;
XWMHints *wm_hints;
+ char *cp;
Entry("RegisterWindow")
***************
*** 1035,1042 ****
tmp->winGC = XCreateGC(dpy, w, (unsigned long)0, 0);
/*
* Determine attribute set by first turning on all attributes
! * that are set by booleans and then selectively turning off the
! * ones that windows "reject".
*/
tmp->attrs = AT_NONE;
if (Titles)
--- 1048,1055 ----
tmp->winGC = XCreateGC(dpy, w, (unsigned long)0, 0);
/*
* Determine attribute set by first turning on all attributes
! * that are set by booleans and then (possibly) override them
! * by checking to see what an individual window might want.
*/
tmp->attrs = AT_NONE;
if (Titles)
***************
*** 1043,1049 ****
tmp->attrs |= AT_TITLE;
if (UseGadgets)
tmp->attrs |= AT_GADGETS;
! if (BContext)
tmp->attrs |= AT_BORDER;
if (Autoraise)
tmp->attrs |= AT_RAISE;
--- 1056,1062 ----
tmp->attrs |= AT_TITLE;
if (UseGadgets)
tmp->attrs |= AT_GADGETS;
! if (Borders)
tmp->attrs |= AT_BORDER;
if (Autoraise)
tmp->attrs |= AT_RAISE;
***************
*** 1054,1131 ****
}
clh.res_name = clh.res_class = (char *)NULL;
XGetClassHint(dpy, w, &clh);
- if (clh.res_name) {
- if (Pred(XGetDefault(dpy, clh.res_name, "wm_option.title"),
- FALSE))
- tmp->attrs ^= AT_TITLE;
- if (Pred(XGetDefault(dpy, clh.res_name, "wm_option.gadgets"),
- FALSE))
- tmp->attrs ^= AT_GADGETS;
- if (Pred(XGetDefault(dpy, clh.res_name, "wm_option.borderContext"),
- FALSE))
- tmp->attrs ^= AT_BORDER;
- if (Pred(XGetDefault(dpy, clh.res_name, "wm_option.autoRaise"),
- FALSE))
- tmp->attrs ^= AT_RAISE;
- }
if (clh.res_class) {
! if (Pred(XGetDefault(dpy, clh.res_class, "wm_option.title"),
! FALSE))
! tmp->attrs ^= AT_TITLE;
! if (Pred(XGetDefault(dpy, clh.res_class, "wm_option.gadgets"),
! FALSE))
! tmp->attrs ^= AT_GADGETS;
! if (Pred(XGetDefault(dpy, clh.res_class, "wm_option.borderContext"),
! FALSE))
! tmp->attrs ^= AT_BORDER;
! if (Pred(XGetDefault(dpy, clh.res_class, "wm_option.autoRaise"),
! FALSE))
! tmp->attrs ^= AT_RAISE;
}
XSaveContext(dpy, w, AwmContext, tmp);
Leave(tmp)
}
! /* check whether a string denotes an "on" or "off" value */
! Boolean Pred(s, bval)
char *s;
- Boolean bval;
{
int i, len;
char *tmp;
! Boolean ret = FALSE;
Entry("Pred")
if (!s)
! Leave(FALSE)
len = strlen(s);
if (!len)
! Leave(FALSE)
tmp = (char *)malloc(len + 1);
if (!tmp) {
fprintf(stderr, "awm: Pred: Can't allocate storage for '%s'!\n", s);
! Leave(FALSE)
}
strcpy(tmp, s);
for (i = 0; i < len; i++)
if (tmp[i] >= 'A' && tmp[i] <= 'Z')
tmp[i] += 32;
! if (bval == TRUE) { /* check for "on" */
! if (*tmp == 'y' || !strcmp(tmp, "on")
! || !strcmp(tmp, "true")
! || !strcmp(tmp, "enable"))
! ret = TRUE;
! }
! else { /* check for "off" */
! if (*tmp == 'n' || !strcmp(tmp, "off")
|| !strcmp(tmp, "false")
|| !strcmp(tmp, "disable"))
! ret = TRUE;
! }
free(tmp);
Leave(ret)
}
-
/*
* Initialize the default bindings. First, write the character array
--- 1067,1167 ----
}
clh.res_name = clh.res_class = (char *)NULL;
XGetClassHint(dpy, w, &clh);
if (clh.res_class) {
! if (cp = (XGetDefault(dpy, clh.res_class, "wm_option.title")))
! tmp->attrs = SetOptFlag(tmp->attrs, AT_TITLE, Pred(cp));
!
! if (cp = (XGetDefault(dpy, clh.res_class, "wm_option.gadgets")))
! tmp->attrs = SetOptFlag(tmp->attrs, AT_GADGETS, Pred(cp));
!
! if (cp = (XGetDefault(dpy, clh.res_class,"wm_option.borderContext")))
! tmp->attrs = SetOptFlag(tmp->attrs, AT_BORDER, Pred(cp));
!
! if (cp = (XGetDefault(dpy, clh.res_class, "wm_option.autoRaise")))
! tmp->attrs = SetOptFlag(tmp->attrs, AT_RAISE, Pred(cp));
}
+ if (clh.res_name) {
+ if (cp = (XGetDefault(dpy, clh.res_name, "wm_option.title")))
+ tmp->attrs = SetOptFlag(tmp->attrs, AT_TITLE, Pred(cp));
+
+ if (cp = (XGetDefault(dpy, clh.res_name, "wm_option.gadgets")))
+ tmp->attrs = SetOptFlag(tmp->attrs, AT_GADGETS, Pred(cp));
+
+ if (cp = (XGetDefault(dpy, clh.res_name, "wm_option.borderContext")))
+ tmp->attrs = SetOptFlag(tmp->attrs, AT_BORDER, Pred(cp));
+
+ if (cp = (XGetDefault(dpy, clh.res_name, "wm_option.autoRaise")))
+ tmp->attrs = SetOptFlag(tmp->attrs, AT_RAISE, Pred(cp));
+ }
XSaveContext(dpy, w, AwmContext, tmp);
Leave(tmp)
}
! /*
! * Sets bit "flag" conditionally, based on state of "mask" and
! * "predicate" (mask denotes current state, predicate denotes
! * whether change is desired).
! */
! int SetOptFlag(mask, flag, predicate)
! int mask, flag, predicate;
! {
! Entry("SetOptFlag")
!
! switch (predicate) {
! case -1:
! Leave(mask)
! break;
!
! case 0:
! if (mask & flag)
! Leave(mask ^ flag)
! else
! Leave(mask)
! break;
!
! case 1:
! Leave(mask | flag)
! break;
! }
! }
!
! /*
! * check whether a string denotes an "on" or "off" value. Return 0
! * if "off", 1 if "on" and -1 if undefined (or null).
! */
! Pred(s)
char *s;
{
int i, len;
char *tmp;
! Boolean ret = -1;
Entry("Pred")
if (!s)
! Leave(-1)
len = strlen(s);
if (!len)
! Leave(-1)
tmp = (char *)malloc(len + 1);
if (!tmp) {
fprintf(stderr, "awm: Pred: Can't allocate storage for '%s'!\n", s);
! Leave(-1)
}
strcpy(tmp, s);
for (i = 0; i < len; i++)
if (tmp[i] >= 'A' && tmp[i] <= 'Z')
tmp[i] += 32;
! if (*tmp == 'y' || !strcmp(tmp, "on")
! || !strcmp(tmp, "true")
! || !strcmp(tmp, "enable"))
! ret = 1;
! else if (*tmp == 'n' || !strcmp(tmp, "off")
|| !strcmp(tmp, "false")
|| !strcmp(tmp, "disable"))
! ret = 0;
free(tmp);
Leave(ret)
}
/*
* Initialize the default bindings. First, write the character array
diff -c awm.dst/awm.h awm/awm.h
*** awm.dst/awm.h Sat Jul 2 16:57:45 1988
--- awm/awm.h Sun Jul 24 17:25:16 1988
***************
*** 3,9 ****
#ifndef lint
! static char *rcsid_awm_h = "$Header: awm.h,v 1.1 88/06/15 15:26:00 jkh Exp $";
#endif lint
#include "X11/copyright.h"
--- 3,9 ----
#ifndef lint
! static char *rcsid_awm_h = "$Header: awm.h,v 1.2 88/07/23 17:26:00 jkh Exp $";
#endif lint
#include "X11/copyright.h"
***************
*** 171,176 ****
--- 171,177 ----
#define ST_WINDOW 0x1
#define ST_ICON 0x2
#define ST_PLACED 0x4
+ #define ST_DECORATED 0x8
/* Window attributes */
#define AT_NONE 0x0
***************
*** 338,345 ****
typedef struct _gadgetdecl { /* Declaration (type) information */
unsigned char *name; /* Either text label or pixmap file name */
unsigned char *data; /* If pixmap file, this is the data from it */
! unsigned long forecolor; /* foreground color for pixmap */
! unsigned long backcolor; /* background color for pixmap */
XFontStruct *fontInfo; /* font for text */
int high, wide; /* width and height of pixmap or text */
int gravity; /* stick to the left or right? */
--- 339,346 ----
typedef struct _gadgetdecl { /* Declaration (type) information */
unsigned char *name; /* Either text label or pixmap file name */
unsigned char *data; /* If pixmap file, this is the data from it */
! char *forecolor; /* foreground color for pixmap */
! char *backcolor; /* background color for pixmap */
XFontStruct *fontInfo; /* font for text */
int high, wide; /* width and height of pixmap or text */
int gravity; /* stick to the left or right? */
***************
*** 405,422 ****
extern Pixmap GrayPixmap; /* Gray pixmap. */
extern Pixmap SolidPixmap;
extern Pixmap IBackPixmap; /* Icon window background pixmap. */
! extern Pixel BForeground; /* Border Context (pixmap) foreground pixel */
! extern Pixel BBackground; /* Border Context (pixmap) background pixel */
extern Pixel ITextForeground; /* Icon window text forground color. */
extern Pixel ITextBackground; /* Icon window text background color. */
extern Pixel IForeground; /* Icon pixmap foreground color */
extern Pixel IBackground; /* Icon pixmap background color */
- extern Pixel IBorder; /* Icon window border pixel. */
- extern Pixel WBorder; /* Window border pixel */
- extern Pixel TTextForeground; /* Title text foreground pixel */
- extern Pixel TTextBackground; /* Title text background pixel */
- extern Pixel TForeground; /* Title (pixmap) foreground pixel */
- extern Pixel TBackground; /* Title (pixmap) background pixel */
extern Pixel PForeground; /* Pop-up window forground color. */
extern Pixel PBackground; /* Pop-up window background color. */
extern Pixel PBorder; /* Pop-Up Window border pixel. */
--- 406,425 ----
extern Pixmap GrayPixmap; /* Gray pixmap. */
extern Pixmap SolidPixmap;
extern Pixmap IBackPixmap; /* Icon window background pixmap. */
! extern char *BForeground; /* Border Context (pixmap) foreground pixel */
! extern char *BBackground; /* Border Context (pixmap) background pixel */
! extern char *WBorder; /* Window border pixel */
! extern char *TTextForeground; /* Title text foreground pixel */
! extern char *TTextBackground; /* Title text background pixel */
! extern char *TForeground; /* Title (pixmap) foreground pixel */
! extern char *TBackground; /* Title (pixmap) background pixel */
! extern char *Foreground; /* default forground color (text) */
! extern char *Background; /* default background color (text) */
! extern Pixel IBorder; /* Icon window border pixel. */
extern Pixel ITextForeground; /* Icon window text forground color. */
extern Pixel ITextBackground; /* Icon window text background color. */
extern Pixel IForeground; /* Icon pixmap foreground color */
extern Pixel IBackground; /* Icon pixmap background color */
extern Pixel PForeground; /* Pop-up window forground color. */
extern Pixel PBackground; /* Pop-up window background color. */
extern Pixel PBorder; /* Pop-Up Window border pixel. */
***************
*** 450,456 ****
extern int Delta; /* Mouse movement slop. */
extern int HIconPad; /* Icon horizontal padding. */
extern int VIconPad; /* Icon vertical padding. */
- extern int MaxColors; /* Maximum number of colors to use. */
extern int Pushval; /* Number of pixels to push window by. */
extern int BContext; /* Width of border context area in pixels */
extern int RaiseDelay; /* Delay in milliseconds before autoraising windows */
--- 453,458 ----
***************
*** 473,478 ****
--- 475,481 ----
extern Boolean Autoraise; /* Raise window on input focus? */
extern Boolean Autoselect; /* Warp mouse to default menu selection? */
+ extern Boolean Borders; /* Display border context areas? */
extern Boolean ConstrainResize; /* Don't resize until pointer leaves window */
extern Boolean Freeze; /* Freeze server during move/resize? */
extern Boolean Grid; /* Should the m/r box contain a 9 seg. grid. */
***************
*** 483,488 ****
--- 486,492 ----
extern Boolean NWindow; /* Normalize windows? */
extern Boolean NIcon; /* Normalize icons? */
extern Boolean RootResizeBox; /* Should resize box obscure window? */
+ extern Boolean InstallColormap; /* Install colormap for clients? */
extern Boolean Push; /* Relative=TRUE, Absolute=FALSE. */
extern Boolean ResizeRelative; /* Relative=TRUE, Absolute=FALSE. */
extern Boolean Reverse; /* Reverse video? */
***************
*** 559,565 ****
extern Boolean ShoveLeft();
extern Boolean ShoveRight();
extern Boolean ShoveUp();
- extern Boolean Pred();
extern Boolean Quit();
extern Boolean Raise();
extern Boolean Redraw();
--- 563,568 ----
***************
*** 593,598 ****
--- 596,602 ----
extern char *GetPixmapDataRes();
extern Pixmap GetPixmapRes();
extern Pixel GetColorRes();
+ extern Pixel GetPixel();
extern XFontStruct *GetFontRes();
extern Drawable GetPixmapFromCache();
extern AwmInfoPtr GetAwmInfo();
***************
*** 601,608 ****
extern AwmInfoPtr IsGadgetWin();
extern void Init_Titles(), Init_Frames();
! extern void DestroyFrame();
! extern void AddTitle();
extern void PaintTitle();
extern void SetBorderPixmaps();
extern void FreePixmapFromCache();
--- 605,611 ----
extern AwmInfoPtr IsGadgetWin();
extern void Init_Titles(), Init_Frames();
! extern void NoDecorate();
extern void PaintTitle();
extern void SetBorderPixmaps();
extern void FreePixmapFromCache();
diff -c awm.dst/awm.man awm/awm.man
*** awm.dst/awm.man Sat Jul 2 16:57:47 1988
--- awm/awm.man Sun Jul 24 17:21:35 1988
***************
*** 11,17 ****
.if n .sp 1
.if t .sp .5
..
! .TH AWM 1 "13 June 1988" "X Version 11"
.SH NAME
.PP
awm - Window Manager X Client Application
--- 11,17 ----
.if n .sp 1
.if t .sp .5
..
! .TH AWM 1 "23 July 1988" "X Version 11"
.SH NAME
.PP
awm - Window Manager X Client Application
***************
*** 116,123 ****
\fBCenterGravity\fP to the center.
.IP
\fIforeground\fP and \fIbackground\fP specify the colors used to
! tile the gadget or draw the text. If the number of colors
! exceeds \fBmaxColors\fP, black and white will be used.
.IP
\fIfont\fP is the name of the font you want the gadget's name
drawn in. This overrides the \fBgadget.font\fP setting for this
--- 116,122 ----
\fBCenterGravity\fP to the center.
.IP
\fIforeground\fP and \fIbackground\fP specify the colors used to
! tile the gadget or draw the text.
.IP
\fIfont\fP is the name of the font you want the gadget's name
drawn in. This overrides the \fBgadget.font\fP setting for this
***************
*** 487,495 ****
.IP 3)
If you omit a foreground or background color.
.IP 4)
- If the total number of colors specified in the resource database
- exceeds the number specified in the \fImaxColors\fP variable.
- .IP 5)
If you specify no colors in the resource database.
.bp
.SH X DEFAULTS
--- 486,491 ----
***************
*** 636,644 ****
specific pictures in it. More typically, this will be a cross
hatch pattern or some similar background weave.
See also: \fBpath\fP, \fBicon.foreground\fP, \fBicon.background\fP.
! .IP "\fBmaxColors\fP (int) ``0''"
! Don't allow \fIawm\fP to eat any more than this many colors.
! A value of 0 allows \fIawm\fP to use as many colors as it wants.
.IP "\fBmenu.background\fP (string) ``\fBbackground\fP''"
Menu background color.
.IP "\fBmenu.boldFont\fP (string) ``8x13bold''"
--- 632,640 ----
specific pictures in it. More typically, this will be a cross
hatch pattern or some similar background weave.
See also: \fBpath\fP, \fBicon.foreground\fP, \fBicon.background\fP.
! .IP "\fBinstallColormap\fP (boolean) ``false''"
! Install a given window's colormap when the pointer enters it.
! When the pointer leaves, the default colormap is installed.
.IP "\fBmenu.background\fP (string) ``\fBbackground\fP''"
Menu background color.
.IP "\fBmenu.boldFont\fP (string) ``8x13bold''"
***************
*** 835,856 ****
These resources determine whether or not a given application really wants
a title, gadgets, border context area or to be auto-raised.
! The application's NAME and CLASS (in the WM_CLASS property) are checked
against the string supplied for \fIname\fP (for example:
Xclock*wm_option.title: off).
.IP
! Note that the "main" boolean resources (I.E. \fBtitles\fP, \fBautoRaise\fP)
! are the final arbiters of whether or not a given resource is set.
! For instance, it is a noop to specify something like
! .EX
! xterm*wm_option.title: on
! .EE
! .IP
! if \fBtitles\fP is off. In short, using this mechanism to do anything
! but turn an attribute off for a given application is generally useless.
! The rationale behind this is that the set of applications that are known not
! to want attributes is probably smaller than the (potentially infinite)
! set of applications that do or don't care either way.
.IP
These resources are ``special'' as they are checked for under the
application's name, not \fIawm\fP's; I.E. \fBxclock.wm_option.autoRaise\fP
--- 831,847 ----
These resources determine whether or not a given application really wants
a title, gadgets, border context area or to be auto-raised.
! The application's CLASS and NAME (in the WM_CLASS property) are checked
against the string supplied for \fIname\fP (for example:
Xclock*wm_option.title: off).
.IP
! Specifying one of these resources overrides any other boolean
! settings (I.E. \fBawm.titles\fP or \fBawm.gadgets\fP) and
! may be used to turn things on and off at the application and/or
! class level for applications, regardless of \fBawm\fP's settings.
!
! Note: Both class and name resources are checked, and in that order. Thus
! specific applications may override settings for their class, if desired.
.IP
These resources are ``special'' as they are checked for under the
application's name, not \fIawm\fP's; I.E. \fBxclock.wm_option.autoRaise\fP
diff -c awm.dst/errHndlr.c awm/errHndlr.c
*** awm.dst/errHndlr.c Sat Jul 2 16:57:47 1988
--- awm/errHndlr.c Wed Jul 13 19:38:16 1988
***************
*** 1,7 ****
#ident "%W% %G%"
-
-
#ifndef lint
static char *rcsid_errHndlr_c = "$Header: errHndlr.c,v 1.1 88/06/15 15:26 :00 jkh Exp $";
#endif lint
--- 1,5 ----
***************
*** 52,64 ****
#ifdef DEBUG
char *buffer[BUFSIZ];
XGetErrorText(dpy, event->error_code, buffer, BUFSIZ);
! (void) fprintf(stderr, "Hey!\n");
! (void) fprintf(stderr, "X Error: %s\n", buffer);
! (void) fprintf(stderr, " Request Major code: %d\n", event->request_code);
! (void) fprintf(stderr, " Request Minor code: %d\n", event->minor_code);
! (void) fprintf(stderr, " ResourceId 0x%x\n", event->resourceid);
! (void) fprintf(stderr, " Error Serial #%d\n", event->serial);
! (void) fprintf(stderr, " Current Serial #%d\n", dpy->request);
#endif
errorStatus = True;
return 0;
--- 50,62 ----
#ifdef DEBUG
char *buffer[BUFSIZ];
XGetErrorText(dpy, event->error_code, buffer, BUFSIZ);
! (void) debug("Hey!\n");
! (void) debug("X Error: %s\n", buffer);
! (void) debug(" Request Major code: %d\n", event->request_code);
! (void) debug(" Request Minor code: %d\n", event->minor_code);
! (void) debug(" ResourceId 0x%x\n", event->resourceid);
! (void) debug(" Error Serial #%d\n", event->serial);
! (void) debug(" Current Serial #%d\n", dpy->request);
#endif
errorStatus = True;
return 0;
diff -c awm.dst/globals.c awm/globals.c
*** awm.dst/globals.c Sat Jul 2 16:57:49 1988
--- awm/globals.c Sun Jul 24 17:23:12 1988
***************
*** 3,9 ****
#ifndef lint
! static char *rcsid_globals_c = "$Header: globals.c,v 1.2 88/07/02 01:26:00 jkh Exp $";
#endif lint
#include "X11/copyright.h"
--- 3,9 ----
#ifndef lint
! static char *rcsid_globals_c = "$Header: globals.c,v 1.3 88/07/23 17:26:00 jkh Exp $";
#endif lint
#include "X11/copyright.h"
***************
*** 79,98 ****
Pixel ForeColor; /* Generic foreground color */
Pixel BackColor; /* Generic background color */
Pixel IBorder; /* Icon window border color. */
- Pixel PBorder; /* Pop-Up Window border color. */
- Pixel WBorder; /* Window border color */
- Pixel BBackground; /* Border context background color */
- Pixel BForeground; /* Border context foreground color */
Pixel PBackground; /* Pop-up Window background color. */
Pixel PForeground; /* Pop-up Window foregrould color */
! Pixel TBackground; /* Titlebar background color */
! Pixel TForeground; /* Titlebar foreground color */
! Pixel TTextBackground; /* Titlebar text background color */
! Pixel TTextForeground; /* Titlebar text foreground color */
Pixel IBackground; /* Icon background (for pixmap) color */
Pixel IForeground; /* Icon foreground (for pixmap) color */
Pixel ITextForeground; /* Icon text foreground color */
Pixel ITextBackground; /* Icon text background color */
Cursor ArrowCrossCursor; /* Arrow cross cursor. */
Cursor TextCursor; /* Text cursor used in icon windows. */
Cursor IconCursor; /* Icon Cursor. */
--- 79,100 ----
Pixel ForeColor; /* Generic foreground color */
Pixel BackColor; /* Generic background color */
Pixel IBorder; /* Icon window border color. */
Pixel PBackground; /* Pop-up Window background color. */
Pixel PForeground; /* Pop-up Window foregrould color */
! Pixel PBorder; /* Pop-Up Window border color. */
Pixel IBackground; /* Icon background (for pixmap) color */
Pixel IForeground; /* Icon foreground (for pixmap) color */
Pixel ITextForeground; /* Icon text foreground color */
Pixel ITextBackground; /* Icon text background color */
+ char *Foreground; /* foreground color (text) */
+ char *Background; /* background color (text) */
+ char *WBorder; /* Window border color */
+ char *BBackground; /* Border context background color */
+ char *BForeground; /* Border context foreground color */
+ char *TBackground; /* Titlebar background color */
+ char *TForeground; /* Titlebar foreground color */
+ char *TTextBackground; /* Titlebar text background color */
+ char *TTextForeground; /* Titlebar text foreground color */
Cursor ArrowCrossCursor; /* Arrow cross cursor. */
Cursor TextCursor; /* Text cursor used in icon windows. */
Cursor IconCursor; /* Icon Cursor. */
***************
*** 118,124 ****
int Delta; /* Mouse movement slop. */
int HIconPad; /* Icon horizontal padding. */
int VIconPad; /* Icon vertical padding. */
- int MaxColors; /* Maximum number of colors to use. */
int Pushval; /* Number of pixels to push window by. */
int BContext; /* Border context area width (in pixels) */
int RaiseDelay; /* Number of milliseconds delay before autoraise */
--- 120,125 ----
***************
*** 139,144 ****
--- 140,146 ----
Boolean Autoselect; /* Warp mouse to default menu selection? */
Boolean Autoraise; /* Raise window on input focus? */
+ Boolean Borders; /* Display border context areas? */
Boolean ConstrainResize; /* Don't resize until pointer leaves window */
Boolean Freeze; /* Freeze server during move/resize? */
Boolean Grid; /* Should the m/r box contain a 9 seg. grid. */
***************
*** 145,150 ****
--- 147,153 ----
Boolean ShowName; /* If True, print window names in titlebars */
Boolean Hilite; /* Should we highlight titles on focus? */
Boolean BorderHilite; /* Should we highlight borders on focus? */
+ Boolean InstallColormap; /* Should we install colormaps for clients? */
Boolean NWindow; /* Normalize windows? */
Boolean NIcon; /* Normalize icons? */
Boolean Push; /* Relative=TRUE, Absolute=FALSE. */
diff -c awm.dst/gram.y awm/gram.y
*** awm.dst/gram.y Sat Jul 2 16:57:50 1988
--- awm/gram.y Sun Jul 24 17:29:24 1988
***************
*** 59,65 ****
#ifndef lint
! static char *rcsid_gram_y = "$Header: gram.y,v 1.2 88/06/17 15:01:04 jkh Exp $";
#endif lint
#include "X11/Xlib.h"
--- 59,65 ----
#ifndef lint
! static char *rcsid_gram_y = "$Header: gram.y,v 1.3 88/07/23 18:01:04 jkh Exp $";
#endif lint
#include "X11/Xlib.h"
***************
*** 81,88 ****
static int gadgnum; /* # of gadget we're initing */
static int g_offset; /* The gadget offset specified */
static int g_gravity; /* The gadget gravity specified */
! static long g_forecolor; /* gadget foreground color */
! static long g_backcolor; /* gadget background color */
static XFontStruct *g_font; /* gadget font */
static int bkmask; /* Button/key mask. */
static int cmask; /* Context mask. */
--- 81,88 ----
static int gadgnum; /* # of gadget we're initing */
static int g_offset; /* The gadget offset specified */
static int g_gravity; /* The gadget gravity specified */
! static char *g_forecolor; /* gadget foreground color */
! static char *g_backcolor; /* gadget background color */
static XFontStruct *g_font; /* gadget font */
static int bkmask; /* Button/key mask. */
static int cmask; /* Context mask. */
***************
*** 275,282 ****
{
$$ = C_STRING;
/* just in case it's a gadget, set defaults */
! g_forecolor = ForeColor;
! g_backcolor = BackColor;
g_gravity = NoGadgetGravity;
g_offset = 0;
g_font = 0;
--- 275,282 ----
{
$$ = C_STRING;
/* just in case it's a gadget, set defaults */
! g_forecolor = Foreground;
! g_backcolor = Background;
g_gravity = NoGadgetGravity;
g_offset = 0;
g_font = 0;
***************
*** 285,292 ****
{
$$ = C_PIXMAP;
/* just in case it's a gadget, set defaults */
! g_forecolor = ForeColor;
! g_backcolor = BackColor;
g_gravity = NoGadgetGravity;
g_offset = 0;
g_font = 0;
--- 285,292 ----
{
$$ = C_PIXMAP;
/* just in case it's a gadget, set defaults */
! g_forecolor = Foreground;
! g_backcolor = Background;
g_gravity = NoGadgetGravity;
g_offset = 0;
g_font = 0;
***************
*** 304,311 ****
{
g_offset = y_atoi($1);
g_gravity = NoGadgetGravity;
! g_forecolor = ForeColor;
! g_backcolor = BackColor;
g_font = (XFontStruct *)NULL;
}
;
--- 304,311 ----
{
g_offset = y_atoi($1);
g_gravity = NoGadgetGravity;
! g_forecolor = Foreground;
! g_backcolor = Background;
g_font = (XFontStruct *)NULL;
}
;
***************
*** 314,338 ****
| STRING
{
g_gravity = gravitylookup($1);
! g_forecolor = ForeColor;
! g_backcolor = BackColor;
g_font = (XFontStruct *)NULL;
}
;
forecolor: /* empty */
! { g_forecolor = ForeColor; }
| STRING
{
! g_forecolor = LookupColor($1);
! g_backcolor = BackColor;
g_font = (XFontStruct *)NULL;
}
;
backcolor: /* empty */
! { g_backcolor = BackColor; }
| STRING
{
! g_backcolor = LookupColor($1);
g_font = (XFontStruct *)NULL;
}
;
--- 314,338 ----
| STRING
{
g_gravity = gravitylookup($1);
! g_forecolor = Foreground;
! g_backcolor = Background;
g_font = (XFontStruct *)NULL;
}
;
forecolor: /* empty */
! { g_forecolor = Foreground; }
| STRING
{
! g_forecolor = $1;
! g_backcolor = Background;
g_font = (XFontStruct *)NULL;
}
;
backcolor: /* empty */
! { g_backcolor = Background; }
| STRING
{
! g_backcolor = $1;
g_font = (XFontStruct *)NULL;
}
;
***************
*** 538,564 ****
/*
* Look up color named by "string" and return pixel value.
*/
! Pixel LookupColor(string)
char *string;
{
XColor vis_ret, act_ret;
- static int ncolors = 0;
! Entry("LookupColor");
! if (MaxColors && ncolors >= MaxColors) {
! sprintf(msg, "Can't allocate color '%s', MaxColors (%d) exceeded\n",
! string, MaxColors);
! yywarn(msg);
! Leave(NOCOLOR)
! }
! if (!XAllocNamedColor(dpy, DefaultColormap(dpy, scr), string,
! &vis_ret, &act_ret)) {
sprintf(msg, "Can't allocate color '%s', using default\n", string);
yywarn(msg);
! Leave(NOCOLOR)
}
! ncolors++;
Leave(vis_ret.pixel)
}
--- 538,578 ----
/*
* Look up color named by "string" and return pixel value.
*/
! Pixel LookupColor(string, cmap, fail)
char *string;
+ Colormap cmap;
+ Boolean *fail;
{
XColor vis_ret, act_ret;
! Entry("LookupColor")
! if (!XAllocNamedColor(dpy, cmap, string, &vis_ret, &act_ret)) {
sprintf(msg, "Can't allocate color '%s', using default\n", string);
yywarn(msg);
! if (fail)
! *fail = TRUE;
! Leave((Pixel)0)
}
! if (fail)
! *fail = FALSE;
! Leave(vis_ret.pixel)
! }
!
! /*
! * Like LookupColor, but provides its own fallback in case of failure
! * (currently 0).
! */
! Pixel GetPixel(string, cmap)
! char *string;
! Colormap cmap;
! {
! XColor vis_ret, act_ret;
!
! Entry("GetPixel")
!
! if (!XAllocNamedColor(dpy, cmap, string, &vis_ret, &act_ret))
! Leave((Pixel)0)
Leave(vis_ret.pixel)
}
diff -c awm.dst/support.h awm/support.h
*** awm.dst/support.h Sat Jul 2 16:57:58 1988
--- awm/support.h Sun Jul 24 17:33:01 1988
***************
*** 1,7 ****
#ident "%W% %G%"
#ifndef lint
! static char *rcsid_support_h = "$Header: support.h,v 1.1 88/06/15 15:26:00 jkh Exp $";
#endif lint
#include "X11/copyright.h"
--- 1,7 ----
#ident "%W% %G%"
#ifndef lint
! static char *rcsid_support_h = "$Header: support.h,v 1.2 88/07/23 17:26:00 jkh Exp $";
#endif lint
#include "X11/copyright.h"
***************
*** 25,35 ****
*
*/
#undef TRACE
#ifdef TRACE
! #define Entry(s) push_rtn(s);
! #define Leave(s) { pop_rtn(); return(s); }
#define Leave_void { pop_rtn(); return; }
#define Trace_on _rtn_trace = 1;
#define Trace_off _rtn_trace = 0;
--- 25,46 ----
*
*/
+ #undef STACK_RTNAMES
#undef TRACE
#ifdef TRACE
! #define Entry(woo) { printf("Pushing to %s\n", woo); push_rtn(woo); }
! #define Leave(woo) { printf("Pop from %s with %x\n", curr_rtn(), woo); pop_rtn(); return(woo); }
! #define Leave_void { printf("Pop from %s (void)\n", curr_rtn()); pop_rtn(); return; }
! #define Trace_on _rtn_trace = 1;
! #define Trace_off _rtn_trace = 0;
! extern char *curr_rtn();
! extern int _rtn_level;
! extern int _rtn_trace;
! #else
! #ifdef SAVERTNAME
! #define Entry(woo) push_rtn(woo);
! #define Leave(woo) { pop_rtn(); return(woo); }
#define Leave_void { pop_rtn(); return; }
#define Trace_on _rtn_trace = 1;
#define Trace_off _rtn_trace = 0;
***************
*** 43,46 ****
#define Trace_on
#define Trace_off
#define Curr_rtn()
! #endif
--- 54,58 ----
#define Trace_on
#define Trace_off
#define Curr_rtn()
! #endif /* SAVERTNAME */
! #endif /* TRACE */