X-Git-Url: http://git.iain.cx/?a=blobdiff_plain;ds=sidebyside;f=pager.c;h=f5f05c09241f2b6c597b10dd040a782495e53411;hb=2383271efc00185ccb3aa0012427350b8e61c1e1;hp=cab6b42a78ff088ac9541475c012fac4d301c9db;hpb=4368b9c4544687792b23d4083fdc0a2fa261a905;p=pager.git diff --git a/pager.c b/pager.c index cab6b42..f5f05c0 100644 --- a/pager.c +++ b/pager.c @@ -7,14 +7,32 @@ #define DOCKAPP_SIZE 56 #define SPEED 100 -#define ACTIVE_DESKTOP 1 -#define ACTIVE_WINDOW 2 -static GC lightGrayGC, darkGrayGC, active_desktopGC, inactive_desktopGC, active_windowGC, inactive_windowGC; +static GC dockapp_border1GC, dockapp_border2GC, window_border1GC, window_border2GC, active_desktopGC, inactive_desktopGC, active_windowGC, inactive_windowGC; static Atom num_desktops_atom, current_desktop_atom, client_list_atom, client_desktop_atom, client_state_atom, active_window_atom; static Atom shaded_state, skip_pager_state, hidden_state; static long desktop = -1; +int error_handler(Display *display, XErrorEvent *event) { + char buffer[512]; + int length; + + switch (event->error_code) { + case BadWindow: + /* The window may have gone away since we queried the window manager. */ + break; + + default: + if (XGetErrorText(display, event->error_code, buffer, sizeof(buffer))) { + fprintf(stderr, "%s\n", buffer); + exit(100); + } + break; + } + + return 0; +} + void setup_atom(Atom *atom, const char *prop) { *atom = XInternAtom(DADisplay, prop, True); if (*atom == None) exit(111); @@ -50,33 +68,39 @@ void setup_GCs() { gcv.foreground = DAGetColor("lightGray"); gcv.graphics_exposures = False; - lightGrayGC = XCreateGC(DADisplay, DAWindow, GCForeground|GCGraphicsExposures, &gcv); + dockapp_border1GC = XCreateGC(DADisplay, DAWindow, GCForeground|GCGraphicsExposures, &gcv); gcv.foreground = DAGetColor("#222222"); - darkGrayGC = XCreateGC(DADisplay, DAWindow, GCForeground|GCGraphicsExposures, &gcv); + dockapp_border2GC = XCreateGC(DADisplay, DAWindow, GCForeground|GCGraphicsExposures, &gcv); - gcv.foreground = DAGetColor("#bbbbbb"); + gcv.foreground = DAGetColor("#0088ff"); active_desktopGC = XCreateGC(DADisplay, DAWindow, GCForeground|GCGraphicsExposures, &gcv); - gcv.foreground = DAGetColor("#777777"); + gcv.foreground = DAGetColor("darkGray"); inactive_desktopGC = XCreateGC(DADisplay, DAWindow, GCForeground|GCGraphicsExposures, &gcv); - gcv.foreground = DAGetColor("#20b2ae"); + gcv.foreground = DAGetColor("white"); active_windowGC = XCreateGC(DADisplay, DAWindow, GCForeground|GCGraphicsExposures, &gcv); gcv.foreground = DAGetColor("#999999"); inactive_windowGC = XCreateGC(DADisplay, DAWindow, GCForeground|GCGraphicsExposures, &gcv); + + gcv.foreground = DAGetColor("black"); + window_border1GC = XCreateGC(DADisplay, DAWindow, GCForeground|GCGraphicsExposures, &gcv); + + gcv.foreground = DAGetColor("#333333"); + window_border2GC = XCreateGC(DADisplay, DAWindow, GCForeground|GCGraphicsExposures, &gcv); } void draw_relief(Pixmap pixmap, unsigned int width, unsigned int height, GC desktopGC) { /* Drawing */ XFillRectangle(DADisplay, pixmap, desktopGC, 0, 0, width, height); - XDrawLine(DADisplay, pixmap, darkGrayGC, 0, 0, 0, height - 2); - XDrawLine(DADisplay, pixmap, darkGrayGC, 1, 0, width - 1, 0); + XDrawLine(DADisplay, pixmap, dockapp_border2GC, 0, 0, 0, height - 2); + XDrawLine(DADisplay, pixmap, dockapp_border2GC, 1, 0, width - 1, 0); - XDrawLine(DADisplay, pixmap, lightGrayGC, 0, height - 1, width - 1, height - 1); - XDrawLine(DADisplay, pixmap, lightGrayGC, width - 1, 1, width - 1, height - 2); + XDrawLine(DADisplay, pixmap, dockapp_border1GC, 0, height - 1, width - 1, height - 1); + XDrawLine(DADisplay, pixmap, dockapp_border1GC, width - 1, 1, width - 1, height - 2); } void change() { @@ -144,9 +168,11 @@ void page() { rect.width = (double) width / scale; rect.height = (double) height / scale; - if (clients[i] == active_window) gc = active_windowGC; + if (rect.width < 2 || rect.height < 2) gc = window_border1GC; + else if (clients[i] == active_window) gc = active_windowGC; else gc = inactive_windowGC; XFillRectangle(DADisplay, pixmap, gc, rect.x, rect.y, rect.width, rect.height); + if (rect.width < 2 || rect.height < 2) continue; /* Thumbnail. */ #if 0 @@ -168,10 +194,10 @@ void page() { XSync(DADisplay, False); #endif - XDrawLine(DADisplay, pixmap, darkGrayGC, rect.x, rect.y, rect.x, rect.y + rect.height - 2); - XDrawLine(DADisplay, pixmap, darkGrayGC, rect.x + 1, rect.y, rect.x + rect.width - 1, rect.y); - XDrawLine(DADisplay, pixmap, lightGrayGC, rect.x, rect.y + rect.height - 1, rect.x + rect.width - 1, rect.y + rect.height - 1); - XDrawLine(DADisplay, pixmap, lightGrayGC, rect.x + rect.width - 1, rect.y + 1, rect.x + rect.width - 1, rect.y + rect.height - 2); + XDrawLine(DADisplay, pixmap, window_border1GC, rect.x, rect.y, rect.x, rect.y + rect.height - 2); + XDrawLine(DADisplay, pixmap, window_border1GC, rect.x + 1, rect.y, rect.x + rect.width - 1, rect.y); + XDrawLine(DADisplay, pixmap, window_border2GC, rect.x, rect.y + rect.height - 1, rect.x + rect.width - 1, rect.y + rect.height - 1); + XDrawLine(DADisplay, pixmap, window_border2GC, rect.x + rect.width - 1, rect.y + 1, rect.x + rect.width - 1, rect.y + rect.height - 2); } DASetPixmap(pixmap); @@ -231,6 +257,7 @@ int main(int argc, char **argv) { exit(111); } + XSetErrorHandler(error_handler); setup_GCs(); DAShow(); DAEventLoop();