bar: fix bug (updatebardims)

This commit is contained in:
sewn 2024-03-25 00:16:26 +03:00
parent cfac8fab2a
commit deee415bb4
No known key found for this signature in database
2 changed files with 101 additions and 62 deletions

View File

@ -1,14 +1,14 @@
From a298e753fecd8ff20879ee8946be9fb44bf7d60b Mon Sep 17 00:00:00 2001 From 3c759e99541c396af94286459e60e91637b747ab Mon Sep 17 00:00:00 2001
From: sewn <sewn@disroot.org> From: sewn <sewn@disroot.org>
Date: Fri, 1 Mar 2024 18:46:25 +0300 Date: Mon, 25 Mar 2024 00:13:43 +0300
Subject: [PATCH] Implement dwm bar clone Subject: [PATCH] Implement dwm bar clone
--- ---
Makefile | 2 +- Makefile | 2 +-
config.def.h | 29 +++- config.def.h | 29 +++-
dwl.c | 430 +++++++++++++++++++++++++++++++++++++++++++-------- dwl.c | 449 ++++++++++++++++++++++++++++++++++++++++++---------
utf8.h | 55 +++++++ utf8.h | 55 +++++++
4 files changed, 444 insertions(+), 72 deletions(-) 4 files changed, 453 insertions(+), 82 deletions(-)
create mode 100644 utf8.h create mode 100644 utf8.h
diff --git a/Makefile b/Makefile diff --git a/Makefile b/Makefile
@ -84,7 +84,7 @@ index 9009517..bd008c9 100644
+ { ClkTagBar, MODKEY, BTN_RIGHT, toggletag, {0} }, + { ClkTagBar, MODKEY, BTN_RIGHT, toggletag, {0} },
}; };
diff --git a/dwl.c b/dwl.c diff --git a/dwl.c b/dwl.c
index 5867b0c..8341134 100644 index 5867b0c..976fefb 100644
--- a/dwl.c --- a/dwl.c
+++ b/dwl.c +++ b/dwl.c
@@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
@ -216,7 +216,15 @@ index 5867b0c..8341134 100644
static void togglefloating(const Arg *arg); static void togglefloating(const Arg *arg);
static void togglefullscreen(const Arg *arg); static void togglefullscreen(const Arg *arg);
static void toggletag(const Arg *arg); static void toggletag(const Arg *arg);
@@ -405,6 +431,18 @@ static struct wlr_box sgeom; @@ -338,6 +364,7 @@ static void unlocksession(struct wl_listener *listener, void *data);
static void unmaplayersurfacenotify(struct wl_listener *listener, void *data);
static void unmapnotify(struct wl_listener *listener, void *data);
static void updatemons(struct wl_listener *listener, void *data);
+static void updatebardims(Monitor *m);
static void updatetitle(struct wl_listener *listener, void *data);
static void urgent(struct wl_listener *listener, void *data);
static void view(const Arg *arg);
@@ -405,6 +432,18 @@ static struct wlr_box sgeom;
static struct wl_list mons; static struct wl_list mons;
static Monitor *selmon; static Monitor *selmon;
@ -235,7 +243,7 @@ index 5867b0c..8341134 100644
#ifdef XWAYLAND #ifdef XWAYLAND
static void activatex11(struct wl_listener *listener, void *data); static void activatex11(struct wl_listener *listener, void *data);
static void associatex11(struct wl_listener *listener, void *data); static void associatex11(struct wl_listener *listener, void *data);
@@ -531,6 +569,11 @@ arrangelayers(Monitor *m) @@ -531,6 +570,11 @@ arrangelayers(Monitor *m)
if (!m->wlr_output->enabled) if (!m->wlr_output->enabled)
return; return;
@ -247,7 +255,7 @@ index 5867b0c..8341134 100644
/* Arrange exclusive surfaces from top->bottom */ /* Arrange exclusive surfaces from top->bottom */
for (i = 3; i >= 0; i--) for (i = 3; i >= 0; i--)
arrangelayer(m, &m->layers[i], &usable_area, 1); arrangelayer(m, &m->layers[i], &usable_area, 1);
@@ -573,17 +616,77 @@ axisnotify(struct wl_listener *listener, void *data) @@ -573,17 +617,77 @@ axisnotify(struct wl_listener *listener, void *data)
event->delta_discrete, event->source); event->delta_discrete, event->source);
} }
@ -325,7 +333,7 @@ index 5867b0c..8341134 100644
switch (event->state) { switch (event->state) {
case WLR_BUTTON_PRESSED: case WLR_BUTTON_PRESSED:
cursor_mode = CurPressed; cursor_mode = CurPressed;
@@ -592,16 +695,14 @@ buttonpress(struct wl_listener *listener, void *data) @@ -592,16 +696,14 @@ buttonpress(struct wl_listener *listener, void *data)
break; break;
/* Change focus if the button was _pressed_ over a client */ /* Change focus if the button was _pressed_ over a client */
@ -345,7 +353,7 @@ index 5867b0c..8341134 100644
return; return;
} }
} }
@@ -675,6 +776,9 @@ cleanup(void) @@ -675,6 +777,9 @@ cleanup(void)
/* Destroy after the wayland display (when the monitors are already destroyed) /* Destroy after the wayland display (when the monitors are already destroyed)
to avoid destroying them with an invalid scene output. */ to avoid destroying them with an invalid scene output. */
wlr_scene_node_destroy(&scene->tree.node); wlr_scene_node_destroy(&scene->tree.node);
@ -355,7 +363,7 @@ index 5867b0c..8341134 100644
} }
void void
@@ -726,7 +830,7 @@ closemon(Monitor *m) @@ -726,7 +831,7 @@ closemon(Monitor *m)
setmon(c, selmon, c->tags); setmon(c, selmon, c->tags);
} }
focusclient(focustop(selmon), 1); focusclient(focustop(selmon), 1);
@ -364,15 +372,14 @@ index 5867b0c..8341134 100644
} }
void void
@@ -912,8 +1016,14 @@ createmon(struct wl_listener *listener, void *data) @@ -912,8 +1017,13 @@ createmon(struct wl_listener *listener, void *data)
wlr_output_commit_state(wlr_output, &state); wlr_output_commit_state(wlr_output, &state);
wlr_output_state_finish(&state); wlr_output_state_finish(&state);
+ m->scene_buffer = wlr_scene_buffer_create(layers[LyrBottom], NULL); + m->scene_buffer = wlr_scene_buffer_create(layers[LyrBottom], NULL);
+ m->scene_buffer->point_accepts_input = bar_accepts_input; + m->scene_buffer->point_accepts_input = bar_accepts_input;
+ m->b.width = m->wlr_output->width;
+ m->b.height = bh;
+ m->showbar = showbar; + m->showbar = showbar;
+ updatebardims(m);
+ +
wl_list_insert(&mons, &m->link); wl_list_insert(&mons, &m->link);
- printstatus(); - printstatus();
@ -625,16 +632,32 @@ index 5867b0c..8341134 100644
void void
quit(const Arg *arg) quit(const Arg *arg)
@@ -2090,7 +2333,7 @@ run(char *startup_cmd) @@ -2074,23 +2317,14 @@ run(char *startup_cmd)
close(piperw[1]);
close(piperw[0]); /* Now that the socket exists and the backend is started, run the startup command */
if (startup_cmd) {
- int piperw[2];
- if (pipe(piperw) < 0)
- die("startup: pipe:");
if ((child_pid = fork()) < 0)
die("startup: fork:");
if (child_pid == 0) {
- dup2(piperw[0], STDIN_FILENO);
- close(piperw[0]);
- close(piperw[1]);
execl("/bin/sh", "/bin/sh", "-c", startup_cmd, NULL);
die("startup: execl:");
}
- dup2(piperw[1], STDOUT_FILENO);
- close(piperw[1]);
- close(piperw[0]);
} }
- printstatus(); - printstatus();
+ drawbars(); + drawbars();
/* At this point the outputs are initialized, choose initial selmon based on /* At this point the outputs are initialized, choose initial selmon based on
* cursor position, and set default cursor image */ * cursor position, and set default cursor image */
@@ -2155,7 +2398,7 @@ setfloating(Client *c, int floating) @@ -2155,7 +2389,7 @@ setfloating(Client *c, int floating)
(p && p->isfullscreen) ? LyrFS (p && p->isfullscreen) ? LyrFS
: c->isfloating ? LyrFloat : LyrTile]); : c->isfloating ? LyrFloat : LyrTile]);
arrange(c->mon); arrange(c->mon);
@ -643,7 +666,7 @@ index 5867b0c..8341134 100644
} }
void void
@@ -2178,7 +2421,7 @@ setfullscreen(Client *c, int fullscreen) @@ -2178,7 +2412,7 @@ setfullscreen(Client *c, int fullscreen)
resize(c, c->prev, 0); resize(c, c->prev, 0);
} }
arrange(c->mon); arrange(c->mon);
@ -652,7 +675,7 @@ index 5867b0c..8341134 100644
} }
void void
@@ -2203,7 +2446,7 @@ setlayout(const Arg *arg) @@ -2203,7 +2437,7 @@ setlayout(const Arg *arg)
selmon->lt[selmon->sellt] = (Layout *)arg->v; selmon->lt[selmon->sellt] = (Layout *)arg->v;
strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, LENGTH(selmon->ltsymbol)); strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, LENGTH(selmon->ltsymbol));
arrange(selmon); arrange(selmon);
@ -661,7 +684,16 @@ index 5867b0c..8341134 100644
} }
/* arg > 1.0 will set mfact absolutely */ /* arg > 1.0 will set mfact absolutely */
@@ -2506,6 +2749,17 @@ setup(void) @@ -2272,7 +2506,7 @@ setup(void)
struct xkb_context *context;
struct xkb_keymap *keymap;
- int i, sig[] = {SIGCHLD, SIGINT, SIGTERM, SIGPIPE};
+ int i, sig[] = {SIGCHLD, SIGINT, SIGTERM};
struct sigaction sa = {.sa_flags = SA_RESTART, .sa_handler = handlesig};
sigemptyset(&sa.sa_mask);
@@ -2506,6 +2740,17 @@ setup(void)
wlr_scene_set_presentation(scene, wlr_presentation_create(dpy, backend)); wlr_scene_set_presentation(scene, wlr_presentation_create(dpy, backend));
@ -679,7 +711,7 @@ index 5867b0c..8341134 100644
/* Make sure XWayland clients don't connect to the parent X server, /* Make sure XWayland clients don't connect to the parent X server,
* e.g when running in the x11 backend or the wayland backend and the * e.g when running in the x11 backend or the wayland backend and the
* compositor has Xwayland support */ * compositor has Xwayland support */
@@ -2548,6 +2802,30 @@ startdrag(struct wl_listener *listener, void *data) @@ -2548,6 +2793,30 @@ startdrag(struct wl_listener *listener, void *data)
LISTEN_STATIC(&drag->icon->events.destroy, destroydragicon); LISTEN_STATIC(&drag->icon->events.destroy, destroydragicon);
} }
@ -710,7 +742,7 @@ index 5867b0c..8341134 100644
void void
tag(const Arg *arg) tag(const Arg *arg)
{ {
@@ -2558,7 +2836,7 @@ tag(const Arg *arg) @@ -2558,7 +2827,7 @@ tag(const Arg *arg)
sel->tags = arg->ui & TAGMASK; sel->tags = arg->ui & TAGMASK;
focusclient(focustop(selmon), 1); focusclient(focustop(selmon), 1);
arrange(selmon); arrange(selmon);
@ -719,7 +751,7 @@ index 5867b0c..8341134 100644
} }
void void
@@ -2603,6 +2881,14 @@ tile(Monitor *m) @@ -2603,6 +2872,14 @@ tile(Monitor *m)
} }
} }
@ -734,7 +766,7 @@ index 5867b0c..8341134 100644
void void
togglefloating(const Arg *arg) togglefloating(const Arg *arg)
{ {
@@ -2631,7 +2917,7 @@ toggletag(const Arg *arg) @@ -2631,7 +2908,7 @@ toggletag(const Arg *arg)
sel->tags = newtags; sel->tags = newtags;
focusclient(focustop(selmon), 1); focusclient(focustop(selmon), 1);
arrange(selmon); arrange(selmon);
@ -743,7 +775,7 @@ index 5867b0c..8341134 100644
} }
void void
@@ -2644,7 +2930,7 @@ toggleview(const Arg *arg) @@ -2644,7 +2921,7 @@ toggleview(const Arg *arg)
selmon->tagset[selmon->seltags] = newtagset; selmon->tagset[selmon->seltags] = newtagset;
focusclient(focustop(selmon), 1); focusclient(focustop(selmon), 1);
arrange(selmon); arrange(selmon);
@ -752,7 +784,7 @@ index 5867b0c..8341134 100644
} }
void void
@@ -2692,7 +2978,7 @@ unmapnotify(struct wl_listener *listener, void *data) @@ -2692,7 +2969,7 @@ unmapnotify(struct wl_listener *listener, void *data)
} }
wlr_scene_node_destroy(&c->scene->node); wlr_scene_node_destroy(&c->scene->node);
@ -761,7 +793,7 @@ index 5867b0c..8341134 100644
motionnotify(0, NULL, 0, 0, 0, 0); motionnotify(0, NULL, 0, 0, 0, 0);
} }
@@ -2728,6 +3014,7 @@ updatemons(struct wl_listener *listener, void *data) @@ -2728,6 +3005,7 @@ updatemons(struct wl_listener *listener, void *data)
if (m->wlr_output->enabled if (m->wlr_output->enabled
&& !wlr_output_layout_get(output_layout, m->wlr_output)) && !wlr_output_layout_get(output_layout, m->wlr_output))
wlr_output_layout_add_auto(output_layout, m->wlr_output); wlr_output_layout_add_auto(output_layout, m->wlr_output);
@ -769,21 +801,34 @@ index 5867b0c..8341134 100644
} }
/* Now that we update the output layout we can get its box */ /* Now that we update the output layout we can get its box */
@@ -2788,6 +3075,13 @@ updatemons(struct wl_listener *listener, void *data) @@ -2788,6 +3066,12 @@ updatemons(struct wl_listener *listener, void *data)
} }
} }
+ /* Update bar */ + /* Update bar */
+ wl_list_for_each(m, &mons, link) { + wl_list_for_each(m, &mons, link) {
+ m->b.width = m->wlr_output->width; + updatebardims(m);
+ m->b.height = bh;
+ drawbar(m); + drawbar(m);
+ } + }
+ +
/* FIXME: figure out why the cursor image is at 0,0 after turning all /* FIXME: figure out why the cursor image is at 0,0 after turning all
* the monitors on. * the monitors on.
* Move the cursor image where it used to be. It does not generate a * Move the cursor image where it used to be. It does not generate a
@@ -2803,7 +3097,7 @@ updatetitle(struct wl_listener *listener, void *data) @@ -2798,12 +3082,21 @@ updatemons(struct wl_listener *listener, void *data)
wlr_output_manager_v1_set_configuration(output_mgr, config);
}
+void
+updatebardims(Monitor *m)
+{
+ int rw, rh;
+ wlr_output_transformed_resolution(m->wlr_output, &rw, &rh);
+ m->b.width = rw;
+ m->b.height = bh;
+}
+
void
updatetitle(struct wl_listener *listener, void *data)
{ {
Client *c = wl_container_of(listener, c, set_title); Client *c = wl_container_of(listener, c, set_title);
if (c == focustop(c->mon)) if (c == focustop(c->mon))
@ -792,7 +837,7 @@ index 5867b0c..8341134 100644
} }
void void
@@ -2816,7 +3110,7 @@ urgent(struct wl_listener *listener, void *data) @@ -2816,7 +3109,7 @@ urgent(struct wl_listener *listener, void *data)
return; return;
c->isurgent = 1; c->isurgent = 1;
@ -801,7 +846,7 @@ index 5867b0c..8341134 100644
if (client_surface(c)->mapped) if (client_surface(c)->mapped)
client_set_border_color(c, urgentcolor); client_set_border_color(c, urgentcolor);
@@ -2832,7 +3126,7 @@ view(const Arg *arg) @@ -2832,7 +3125,7 @@ view(const Arg *arg)
selmon->tagset[selmon->seltags] = arg->ui & TAGMASK; selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
focusclient(focustop(selmon), 1); focusclient(focustop(selmon), 1);
arrange(selmon); arrange(selmon);
@ -810,7 +855,7 @@ index 5867b0c..8341134 100644
} }
void void
@@ -2871,6 +3165,7 @@ xytonode(double x, double y, struct wlr_surface **psurface, @@ -2871,6 +3164,7 @@ xytonode(double x, double y, struct wlr_surface **psurface,
{ {
struct wlr_scene_node *node, *pnode; struct wlr_scene_node *node, *pnode;
struct wlr_surface *surface = NULL; struct wlr_surface *surface = NULL;
@ -818,7 +863,7 @@ index 5867b0c..8341134 100644
Client *c = NULL; Client *c = NULL;
LayerSurface *l = NULL; LayerSurface *l = NULL;
int layer; int layer;
@@ -2879,9 +3174,12 @@ xytonode(double x, double y, struct wlr_surface **psurface, @@ -2879,9 +3173,12 @@ xytonode(double x, double y, struct wlr_surface **psurface,
if (!(node = wlr_scene_node_at(&layers[layer]->node, x, y, nx, ny))) if (!(node = wlr_scene_node_at(&layers[layer]->node, x, y, nx, ny)))
continue; continue;
@ -834,7 +879,7 @@ index 5867b0c..8341134 100644
/* Walk the tree to find a node that knows the client */ /* Walk the tree to find a node that knows the client */
for (pnode = node; pnode && !c; pnode = &pnode->parent->node) for (pnode = node; pnode && !c; pnode = &pnode->parent->node)
c = pnode->data; c = pnode->data;
@@ -3020,7 +3318,7 @@ sethints(struct wl_listener *listener, void *data) @@ -3020,7 +3317,7 @@ sethints(struct wl_listener *listener, void *data)
return; return;
c->isurgent = xcb_icccm_wm_hints_get_urgency(c->surface.xwayland->hints); c->isurgent = xcb_icccm_wm_hints_get_urgency(c->surface.xwayland->hints);
@ -904,3 +949,6 @@ index 0000000..c7db188
+ *state = utf8d[256 + *state*16 + type]; + *state = utf8d[256 + *state*16 + type];
+ return *state; + return *state;
+} +}
--
2.44.0

