mirror of
https://github.com/kolunmi/dwlb.git
synced 2025-10-27 10:14:27 +00:00
optimize setting status text on all monitors
This commit is contained in:
parent
037e3be013
commit
004cfcbcf0
41
dwlb.c
41
dwlb.c
@ -502,7 +502,6 @@ output_name(void *data, struct zxdg_output_v1 *xdg_output, const char *name)
|
|||||||
{
|
{
|
||||||
Bar *bar = (Bar *)data;
|
Bar *bar = (Bar *)data;
|
||||||
|
|
||||||
/* Is this necessary? */
|
|
||||||
if (bar->xdg_output_name)
|
if (bar->xdg_output_name)
|
||||||
free(bar->xdg_output_name);
|
free(bar->xdg_output_name);
|
||||||
if (!(bar->xdg_output_name = strdup(name)))
|
if (!(bar->xdg_output_name = strdup(name)))
|
||||||
@ -1151,8 +1150,7 @@ parse_color(const char *str, pixman_color_t *clr)
|
|||||||
static void
|
static void
|
||||||
set_status(Bar *bar, char *text)
|
set_status(Bar *bar, char *text)
|
||||||
{
|
{
|
||||||
bar->status_colors_l = 0;
|
bar->status_colors_l = bar->status_buttons_l = 0;
|
||||||
bar->status_buttons_l = 0;
|
|
||||||
|
|
||||||
if (status_commands) {
|
if (status_commands) {
|
||||||
uint32_t codepoint;
|
uint32_t codepoint;
|
||||||
@ -1310,8 +1308,27 @@ read_socket(void)
|
|||||||
if (!wordend)
|
if (!wordend)
|
||||||
break;
|
break;
|
||||||
if (all) {
|
if (all) {
|
||||||
DL_FOREACH(bar_list, bar) {
|
if (!bar_list)
|
||||||
set_status(bar, wordend);
|
break;
|
||||||
|
set_status(bar_list, wordend);
|
||||||
|
bar_list->redraw = true;
|
||||||
|
|
||||||
|
/* Copy over parsed status information to other bars */
|
||||||
|
DL_FOREACH(bar_list->next, bar) {
|
||||||
|
snprintf(bar->status, sizeof bar->status, "%s", bar_list->status);
|
||||||
|
bar->status_colors_l = bar->status_buttons_l = 0;
|
||||||
|
for (uint32_t i = 0; i < bar_list->status_colors_l; i++) {
|
||||||
|
StatusColor *status_color;
|
||||||
|
ARRAY_APPEND(bar->status_colors, bar->status_colors_l, bar->status_colors_c, status_color);
|
||||||
|
status_color->color = bar_list->status_colors[i].color;
|
||||||
|
status_color->bg = bar_list->status_colors[i].bg;
|
||||||
|
status_color->start = bar_list->status_colors[i].start - (char *)&bar_list->status + (char *)&bar->status;
|
||||||
|
}
|
||||||
|
for (uint32_t i = 0; i < bar_list->status_buttons_l; i++) {
|
||||||
|
StatusButton *status_button;
|
||||||
|
ARRAY_APPEND(bar->status_buttons, bar->status_buttons_l, bar->status_buttons_c, status_button);
|
||||||
|
*status_button = bar_list->status_buttons[i];
|
||||||
|
}
|
||||||
bar->redraw = true;
|
bar->redraw = true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -1444,17 +1461,17 @@ client_send_command(struct sockaddr_un *sock_address, const char *output,
|
|||||||
|
|
||||||
struct dirent *de;
|
struct dirent *de;
|
||||||
bool newfd = true;
|
bool newfd = true;
|
||||||
|
|
||||||
|
/* Send data to all dwlb instances */
|
||||||
while ((de = readdir(dir))) {
|
while ((de = readdir(dir))) {
|
||||||
if (!strncmp(de->d_name, "dwlb-", 5)) {
|
if (!strncmp(de->d_name, "dwlb-", 5)) {
|
||||||
if (newfd)
|
if (newfd && (sock_fd = socket(AF_UNIX, SOCK_STREAM, 1)) == -1)
|
||||||
if ((sock_fd = socket(AF_UNIX, SOCK_STREAM, 1)) == -1)
|
EDIE("socket");
|
||||||
EDIE("socket");
|
|
||||||
snprintf(sock_address->sun_path, sizeof sock_address->sun_path, "%s/%s", socketdir, de->d_name);
|
snprintf(sock_address->sun_path, sizeof sock_address->sun_path, "%s/%s", socketdir, de->d_name);
|
||||||
if (connect(sock_fd, (struct sockaddr *) sock_address, sizeof(*sock_address)) == -1) {
|
if (connect(sock_fd, (struct sockaddr *) sock_address, sizeof(*sock_address)) == -1) {
|
||||||
newfd = false;
|
newfd = false;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (send(sock_fd, sockbuf, len, 0) == -1)
|
if (send(sock_fd, sockbuf, len, 0) == -1)
|
||||||
fprintf(stderr, "Could not send status data to '%s'\n", sock_address->sun_path);
|
fprintf(stderr, "Could not send status data to '%s'\n", sock_address->sun_path);
|
||||||
close(sock_fd);
|
close(sock_fd);
|
||||||
@ -1670,14 +1687,14 @@ main(int argc, char **argv)
|
|||||||
if ((sock_fd = socket(AF_UNIX, SOCK_STREAM, 1)) == -1)
|
if ((sock_fd = socket(AF_UNIX, SOCK_STREAM, 1)) == -1)
|
||||||
DIE("socket");
|
DIE("socket");
|
||||||
snprintf(sock_address.sun_path, sizeof sock_address.sun_path, "%s/dwlb-%i", socketdir, i);
|
snprintf(sock_address.sun_path, sizeof sock_address.sun_path, "%s/dwlb-%i", socketdir, i);
|
||||||
if (connect(sock_fd, (struct sockaddr *) &sock_address, sizeof sock_address) == -1)
|
if (connect(sock_fd, (struct sockaddr *)&sock_address, sizeof sock_address) == -1)
|
||||||
break;
|
break;
|
||||||
close(sock_fd);
|
close(sock_fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
socketpath = (char *)&sock_address.sun_path;
|
socketpath = (char *)&sock_address.sun_path;
|
||||||
unlink(socketpath);
|
unlink(socketpath);
|
||||||
if (bind(sock_fd, (struct sockaddr *) &sock_address, sizeof sock_address) == -1)
|
if (bind(sock_fd, (struct sockaddr *)&sock_address, sizeof sock_address) == -1)
|
||||||
EDIE("bind");
|
EDIE("bind");
|
||||||
if (listen(sock_fd, SOMAXCONN) == -1)
|
if (listen(sock_fd, SOMAXCONN) == -1)
|
||||||
EDIE("listen");
|
EDIE("listen");
|
||||||
@ -1708,9 +1725,9 @@ main(int argc, char **argv)
|
|||||||
|
|
||||||
zwlr_layer_shell_v1_destroy(layer_shell);
|
zwlr_layer_shell_v1_destroy(layer_shell);
|
||||||
zxdg_output_manager_v1_destroy(output_manager);
|
zxdg_output_manager_v1_destroy(output_manager);
|
||||||
|
|
||||||
if (ipc)
|
if (ipc)
|
||||||
znet_tapesoftware_dwl_wm_v1_destroy(dwl_wm);
|
znet_tapesoftware_dwl_wm_v1_destroy(dwl_wm);
|
||||||
|
|
||||||
DL_FOREACH_SAFE(bar_list, bar, bar2)
|
DL_FOREACH_SAFE(bar_list, bar, bar2)
|
||||||
teardown_bar(bar);
|
teardown_bar(bar);
|
||||||
DL_FOREACH_SAFE(seat_list, seat, seat2)
|
DL_FOREACH_SAFE(seat_list, seat, seat2)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user