removed (visual) bell. '\a' sets the urgency flag if st is unfocused.
This commit is contained in:
		
							parent
							
								
									ad2fdab6b6
								
							
						
					
					
						commit
						ecca0580cb
					
				
							
								
								
									
										2
									
								
								config.h
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								config.h
									
									
									
									
									
								
							| @ -29,8 +29,6 @@ static const char *colorname[] = { | |||||||
| #define DefaultFG 7 | #define DefaultFG 7 | ||||||
| #define DefaultBG 0 | #define DefaultBG 0 | ||||||
| #define DefaultCS 1 | #define DefaultCS 1 | ||||||
| #define BellCol   DefaultFG |  | ||||||
| #define BellTime  30000 /* microseconds */ |  | ||||||
| 
 | 
 | ||||||
| /* special keys */ | /* special keys */ | ||||||
| static Key key[] = { | static Key key[] = { | ||||||
|  | |||||||
							
								
								
									
										42
									
								
								st.c
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								st.c
									
									
									
									
									
								
							| @ -108,6 +108,7 @@ typedef struct { | |||||||
| 	int bufh; /* pixmap height */ | 	int bufh; /* pixmap height */ | ||||||
| 	int ch; /* char height */ | 	int ch; /* char height */ | ||||||
| 	int cw; /* char width  */ | 	int cw; /* char width  */ | ||||||
|  | 	int hasfocus; | ||||||
| } XWindow;  | } XWindow;  | ||||||
| 
 | 
 | ||||||
| typedef struct { | typedef struct { | ||||||
| @ -161,23 +162,27 @@ static void ttyread(void); | |||||||
| static void ttyresize(int, int); | static void ttyresize(int, int); | ||||||
| static void ttywrite(const char *, size_t); | static void ttywrite(const char *, size_t); | ||||||
| 
 | 
 | ||||||
| static void xbell(void); |  | ||||||
| static void xdraws(char *, Glyph, int, int, int); | static void xdraws(char *, Glyph, int, int, int); | ||||||
| static void xhints(void); | static void xhints(void); | ||||||
| static void xclear(int, int, int, int); | static void xclear(int, int, int, int); | ||||||
| static void xdrawcursor(void); | static void xdrawcursor(void); | ||||||
| static void xinit(void); | static void xinit(void); | ||||||
| static void xloadcols(void); | static void xloadcols(void); | ||||||
|  | static void xseturgency(int); | ||||||
| 
 | 
 | ||||||
| static void expose(XEvent *); | static void expose(XEvent *); | ||||||
| static char* kmap(KeySym); | static char* kmap(KeySym); | ||||||
| static void kpress(XEvent *); | static void kpress(XEvent *); | ||||||
| static void resize(XEvent *); | static void resize(XEvent *); | ||||||
|  | static void focus(XEvent *); | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| static void (*handler[LASTEvent])(XEvent *) = { | static void (*handler[LASTEvent])(XEvent *) = { | ||||||
| 	[KeyPress] = kpress, | 	[KeyPress] = kpress, | ||||||
| 	[Expose] = expose, | 	[Expose] = expose, | ||||||
| 	[ConfigureNotify] = resize | 	[ConfigureNotify] = resize, | ||||||
|  | 	[FocusIn] = focus, | ||||||
|  | 	[FocusOut] = focus, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /* Globals */ | /* Globals */ | ||||||
| @ -187,7 +192,6 @@ static Term term; | |||||||
| static CSIEscape escseq; | static CSIEscape escseq; | ||||||
| static int cmdfd; | static int cmdfd; | ||||||
| static pid_t pid; | static pid_t pid; | ||||||
| static int running; |  | ||||||
| 
 | 
 | ||||||
| #ifdef DEBUG | #ifdef DEBUG | ||||||
| void | void | ||||||
| @ -227,15 +231,6 @@ execsh(void) { | |||||||
| 	execvp(args[0], args); | 	execvp(args[0], args); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void |  | ||||||
| xbell(void) { |  | ||||||
| 	XSetForeground(xw.dis, dc.gc, dc.col[BellCol]); |  | ||||||
| 	XFillRectangle(xw.dis, xw.win, dc.gc, BORDER, BORDER, xw.bufw, xw.bufh); |  | ||||||
| 	XFlush(xw.dis); |  | ||||||
| 	usleep(BellTime); |  | ||||||
| 	draw(SCREEN_REDRAW); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void  | void  | ||||||
| sigchld(int a) { | sigchld(int a) { | ||||||
| 	int stat = 0; | 	int stat = 0; | ||||||
| @ -930,7 +925,8 @@ tputc(char c) { | |||||||
| 			tnewline(); | 			tnewline(); | ||||||
| 			break; | 			break; | ||||||
| 		case '\a': | 		case '\a': | ||||||
| 			xbell(); | 			if(!xw.hasfocus) | ||||||
|  | 				xseturgency(1); | ||||||
| 			break; | 			break; | ||||||
| 		case '\033': | 		case '\033': | ||||||
| 			csireset(); | 			csireset(); | ||||||
| @ -1208,6 +1204,20 @@ expose(XEvent *ev) { | |||||||
| 	draw(SCREEN_REDRAW); | 	draw(SCREEN_REDRAW); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void | ||||||
|  | xseturgency(int add) { | ||||||
|  | 	XWMHints *h = XGetWMHints(xw.dis, xw.win); | ||||||
|  | 	h->flags = add ? (h->flags | XUrgencyHint) : (h->flags & ~XUrgencyHint); | ||||||
|  | 	XSetWMHints(xw.dis, xw.win, h); | ||||||
|  | 	XFree(h); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void | ||||||
|  | focus(XEvent *ev) { | ||||||
|  | 	if((xw.hasfocus = ev->type == FocusIn)) | ||||||
|  | 		xseturgency(0); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| char* | char* | ||||||
| kmap(KeySym k) { | kmap(KeySym k) { | ||||||
| 	int i; | 	int i; | ||||||
| @ -1282,12 +1292,12 @@ run(void) { | |||||||
| 	XEvent ev; | 	XEvent ev; | ||||||
| 	fd_set rfd; | 	fd_set rfd; | ||||||
| 	int xfd = XConnectionNumber(xw.dis); | 	int xfd = XConnectionNumber(xw.dis); | ||||||
|  | 	long mask = ExposureMask | KeyPressMask | StructureNotifyMask | FocusChangeMask; | ||||||
| 
 | 
 | ||||||
| 	running = 1; | 	XSelectInput(xw.dis, xw.win, mask); | ||||||
| 	XSelectInput(xw.dis, xw.win, ExposureMask | KeyPressMask | StructureNotifyMask); |  | ||||||
| 	XResizeWindow(xw.dis, xw.win, xw.w, xw.h); /* XXX: fix resize bug in wmii (?) */ | 	XResizeWindow(xw.dis, xw.win, xw.w, xw.h); /* XXX: fix resize bug in wmii (?) */ | ||||||
| 
 | 
 | ||||||
| 	while(running) { | 	while(1) { | ||||||
| 		FD_ZERO(&rfd); | 		FD_ZERO(&rfd); | ||||||
| 		FD_SET(cmdfd, &rfd); | 		FD_SET(cmdfd, &rfd); | ||||||
| 		FD_SET(xfd, &rfd); | 		FD_SET(xfd, &rfd); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user