Made dwmblocks way more efficient by only setting the name of the root window when something has changed.

This commit is contained in:
Aidan 2019-11-13 13:58:20 -07:00
parent 72dc44f963
commit 5ff59d4e8b
1 changed files with 9 additions and 11 deletions

View File

@ -17,7 +17,7 @@ void replace(char *str, char old, char new);
void getcmds(int time); void getcmds(int time);
void getsigcmds(int signal); void getsigcmds(int signal);
void setupsignals(); void setupsignals();
void getstatus(char *str); int getstatus(char *str, char *last);
void setroot(); void setroot();
void statusloop(); void statusloop();
void statusinit(); void statusinit();
@ -31,12 +31,8 @@ static Display *dpy;
static int screen; static int screen;
static Window root; static Window root;
static char statusbar[LENGTH(blocks)][50] = {0}; static char statusbar[LENGTH(blocks)][50] = {0};
static char statusstr[256]; static char statusstr[2][256];
static char *statuscat; static int statusContinue = 1;
static const char *volupcmd[] = { "volup", NULL };
static const char *voldowncmd[] = { "voldown", NULL };
static const char *volmutecmd[] = { "volmute", NULL };
static int statusContinue = 1,volmuted = 0;
void replace(char *str, char old, char new) void replace(char *str, char old, char new)
{ {
@ -97,27 +93,29 @@ void setupsignals()
} }
void getstatus(char *str) int getstatus(char *str, char *last)
{ {
strcpy(last, str);
int j = 0; int j = 0;
for(int i = 0; i < LENGTH(blocks); j+=strlen(statusbar[i++])) for(int i = 0; i < LENGTH(blocks); j+=strlen(statusbar[i++]))
{ {
strcpy(str + j, statusbar[i]); strcpy(str + j, statusbar[i]);
} }
str[--j] = '\0'; str[--j] = '\0';
return strcmp(str, last);//0 if they are the same
} }
void setroot() void setroot()
{ {
if (!getstatus(statusstr[0], statusstr[1]))//Only set root if text has changed.
return;
Display *d = XOpenDisplay(NULL); Display *d = XOpenDisplay(NULL);
if (d) { if (d) {
dpy = d; dpy = d;
} }
screen = DefaultScreen(dpy); screen = DefaultScreen(dpy);
root = RootWindow(dpy, screen); root = RootWindow(dpy, screen);
getstatus(statusstr); XStoreName(dpy, root, statusstr[0]);
XStoreName(dpy, root, statusstr);
XCloseDisplay(dpy); XCloseDisplay(dpy);
} }