From 7cb68cd801271b6fe7fdebb1f86ee329205dc766 Mon Sep 17 00:00:00 2001 From: Matthias Kruk Date: Sun, 9 May 2021 21:53:23 +0900 Subject: [PATCH] Draw the client indicator in a different color on other screens The client indicator has the same color on all screens, making it harder to distinguish which one is the selected screen. This commit changes the color of the client indicator on non-selected screens. --- config.def.h | 2 +- dwm.c | 45 +++++++++++++++++++++++++++++++++++---------- 2 files changed, 36 insertions(+), 11 deletions(-) diff --git a/config.def.h b/config.def.h index 632c883..416a4d7 100755 --- a/config.def.h +++ b/config.def.h @@ -13,7 +13,7 @@ static struct color_set theme[PalLast] = { .background = "#bb2323", .foreground = "#ffffff" }, { /* PalNotSelected */ - .border = "#486c9c", + .border = "#708fc9", .background = "#486c9c", .foreground = "#ffffff" }, { /* PalOther */ diff --git a/dwm.c b/dwm.c index abdd7a4..d823e8e 100755 --- a/dwm.c +++ b/dwm.c @@ -274,6 +274,7 @@ static struct client_indicator* client_indicator_new(struct monitor *monitor, in static void client_indicator_free(struct client_indicator **indicator); static void client_indicator_update_geometry(struct client_indicator *ci); static void client_indicator_update(struct client_indicator *ci); +static void client_indicator_update_all(void); static void client_indicator_set_visible(struct client_indicator *ci, int visible); static void client_indicator_resize(struct client_indicator *ci); @@ -459,9 +460,23 @@ struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; }; +static void client_indicator_update_all(void) +{ + struct monitor *monitor; + + for(monitor = mons; monitor; monitor = monitor->next) { + client_indicator_update(monitor->v_clind); + client_indicator_update(monitor->h_clind); + } + + return; +} + static void client_indicator_update(struct client_indicator *ci) { struct client *focused; + unsigned long fg_color; + unsigned long bg_color; XCopyArea(dpy, root, ci->win, ci->gc, ci->geom.x, ci->geom.y, @@ -470,6 +485,14 @@ static void client_indicator_update(struct client_indicator *ci) focused = ci->monitor->workspace->focused; + if(ci->monitor == selmon) { + fg_color = dc.palette[PalIndicator].color[ColBG]; + bg_color = dc.palette[PalIndicator].color[ColFG]; + } else { + fg_color = dc.palette[PalNotSelected].color[ColBG]; + bg_color = dc.palette[PalNotSelected].color[ColBorder]; + } + if(focused) { int x, y, w, h; @@ -485,11 +508,11 @@ static void client_indicator_update(struct client_indicator *ci) h = focused->geom.h + 2 * borderpx; } - XSetForeground(dpy, ci->gc, dc.palette[PalIndicator].color[ColBG]); + XSetForeground(dpy, ci->gc, fg_color); XFillRectangle(dpy, ci->win, ci->gc, x, y, w, h); - XSetForeground(dpy, ci->gc, dc.palette[PalIndicator].color[ColFG]); + XSetForeground(dpy, ci->gc, bg_color); XDrawRectangle(dpy, ci->win, ci->gc, x, y, w - 1, h - 1); } @@ -595,12 +618,9 @@ static void client_indicator_set_visible(struct client_indicator *ci, int visibl static void client_indicator_resize(struct client_indicator *ci) { - ci->geom.x = ci->monitor->geom.x; - ci->geom.y = ci->monitor->geom.y + bar_height; - ci->geom.w = ci->monitor->geom.w; - ci->geom.h = clind_height; - + client_indicator_update_geometry(ci); XMoveResizeWindow(dpy, ci->win, ci->geom.x, ci->geom.y, ci->geom.w, ci->geom.h); + return; } @@ -786,6 +806,8 @@ void workspace_update(struct workspace *workspace) if(workspace->viewer) { monitor_arrange_clients(workspace->viewer); + client_indicator_update(workspace->viewer->v_clind); + client_indicator_update(workspace->viewer->h_clind); } } else { int i; @@ -793,6 +815,8 @@ void workspace_update(struct workspace *workspace) for(i = 0; i < LENGTH(workspaces); i++) { workspace_update(&workspaces[i]); } + + client_indicator_update_all(); } return; @@ -1170,6 +1194,8 @@ static struct monitor *monitor_new(int num, int x, int y, int w, int h) struct monitor *m; int i; + fprintf(stderr, "%s(%d, %d, %d, %d, %d)\n", __func__, num, x, y, w, h); + m = (struct monitor*)calloc(1, sizeof(*m)); if(!m) { @@ -1514,8 +1540,7 @@ void focus(struct client *c) } selmon->workspace->focused = c; - client_indicator_update(selmon->h_clind); - client_indicator_update(selmon->v_clind); + client_indicator_update_all(); drawbars(); return; @@ -3213,7 +3238,7 @@ static int updategeom(void) for(i = 0; i < num_mons; i++) { struct monitor *mon; - mon = monitor_get(info->screen_number); + mon = monitor_get(info[i].screen_number); if(mon) { monitor_update_geometry(mon, info[i].x_org, info[i].y_org, -- 2.47.3