From b86fcf6504e7b6aafcace2e099d2de822c25fbf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leonardo=20Hern=C3=A1ndez=20Hern=C3=A1ndez?= Date: Sun, 10 Apr 2022 21:38:48 -0500 Subject: [PATCH 1/9] add missing return in client_is_floating_type() This causes all Xwayland clients to be treated as floating --- client.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client.h b/client.h index 41c9b9a..2ea0d22 100644 --- a/client.h +++ b/client.h @@ -113,6 +113,8 @@ client_is_float_type(Client *c) && (size_hints->max_width == size_hints->min_width || size_hints->max_height == size_hints->min_height)) return 1; + + return 0; } #endif From a48ce99e6a3c0dda331781942995a85ba8e438a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leonardo=20Hern=C3=A1ndez=20Hern=C3=A1ndez?= Date: Fri, 15 Apr 2022 17:40:02 -0500 Subject: [PATCH 2/9] use pointer math in xytonode() --- dwl.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dwl.c b/dwl.c index b09fc6f..88043d8 100644 --- a/dwl.c +++ b/dwl.c @@ -2344,11 +2344,11 @@ xytonode(double x, double y, struct wlr_surface **psurface, struct wlr_surface *surface = NULL; Client *c = NULL; LayerSurface *l = NULL; - int i; + const int *layer; int focus_order[] = { LyrOverlay, LyrTop, LyrFloat, LyrTile, LyrBottom, LyrBg }; - for (i = 0; i < LENGTH(focus_order); i++) { - if ((node = wlr_scene_node_at(layers[focus_order[i]], x, y, nx, ny))) { + for (layer = focus_order; layer < END(focus_order); layer++) { + if ((node = wlr_scene_node_at(layers[*layer], x, y, nx, ny))) { if (node->type == WLR_SCENE_NODE_SURFACE) surface = wlr_scene_surface_from_node(node)->surface; /* Walk the tree to find a node that knows the client */ From d071a899f3b302f3fbaa85c378d0854b7fa39e8e Mon Sep 17 00:00:00 2001 From: Ben Jargowsky Date: Mon, 25 Apr 2022 13:48:41 -0700 Subject: [PATCH 3/9] Run printstatus() when a monitor is removed --- dwl.c | 1 + 1 file changed, 1 insertion(+) diff --git a/dwl.c b/dwl.c index 88043d8..0628bfb 100644 --- a/dwl.c +++ b/dwl.c @@ -740,6 +740,7 @@ closemon(Monitor *m) if (c->mon == m) setmon(c, selmon, c->tags); } + printstatus(); } void From 3a4b7d104ff8bfc14862b7e41bcacb35677306a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leonardo=20Hern=C3=A1ndez=20Hern=C3=A1ndez?= Date: Sun, 3 Apr 2022 17:18:05 -0500 Subject: [PATCH 4/9] restack xwayland surface on focusclient() --- dwl.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/dwl.c b/dwl.c index 0628bfb..b675b67 100644 --- a/dwl.c +++ b/dwl.c @@ -1135,6 +1135,15 @@ focusclient(Client *c, int lift) return; } +#ifdef XWAYLAND + /* This resolves an issue where the last spawned xwayland client + * receives all pointer activity. + */ + if (c->type == X11Managed) + wlr_xwayland_surface_restack(c->surface.xwayland, NULL, + XCB_STACK_MODE_ABOVE); +#endif + /* Have a client, so focus its top-level wlr_surface */ kb = wlr_seat_get_keyboard(seat); wlr_seat_keyboard_notify_enter(seat, client_surface(c), From e0d310fd84eb4fa34527f6695c998ce9f5eb56d6 Mon Sep 17 00:00:00 2001 From: Ben Jargowsky Date: Tue, 5 Apr 2022 23:22:15 -0700 Subject: [PATCH 5/9] Handle 'wlr_seat_get_keyboard' possibly returning null. --- dwl.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/dwl.c b/dwl.c index b675b67..74b11a8 100644 --- a/dwl.c +++ b/dwl.c @@ -600,8 +600,11 @@ arrangelayers(Monitor *m) layersurface->layer_surface->mapped) { /* Deactivate the focused client. */ focusclient(NULL, 0); - wlr_seat_keyboard_notify_enter(seat, layersurface->layer_surface->surface, - kb->keycodes, kb->num_keycodes, &kb->modifiers); + if (kb) + wlr_seat_keyboard_notify_enter(seat, layersurface->layer_surface->surface, + kb->keycodes, kb->num_keycodes, &kb->modifiers); + else + wlr_seat_keyboard_notify_enter(seat, layersurface->layer_surface->surface, NULL, 0, NULL); return; } } @@ -641,7 +644,7 @@ buttonpress(struct wl_listener *listener, void *data) focusclient(c, 1); keyboard = wlr_seat_get_keyboard(seat); - mods = wlr_keyboard_get_modifiers(keyboard); + 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) { @@ -1146,8 +1149,11 @@ focusclient(Client *c, int lift) /* Have a client, so focus its top-level wlr_surface */ kb = wlr_seat_get_keyboard(seat); - wlr_seat_keyboard_notify_enter(seat, client_surface(c), - kb->keycodes, kb->num_keycodes, &kb->modifiers); + if (kb) + wlr_seat_keyboard_notify_enter(seat, client_surface(c), + kb->keycodes, kb->num_keycodes, &kb->modifiers); + else + wlr_seat_keyboard_notify_enter(seat, client_surface(c), NULL, 0, NULL); /* Activate the new client */ client_activate_surface(client_surface(c), 1); From 5d8084daa7812931b53d65312b2cebf9a8453e49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leonardo=20Hern=C3=A1ndez=20Hern=C3=A1ndez?= Date: Mon, 9 May 2022 14:52:03 -0500 Subject: [PATCH 6/9] add flag to print version and exit --- Makefile | 2 +- config.mk | 3 +++ dwl.c | 4 +++- generate-version.sh | 13 +++++++++++++ 4 files changed, 20 insertions(+), 2 deletions(-) create mode 100755 generate-version.sh diff --git a/Makefile b/Makefile index 48a0aa7..c235633 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ include config.mk -CFLAGS += -I. -DWLR_USE_UNSTABLE -std=c99 -pedantic +CFLAGS += -I. -DWLR_USE_UNSTABLE -std=c99 -pedantic -DVERSION=\"$(VERSION)\" WAYLAND_PROTOCOLS=$(shell pkg-config --variable=pkgdatadir wayland-protocols) WAYLAND_SCANNER=$(shell pkg-config --variable=wayland_scanner wayland-scanner) diff --git a/config.mk b/config.mk index 960fc8a..37b4114 100644 --- a/config.mk +++ b/config.mk @@ -1,3 +1,6 @@ +_VERSION = 0.3.1 +VERSION = $(shell ./generate-version.sh $(_VERSION)) + # paths PREFIX = /usr/local MANDIR = $(PREFIX)/share/man diff --git a/dwl.c b/dwl.c index 74b11a8..48eb1a3 100644 --- a/dwl.c +++ b/dwl.c @@ -2516,9 +2516,11 @@ main(int argc, char *argv[]) char *startup_cmd = NULL; int c; - while ((c = getopt(argc, argv, "s:h")) != -1) { + while ((c = getopt(argc, argv, "s:hv")) != -1) { if (c == 's') startup_cmd = optarg; + else if (c == 'v') + die("dwl " VERSION); else goto usage; } diff --git a/generate-version.sh b/generate-version.sh new file mode 100755 index 0000000..cf408e1 --- /dev/null +++ b/generate-version.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +if git tag --contains HEAD | grep -q $1; then + echo $1 +else + branch="$(git rev-parse --abbrev-ref HEAD)" + commit="$(git rev-parse --short HEAD)" + if [ "${branch}" != "main" ]; then + echo $1-$branch-$commit + else + echo $1-$commit + fi +fi From d5a741c9b47f744428e75a76b9f5f6410acfbcf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leonardo=20Hern=C3=A1ndez=20Hern=C3=A1ndez?= Date: Mon, 9 May 2022 15:20:37 -0500 Subject: [PATCH 7/9] add dist target --- Makefile | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index c235633..0c2b78d 100644 --- a/Makefile +++ b/Makefile @@ -14,6 +14,15 @@ all: dwl clean: rm -f dwl *.o *-protocol.h *-protocol.c +dist: clean + mkdir -p dwl-$(VERSION) + cp -R LICENSE* Makefile README.md generate-version.sh client.h\ + config.def.h config.mk protocols dwl.1 dwl.c util.c util.h\ + dwl-$(VERSION) + echo "echo $(VERSION)" > dwl-$(VERSION)/generate-version.sh + tar -caf dwl-$(VERSION).tar.gz dwl-$(VERSION) + rm -rf dwl-$(VERSION) + install: dwl install -Dm755 dwl $(DESTDIR)$(PREFIX)/bin/dwl install -Dm644 dwl.1 $(DESTDIR)$(MANDIR)/man1/dwl.1 @@ -21,7 +30,7 @@ install: dwl uninstall: rm -f $(DESTDIR)$(PREFIX)/bin/dwl $(DESTDIR)$(MANDIR)/man1/dwl.1 -.PHONY: all clean install uninstall +.PHONY: all clean dist install uninstall # wayland-scanner is a tool which generates C headers and rigging for Wayland # protocols, which are specified in XML. wlroots requires you to rig these up From 063736f8981c5f71b816f4e8ab2ab54618c3ee8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leonardo=20Hern=C3=A1ndez=20Hern=C3=A1ndez?= Date: Tue, 10 May 2022 11:39:33 -0500 Subject: [PATCH 8/9] add `-v` flag to the manpage Thanks @Humm42 --- dwl.1 | 7 +++++++ dwl.c | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/dwl.1 b/dwl.1 index eea0f70..f50602c 100644 --- a/dwl.1 +++ b/dwl.1 @@ -6,6 +6,7 @@ .Nd dwm for Wayland .Sh SYNOPSIS .Nm +.Op Fl v .Op Fl s Ar command .Sh DESCRIPTION .Nm @@ -15,6 +16,12 @@ It is intended to fill the same space in the Wayland world that does for X11. .Pp When given the +.Fl v +option, +.Nm +writes its name and version to standard error and exits unsuccessfully. +.Pp +When given the .Fl s option, .Nm diff --git a/dwl.c b/dwl.c index 48eb1a3..3ebe37a 100644 --- a/dwl.c +++ b/dwl.c @@ -2536,5 +2536,5 @@ main(int argc, char *argv[]) return EXIT_SUCCESS; usage: - die("Usage: %s [-s startup command]", argv[0]); + die("Usage: %s [-v] [-s startup command]", argv[0]); } From 22bd75226bc897a3b2ad90f36883ff489d435eb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leonardo=20Hern=C3=A1ndez=20Hern=C3=A1ndez?= Date: Tue, 10 May 2022 11:42:40 -0500 Subject: [PATCH 9/9] remove trailing whitespaces --- dwl.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dwl.c b/dwl.c index 3ebe37a..8088d9f 100644 --- a/dwl.c +++ b/dwl.c @@ -600,10 +600,10 @@ arrangelayers(Monitor *m) layersurface->layer_surface->mapped) { /* Deactivate the focused client. */ focusclient(NULL, 0); - if (kb) + if (kb) wlr_seat_keyboard_notify_enter(seat, layersurface->layer_surface->surface, kb->keycodes, kb->num_keycodes, &kb->modifiers); - else + else wlr_seat_keyboard_notify_enter(seat, layersurface->layer_surface->surface, NULL, 0, NULL); return; } @@ -1149,10 +1149,10 @@ focusclient(Client *c, int lift) /* Have a client, so focus its top-level wlr_surface */ kb = wlr_seat_get_keyboard(seat); - if (kb) + if (kb) wlr_seat_keyboard_notify_enter(seat, client_surface(c), kb->keycodes, kb->num_keycodes, &kb->modifiers); - else + else wlr_seat_keyboard_notify_enter(seat, client_surface(c), NULL, 0, NULL); /* Activate the new client */