diff options
-rw-r--r-- | dwmblocks.c | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/dwmblocks.c b/dwmblocks.c index c66dbc7..ef25785 100644 --- a/dwmblocks.c +++ b/dwmblocks.c @@ -3,7 +3,9 @@ #include<string.h> #include<unistd.h> #include<signal.h> +#ifndef NO_X #include<X11/Xlib.h> +#endif #ifdef __OpenBSD__ #define SIGPLUS SIGUSR1+1 #define SIGMINUS SIGUSR1-1 @@ -31,20 +33,23 @@ void getsigcmds(unsigned int signal); void setupsignals(); void sighandler(int signum); int getstatus(char *str, char *last); -void setroot(); void statusloop(); void termhandler(); +void pstdout(); +#ifndef NO_X +void setroot(); +static void (*writestatus) () = setroot; +#else +static void (*writestatus) () = pstdout; +#endif #include "blocks.h" -static Display *dpy; -static int screen; -static Window root; static char statusbar[LENGTH(blocks)][CMDLENGTH] = {0}; static char statusstr[2][STATUSLENGTH]; static int statusContinue = 1; -static void (*writestatus) () = setroot; +static int returnStatus = 0; //opens process *cmd and stores output in *output void getcmd(const Block *block, char *output) @@ -116,19 +121,27 @@ int getstatus(char *str, char *last) return strcmp(str, last);//0 if they are the same } +#ifndef NO_X void setroot() { + static Display *dpy; + static int screen; + static Window root; if (!getstatus(statusstr[0], statusstr[1]))//Only set root if text has changed. return; - Display *d = XOpenDisplay(NULL); - if (d) { - dpy = d; + dpy = XOpenDisplay(NULL); + if (!dpy) { + fprintf(stderr, "Failed to open display\n"); + statusContinue = 0; + returnStatus = 1; + return; } screen = DefaultScreen(dpy); root = RootWindow(dpy, screen); XStoreName(dpy, root, statusstr[0]); XCloseDisplay(dpy); } +#endif void pstdout() { @@ -144,10 +157,12 @@ void statusloop() setupsignals(); int i = 0; getcmds(-1); - while (statusContinue) + while (1) { getcmds(i++); writestatus(); + if (!statusContinue) + break; sleep(1.0); } } @@ -185,4 +200,5 @@ int main(int argc, char** argv) signal(SIGTERM, termhandler); signal(SIGINT, termhandler); statusloop(); + return returnStatus; } |