~ruther/dwl

dca68f9aa1ea7132391828456093463de008e0c4 — Leonardo Hernández Hernández 2 years ago 31fa660 + 22bd752
Merge remote-tracking branch 'djpohly/main' into wlroots-next
6 files changed, 64 insertions(+), 12 deletions(-)

M Makefile
M client.h
M config.mk
M dwl.1
M dwl.c
A generate-version.sh
M Makefile => Makefile +11 -2
@@ 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)


@@ 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

M client.h => client.h +2 -0
@@ 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


M config.mk => config.mk +3 -0
@@ 1,3 1,6 @@
_VERSION = 0.3.1
VERSION = $(shell ./generate-version.sh $(_VERSION))

# paths
PREFIX = /usr/local
MANDIR = $(PREFIX)/share/man

M dwl.1 => dwl.1 +7 -0
@@ 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

M dwl.c => dwl.c +28 -10
@@ 475,8 475,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;
			}
		}


@@ 516,7 519,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) {


@@ 615,6 618,7 @@ closemon(Monitor *m)
		if (c->mon == m)
			setmon(c, selmon, c->tags);
	}
	printstatus();
}

void


@@ 1013,10 1017,22 @@ 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),
			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);


@@ 2227,11 2243,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 */


@@ 2402,9 2418,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;
	}


@@ 2420,5 2438,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]);
}

A generate-version.sh => generate-version.sh +13 -0
@@ 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

Do not follow this link