chiark / gitweb /
improved event and display
authorianmdlvl <ianmdlvl>
Sun, 12 Dec 2004 01:43:58 +0000 (01:43 +0000)
committerianmdlvl <ianmdlvl>
Sun, 12 Dec 2004 01:43:58 +0000 (01:43 +0000)
cprogs/xacpi-simple.c

index 50b7965..4dd74a7 100644 (file)
@@ -10,7 +10,7 @@
  *     green   |  red          |  dimgrey      charging - low
  *     cyan    |  red          |  dimgrey      charged - low [1]
  *     grey    |  red          |  dimgrey      charging&discharching, low [1]
- *       ...  darkmagenta  ...                 no batteries present
+ *       ...  darkgreen  ...                   no batteries present
  *
  * [1] battery must be quite badly degraded
  */
@@ -71,14 +71,15 @@ typedef struct batinfo_field {
   QUANTITY_FIELDS
 #undef QF
 
-static unsigned long thisbat_info_present, thisbat_state_present;
-static unsigned long thisbat_state_charging_state;
+static unsigned long thisbat_alarm_present, thisbat_info_present;
+static unsigned long thisbat_state_present, thisbat_state_charging_state;
 
 #define VAL_NOTFOUND (~0UL)
 
 static const batinfo_field fields[]= {
 #define E(f,l)       #f, #l, &thisbat_##f##_##l, 0
 #define QF(f,l,u)  { #f, #l, &thisbat_##f##_##l, u },
+  { E(alarm, present),           { "no", "yes" }                          },
   { E(info, present),            { "no", "yes" }                          },
   { E(state,present),            { "no", "yes" }                          },
   { E(state,charging_state),     { "discharging", "charging", "charged" } },
@@ -204,16 +205,23 @@ static int readbattery(void) { /* 0=>ok, -1=>couldn't */
   if (r) return batfaile("chdir","..");
   batdirname= 0;
 
-  for (field=fields, missing=0;
-       field->file;
-       field++) {
-    if (*field->valuep == VAL_NOTFOUND) {
-      fprintf(stderr,"battery/%s/%s: %s: not found\n",
-             batdirname, field->file,field->label);
-      missing++;
+  if (!(thisbat_alarm_present==0 ||
+       thisbat_info_present==0 ||
+       thisbat_state_present==0)) {
+    if (thisbat_alarm_present == VAL_NOTFOUND)
+      thisbat_alarm_present= 1;
+    
+    for (field=fields, missing=0;
+        field->file;
+        field++) {
+      if (*field->valuep == VAL_NOTFOUND) {
+       fprintf(stderr,"battery/%s/%s: %s: not found\n",
+               batdirname, field->file,field->label);
+       missing++;
+      }
     }
+    if (missing) return -1;
   }
-  if (missing) return -1;
 
   return 0;
 }   
@@ -252,10 +260,8 @@ static void acquiredata(void) {
 
     if (r) continue;
 
-    if (!thisbat_info_present || !thisbat_state_present) {
-      printf("battery/%s not present\n",de->d_name);
+    if (!thisbat_info_present || !thisbat_state_present)
       continue;
-    }
 
     charging_state_mask |= 1u << thisbat_state_charging_state;
 
@@ -303,7 +309,7 @@ static void initacquire(void) {
   C(green)                                     \
   C(cyan)                                      \
   C(grey)                                      \
-  C(darkmagenta)                               \
+  C(darkgreen)                                 \
   C(white)                                     \
   GC(remain)                                   \
   GC(white)                                    \
@@ -341,7 +347,7 @@ static void setbackground(unsigned long newbg) {
   
   if (newbg == lastbackground) return;
   r= XSetWindowBackground(disp,win,newbg);
-  if (r) failr("XSetWindowBackground",r);
+  if (!r) fail("XSetWindowBackground");
   lastbackground= newbg;
 }
 
@@ -362,7 +368,7 @@ static void show(void) {
   int i, leftmost_lit, leftmost_nondeg, beyond, first_beyond;
 
   if (!charging_state_mask) {
-    setbackground(pix_darkmagenta);
+    setbackground(pix_darkgreen);
     XClearWindow(disp,win);
     return;
   }
@@ -472,6 +478,8 @@ static void eventloop(void) {
   refresh();
 
   for (;;) {
+    XFlush(disp);
+
     pfd.fd= ConnectionNumber(disp);
     pfd.events= POLLIN|POLLERR;
 
@@ -486,9 +494,7 @@ static void eventloop(void) {
        height= ce->height;
       }
     }
-    
     refresh();
-    XFlush(disp);
   }
 }