dwmblocks

My build of dwmblocks.
git clone git://git.alex.balgavy.eu/dwmblocks.git
Log | Files | Refs | README | LICENSE

commit b7d1970488248984a822cb29ca4cfe736e92a633
parent 13c7700f34b74c4cf91dfb261c61ca1ca1eac6c3
Author: aidan <torrinfail@gmail.com>
Date:   Sat,  5 Sep 2020 15:48:54 -0600

Consolidated X11 based code into the setroot function
This is to make it easier to build dwmblocks without xlib so you can
use it on wayland or other x wms.

Diffstat:
Mdwmblocks.c | 34+++++++++++++++++++++++++---------
1 file changed, 25 insertions(+), 9 deletions(-)

diff --git 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; }