summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraidan <torrinfail@gmail.com>2020-09-05 15:48:54 -0600
committeraidan <torrinfail@gmail.com>2020-09-05 15:48:54 -0600
commitb7d1970488248984a822cb29ca4cfe736e92a633 (patch)
tree503dc4d5ede73e38f3f500d0010582487eac18f2
parent13c7700f34b74c4cf91dfb261c61ca1ca1eac6c3 (diff)
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.
-rw-r--r--dwmblocks.c34
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;
}