Massive code cleanup

Cleaned up:
Makefile
config.mk/.h
nix files (by removing them for now)
Removed dwl likeness.
This commit is contained in:
2026-06-28 17:39:02 -04:00
parent 763512a24f
commit f529f03315
11 changed files with 202 additions and 330 deletions
+84 -55
View File
@@ -1,84 +1,117 @@
.POSIX:
.SUFFIXES:
include config.mk
VERSION = `git describe --tags --dirty 2>/dev/null || echo 0.2`
PREFIX = /usr/local
CC = cc
PKG_CONFIG = pkg-config
DWLCFLAGS = `$(PKG_CONFIG) --cflags $(PKGS)` $(WLR_INCS) \
-I. -Iinclude -Isrc -Iparser -DWLR_USE_UNSTABLE -D_POSIX_C_SOURCE=200809L -DVERSION=\"$(VERSION)\" \
# Uncomment to build without XWayland support
#XWAYLAND =
#XLIBS =
XWAYLAND = -DXWAYLAND
XLIBS = xcb xcb-icccm
LUA_PKG = lua5.4
PKGS = wayland-server xkbcommon libinput $(LUA_PKG) $(XLIBS)
CFLAGS = `$(PKG_CONFIG) --cflags $(PKGS) wlroots-0.20` \
-I. -Iinclude -Isrc -Iparser -Iprotocols \
-DWLR_USE_UNSTABLE -D_POSIX_C_SOURCE=200809L -DVERSION=\"$(VERSION)\" \
$(XWAYLAND) -g -Wall -Wextra -Wno-unused-parameter -O1 -std=c11 $(CFLAGS)
LDLIBS = `$(PKG_CONFIG) --libs $(PKGS)` $(WLR_LIBS) -lm $(LIBS)
SCANNER = `$(PKG_CONFIG) --variable=wayland_scanner wayland-scanner`
PROTOCOLS = `$(PKG_CONFIG) --variable=pkgdatadir wayland-protocols`
LDLIBS = `$(PKG_CONFIG) --libs $(PKGS) wlroots-0.20` -lm $(LIBS)
SMSG_CFLAGS = `$(PKG_CONFIG) --cflags wayland-client` -Wall -Wextra -Wno-unused-parameter
SMSG_LDLIBS = `$(PKG_CONFIG) --libs wayland-client`
SCANNER = `$(PKG_CONFIG) --variable=wayland_scanner wayland-scanner`
WLPROTO = `$(PKG_CONFIG) --variable=pkgdatadir wayland-protocols`
PROTO_OBJS = protocols/peachwm-ipc-unstable-v2-protocol.o \
protocols/ext-workspace-v1-protocol.o
all: peachwm smsg/smsg
peachwm: src/dwl.o src/util.o parser/parser.o dwl-ipc-unstable-v2-protocol.o src/wlr_ext_workspace_v1.o ext-workspace-v1-protocol.o
$(CC) $^ $(DWLCFLAGS) $(LDFLAGS) $(LDLIBS) -o $@
# Compositor
src/dwl.o: src/peachwm.c include/client.h config.h include/dwl-ipc.h dwl-ipc-unstable-v2-protocol.h \
include/ext-workspace.h src/wlr_ext_workspace_v1.h ext-workspace-v1-protocol.h \
cursor-shape-v1-protocol.h pointer-constraints-unstable-v1-protocol.h \
wlr-layer-shell-unstable-v1-protocol.h \
wlr-output-power-management-unstable-v1-protocol.h xdg-shell-protocol.h \
parser/parser.h
$(CC) $(DWLCFLAGS) -o $@ -c $<
peachwm: src/peachwm.o src/util.o parser/parser.o \
src/wlr_ext_workspace_v1.o $(PROTO_OBJS)
$(CC) $^ $(LDFLAGS) $(LDLIBS) -o $@
src/peachwm.o: src/peachwm.c include/client.h include/ipc.h \
include/ext-workspace.h src/wlr_ext_workspace_v1.h parser/parser.h \
protocols/peachwm-ipc-unstable-v2-protocol.h \
protocols/ext-workspace-v1-protocol.h \
protocols/cursor-shape-v1-protocol.h \
protocols/pointer-constraints-unstable-v1-protocol.h \
protocols/wlr-layer-shell-unstable-v1-protocol.h \
protocols/wlr-output-power-management-unstable-v1-protocol.h \
protocols/xdg-shell-protocol.h
$(CC) $(CFLAGS) -o $@ -c $<
src/util.o: src/util.c src/util.h
$(CC) $(DWLCFLAGS) -o $@ -c $<
$(CC) $(CFLAGS) -o $@ -c $<
src/wlr_ext_workspace_v1.o: src/wlr_ext_workspace_v1.c src/wlr_ext_workspace_v1.h ext-workspace-v1-protocol.h
$(CC) $(DWLCFLAGS) -o $@ -c $<
src/wlr_ext_workspace_v1.o: src/wlr_ext_workspace_v1.c \
src/wlr_ext_workspace_v1.h protocols/ext-workspace-v1-protocol.h
$(CC) $(CFLAGS) -o $@ -c $<
parser/parser.o: parser/parser.c parser/parser.h
$(CC) $(DWLCFLAGS) -o $@ -c $<
$(CC) $(CFLAGS) -o $@ -c $<
dwl-ipc-unstable-v2-protocol.o: dwl-ipc-unstable-v2-protocol.c
$(PROTO_OBJS): protocols/%-protocol.o: protocols/%-protocol.c
$(CC) $(CFLAGS) -o $@ -c $<
ext-workspace-v1-protocol.o: ext-workspace-v1-protocol.c
# Protocol headers and glue code
# protocol headers and glue
cursor-shape-v1-protocol.h:
$(SCANNER) enum-header $(PROTOCOLS)/staging/cursor-shape/cursor-shape-v1.xml $@
pointer-constraints-unstable-v1-protocol.h:
$(SCANNER) enum-header $(PROTOCOLS)/unstable/pointer-constraints/pointer-constraints-unstable-v1.xml $@
wlr-layer-shell-unstable-v1-protocol.h:
protocols/cursor-shape-v1-protocol.h:
$(SCANNER) enum-header $(WLPROTO)/staging/cursor-shape/cursor-shape-v1.xml $@
protocols/pointer-constraints-unstable-v1-protocol.h:
$(SCANNER) enum-header $(WLPROTO)/unstable/pointer-constraints/pointer-constraints-unstable-v1.xml $@
protocols/wlr-layer-shell-unstable-v1-protocol.h:
$(SCANNER) enum-header protocols/wlr-layer-shell-unstable-v1.xml $@
wlr-output-power-management-unstable-v1-protocol.h:
protocols/wlr-output-power-management-unstable-v1-protocol.h:
$(SCANNER) server-header protocols/wlr-output-power-management-unstable-v1.xml $@
xdg-shell-protocol.h:
$(SCANNER) server-header $(PROTOCOLS)/stable/xdg-shell/xdg-shell.xml $@
dwl-ipc-unstable-v2-protocol.h:
$(SCANNER) server-header protocols/dwl-ipc-unstable-v2.xml $@
dwl-ipc-unstable-v2-protocol.c:
$(SCANNER) private-code protocols/dwl-ipc-unstable-v2.xml $@
# smsg
smsg/dwl-ipc-unstable-v2-protocol.h:
$(SCANNER) client-header protocols/dwl-ipc-unstable-v2.xml $@
protocols/xdg-shell-protocol.h:
$(SCANNER) server-header $(WLPROTO)/stable/xdg-shell/xdg-shell.xml $@
smsg/dwl-ipc-unstable-v2-protocol.c:
$(SCANNER) private-code protocols/dwl-ipc-unstable-v2.xml $@
protocols/peachwm-ipc-unstable-v2-protocol.h:
$(SCANNER) server-header protocols/peachwm-ipc-unstable-v2.xml $@
smsg/dwl-ipc-unstable-v2-protocol.o: smsg/dwl-ipc-unstable-v2-protocol.c
$(CC) $(SMSG_CFLAGS) -o $@ -c $<
protocols/peachwm-ipc-unstable-v2-protocol.c:
$(SCANNER) private-code protocols/peachwm-ipc-unstable-v2.xml $@
smsg/smsg.o: smsg/smsg.c smsg/dwl-ipc-unstable-v2-protocol.h
$(CC) $(SMSG_CFLAGS) -o $@ -c $<
smsg/smsg: smsg/smsg.o smsg/dwl-ipc-unstable-v2-protocol.o
$(CC) $^ $(SMSG_CFLAGS) $(SMSG_LDLIBS) -o $@
ext-workspace-v1-protocol.h:
protocols/ext-workspace-v1-protocol.h:
$(SCANNER) server-header protocols/ext-workspace-v1.xml $@
ext-workspace-v1-protocol.c:
protocols/ext-workspace-v1-protocol.c:
$(SCANNER) private-code protocols/ext-workspace-v1.xml $@
# smsg IPC client
smsg/peachwm-ipc-unstable-v2-protocol.h:
$(SCANNER) client-header protocols/peachwm-ipc-unstable-v2.xml $@
smsg/peachwm-ipc-unstable-v2-protocol.c:
$(SCANNER) private-code protocols/peachwm-ipc-unstable-v2.xml $@
smsg/peachwm-ipc-unstable-v2-protocol.o: smsg/peachwm-ipc-unstable-v2-protocol.c
$(CC) $(SMSG_CFLAGS) -o $@ -c $<
smsg/smsg.o: smsg/smsg.c smsg/peachwm-ipc-unstable-v2-protocol.h
$(CC) $(SMSG_CFLAGS) -o $@ -c $<
smsg/smsg: smsg/smsg.o smsg/peachwm-ipc-unstable-v2-protocol.o
$(CC) $^ $(SMSG_CFLAGS) $(SMSG_LDLIBS) -o $@
clean:
rm -f peachwm smsg/smsg src/*.o parser/*.o smsg/*.o smsg/*-protocol.h smsg/*-protocol.c *.o *-protocol.h *-protocol.c
rm -f peachwm smsg/smsg src/*.o parser/*.o smsg/*.o \
protocols/*.o protocols/*-protocol.h protocols/*-protocol.c \
smsg/*-protocol.h smsg/*-protocol.c
install: peachwm smsg/smsg
mkdir -p $(DESTDIR)$(PREFIX)/bin
@@ -93,7 +126,3 @@ uninstall:
rm -f $(DESTDIR)$(PREFIX)/bin/peachwm
rm -f $(DESTDIR)$(PREFIX)/bin/smsg
rm -rf $(DESTDIR)/etc/peachwm
.SUFFIXES: .c .o
.c.o:
$(CC) $(DWLCFLAGS) -o $@ -c $<
-6
View File
@@ -1,6 +0,0 @@
static void dwindle(Monitor *m);
static const Layout layouts[] = {
{"><>", NULL},
{"[T]", dwindle},
};
-31
View File
@@ -1,31 +0,0 @@
_VERSION = 0.1
VERSION = `git describe --tags --dirty 2>/dev/null || echo $(_VERSION)`
PKG_CONFIG = pkg-config
# paths
PREFIX = /usr/local
MANDIR = $(PREFIX)/share/man
DATDIR = $(PREFIX)/share
WLR_INCS = `$(PKG_CONFIG) --cflags wlroots-0.20`
WLR_LIBS = `$(PKG_CONFIG) --libs wlroots-0.20`
# Allow using an alternative wlroots installation
#WLR_INCS = -I/usr/include/pixman-1 -I/usr/include/elogind -I/usr/include/libdrm \
# -I$(PWD)/wlroots/include
#WLR_LIBS = -Wl,-rpath,$(PWD)/wlroots/build -L$(PWD)/wlroots/build -lwlroots-0.19
#XWAYLAND =
#XLIBS =
# Uncomment to build XWayland support
XWAYLAND = -DXWAYLAND
XLIBS = xcb xcb-icccm
# lua
LUA_PKG = lua5.4
PKGS = wayland-server xkbcommon libinput $(LUA_PKG) $(XLIBS)
# Requires C11: _Alignas and anonymous unions in wlroots headers.
CC = cc
Generated
-61
View File
@@ -1,61 +0,0 @@
{
"nodes": {
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1782467914,
"narHash": "sha256-pGvFkM8N0xEkIIXDe5YYfbEAvHrk4IxBrjB/x8OomhE=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "e73de5be04e0eff4190a1432b946d469c794e7b4",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
}
},
"root": "root",
"version": 7
}
-64
View File
@@ -1,64 +0,0 @@
{
description = "peachwm: a dwl fork with Lua config, IPC, and ext-workspace support, plus its smsg client";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, flake-utils }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = nixpkgs.legacyPackages.${system};
in
{
packages.default = pkgs.stdenv.mkDerivation rec {
pname = "peachwm";
version = "0.1";
src = self;
nativeBuildInputs = with pkgs; [
pkg-config
wayland-scanner
wayland-protocols
];
buildInputs = with pkgs; [
wayland
wlroots
pixman
libxkbcommon
libinput
lua5_4
libxcb
libxcb-wm
];
enableParallelBuilding = true;
postPatch = ''
substituteInPlace Makefile \
--replace '$(DESTDIR)/etc/peachwm' '$(DESTDIR)$(PREFIX)/etc/peachwm'
'';
makeFlags = [ "PREFIX=${placeholder "out"}" ];
meta = with pkgs.lib; {
description = "A dwl fork with Lua configuration, IPC support, and ext-workspace-v1";
license = with licenses; [ gpl3Only mit isc ];
platforms = platforms.linux;
mainProgram = "peachwm";
};
};
devShells.default = pkgs.mkShell {
inputsFrom = [ self.packages.${system}.default ];
packages = with pkgs; [ pkg-config gdb ];
};
apps.default = flake-utils.lib.mkApp {
drv = self.packages.${system}.default;
};
});
}
+1 -1
View File
@@ -1,5 +1,5 @@
/*
* Attempt to consolidate unavoidable suck into one file, away from dwl.c. This
* Attempt to consolidate unavoidable suck into one file, away from peachwm.c. This
* file is not meant to be pretty. We use a .h file with static inline
* functions instead of a separate .c module, or function pointers like sway, so
* that they will simply compile out if the chosen #defines leave them unused.
+24 -24
View File
@@ -1,6 +1,6 @@
#include "dwl-ipc-unstable-v2-protocol.h"
#include "peachwm-ipc-unstable-v2-protocol.h"
/* Forward declarations for dwl.c static functions */
/* Forward declarations for peachwm.c static functions */
static void arrange(Monitor *m);
static void focusclient(Client *c, int lift);
@@ -60,7 +60,7 @@ ipc_send_output_state(IpcOutput *ipc_out)
sel_tags = c ? c->tags : 0;
/* active */
zdwl_ipc_output_v2_send_active(res, m == selmon ? 1 : 0);
zpeachwm_ipc_output_v2_send_active(res, m == selmon ? 1 : 0);
/* per-tag state */
for (tag = 0; tag < TAGCOUNT; tag++) {
@@ -76,7 +76,7 @@ ipc_send_output_state(IpcOutput *ipc_out)
clients_on_tag = 1; /* report ≥1, not exact count */
focused = (sel_tags & mask) ? 1 : 0;
zdwl_ipc_output_v2_send_tag(res, tag, state, clients_on_tag, focused);
zpeachwm_ipc_output_v2_send_tag(res, tag, state, clients_on_tag, focused);
}
/* layout index */
@@ -85,31 +85,31 @@ ipc_send_output_state(IpcOutput *ipc_out)
for (i = 0; i < LENGTH(layouts); i++)
if (&layouts[i] == m->lt[m->sellt])
break;
zdwl_ipc_output_v2_send_layout(res, i);
zpeachwm_ipc_output_v2_send_layout(res, i);
}
/* layout symbol */
zdwl_ipc_output_v2_send_layout_symbol(res, m->ltsymbol);
zpeachwm_ipc_output_v2_send_layout_symbol(res, m->ltsymbol);
/* title/appid/fullscreen/floating */
if (c) {
zdwl_ipc_output_v2_send_title(res, client_get_title(c));
zdwl_ipc_output_v2_send_appid(res, client_get_appid(c));
zpeachwm_ipc_output_v2_send_title(res, client_get_title(c));
zpeachwm_ipc_output_v2_send_appid(res, client_get_appid(c));
if (wl_resource_get_version(res) >= 2) {
zdwl_ipc_output_v2_send_fullscreen(res, c->isfullscreen ? 1 : 0);
zdwl_ipc_output_v2_send_floating(res, c->isfloating ? 1 : 0);
zpeachwm_ipc_output_v2_send_fullscreen(res, c->isfullscreen ? 1 : 0);
zpeachwm_ipc_output_v2_send_floating(res, c->isfloating ? 1 : 0);
}
} else {
zdwl_ipc_output_v2_send_title(res, "");
zdwl_ipc_output_v2_send_appid(res, "");
zpeachwm_ipc_output_v2_send_title(res, "");
zpeachwm_ipc_output_v2_send_appid(res, "");
if (wl_resource_get_version(res) >= 2) {
zdwl_ipc_output_v2_send_fullscreen(res, 0);
zdwl_ipc_output_v2_send_floating(res, 0);
zpeachwm_ipc_output_v2_send_fullscreen(res, 0);
zpeachwm_ipc_output_v2_send_floating(res, 0);
}
}
/* frame — signals end of this batch of events */
zdwl_ipc_output_v2_send_frame(res);
zpeachwm_ipc_output_v2_send_frame(res);
}
/* Called instead of (or alongside) the old printstatus() */
@@ -128,7 +128,7 @@ ipc_printstatus(void)
}
}
/* zdwl_ipc_output_v2 requests */
/* zpeachwm_ipc_output_v2 requests */
static void
ipc_output_handle_release(struct wl_client *client, struct wl_resource *resource)
@@ -190,7 +190,7 @@ ipc_output_handle_set_layout(struct wl_client *client,
printstatus();
}
static const struct zdwl_ipc_output_v2_interface ipc_output_impl = {
static const struct zpeachwm_ipc_output_v2_interface ipc_output_impl = {
.release = ipc_output_handle_release,
.set_tags = ipc_output_handle_set_tags,
.set_client_tags = ipc_output_handle_set_client_tags,
@@ -205,7 +205,7 @@ ipc_output_destroy(struct wl_resource *resource)
free(out);
}
/* zdwl_ipc_manager_v2 requests */
/* zpeachwm_ipc_manager_v2 requests */
static void
ipc_manager_handle_release(struct wl_client *client, struct wl_resource *resource)
@@ -223,7 +223,7 @@ ipc_manager_handle_get_output(struct wl_client *client, struct wl_resource *reso
IpcOutput *out = ecalloc(1, sizeof(*out));
out->mon = m;
out->resource = wl_resource_create(client, &zdwl_ipc_output_v2_interface,
out->resource = wl_resource_create(client, &zpeachwm_ipc_output_v2_interface,
wl_resource_get_version(resource), id);
if (!out->resource) {
free(out);
@@ -238,7 +238,7 @@ ipc_manager_handle_get_output(struct wl_client *client, struct wl_resource *reso
ipc_send_output_state(out);
}
static const struct zdwl_ipc_manager_v2_interface ipc_manager_impl = {
static const struct zpeachwm_ipc_manager_v2_interface ipc_manager_impl = {
.release = ipc_manager_handle_release,
.get_output = ipc_manager_handle_get_output,
};
@@ -261,7 +261,7 @@ ipc_bind(struct wl_client *client, void *data, uint32_t version, uint32_t id)
{
IpcManager *mgr = ecalloc(1, sizeof(*mgr));
wl_list_init(&mgr->outputs);
mgr->resource = wl_resource_create(client, &zdwl_ipc_manager_v2_interface,
mgr->resource = wl_resource_create(client, &zpeachwm_ipc_manager_v2_interface,
version, id);
if (!mgr->resource) {
free(mgr);
@@ -273,15 +273,15 @@ ipc_bind(struct wl_client *client, void *data, uint32_t version, uint32_t id)
wl_list_insert(&ipc_managers, &mgr->link);
/* Announce tags and layouts */
zdwl_ipc_manager_v2_send_tags(mgr->resource, TAGCOUNT);
zpeachwm_ipc_manager_v2_send_tags(mgr->resource, TAGCOUNT);
for (uint32_t i = 0; i < LENGTH(layouts); i++)
zdwl_ipc_manager_v2_send_layout(mgr->resource, layouts[i].symbol);
zpeachwm_ipc_manager_v2_send_layout(mgr->resource, layouts[i].symbol);
}
static void
ipc_init(void)
{
wl_list_init(&ipc_managers);
ipc_global = wl_global_create(dpy, &zdwl_ipc_manager_v2_interface,
ipc_global = wl_global_create(dpy, &zpeachwm_ipc_manager_v2_interface,
2, NULL, ipc_bind);
}
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<protocol name="dwl_ipc_unstable_v2">
<protocol name="peachwm_ipc_unstable_v2">
<copyright>
Copyright (C) 2022 Russell Newcomb
@@ -23,10 +23,10 @@
DEALINGS IN THE SOFTWARE.
</copyright>
<interface name="zdwl_ipc_manager_v2" version="2">
<description summary="manage dwl state">
<interface name="zpeachwm_ipc_manager_v2" version="2">
<description summary="manage peachwm state">
This interface is exposed as a global in the Wayland registry and allows
clients to query and set dwl state.
clients to query and set peachwm state.
Warning! The protocol described in this file is experimental and
backward incompatible changes may be made. Backward compatible changes
@@ -39,17 +39,17 @@
</description>
<request name="release" type="destructor">
<description summary="release dwl_ipc_manager">
<description summary="release peachwm_ipc_manager">
Indicates that the client will not use the manager object anymore.
Objects created through this interface remain valid.
</description>
</request>
<request name="get_output">
<description summary="get a dwl_ipc_output for a wl_output">
Get a dwl_ipc_output for the given wl_output.
<description summary="get a peachwm_ipc_output for a wl_output">
Get a peachwm_ipc_output for the given wl_output.
</description>
<arg name="id" type="new_id" interface="zdwl_ipc_output_v2"/>
<arg name="id" type="new_id" interface="zpeachwm_ipc_output_v2"/>
<arg name="output" type="object" interface="wl_output"/>
</request>
@@ -69,9 +69,9 @@
</event>
</interface>
<interface name="zdwl_ipc_output_v2" version="2">
<description summary="interact with dwl output state">
Observe and control a dwl output.
<interface name="zpeachwm_ipc_output_v2" version="2">
<description summary="interact with peachwm output state">
Observe and control a peachwm output.
</description>
<enum name="tag_state">
@@ -81,8 +81,8 @@
</enum>
<request name="release" type="destructor">
<description summary="release dwl_ipc_output">
Indicates that the client will not use the dwl_ipc_output object
<description summary="release peachwm_ipc_output">
Indicates that the client will not use the peachwm_ipc_output object
anymore. Objects created through this interface remain valid.
</description>
</request>
@@ -111,8 +111,8 @@
</request>
<event name="toggle_visibility">
<description summary="dwl visibility has been toggled">
Indicates that dwl visibility has been toggled.
<description summary="peachwm visibility has been toggled">
Indicates that peachwm visibility has been toggled.
</description>
</event>
@@ -3,9 +3,9 @@
This is largely ripped from somebar's ipc patchset; just with some personal modifications.
I would probably just submit raphi's patchset but I don't think that would be polite.
-->
<protocol name="dwl_ipc_unstable_v2">
<description summary="inter-proccess-communication about dwl's state">
This protocol allows clients to update and get updates from dwl.
<protocol name="peachwm_ipc_unstable_v2">
<description summary="inter-proccess-communication about peachwm's state">
This protocol allows clients to update and get updates from peachwm.
Warning! The protocol described in this file is experimental and
backward incompatible changes may be made. Backward compatible
@@ -19,27 +19,27 @@ I would probably just submit raphi's patchset but I don't think that would be po
reset.
</description>
<interface name="zdwl_ipc_manager_v2" version="2">
<description summary="manage dwl state">
<interface name="zpeachwm_ipc_manager_v2" version="2">
<description summary="manage peachwm state">
This interface is exposed as a global in wl_registry.
Clients can use this interface to get a dwl_ipc_output.
After binding the client will recieve the dwl_ipc_manager.tags and dwl_ipc_manager.layout events.
The dwl_ipc_manager.tags and dwl_ipc_manager.layout events expose tags and layouts to the client.
Clients can use this interface to get a peachwm_ipc_output.
After binding the client will recieve the peachwm_ipc_manager.tags and peachwm_ipc_manager.layout events.
The peachwm_ipc_manager.tags and peachwm_ipc_manager.layout events expose tags and layouts to the client.
</description>
<request name="release" type="destructor">
<description summary="release dwl_ipc_manager">
Indicates that the client will not the dwl_ipc_manager object anymore.
<description summary="release peachwm_ipc_manager">
Indicates that the client will not the peachwm_ipc_manager object anymore.
Objects created through this instance are not affected.
</description>
</request>
<request name="get_output">
<description summary="get a dwl_ipc_outout for a wl_output">
Get a dwl_ipc_outout for the specified wl_output.
<description summary="get a peachwm_ipc_outout for a wl_output">
Get a peachwm_ipc_outout for the specified wl_output.
</description>
<arg name="id" type="new_id" interface="zdwl_ipc_output_v2"/>
<arg name="id" type="new_id" interface="zpeachwm_ipc_output_v2"/>
<arg name="output" type="object" interface="wl_output"/>
</request>
@@ -60,12 +60,12 @@ I would probably just submit raphi's patchset but I don't think that would be po
</event>
</interface>
<interface name="zdwl_ipc_output_v2" version="2">
<description summary="control dwl output">
Observe and control a dwl output.
<interface name="zpeachwm_ipc_output_v2" version="2">
<description summary="control peachwm output">
Observe and control a peachwm output.
Events are double-buffered:
Clients should cache events and redraw when a dwl_ipc_output.frame event is sent.
Clients should cache events and redraw when a peachwm_ipc_output.frame event is sent.
Request are not double-buffered:
The compositor will update immediately upon request.
@@ -78,8 +78,8 @@ I would probably just submit raphi's patchset but I don't think that would be po
</enum>
<request name="release" type="destructor">
<description summary="release dwl_ipc_outout">
Indicates to that the client no longer needs this dwl_ipc_output.
<description summary="release peachwm_ipc_outout">
Indicates to that the client no longer needs this peachwm_ipc_output.
</description>
</request>
@@ -131,8 +131,8 @@ I would probably just submit raphi's patchset but I don't think that would be po
<event name="layout_symbol" since="1">
<description summary="Update the current layout symbol">
Indicates the layout has changed. Since layout symbols are dynamic.
As opposed to the zdwl_ipc_manager.layout event, this should take precendence when displaying.
You can ignore the zdwl_ipc_output.layout event.
As opposed to the zpeachwm_ipc_manager.layout event, this should take precendence when displaying.
You can ignore the zpeachwm_ipc_output.layout event.
</description>
<arg name="layout" type="string" summary="The new layout"/>
</event>
@@ -160,7 +160,7 @@ I would probably just submit raphi's patchset but I don't think that would be po
<request name="set_layout">
<description summary="Set the layout of this output"/>
<arg name="index" type="uint" summary="index of a layout recieved by dwl_ipc_manager.layout"/>
<arg name="index" type="uint" summary="index of a layout recieved by peachwm_ipc_manager.layout"/>
</request>
<!-- Version 2 -->
+43 -43
View File
@@ -7,7 +7,7 @@
#include <sys/socket.h>
#include <wayland-client.h>
#include <wayland-util.h>
#include "dwl-ipc-unstable-v2-protocol.h"
#include "peachwm-ipc-unstable-v2-protocol.h"
#define die(fmt, ...) do { fprintf(stderr, fmt "\n", ##__VA_ARGS__); exit(EXIT_FAILURE); } while (0)
@@ -53,17 +53,17 @@ static size_t outputcount;
static struct wl_display *display;
static struct wl_registry *registry;
static struct zdwl_ipc_manager_v2 *dwl_ipc_manager;
static struct zpeachwm_ipc_manager_v2 *peachwm_ipc_manager;
static void
dwl_ipc_tags(void *data, struct zdwl_ipc_manager_v2 *dwl_ipc_manager, uint32_t count)
peachwm_ipc_tags(void *data, struct zpeachwm_ipc_manager_v2 *peachwm_ipc_manager, uint32_t count)
{
tagcount = count;
if (Tflag && mode & GET) printf("%d\n", tagcount);
}
static void
dwl_ipc_layout(void *data, struct zdwl_ipc_manager_v2 *dwl_ipc_manager, const char *name)
peachwm_ipc_layout(void *data, struct zpeachwm_ipc_manager_v2 *peachwm_ipc_manager, const char *name)
{
if (lflag && mode & SET && strcmp(layout_name, name) == 0)
layout_idx = layoutcount;
@@ -71,13 +71,13 @@ dwl_ipc_layout(void *data, struct zdwl_ipc_manager_v2 *dwl_ipc_manager, const ch
layoutcount++;
}
static const struct zdwl_ipc_manager_v2_listener dwl_ipc_listener = {
.tags = dwl_ipc_tags,
.layout = dwl_ipc_layout
static const struct zpeachwm_ipc_manager_v2_listener peachwm_ipc_listener = {
.tags = peachwm_ipc_tags,
.layout = peachwm_ipc_layout
};
static void
dwl_ipc_output_toggle_visibility(void *data, struct zdwl_ipc_output_v2 *dwl_ipc_output)
peachwm_ipc_output_toggle_visibility(void *data, struct zpeachwm_ipc_output_v2 *peachwm_ipc_output)
{
if (!vflag) return;
char *oname = data;
@@ -86,7 +86,7 @@ dwl_ipc_output_toggle_visibility(void *data, struct zdwl_ipc_output_v2 *dwl_ipc_
}
static void
dwl_ipc_output_active(void *data, struct zdwl_ipc_output_v2 *dwl_ipc_output,
peachwm_ipc_output_active(void *data, struct zpeachwm_ipc_output_v2 *peachwm_ipc_output,
uint32_t active)
{
if (active && (!output_name || !*output_name))
@@ -102,12 +102,12 @@ dwl_ipc_output_active(void *data, struct zdwl_ipc_output_v2 *dwl_ipc_output,
}
static void
dwl_ipc_output_tag(void *data, struct zdwl_ipc_output_v2 *dwl_ipc_output,
peachwm_ipc_output_tag(void *data, struct zpeachwm_ipc_output_v2 *peachwm_ipc_output,
uint32_t tag, uint32_t state, uint32_t clients, uint32_t focused)
{
if (!tflag) return;
if (state != ZDWL_IPC_OUTPUT_V2_TAG_STATE_NONE) seltags |= 1<<tag;
if (state == ZDWL_IPC_OUTPUT_V2_TAG_STATE_ACTIVE) urg |= 1<<tag;
if (state != ZPEACHWM_IPC_OUTPUT_V2_TAG_STATE_NONE) seltags |= 1<<tag;
if (state == ZPEACHWM_IPC_OUTPUT_V2_TAG_STATE_ACTIVE) urg |= 1<<tag;
if (clients > 0) occ |= 1<<tag;
if (!(mode & GET)) return;
if (data) printf("%s ", (char *)data);
@@ -115,13 +115,13 @@ dwl_ipc_output_tag(void *data, struct zdwl_ipc_output_v2 *dwl_ipc_output,
}
static void
dwl_ipc_output_layout(void *data, struct zdwl_ipc_output_v2 *dwl_ipc_output,
peachwm_ipc_output_layout(void *data, struct zpeachwm_ipc_output_v2 *peachwm_ipc_output,
uint32_t layout)
{
}
static void
dwl_ipc_output_layout_symbol(void *data, struct zdwl_ipc_output_v2 *dwl_ipc_output,
peachwm_ipc_output_layout_symbol(void *data, struct zpeachwm_ipc_output_v2 *peachwm_ipc_output,
const char *layout)
{
if (!(lflag && mode & GET)) return;
@@ -130,7 +130,7 @@ dwl_ipc_output_layout_symbol(void *data, struct zdwl_ipc_output_v2 *dwl_ipc_outp
}
static void
dwl_ipc_output_title(void *data, struct zdwl_ipc_output_v2 *dwl_ipc_output,
peachwm_ipc_output_title(void *data, struct zpeachwm_ipc_output_v2 *peachwm_ipc_output,
const char *title)
{
if (!(cflag && mode & GET)) return;
@@ -139,7 +139,7 @@ dwl_ipc_output_title(void *data, struct zdwl_ipc_output_v2 *dwl_ipc_output,
}
static void
dwl_ipc_output_appid(void *data, struct zdwl_ipc_output_v2 *dwl_ipc_output,
peachwm_ipc_output_appid(void *data, struct zpeachwm_ipc_output_v2 *peachwm_ipc_output,
const char *appid)
{
if (!(cflag && mode & GET)) return;
@@ -148,7 +148,7 @@ dwl_ipc_output_appid(void *data, struct zdwl_ipc_output_v2 *dwl_ipc_output,
}
static void
dwl_ipc_output_fullscreen(void *data, struct zdwl_ipc_output_v2 *dwl_ipc_output,
peachwm_ipc_output_fullscreen(void *data, struct zpeachwm_ipc_output_v2 *peachwm_ipc_output,
uint32_t is_fullscreen)
{
if (!mflag) return;
@@ -157,7 +157,7 @@ dwl_ipc_output_fullscreen(void *data, struct zdwl_ipc_output_v2 *dwl_ipc_output,
}
static void
dwl_ipc_output_floating(void *data, struct zdwl_ipc_output_v2 *dwl_ipc_output,
peachwm_ipc_output_floating(void *data, struct zpeachwm_ipc_output_v2 *peachwm_ipc_output,
uint32_t is_floating)
{
if (!fflag) return;
@@ -166,7 +166,7 @@ dwl_ipc_output_floating(void *data, struct zdwl_ipc_output_v2 *dwl_ipc_output,
}
static void
dwl_ipc_output_frame(void *data, struct zdwl_ipc_output_v2 *dwl_ipc_output)
peachwm_ipc_output_frame(void *data, struct zpeachwm_ipc_output_v2 *peachwm_ipc_output)
{
if (mode & SET) {
if (data && !(output_name && strcmp(output_name, (char *)data) == 0)) return;
@@ -180,7 +180,7 @@ dwl_ipc_output_frame(void *data, struct zdwl_ipc_output_v2 *dwl_ipc_output)
}
if (layout_idx >= layoutcount)
die("bad layout %s", layout_name);
zdwl_ipc_output_v2_set_layout(dwl_ipc_output, layout_idx);
zpeachwm_ipc_output_v2_set_layout(peachwm_ipc_output, layout_idx);
}
if (tflag) {
uint32_t mask = seltags;
@@ -214,7 +214,7 @@ dwl_ipc_output_frame(void *data, struct zdwl_ipc_output_v2 *dwl_ipc_output)
if (i > tagcount) die("bad tagset %s", tagset);
zdwl_ipc_output_v2_set_tags(dwl_ipc_output, mask, toggle);
zpeachwm_ipc_output_v2_set_tags(peachwm_ipc_output, mask, toggle);
}
if (cflag) {
uint32_t and = ~0, xor = 0;
@@ -245,7 +245,7 @@ dwl_ipc_output_frame(void *data, struct zdwl_ipc_output_v2 *dwl_ipc_output)
}
if (i > tagcount) die("bad client tagset %s", client_tags);
zdwl_ipc_output_v2_set_client_tags(dwl_ipc_output, and, xor);
zpeachwm_ipc_output_v2_set_client_tags(peachwm_ipc_output, and, xor);
}
wl_display_flush(display);
exit(0);
@@ -261,17 +261,17 @@ dwl_ipc_output_frame(void *data, struct zdwl_ipc_output_v2 *dwl_ipc_output)
fflush(stdout);
}
static const struct zdwl_ipc_output_v2_listener dwl_ipc_output_listener = {
.toggle_visibility = dwl_ipc_output_toggle_visibility,
.active = dwl_ipc_output_active,
.tag = dwl_ipc_output_tag,
.layout = dwl_ipc_output_layout,
.title = dwl_ipc_output_title,
.appid = dwl_ipc_output_appid,
.layout_symbol = dwl_ipc_output_layout_symbol,
.fullscreen = dwl_ipc_output_fullscreen,
.floating = dwl_ipc_output_floating,
.frame = dwl_ipc_output_frame,
static const struct zpeachwm_ipc_output_v2_listener peachwm_ipc_output_listener = {
.toggle_visibility = peachwm_ipc_output_toggle_visibility,
.active = peachwm_ipc_output_active,
.tag = peachwm_ipc_output_tag,
.layout = peachwm_ipc_output_layout,
.title = peachwm_ipc_output_title,
.appid = peachwm_ipc_output_appid,
.layout_symbol = peachwm_ipc_output_layout_symbol,
.fullscreen = peachwm_ipc_output_fullscreen,
.floating = peachwm_ipc_output_floating,
.frame = peachwm_ipc_output_frame,
};
static void
@@ -287,10 +287,10 @@ wl_output_name(void *data, struct wl_output *output, const char *name)
wl_output_release(output);
return;
}
if (dwl_ipc_manager) {
struct zdwl_ipc_output_v2 *dwl_ipc_output =
zdwl_ipc_manager_v2_get_output(dwl_ipc_manager, output);
zdwl_ipc_output_v2_add_listener(dwl_ipc_output, &dwl_ipc_output_listener,
if (peachwm_ipc_manager) {
struct zpeachwm_ipc_output_v2 *peachwm_ipc_output =
zpeachwm_ipc_manager_v2_get_output(peachwm_ipc_manager, output);
zpeachwm_ipc_output_v2_add_listener(peachwm_ipc_output, &peachwm_ipc_output_listener,
output_name && *output_name ? NULL : strdup(name));
}
}
@@ -344,10 +344,10 @@ global_add(void *data, struct wl_registry *wl_registry,
}
outputs[outputcount].name = name;
outputcount++;
} else if (strcmp(interface, zdwl_ipc_manager_v2_interface.name) == 0) {
dwl_ipc_manager = wl_registry_bind(wl_registry, name,
&zdwl_ipc_manager_v2_interface, version < 2 ? version : 2);
zdwl_ipc_manager_v2_add_listener(dwl_ipc_manager, &dwl_ipc_listener, NULL);
} else if (strcmp(interface, zpeachwm_ipc_manager_v2_interface.name) == 0) {
peachwm_ipc_manager = wl_registry_bind(wl_registry, name,
&zpeachwm_ipc_manager_v2_interface, version < 2 ? version : 2);
zpeachwm_ipc_manager_v2_add_listener(peachwm_ipc_manager, &peachwm_ipc_listener, NULL);
}
}
@@ -501,8 +501,8 @@ main(int argc, char *argv[])
wl_display_dispatch(display);
wl_display_roundtrip(display);
if (!dwl_ipc_manager && (mode & SET || tflag || lflag || Tflag || Lflag || cflag || vflag || mflag || fflag))
die("bad dwl-ipc protocol");
if (!peachwm_ipc_manager && (mode & SET || tflag || lflag || Tflag || Lflag || cflag || vflag || mflag || fflag))
die("bad peachwm-ipc protocol");
wl_display_roundtrip(display);
+13 -8
View File
@@ -207,6 +207,13 @@ typedef struct {
#define TAGCOUNT 9
#endif
static void dwindle(Monitor *m);
static const Layout layouts[] = {
{"><>", NULL},
{"[T]", dwindle},
};
/* dwindle tree */
typedef struct DwindleNode DwindleNode;
struct DwindleNode {
@@ -506,11 +513,9 @@ static Config cfg;
static struct wl_event_source *cfg_watch_src;
static const char *custom_cfg_path;
#include "config.h"
/* attempt to encapsulate suck into one file */
#include "client.h"
#include "dwl-ipc.h"
#include "ipc.h"
#include "ext-workspace.h"
/* function implementations */
@@ -1760,7 +1765,7 @@ void inputdevice(struct wl_listener *listener, void *data) {
}
/* We need to let the wlr_seat know what our capabilities are, which is
* communiciated to the client. In dwl we always have a cursor, even if
* communiciated to the client. We always have a cursor, even if
* there are no pointer devices, so we always include that capability. */
/* TODO do we actually require a cursor? */
caps = WL_SEAT_CAPABILITY_POINTER;
@@ -2746,7 +2751,7 @@ void setmon(Client *c, Monitor *m, uint32_t newtags) {
void setpsel(struct wl_listener *listener, void *data) {
/* This event is raised by the seat when a client wants to set the selection,
* usually when the user copies something. wlroots allows compositors to
* ignore such requests if they so choose, but in dwl we always honor them
* ignore such requests if they so choose, but we always honor them
*/
struct wlr_seat_request_set_primary_selection_event *event = data;
wlr_seat_set_primary_selection(seat, event->source, event->serial);
@@ -2755,7 +2760,7 @@ void setpsel(struct wl_listener *listener, void *data) {
void setsel(struct wl_listener *listener, void *data) {
/* This event is raised by the seat when a client wants to set the selection,
* usually when the user copies something. wlroots allows compositors to
* ignore such requests if they so choose, but in dwl we always honor them
* ignore such requests if they so choose, but we always honor them
*/
struct wlr_seat_request_set_selection_event *event = data;
wlr_seat_set_selection(seat, event->source, event->serial);
@@ -3039,7 +3044,7 @@ void spawn(const Arg *arg) {
dup2(STDERR_FILENO, STDOUT_FILENO);
setsid();
execvp(((char **)arg->v)[0], (char **)arg->v);
die("dwl: execvp %s failed:", ((char **)arg->v)[0]);
die("peachwm: execvp %s failed:", ((char **)arg->v)[0]);
}
}
@@ -3719,7 +3724,7 @@ void updatemons(struct wl_listener *listener, void *data) {
wlr_scene_node_set_position(&root_bg->node, sgeom.x, sgeom.y);
wlr_scene_rect_set_size(root_bg, sgeom.width, sgeom.height);
/* Make sure the clients are hidden when dwl is locked */
/* Make sure the clients are hidden when peachwm is locked */
wlr_scene_node_set_position(&locked_bg->node, sgeom.x, sgeom.y);
wlr_scene_rect_set_size(locked_bg, sgeom.width, sgeom.height);