From b39fb4b360af0797ba70a33d8c3a17c245f1ce99 Mon Sep 17 00:00:00 2001 From: Sam Date: Sat, 12 Oct 2024 12:20:01 +0100 Subject: [PATCH] initial commit --- Makefile | 26 ++++++++++++++++++++++++++ set_wm_class.c | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 Makefile create mode 100644 set_wm_class.c diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..05d70b4 --- /dev/null +++ b/Makefile @@ -0,0 +1,26 @@ +PREFIX := /usr/local +CC := cc +LDFLAGS := -lX11 + +all: options set_wm_class + +options: + @echo set_wm_class build options: + @echo "LDFLAGS = ${LDFLAGS}" + @echo "CC = ${CC}" + +set_wm_class: set_wm_class.c + ${CC} -o set_wm_class set_wm_class.c ${LDFLAGS} + +clean: + rm -f set_wm_class + +install: set_wm_class + mkdir -p ${DESTDIR}${PREFIX}/bin + cp -f set_wm_class ${DESTDIR}${PREFIX}/bin + chmod 755 ${DESTDIR}${PREFIX}/bin/set_wm_class + +uninstall: + rm -f ${DESTDIR}${PREFIX}/bin/set_wm_class + +.PHONY: all options clean install uninstall diff --git a/set_wm_class.c b/set_wm_class.c new file mode 100644 index 0000000..0d5dc09 --- /dev/null +++ b/set_wm_class.c @@ -0,0 +1,40 @@ +#include +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + unsigned long value; + char *terminatedAt; + XClassHint class; + Status status; + Display *display; + Window window; + + if ( argc != 3 ) { + printf( "Usage: %s \n", argv[0] ); + return 1; + } + window = strtoul( argv[1], &terminatedAt, 0 ); + if ( *terminatedAt != '\0' ) { + printf( "Could not parse window id: %s\n", argv[1] ); + return 2; + } + + display = XOpenDisplay( NULL ); + status = XGetClassHint( display, window, &class ); + if ( !status ) return 4; + + XFree( class.res_class ); + class.res_class = strdup( argv[2] ); + printf("Setting WM_CLASS of window %lu to \"%s\", \"%s\"\n", window, class.res_name, class.res_class ); + XSetClassHint( display, window, &class ); + + XCloseDisplay( display ); + XFree( class.res_name ); + XFree( class.res_class ); + return 0; +} +