|
|
|
@ -39,6 +39,10 @@ void pstdout();
|
|
|
|
|
#ifndef NO_X
|
|
|
|
|
void setroot();
|
|
|
|
|
static void (*writestatus) () = setroot;
|
|
|
|
|
static int setupX();
|
|
|
|
|
static Display *dpy;
|
|
|
|
|
static int screen;
|
|
|
|
|
static Window root;
|
|
|
|
|
#else
|
|
|
|
|
static void (*writestatus) () = pstdout;
|
|
|
|
|
#endif
|
|
|
|
@ -76,8 +80,7 @@ void getcmd(const Block *block, char *output)
|
|
|
|
|
void getcmds(int time)
|
|
|
|
|
{
|
|
|
|
|
const Block* current;
|
|
|
|
|
for (unsigned int i = 0; i < LENGTH(blocks); i++)
|
|
|
|
|
{
|
|
|
|
|
for (unsigned int i = 0; i < LENGTH(blocks); i++) {
|
|
|
|
|
current = blocks + i;
|
|
|
|
|
if ((current->interval != 0 && time % current->interval == 0) || time == -1)
|
|
|
|
|
getcmd(current,statusbar[i]);
|
|
|
|
@ -87,8 +90,7 @@ void getcmds(int time)
|
|
|
|
|
void getsigcmds(unsigned int signal)
|
|
|
|
|
{
|
|
|
|
|
const Block *current;
|
|
|
|
|
for (unsigned int i = 0; i < LENGTH(blocks); i++)
|
|
|
|
|
{
|
|
|
|
|
for (unsigned int i = 0; i < LENGTH(blocks); i++) {
|
|
|
|
|
current = blocks + i;
|
|
|
|
|
if (current->signal == signal)
|
|
|
|
|
getcmd(current,statusbar[i]);
|
|
|
|
@ -103,8 +105,7 @@ void setupsignals()
|
|
|
|
|
signal(i, dummysighandler);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
for (unsigned int i = 0; i < LENGTH(blocks); i++)
|
|
|
|
|
{
|
|
|
|
|
for (unsigned int i = 0; i < LENGTH(blocks); i++) {
|
|
|
|
|
if (blocks[i].signal > 0)
|
|
|
|
|
signal(SIGMINUS+blocks[i].signal, sighandler);
|
|
|
|
|
}
|
|
|
|
@ -124,22 +125,22 @@ int getstatus(char *str, char *last)
|
|
|
|
|
#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;
|
|
|
|
|
XStoreName(dpy, root, statusstr[0]);
|
|
|
|
|
XFlush(dpy);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int setupX()
|
|
|
|
|
{
|
|
|
|
|
dpy = XOpenDisplay(NULL);
|
|
|
|
|
if (!dpy) {
|
|
|
|
|
fprintf(stderr, "Failed to open display\n");
|
|
|
|
|
statusContinue = 0;
|
|
|
|
|
returnStatus = 1;
|
|
|
|
|
return;
|
|
|
|
|
fprintf(stderr, "dwmblocks: Failed to open display\n");
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
screen = DefaultScreen(dpy);
|
|
|
|
|
root = RootWindow(dpy, screen);
|
|
|
|
|
XStoreName(dpy, root, statusstr[0]);
|
|
|
|
|
XCloseDisplay(dpy);
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
@ -157,8 +158,7 @@ void statusloop()
|
|
|
|
|
setupsignals();
|
|
|
|
|
int i = 0;
|
|
|
|
|
getcmds(-1);
|
|
|
|
|
while (1)
|
|
|
|
|
{
|
|
|
|
|
while (1) {
|
|
|
|
|
getcmds(i++);
|
|
|
|
|
writestatus();
|
|
|
|
|
if (!statusContinue)
|
|
|
|
@ -188,17 +188,23 @@ void termhandler()
|
|
|
|
|
|
|
|
|
|
int main(int argc, char** argv)
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < argc; i++) //Handle command line arguments
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < argc; i++) {//Handle command line arguments
|
|
|
|
|
if (!strcmp("-d",argv[i]))
|
|
|
|
|
strncpy(delim, argv[++i], delimLen);
|
|
|
|
|
else if (!strcmp("-p",argv[i]))
|
|
|
|
|
writestatus = pstdout;
|
|
|
|
|
}
|
|
|
|
|
#ifndef NO_X
|
|
|
|
|
if (!setupX())
|
|
|
|
|
return 1;
|
|
|
|
|
#endif
|
|
|
|
|
delimLen = MIN(delimLen, strlen(delim));
|
|
|
|
|
delim[delimLen++] = '\0';
|
|
|
|
|
signal(SIGTERM, termhandler);
|
|
|
|
|
signal(SIGINT, termhandler);
|
|
|
|
|
statusloop();
|
|
|
|
|
return returnStatus;
|
|
|
|
|
#ifndef NO_X
|
|
|
|
|
XCloseDisplay(dpy);
|
|
|
|
|
#endif
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|