From b85dbbadb9711232266bfdafba3ffa70fc0e7ded Mon Sep 17 00:00:00 2001 From: rxmmah Date: Mon, 3 Jun 2024 09:25:55 +0200 Subject: [PATCH] Remove title drawing section from dwl.c --- patches/bar_notitle/README.md | 10 - patches/bar_notitle/bar_notitle.patch | 712 -------------------------- patches/notitle/notitle.patch | 37 ++ 3 files changed, 37 insertions(+), 722 deletions(-) delete mode 100644 patches/bar_notitle/README.md delete mode 100644 patches/bar_notitle/bar_notitle.patch create mode 100644 patches/notitle/notitle.patch diff --git a/patches/bar_notitle/README.md b/patches/bar_notitle/README.md deleted file mode 100644 index 5207026..0000000 --- a/patches/bar_notitle/README.md +++ /dev/null @@ -1,10 +0,0 @@ -### Description - -a copy of [sewen](https://codeberg.org/sewn)'s [bar](https://codeberg.org/dwl/dwl-patches/src/branch/main/patches/bar) but without showing the window title. - -### Download -- [git branch](https://codeberg.org/rxmmah/dwl/src/branch/notitle) -- [2024-05-03](https://codeberg.org/rxmmah/dwl-patches/raw/branch/main/patches/bar_notitle/bar_notitle.patch) - -### Authors -- [rxmmah](https://codeberg.org/rxmmah) \ No newline at end of file diff --git a/patches/bar_notitle/bar_notitle.patch b/patches/bar_notitle/bar_notitle.patch deleted file mode 100644 index 3463921..0000000 --- a/patches/bar_notitle/bar_notitle.patch +++ /dev/null @@ -1,712 +0,0 @@ -From 0870ab8430c861632dc01013280b2f4648e80009 Mon Sep 17 00:00:00 2001 -From: rxmmah -Date: Mon, 3 Jun 2024 05:41:17 +0200 -Subject: [PATCH] Remove title drawing section from dwl.c - ---- - dwl.c | 351 +++++++++++++++++++++++++++++++++++++++++++++------------- - 1 file changed, 276 insertions(+), 75 deletions(-) - -diff --git a/dwl.c b/dwl.c -index 1ea7f2a..e0c7ace 100644 ---- a/dwl.c -+++ b/dwl.c -@@ -4,6 +4,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -55,8 +56,11 @@ - #include - #include - #include -+#include - #include - #include -+#include -+#include - #include - #ifdef XWAYLAND - #include -@@ -65,6 +69,7 @@ - #endif - - #include "util.h" -+#include "drwl.h" - - /* macros */ - #define MAX(A, B) ((A) > (B) ? (A) : (B)) -@@ -74,14 +79,16 @@ - #define VISIBLEON(C, M) ((M) && (C)->mon == (M) && ((C)->tags & (M)->tagset[(M)->seltags])) - #define LENGTH(X) (sizeof X / sizeof X[0]) - #define END(A) ((A) + LENGTH(A)) --#define TAGMASK ((1u << TAGCOUNT) - 1) -+#define TAGMASK ((1u << LENGTH(tags)) - 1) - #define LISTEN(E, L, H) wl_signal_add((E), ((L)->notify = (H), (L))) - #define LISTEN_STATIC(E, H) do { static struct wl_listener _l = {.notify = (H)}; wl_signal_add((E), &_l); } while (0) -+#define TEXTW(text) (drwl_text(NULL, font, 0, 0, 0, 0, 0, text, NULL, NULL) + lrpad) - - /* enums */ - enum { CurNormal, CurPressed, CurMove, CurResize }; /* cursor */ - enum { XDGShell, LayerShell, X11 }; /* client types */ - enum { LyrBg, LyrBottom, LyrTile, LyrFloat, LyrTop, LyrFS, LyrOverlay, LyrBlock, NUM_LAYERS }; /* scene layers */ -+enum { ClkTagBar, ClkLtSymbol, ClkStatus, ClkTitle, ClkClient, ClkRoot }; /* clicks */ - #ifdef XWAYLAND - enum { NetWMWindowTypeDialog, NetWMWindowTypeSplash, NetWMWindowTypeToolbar, - NetWMWindowTypeUtility, NetLast }; /* EWMH atoms */ -@@ -95,6 +102,7 @@ typedef union { - } Arg; - - typedef struct { -+ unsigned int click; - unsigned int mod; - unsigned int button; - void (*func)(const Arg *); -@@ -188,6 +196,7 @@ struct Monitor { - struct wl_list link; - struct wlr_output *wlr_output; - struct wlr_scene_output *scene_output; -+ struct wlr_scene_buffer *scene_buffer; /* bar buffer */ - struct wlr_scene_rect *fullscreen_bg; /* See createmon() for info */ - struct wl_listener frame; - struct wl_listener destroy; -@@ -195,6 +204,7 @@ struct Monitor { - struct wl_listener destroy_lock_surface; - struct wlr_session_lock_surface_v1 *lock_surface; - struct wlr_box m; /* monitor area, layout-relative */ -+ struct wlr_box b; /* bar area */ - struct wlr_box w; /* window area, layout-relative */ - struct wl_list layers[4]; /* LayerSurface.link */ - const Layout *lt[2]; -@@ -204,9 +214,16 @@ struct Monitor { - float mfact; - int gamma_lut_changed; - int nmaster; -+ int showbar; - char ltsymbol[16]; - }; - -+typedef struct { -+ struct wlr_buffer base; -+ size_t stride; -+ uint32_t data[]; -+} Buffer; -+ - typedef struct { - const char *name; - float mfact; -@@ -247,6 +264,10 @@ static void arrangelayer(Monitor *m, struct wl_list *list, - struct wlr_box *usable_area, int exclusive); - static void arrangelayers(Monitor *m); - static void axisnotify(struct wl_listener *listener, void *data); -+static bool bar_accepts_input(struct wlr_scene_buffer *buffer, double *sx, double *sy); -+static void buffer_destroy(struct wlr_buffer *buffer); -+static bool buffer_begin_data_ptr_access(struct wlr_buffer *buffer, uint32_t flags, void **data, uint32_t *format, size_t *stride); -+static void buffer_end_data_ptr_access(struct wlr_buffer *buffer); - static void buttonpress(struct wl_listener *listener, void *data); - static void chvt(const Arg *arg); - static void checkidleinhibitor(struct wlr_surface *exclude); -@@ -278,6 +299,8 @@ static void destroypointerconstraint(struct wl_listener *listener, void *data); - static void destroysessionlock(struct wl_listener *listener, void *data); - static void destroysessionmgr(struct wl_listener *listener, void *data); - static Monitor *dirtomon(enum wlr_direction dir); -+static void drawbar(Monitor *m); -+static void drawbars(void); - static void focusclient(Client *c, int lift); - static void focusmon(const Arg *arg); - static void focusstack(const Arg *arg); -@@ -306,7 +329,6 @@ static void outputmgrapplyortest(struct wlr_output_configuration_v1 *config, int - static void outputmgrtest(struct wl_listener *listener, void *data); - static void pointerfocus(Client *c, struct wlr_surface *surface, - double sx, double sy, uint32_t time); --static void printstatus(void); - static void quit(const Arg *arg); - static void rendermon(struct wl_listener *listener, void *data); - static void requestdecorationmode(struct wl_listener *listener, void *data); -@@ -327,9 +349,11 @@ static void setsel(struct wl_listener *listener, void *data); - static void setup(void); - static void spawn(const Arg *arg); - static void startdrag(struct wl_listener *listener, void *data); -+static int status_in(int fd, unsigned int mask, void *data); - static void tag(const Arg *arg); - static void tagmon(const Arg *arg); - static void tile(Monitor *m); -+static void togglebar(const Arg *arg); - static void togglefloating(const Arg *arg); - static void togglefullscreen(const Arg *arg); - static void toggletag(const Arg *arg); -@@ -338,6 +362,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 +430,18 @@ static struct wlr_box sgeom; - static struct wl_list mons; - static Monitor *selmon; - -+static struct fcft_font *font; -+static int bh; -+static int lrpad; -+static char stext[256]; -+static struct wl_event_source *status_event_source; -+ -+static const struct wlr_buffer_impl buffer_impl = { -+ .destroy = buffer_destroy, -+ .begin_data_ptr_access = buffer_begin_data_ptr_access, -+ .end_data_ptr_access = buffer_end_data_ptr_access -+}; -+ - #ifdef XWAYLAND - static void activatex11(struct wl_listener *listener, void *data); - static void associatex11(struct wl_listener *listener, void *data); -@@ -531,6 +568,11 @@ arrangelayers(Monitor *m) - if (!m->wlr_output->enabled) - return; - -+ if (m->showbar) { -+ usable_area.height -= m->b.height; -+ usable_area.y += topbar ? m->b.height : 0; -+ } -+ - /* Arrange exclusive surfaces from top->bottom */ - for (i = 3; i >= 0; i--) - arrangelayer(m, &m->layers[i], &usable_area, 1); -@@ -573,17 +615,77 @@ axisnotify(struct wl_listener *listener, void *data) - event->delta_discrete, event->source); - } - -+bool -+bar_accepts_input(struct wlr_scene_buffer *buffer, double *sx, double *sy) -+{ -+ return true; -+} -+ -+void -+buffer_destroy(struct wlr_buffer *wlr_buffer) -+{ -+ Buffer *buf; -+ buf = wl_container_of(wlr_buffer, buf, base); -+ free(buf); -+} -+ -+bool -+buffer_begin_data_ptr_access(struct wlr_buffer *wlr_buffer, uint32_t flags, -+ void **data, uint32_t *format, size_t *stride) -+{ -+ Buffer *buf; -+ buf = wl_container_of(wlr_buffer, buf, base); -+ -+ if (flags & WLR_BUFFER_DATA_PTR_ACCESS_WRITE) return false; -+ -+ *data = buf->data; -+ *stride = buf->stride; -+ *format = DRM_FORMAT_ARGB8888; -+ -+ return true; -+} -+ -+void buffer_end_data_ptr_access(struct wlr_buffer *buffer) { -+} -+ - void - buttonpress(struct wl_listener *listener, void *data) - { -+ unsigned int i = 0, x = 0; -+ unsigned int click; - struct wlr_pointer_button_event *event = data; - struct wlr_keyboard *keyboard; -+ struct wlr_scene_node *node; -+ struct wlr_scene_buffer *buffer; - uint32_t mods; -+ Arg arg = {0}; - Client *c; - const Button *b; - - wlr_idle_notifier_v1_notify_activity(idle_notifier, seat); - -+ click = ClkRoot; -+ xytonode(cursor->x, cursor->y, NULL, &c, NULL, NULL, NULL); -+ if (c) -+ click = ClkClient; -+ -+ if (!c && (node = wlr_scene_node_at(&layers[LyrBottom]->node, cursor->x, cursor->y, NULL, NULL)) && -+ (buffer = wlr_scene_buffer_from_node(node)) && buffer == selmon->scene_buffer) { -+ x = selmon->m.x; -+ do -+ x += TEXTW(tags[i]); -+ while (cursor->x >= x && ++i < LENGTH(tags)); -+ if (i < LENGTH(tags)) { -+ click = ClkTagBar; -+ arg.ui = 1 << i; -+ } else if (cursor->x < x + TEXTW(selmon->ltsymbol)) -+ click = ClkLtSymbol; -+ else if (cursor->x > selmon->w.width - (int)TEXTW(stext)) -+ click = ClkStatus; -+ else -+ click = ClkTitle; -+ } -+ - switch (event->state) { - case WLR_BUTTON_PRESSED: - cursor_mode = CurPressed; -@@ -592,16 +694,14 @@ buttonpress(struct wl_listener *listener, void *data) - break; - - /* Change focus if the button was _pressed_ over a client */ -- xytonode(cursor->x, cursor->y, NULL, &c, NULL, NULL, NULL); -- if (c && (!client_is_unmanaged(c) || client_wants_focus(c))) -+ if (click == ClkClient && (!client_is_unmanaged(c) || client_wants_focus(c))) - focusclient(c, 1); - - keyboard = wlr_seat_get_keyboard(seat); - mods = keyboard ? wlr_keyboard_get_modifiers(keyboard) : 0; - for (b = buttons; b < END(buttons); b++) { -- if (CLEANMASK(mods) == CLEANMASK(b->mod) && -- event->button == b->button && b->func) { -- b->func(&b->arg); -+ if (CLEANMASK(mods) == CLEANMASK(b->mod) && event->button == b->button && click == b->click && b->func) { -+ b->func(click == ClkTagBar && b->arg.i == 0 ? &arg : &b->arg); - return; - } - } -@@ -675,6 +775,9 @@ cleanup(void) - /* Destroy after the wayland display (when the monitors are already destroyed) - to avoid destroying them with an invalid scene output. */ - wlr_scene_node_destroy(&scene->tree.node); -+ -+ fcft_destroy(font); -+ fcft_fini(); - } - - void -@@ -726,7 +829,7 @@ closemon(Monitor *m) - setmon(c, selmon, c->tags); - } - focusclient(focustop(selmon), 1); -- printstatus(); -+ drawbars(); - } - - void -@@ -912,8 +1015,13 @@ createmon(struct wl_listener *listener, void *data) - wlr_output_commit_state(wlr_output, &state); - wlr_output_state_finish(&state); - -+ m->scene_buffer = wlr_scene_buffer_create(layers[LyrBottom], NULL); -+ m->scene_buffer->point_accepts_input = bar_accepts_input; -+ m->showbar = showbar; -+ updatebardims(m); -+ - wl_list_insert(&mons, &m->link); -- printstatus(); -+ drawbars(); - - /* The xdg-protocol specifies: - * -@@ -1233,6 +1341,85 @@ dirtomon(enum wlr_direction dir) - return selmon; - } - -+void -+drawbar(Monitor *mon) -+{ -+ int x, w, tw = 0; -+ int sel; -+ int boxs = font->height / 9; -+ int boxw = font->height / 6 + 2; -+ uint32_t i, occ = 0, urg = 0; -+ uint32_t stride, size; -+ pixman_image_t *pix; -+ Client *c; -+ Buffer *buf; -+ -+ if (!mon || !mon->showbar) -+ return; -+ -+ stride = mon->b.width * 4; -+ size = stride * mon->b.height; -+ -+ buf = ecalloc(1, sizeof(Buffer) + size); -+ buf->stride = stride; -+ wlr_buffer_init(&buf->base, &buffer_impl, mon->b.width, mon->b.height); -+ -+ pix = pixman_image_create_bits( -+ PIXMAN_a8r8g8b8, mon->b.width, mon->b.height, buf->data, stride); -+ -+ /* draw status first so it can be overdrawn by tags later */ -+ if (mon == selmon) { -+ if (stext[0] == '\0') -+ strncpy(stext, "dwl-"VERSION, sizeof(stext)); -+ tw = TEXTW(stext) - lrpad; -+ drwl_text(pix, font, mon->b.width - tw, 0, tw, mon->b.height, 0, -+ stext, &normbarfg, &normbarbg); -+ } -+ -+ wl_list_for_each(c, &clients, link) { -+ if (c->mon != mon) -+ continue; -+ occ |= c->tags; -+ if (c->isurgent) -+ urg |= c->tags; -+ } -+ c = focustop(mon); -+ x = 0; -+ for (i = 0; i < LENGTH(tags); i++) { -+ w = TEXTW(tags[i]); -+ sel = mon->tagset[mon->seltags] & 1 << i; -+ -+ drwl_text(pix, font, x, 0, w, mon->b.height, lrpad / 2, tags[i], -+ urg & 1 << i ? &selbarbg : (sel ? &selbarfg : &normbarfg), -+ urg & 1 << i ? &selbarfg : (sel ? &selbarbg : &normbarbg)); -+ -+ if (occ & 1 << i) -+ drwl_rect(pix, x + boxs, boxs, boxw, boxw, sel, -+ urg & 1 << i ? &selbarbg : (sel ? &selbarfg : &normbarfg)); -+ -+ x += w; -+ } -+ -+ w = TEXTW(mon->ltsymbol); -+ x = drwl_text(pix, font, x, 0, w, mon->b.height, lrpad / 2, -+ mon->ltsymbol, &normbarfg, &normbarbg); -+ -+ pixman_image_unref(pix); -+ wlr_scene_node_set_position(&mon->scene_buffer->node, mon->m.x, -+ mon->m.y + (topbar ? 0 : mon->m.height - mon->b.height)); -+ wlr_scene_buffer_set_buffer(mon->scene_buffer, &buf->base); -+ wlr_buffer_drop(&buf->base); -+} -+ -+void -+drawbars(void) -+{ -+ Monitor *m = NULL; -+ -+ wl_list_for_each(m, &mons, link) -+ drawbar(m); -+} -+ - void - focusclient(Client *c, int lift) - { -@@ -1290,7 +1477,7 @@ focusclient(Client *c, int lift) - client_activate_surface(old, 0); - } - } -- printstatus(); -+ drawbars(); - - if (!c) { - /* With no client, all we have left is to clear focus */ -@@ -1618,7 +1805,7 @@ mapnotify(struct wl_listener *listener, void *data) - } else { - applyrules(c); - } -- printstatus(); -+ drawbars(); - - unset_fullscreen: - m = c->mon ? c->mon : xytomon(c->geom.x, c->geom.y); -@@ -1904,46 +2091,6 @@ pointerfocus(Client *c, struct wlr_surface *surface, double sx, double sy, - wlr_seat_pointer_notify_motion(seat, time, sx, sy); - } - --void --printstatus(void) --{ -- Monitor *m = NULL; -- Client *c; -- uint32_t occ, urg, sel; -- const char *appid, *title; -- -- wl_list_for_each(m, &mons, link) { -- occ = urg = 0; -- wl_list_for_each(c, &clients, link) { -- if (c->mon != m) -- continue; -- occ |= c->tags; -- if (c->isurgent) -- urg |= c->tags; -- } -- if ((c = focustop(m))) { -- title = client_get_title(c); -- appid = client_get_appid(c); -- printf("%s title %s\n", m->wlr_output->name, title ? title : broken); -- printf("%s appid %s\n", m->wlr_output->name, appid ? appid : broken); -- printf("%s fullscreen %d\n", m->wlr_output->name, c->isfullscreen); -- printf("%s floating %d\n", m->wlr_output->name, c->isfloating); -- sel = c->tags; -- } else { -- printf("%s title \n", m->wlr_output->name); -- printf("%s appid \n", m->wlr_output->name); -- printf("%s fullscreen \n", m->wlr_output->name); -- printf("%s floating \n", m->wlr_output->name); -- sel = 0; -- } -- -- printf("%s selmon %u\n", m->wlr_output->name, m == selmon); -- printf("%s tags %"PRIu32" %"PRIu32" %"PRIu32" %"PRIu32"\n", -- m->wlr_output->name, occ, m->tagset[m->seltags], sel, urg); -- printf("%s layout %s\n", m->wlr_output->name, m->ltsymbol); -- } -- fflush(stdout); --} - - void - quit(const Arg *arg) -@@ -2074,23 +2221,14 @@ run(char *startup_cmd) - - /* 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(); -+ drawbars(); - - /* At this point the outputs are initialized, choose initial selmon based on - * cursor position, and set default cursor image */ -@@ -2155,7 +2293,7 @@ setfloating(Client *c, int floating) - (p && p->isfullscreen) ? LyrFS - : c->isfloating ? LyrFloat : LyrTile]); - arrange(c->mon); -- printstatus(); -+ drawbars(); - } - - void -@@ -2178,7 +2316,7 @@ setfullscreen(Client *c, int fullscreen) - resize(c, c->prev, 0); - } - arrange(c->mon); -- printstatus(); -+ drawbars(); - } - - void -@@ -2203,7 +2341,7 @@ setlayout(const Arg *arg) - selmon->lt[selmon->sellt] = (Layout *)arg->v; - strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, LENGTH(selmon->ltsymbol)); - arrange(selmon); -- printstatus(); -+ drawbar(selmon); - } - - /* arg > 1.0 will set mfact absolutely */ -@@ -2506,6 +2644,17 @@ setup(void) - - wlr_scene_set_presentation(scene, wlr_presentation_create(dpy, backend)); - -+ fcft_init(FCFT_LOG_COLORIZE_AUTO, 0, FCFT_LOG_CLASS_ERROR); -+ fcft_set_scaling_filter(FCFT_SCALING_FILTER_LANCZOS3); -+ if (!(font = fcft_from_name(LENGTH(fonts), fonts, fontattrs))) -+ die("Could not load font"); -+ -+ lrpad = font->height; -+ bh = font->height + 2; -+ -+ status_event_source = wl_event_loop_add_fd(wl_display_get_event_loop(dpy), -+ STDIN_FILENO, WL_EVENT_READABLE, status_in, NULL); -+ - /* 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 - * compositor has Xwayland support */ -@@ -2530,6 +2679,7 @@ void - spawn(const Arg *arg) - { - if (fork() == 0) { -+ close(STDIN_FILENO); - dup2(STDERR_FILENO, STDOUT_FILENO); - setsid(); - execvp(((char **)arg->v)[0], (char **)arg->v); -@@ -2548,6 +2698,30 @@ startdrag(struct wl_listener *listener, void *data) - LISTEN_STATIC(&drag->icon->events.destroy, destroydragicon); - } - -+int -+status_in(int fd, unsigned int mask, void *data) -+{ -+ char status[1024]; -+ ssize_t n; -+ -+ if (mask & WL_EVENT_ERROR) -+ die("status in event error"); -+ if (mask & WL_EVENT_HANGUP) -+ wl_event_source_remove(status_event_source); -+ -+ n = read(fd, status, sizeof(status) - 1); -+ if (n < 0 && errno != EWOULDBLOCK) -+ die("read:"); -+ -+ status[n] = '\0'; -+ status[strcspn(status, "\n")] = '\0'; -+ -+ strncpy(stext, status, sizeof(stext)); -+ drawbars(); -+ -+ return 0; -+} -+ - void - tag(const Arg *arg) - { -@@ -2558,7 +2732,7 @@ tag(const Arg *arg) - sel->tags = arg->ui & TAGMASK; - focusclient(focustop(selmon), 1); - arrange(selmon); -- printstatus(); -+ drawbars(); - } - - void -@@ -2603,6 +2777,14 @@ tile(Monitor *m) - } - } - -+void -+togglebar(const Arg *arg) -+{ -+ selmon->showbar = !selmon->showbar; -+ wlr_scene_node_set_enabled(&selmon->scene_buffer->node, selmon->showbar); -+ arrangelayers(selmon); -+} -+ - void - togglefloating(const Arg *arg) - { -@@ -2631,7 +2813,7 @@ toggletag(const Arg *arg) - sel->tags = newtags; - focusclient(focustop(selmon), 1); - arrange(selmon); -- printstatus(); -+ drawbars(); - } - - void -@@ -2644,7 +2826,7 @@ toggleview(const Arg *arg) - selmon->tagset[selmon->seltags] = newtagset; - focusclient(focustop(selmon), 1); - arrange(selmon); -- printstatus(); -+ drawbars(); - } - - void -@@ -2692,7 +2874,7 @@ unmapnotify(struct wl_listener *listener, void *data) - } - - wlr_scene_node_destroy(&c->scene->node); -- printstatus(); -+ drawbars(); - motionnotify(0, NULL, 0, 0, 0, 0); - } - -@@ -2788,6 +2970,12 @@ updatemons(struct wl_listener *listener, void *data) - } - } - -+ /* Update bar */ -+ wl_list_for_each(m, &mons, link) { -+ updatebardims(m); -+ drawbar(m); -+ } -+ - /* FIXME: figure out why the cursor image is at 0,0 after turning all - * the monitors on. - * Move the cursor image where it used to be. It does not generate a -@@ -2798,12 +2986,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_effective_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); - if (c == focustop(c->mon)) -- printstatus(); -+ drawbars(); - } - - void -@@ -2816,7 +3013,7 @@ urgent(struct wl_listener *listener, void *data) - return; - - c->isurgent = 1; -- printstatus(); -+ drawbars(); - - if (client_surface(c)->mapped) - client_set_border_color(c, urgentcolor); -@@ -2832,7 +3029,7 @@ view(const Arg *arg) - selmon->tagset[selmon->seltags] = arg->ui & TAGMASK; - focusclient(focustop(selmon), 1); - arrange(selmon); -- printstatus(); -+ drawbars(); - } - - void -@@ -2871,6 +3068,7 @@ xytonode(double x, double y, struct wlr_surface **psurface, - { - struct wlr_scene_node *node, *pnode; - struct wlr_surface *surface = NULL; -+ struct wlr_scene_surface *scene_surface = NULL; - Client *c = NULL; - LayerSurface *l = NULL; - int layer; -@@ -2879,9 +3077,12 @@ xytonode(double x, double y, struct wlr_surface **psurface, - if (!(node = wlr_scene_node_at(&layers[layer]->node, x, y, nx, ny))) - continue; - -- if (node->type == WLR_SCENE_NODE_BUFFER) -- surface = wlr_scene_surface_try_from_buffer( -- wlr_scene_buffer_from_node(node))->surface; -+ if (node->type == WLR_SCENE_NODE_BUFFER) { -+ scene_surface = wlr_scene_surface_try_from_buffer( -+ wlr_scene_buffer_from_node(node)); -+ if (!scene_surface) continue; -+ surface = scene_surface->surface; -+ } - /* Walk the tree to find a node that knows the client */ - for (pnode = node; pnode && !c; pnode = &pnode->parent->node) - c = pnode->data; -@@ -3020,7 +3221,7 @@ sethints(struct wl_listener *listener, void *data) - return; - - c->isurgent = xcb_icccm_wm_hints_get_urgency(c->surface.xwayland->hints); -- printstatus(); -+ drawbars(); - - if (c->isurgent && surface && surface->mapped) - client_set_border_color(c, urgentcolor); --- -2.45.1 - diff --git a/patches/notitle/notitle.patch b/patches/notitle/notitle.patch new file mode 100644 index 0000000..5c8d04b --- /dev/null +++ b/patches/notitle/notitle.patch @@ -0,0 +1,37 @@ +From 713fd63a92f270a378dc947dd1a0c792e24c51ed Mon Sep 17 00:00:00 2001 +From: rxmmah +Date: Mon, 3 Jun 2024 09:12:59 +0200 +Subject: [PATCH] Remove title drawing section from dwl.c + +--- + dwl.c | 14 -------------- + 1 file changed, 14 deletions(-) + +diff --git a/dwl.c b/dwl.c +index a3d9671..72383d9 100644 +--- a/dwl.c ++++ b/dwl.c +@@ -1486,20 +1486,6 @@ drawbar(Monitor *mon) + modes_labels[active_mode_index], &normbarfg, &modebarbg); + } + +- if ((w = mon->b.width - tw - x) > mon->b.height) { +- drwl_rect(pix, x, 0, w, mon->b.height, 1, &normbarbg); +- if (c != NULL) { +- w = TEXTW(title = client_get_title(c)); +- drwl_text(pix, font, x, 0, w, mon->b.height, lrpad / 2, +- title, +- mon == selmon ? &selbarfg : &normbarfg, +- (mon == selmon && c) ? &selbarbg : &normbarbg); +- if (c && c->isfloating) +- drwl_rect(pix, x + boxs, boxs, boxw, boxw, 0, +- mon == selmon ? &selbarfg : &normbarfg); +- } +- } +- + pixman_image_unref(pix); + wlr_scene_node_set_position(&mon->scene_buffer->node, mon->m.x, + mon->m.y + (topbar ? 0 : mon->m.height - mon->b.height)); +-- +2.45.1 +