diff options
-rw-r--r-- | xbattext.c | 68 |
1 files changed, 57 insertions, 11 deletions
@@ -9,7 +9,15 @@ * LDFLAGS += -Wl,-R/usr/X11R7/lib -Wl,-R/usr/pkg/lib * * It requires x11/motif to be installed. - * The fontList resource controls the font used. + * + * The program uses the following resources: + * + * xbattext*fontList = normal font + * xbattext*foreground = normal text color + * xbattext*alertFontList = font when battery is low + * xbattext*alertForeground = text color when battery is low + * + * Set their values in ~/.Xdefaults to customize xbattext. * * xbattext is written by John Ankarstr\xf6m <john@ankarstrom.se> and * is released into the public domain; do whatever you want with it. @@ -36,12 +44,31 @@ void update(XtPointer, XtIntervalId *); +/* resources */ +struct _res { + XmFontList font_list; + XmFontList alert_font_list; + Pixel foreground; + Pixel alert_foreground; +} res; +static XtResource res_opts[] = { + {"fontList", "FontList", XmRFontList, sizeof(XmFontList), + XtOffset(struct _res*, font_list), XtRImmediate, (caddr_t)NULL}, + {"foreground", "foreground", XmRPixel, sizeof(Pixel), + XtOffset(struct _res*, foreground), XtRImmediate, (caddr_t)NULL}, + {"alertFontList", "AlertFontList", XmRFontList, sizeof(XmFontList), + XtOffset(struct _res*, alert_font_list), XtRImmediate, (caddr_t)NULL}, + {"alertForeground", "AlertForeground", XmRPixel, sizeof(Pixel), + XtOffset(struct _res*, alert_foreground), XtRImmediate, (caddr_t)NULL}, +}; + /* application state */ Arg wargs[10]; char *s; int apmfd, alert; struct apm_power_info info; Widget toplevel, label; +XmFontList font_list; XmString str; XtAppContext app_context; XtIntervalId timer = 0; @@ -65,6 +92,10 @@ main(int argc, char* argv[]) XtSetLanguageProc(NULL, NULL, NULL); + /* load application resources */ + XtGetApplicationResources(toplevel, + &res, res_opts, XtNumber(res_opts), NULL, 0); + /* create motif label */ label = XtVaCreateManagedWidget("text", xmLabelWidgetClass, toplevel, @@ -81,6 +112,8 @@ main(int argc, char* argv[]) void update(XtPointer client_data, XtIntervalId *t) { + int i; + /* remove current timer */ if (t == NULL && timer) { XtRemoveTimeOut(timer); @@ -99,20 +132,33 @@ update(XtPointer client_data, XtIntervalId *t) sprintf(s, "%d%%", info.battery_life); str = XmStringCreate(s, XmFONTLIST_DEFAULT_TAG); + i = 0; #ifdef ALERT if (!alert && info.battery_life < ALERT) { - XtVaSetValues(label, - XmNlabelString, str, - XtVaTypedArg, XtNforeground, XtRString, "red", 4, - NULL); alert = 1; + XtSetArg(wargs[i], XmNlabelString, str); i++; + if (res.alert_foreground != -1) { + XtSetArg(wargs[i], XtNforeground, res.alert_foreground); + i++; + } + if (res.alert_font_list != NULL) { + XtSetArg(wargs[i], XmNfontList, res.alert_font_list); + i++; + } + XtSetValues(label, wargs, i); } - else if (alert && info.battery_life > ALERT) { - XtVaSetValues(label, - XmNlabelString, str, - XtVaTypedArg, XtNforeground, XtRString, "black", 6, - NULL); - alert = 0; + else if (alert && info.battery_life >= ALERT) { + alert = 1; + XtSetArg(wargs[i], XmNlabelString, str); i++; + if (res.foreground != -1) { + XtSetArg(wargs[i], XtNforeground, res.foreground); + i++; + } + if (res.font_list != NULL) { + XtSetArg(wargs[i], XmNfontList, res.font_list); + i++; + } + XtSetValues(label, wargs, i); } else #endif |