[hackers] [st] removed (visual) bell. '\a' sets the urgency flag if st is unfocused. || Aurélien Aptel

From: <hg_AT_suckless.org>
Date: Sun, 29 Aug 2010 23:12:16 +0000 (UTC)

changeset: 108:c03d03ba058c
user: Aurélien Aptel <aurelien.aptel_AT_gmail.com>
date: Mon Aug 30 03:05:05 2010 +0200
files: config.h st.c
description:
removed (visual) bell. '\a' sets the urgency flag if st is unfocused.

diff -r 8d03b7d6c29f -r c03d03ba058c config.h
--- a/config.h Mon Aug 30 01:45:57 2010 +0200
+++ b/config.h Mon Aug 30 03:05:05 2010 +0200
@@ -29,8 +29,6 @@
 #define DefaultFG 7
 #define DefaultBG 0
 #define DefaultCS 1
-#define BellCol DefaultFG
-#define BellTime 30000 /* microseconds */
 
 /* special keys */
 static Key key[] = {
diff -r 8d03b7d6c29f -r c03d03ba058c st.c
--- a/st.c Mon Aug 30 01:45:57 2010 +0200
+++ b/st.c Mon Aug 30 03:05:05 2010 +0200
@@ -108,6 +108,7 @@
         int bufh; /* pixmap height */
         int ch; /* char height */
         int cw; /* char width */
+ int hasfocus;
 } XWindow;
 
 typedef struct {
@@ -161,23 +162,27 @@
 static void ttyresize(int, int);
 static void ttywrite(const char *, size_t);
 
-static void xbell(void);
 static void xdraws(char *, Glyph, int, int, int);
 static void xhints(void);
 static void xclear(int, int, int, int);
 static void xdrawcursor(void);
 static void xinit(void);
 static void xloadcols(void);
+static void xseturgency(int);
 
 static void expose(XEvent *);
 static char* kmap(KeySym);
 static void kpress(XEvent *);
 static void resize(XEvent *);
+static void focus(XEvent *);
+
 
 static void (*handler[LASTEvent])(XEvent *) = {
         [KeyPress] = kpress,
         [Expose] = expose,
- [ConfigureNotify] = resize
+ [ConfigureNotify] = resize,
+ [FocusIn] = focus,
+ [FocusOut] = focus,
 };
 
 /* Globals */
@@ -187,7 +192,6 @@
 static CSIEscape escseq;
 static int cmdfd;
 static pid_t pid;
-static int running;
 
 #ifdef DEBUG
 void
@@ -227,15 +231,6 @@
         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
 sigchld(int a) {
         int stat = 0;
@@ -930,7 +925,8 @@
                         tnewline();
                         break;
                 case '\a':
- xbell();
+ if(!xw.hasfocus)
+ xseturgency(1);
                         break;
                 case '\033':
                         csireset();
@@ -1208,6 +1204,20 @@
         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*
 kmap(KeySym k) {
         int i;
@@ -1282,12 +1292,12 @@
         XEvent ev;
         fd_set rfd;
         int xfd = XConnectionNumber(xw.dis);
+ long mask = ExposureMask | KeyPressMask | StructureNotifyMask | FocusChangeMask;
 
- running = 1;
- XSelectInput(xw.dis, xw.win, ExposureMask | KeyPressMask | StructureNotifyMask);
+ XSelectInput(xw.dis, xw.win, mask);
         XResizeWindow(xw.dis, xw.win, xw.w, xw.h); /* XXX: fix resize bug in wmii (?) */
 
- while(running) {
+ while(1) {
                 FD_ZERO(&rfd);
                 FD_SET(cmdfd, &rfd);
                 FD_SET(xfd, &rfd);
Received on Mon Aug 30 2010 - 01:12:16 CEST

This archive was generated by hypermail 2.2.0 : Mon Aug 30 2010 - 01:24:06 CEST