aewl
diff wm.c @ 5:e5018cae273f
added several other stuff
author | Anselm R. Garbe <garbeam@wmii.de> |
---|---|
date | Mon, 10 Jul 2006 22:16:48 +0200 |
parents | e969f3575b7a |
children | e0cefb3981c8 |
line diff
1.1 --- a/wm.c Mon Jul 10 19:47:35 2006 +0200 1.2 +++ b/wm.c Mon Jul 10 22:16:48 2006 +0200 1.3 @@ -15,15 +15,15 @@ 1.4 1.5 /* X structs */ 1.6 Display *dpy; 1.7 -Window root; 1.8 -XRectangle rect; 1.9 -Pixmap pmap; 1.10 -Atom wm_atom[WMLast]; 1.11 -Atom net_atom[NetLast]; 1.12 +Window root, barwin; 1.13 +Atom wm_atom[WMLast], net_atom[NetLast]; 1.14 Cursor cursor[CurLast]; 1.15 +XRectangle rect, barrect; 1.16 +Bool running = True; 1.17 1.18 +char *bartext, *shell; 1.19 int screen, sel_screen; 1.20 -unsigned int kmask, numlock_mask; 1.21 +unsigned int lock_mask, numlock_mask; 1.22 1.23 /* draw structs */ 1.24 Brush brush = {0}; 1.25 @@ -166,7 +166,7 @@ 1.26 } 1.27 XFreeModifiermap(modmap); 1.28 1.29 - kmask = 255 & ~(numlock_mask | LockMask); 1.30 + lock_mask = 255 & ~(numlock_mask | LockMask); 1.31 } 1.32 1.33 static void 1.34 @@ -187,6 +187,7 @@ 1.35 XSetWindowAttributes wa; 1.36 unsigned int mask; 1.37 Window w; 1.38 + XEvent ev; 1.39 1.40 /* command line args */ 1.41 for(i = 1; (i < argc) && (argv[i][0] == '-'); i++) { 1.42 @@ -218,6 +219,9 @@ 1.43 if(other_wm_running) 1.44 error("gridwm: another window manager is already running\n"); 1.45 1.46 + if(!(shell = getenv("SHELL"))) 1.47 + shell = "/bin/sh"; 1.48 + 1.49 rect.x = rect.y = 0; 1.50 rect.width = DisplayWidth(dpy, screen); 1.51 rect.height = DisplayHeight(dpy, screen); 1.52 @@ -244,18 +248,41 @@ 1.53 1.54 init_lock_keys(); 1.55 1.56 - pmap = XCreatePixmap(dpy, root, rect.width, rect.height, 1.57 + brush.drawable = XCreatePixmap(dpy, root, rect.width, rect.height, 1.58 DefaultDepth(dpy, screen)); 1.59 + brush.gc = XCreateGC(dpy, root, 0, 0); 1.60 + 1.61 + /* style */ 1.62 + loadcolors(dpy, screen, &brush, BGCOLOR, FGCOLOR, BORDERCOLOR); 1.63 + loadfont(dpy, &brush.font, FONT); 1.64 + 1.65 + wa.override_redirect = 1; 1.66 + wa.background_pixmap = ParentRelative; 1.67 + wa.event_mask = ExposureMask; 1.68 + 1.69 + barrect = rect; 1.70 + barrect.height = labelheight(&brush.font); 1.71 + barrect.y = rect.height - barrect.height; 1.72 + barwin = XCreateWindow(dpy, root, barrect.x, barrect.y, 1.73 + barrect.width, barrect.height, 0, DefaultDepth(dpy, screen), 1.74 + CopyFromParent, DefaultVisual(dpy, screen), 1.75 + CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa); 1.76 + bartext = 0; 1.77 + XDefineCursor(dpy, barwin, cursor[CurNormal]); 1.78 + XMapRaised(dpy, barwin); 1.79 + draw_bar(); 1.80 1.81 wa.event_mask = SubstructureRedirectMask | EnterWindowMask | LeaveWindowMask; 1.82 wa.cursor = cursor[CurNormal]; 1.83 XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa); 1.84 1.85 - /* style */ 1.86 - loadcolors(dpy, screen, &brush, BGCOLOR, FGCOLOR, BORDERCOLOR); 1.87 - loadfont(dpy, &brush.font, FONT); 1.88 + scan_wins(); 1.89 1.90 - scan_wins(); 1.91 + while(running) { 1.92 + XNextEvent(dpy, &ev); 1.93 + if(handler[ev.type]) 1.94 + (handler[ev.type]) (&ev); /* call handler */ 1.95 + } 1.96 1.97 cleanup(); 1.98 XCloseDisplay(dpy);