View File

@ -1,12 +1,12 @@
From 213d041523e36b7e4f8f2f527eb044bc2d3e9d3d Mon Sep 17 00:00:00 2001 From 537bd7c485c1fb370d7a73f979ee140dab9c078e Mon Sep 17 00:00:00 2001
From: sewn <sewn@disroot.org> From: sewn <sewn@disroot.org>
Date: Tue, 19 Mar 2024 00:19:39 +0300 Date: Mon, 25 Mar 2024 00:15:01 +0300
Subject: [PATCH] port barpadding patch to bar for dwl Subject: [PATCH] port barpadding patch to bar for dwl
--- ---
config.def.h | 3 +++ config.def.h | 3 +++
dwl.c | 16 ++++++++++------ dwl.c | 14 +++++++++-----
2 files changed, 13 insertions(+), 6 deletions(-) 2 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/config.def.h b/config.def.h diff --git a/config.def.h b/config.def.h
index bd008c9..a2cf167 100644 index bd008c9..a2cf167 100644
@ -30,10 +30,10 @@ index bd008c9..a2cf167 100644
static const char *fontattrs = "dpi=96"; static const char *fontattrs = "dpi=96";
static pixman_color_t normbarfg = { 0xbbbb, 0xbbbb, 0xbbbb, 0xffff }; static pixman_color_t normbarfg = { 0xbbbb, 0xbbbb, 0xbbbb, 0xffff };
diff --git a/dwl.c b/dwl.c diff --git a/dwl.c b/dwl.c
index 8341134..51ce9f0 100644 index 976fefb..6650fdc 100644
--- a/dwl.c --- a/dwl.c
+++ b/dwl.c +++ b/dwl.c
@@ -433,6 +433,8 @@ static Monitor *selmon; @@ -434,6 +434,8 @@ static Monitor *selmon;
static struct fcft_font *font; static struct fcft_font *font;
static int bh; static int bh;
@ -42,7 +42,7 @@ index 8341134..51ce9f0 100644
static int lrpad; static int lrpad;
static char stext[256]; static char stext[256];
static struct wl_event_source *status_event_source; static struct wl_event_source *status_event_source;
@@ -570,8 +572,8 @@ arrangelayers(Monitor *m) @@ -571,8 +573,8 @@ arrangelayers(Monitor *m)
return; return;
if (m->showbar) { if (m->showbar) {
@ -53,15 +53,6 @@ index 8341134..51ce9f0 100644
} }
/* Arrange exclusive surfaces from top->bottom */ /* Arrange exclusive surfaces from top->bottom */
@@ -1018,7 +1020,7 @@ createmon(struct wl_listener *listener, void *data)
m->scene_buffer = wlr_scene_buffer_create(layers[LyrBottom], NULL);
m->scene_buffer->point_accepts_input = bar_accepts_input;
- m->b.width = m->wlr_output->width;
+ m->b.width = m->wlr_output->width - 2 * sp;
m->b.height = bh;
m->showbar = showbar;
@@ -1501,8 +1503,8 @@ drawbar(Monitor *mon) @@ -1501,8 +1503,8 @@ drawbar(Monitor *mon)
} }
@ -73,7 +64,7 @@ index 8341134..51ce9f0 100644
wlr_scene_buffer_set_buffer(mon->scene_buffer, &buf->base); wlr_scene_buffer_set_buffer(mon->scene_buffer, &buf->base);
wlr_buffer_drop(&buf->base); wlr_buffer_drop(&buf->base);
} }
@@ -2756,6 +2758,8 @@ setup(void) @@ -2747,6 +2749,8 @@ setup(void)
lrpad = font->height; lrpad = font->height;
bh = font->height + 2; bh = font->height + 2;
@ -82,15 +73,15 @@ index 8341134..51ce9f0 100644
status_event_source = wl_event_loop_add_fd(wl_display_get_event_loop(dpy), status_event_source = wl_event_loop_add_fd(wl_display_get_event_loop(dpy),
STDIN_FILENO, WL_EVENT_READABLE, status_in, NULL); STDIN_FILENO, WL_EVENT_READABLE, status_in, NULL);
@@ -3077,7 +3081,7 @@ updatemons(struct wl_listener *listener, void *data) @@ -3087,7 +3091,7 @@ updatebardims(Monitor *m)
{
int rw, rh;
wlr_output_transformed_resolution(m->wlr_output, &rw, &rh);
- m->b.width = rw;
+ m->b.width = rw - 2 * sp;
m->b.height = bh;
}
/* Update bar */
wl_list_for_each(m, &mons, link) {
- m->b.width = m->wlr_output->width;
+ m->b.width = m->wlr_output->width - 2 * sp;
m->b.height = bh;
drawbar(m);
}
-- --
2.44.0 2.44.0