Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package wmutils for openSUSE:Factory checked in at 2026-09-17 17:09:48 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/wmutils (Old) and /work/SRC/openSUSE:Factory/.wmutils.new.383539 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "wmutils" Thu Sep 17 17:09:48 2026 rev:4 rq:1378616 version:1.7 Changes: -------- --- /work/SRC/openSUSE:Factory/wmutils/wmutils.changes 2024-02-21 17:57:26.861540875 +0100 +++ /work/SRC/openSUSE:Factory/.wmutils.new.383539/wmutils.changes 2026-09-17 17:09:50.497337788 +0200 @@ -1,0 +2,13 @@ +Wed Sep 16 20:28:10 UTC 2026 - Martin Pluskal <[email protected]> + +- Update to version 1.7: + * New tools: atomx (get/set/delete X atoms) and pdw (print + decoration window) + * atomx: multiple windows, more atom types, no atom name in + output, arg-count segfault fix + * Add atomx(1) and pdw(1) manpages +- Rebase wmutils-cflags.patch and wmutils-conflict.patch +- Install pdw.1, omitted from upstream man/Makefile +- Add gcc and make BuildRequires; drop Group; use %make_build + +------------------------------------------------------------------- Old: ---- wmutils-1.5.tar.gz New: ---- wmutils-1.7.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ wmutils.spec ++++++ --- /var/tmp/diff_new_pack.sM4mFA/_old 2026-09-17 17:09:51.243369108 +0200 +++ /var/tmp/diff_new_pack.sM4mFA/_new 2026-09-17 17:09:51.245369192 +0200 @@ -1,7 +1,7 @@ # # spec file for package wmutils # -# Copyright (c) 2021 SUSE LLC +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,17 +17,18 @@ Name: wmutils -Version: 1.5 +Version: 1.7 Release: 0 Summary: Set of tools for X windows manipulation License: ISC -Group: System/X11/Utilities URL: https://github.com/wmutils/core Source: https://github.com/%{name}/core/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz # PATCH-FIX-OPENSUSE wmutils-cflags.patch fixes spurious "compiled without $RPM_OPT_FLAGS" warning -- [email protected] Patch0: wmutils-cflags.patch # PATCH-FIX-OPENSUSE wmutils-conflict.patch fixes conflict with wtf from bsd-games -- [email protected] Patch1: wmutils-conflict.patch +BuildRequires: gcc +BuildRequires: make BuildRequires: pkgconfig BuildRequires: pkgconfig(xcb) BuildRequires: pkgconfig(xcb-cursor) @@ -41,22 +42,26 @@ %autosetup -p1 -n core-%{version} %build -make %{?_smp_mflags} +%make_build %install %make_install \ PREFIX=%{_prefix} \ MANPREFIX=%{_mandir} +# v1.7 ships man/pdw.1 but omits it from man/Makefile +install -m 0644 man/pdw.1 %{buildroot}%{_mandir}/man1/pdw.1 %files %license LICENSE %doc README.md +%{_bindir}/atomx %{_bindir}/chwb %{_bindir}/chwso %{_bindir}/ignw %{_bindir}/killw %{_bindir}/lsw %{_bindir}/mapw +%{_bindir}/pdw %{_bindir}/pfw %{_bindir}/slw %{_bindir}/wattr @@ -65,19 +70,21 @@ %{_bindir}/wm_wtf %{_bindir}/wrs %{_bindir}/wtp -%{_mandir}/man1/chwb.1%{ext_man} -%{_mandir}/man1/chwso.1%{ext_man} -%{_mandir}/man1/ignw.1%{ext_man} -%{_mandir}/man1/killw.1%{ext_man} -%{_mandir}/man1/lsw.1%{ext_man} -%{_mandir}/man1/mapw.1%{ext_man} -%{_mandir}/man1/pfw.1%{ext_man} +%{_mandir}/man1/atomx.1%{?ext_man} +%{_mandir}/man1/chwb.1%{?ext_man} +%{_mandir}/man1/chwso.1%{?ext_man} +%{_mandir}/man1/ignw.1%{?ext_man} +%{_mandir}/man1/killw.1%{?ext_man} +%{_mandir}/man1/lsw.1%{?ext_man} +%{_mandir}/man1/mapw.1%{?ext_man} +%{_mandir}/man1/pdw.1%{?ext_man} +%{_mandir}/man1/pfw.1%{?ext_man} %{_mandir}/man1/slw.1%{?ext_man} -%{_mandir}/man1/wattr.1%{ext_man} -%{_mandir}/man1/wmp.1%{ext_man} -%{_mandir}/man1/wmutils.1%{ext_man} -%{_mandir}/man1/wmv.1%{ext_man} -%{_mandir}/man1/wm_wtf.1%{ext_man} -%{_mandir}/man1/wrs.1%{ext_man} -%{_mandir}/man1/wtp.1%{ext_man} +%{_mandir}/man1/wattr.1%{?ext_man} +%{_mandir}/man1/wmp.1%{?ext_man} +%{_mandir}/man1/wmutils.1%{?ext_man} +%{_mandir}/man1/wmv.1%{?ext_man} +%{_mandir}/man1/wm_wtf.1%{?ext_man} +%{_mandir}/man1/wrs.1%{?ext_man} +%{_mandir}/man1/wtp.1%{?ext_man} ++++++ wmutils-1.5.tar.gz -> wmutils-1.7.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/core-1.5/Makefile new/core-1.7/Makefile --- old/core-1.5/Makefile 2019-10-14 12:31:31.000000000 +0200 +++ new/core-1.7/Makefile 2022-07-01 22:47:48.000000000 +0200 @@ -3,6 +3,7 @@ HDR = arg.h util.h SRC = \ pfw.c \ + pdw.c \ lsw.c \ mapw.c \ killw.c \ @@ -15,7 +16,8 @@ chwb.c \ ignw.c \ wmp.c \ - slw.c + slw.c \ + atomx.c OBJ = $(SRC:.c=.o) BIN = $(SRC:.c=) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/core-1.5/README.md new/core-1.7/README.md --- old/core-1.5/README.md 2019-10-14 12:31:31.000000000 +0200 +++ new/core-1.7/README.md 2022-07-01 22:47:48.000000000 +0200 @@ -28,9 +28,6 @@ utilities --------- -Here are the tools. This project is quite young, new tools can arrive -without being added to this list, so take it with a grain of salt. - * chwb - change window's border * chwso - change window's stacking order * ignw - ignore/unignore window @@ -38,6 +35,7 @@ * lsw - list windows * mapw - map/unmap windows * pfw - print focused window +* pdw - print decoration window * slw - select window interactively * wattr - show window's attributes * wmp - move the mouse pointer @@ -45,6 +43,7 @@ * wrs - resize a window * wtf - focus a window * wtp - teleport a window +* atomx - modify atoms on a window All these tools come with a manpage ! read them for further informations. @@ -67,7 +66,7 @@ $ make # make install -Here are the varialbes you can override, along with their default values: +Here are the variables you can override, along with their default values: CC = cc LD = $(CC) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/core-1.5/atomx.c new/core-1.7/atomx.c --- old/core-1.5/atomx.c 1970-01-01 01:00:00.000000000 +0100 +++ new/core-1.7/atomx.c 2022-07-01 22:47:48.000000000 +0200 @@ -0,0 +1,145 @@ +/* See LICENSE file for copyright and license details. */ + +#include <err.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <xcb/xcb.h> +#include <xcb/xcb_aux.h> + +#include "util.h" +#include "arg.h" + +#define MAXLEN 512 + +static xcb_connection_t *conn; + +void +usage(char *name) +{ + fprintf(stderr, "%s [-d] atom[=value] wid\n", name); +} + +xcb_atom_t +add_atom(xcb_atom_t type, char *name, size_t len) +{ + xcb_atom_t atom; + xcb_intern_atom_cookie_t c; + xcb_intern_atom_reply_t *r; + + c = xcb_intern_atom(conn, 0, len, name); + r = xcb_intern_atom_reply(conn, c, NULL); + if (!r) + return 0; + + atom = r->atom; + free(r); + + return atom; +} + +int +set_atom(xcb_window_t wid, xcb_atom_t atom, xcb_atom_t type, size_t len, void *data) +{ + int errcode; + xcb_void_cookie_t c; + xcb_generic_error_t *e; + + c = xcb_change_property_checked(conn, XCB_PROP_MODE_REPLACE, + wid, atom, type, 8, len, data); + e = xcb_request_check(conn, c); + if (!e) + return 0; + + errcode = e->error_code; + free(e); + + return errcode; +} + +int +get_atom(xcb_window_t wid, xcb_atom_t atom, char *data, xcb_atom_t *type) +{ + size_t n; + xcb_get_property_cookie_t c; + xcb_get_property_reply_t *r; + + c = xcb_get_property(conn, 0, wid, atom, XCB_ATOM_ANY, 0, MAXLEN); + r = xcb_get_property_reply(conn, c, NULL); + if (!r) + return -1; + + if (!(n = xcb_get_property_value_length(r))) { + free(r); + return -1; + } + + strncpy(data, xcb_get_property_value(r), n); + data[n] = 0; + + *type = r->type; + + free(r); + + return 0; +} + + +int +main(int argc, char **argv) +{ + int i, dflag = 0; + char *key, *val, *argv0; + char data[MAXLEN]; + xcb_window_t wid; + xcb_atom_t atom; + + ARGBEGIN { + case 'd': + dflag = 1; + break; + default: + usage(argv0); + return -1; + } ARGEND; + + if (argc < 1) + return -1; + + key = strtok(argv[0], "="); + val = strtok(NULL, "="); + + init_xcb(&conn); + + for (i = 0; i < argc - 1; i++) { + wid = strtoul(argv[i+1], NULL, 16); + + /* retrieve atom ID from server */ + atom = add_atom(XCB_ATOM_STRING, key, strlen(key)); + if (!atom) + return -1; + + /* set property on window (must be a string) */ + if (val) + set_atom(wid, atom, XCB_ATOM_STRING, strlen(val), val); + + /* remove property from window */ + if (dflag) + xcb_delete_property(conn, wid, atom); + + /* retrieve and print atom value to stdout */ + xcb_atom_t type; + if (!get_atom(wid, atom, data, &type)) + switch (type) { + case XCB_ATOM_INTEGER: + printf("%d\n", *data); + break; + default: + printf("%s\n", data); + } + } + + kill_xcb(&conn); + + return 0; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/core-1.5/man/Makefile new/core-1.7/man/Makefile --- old/core-1.5/man/Makefile 2019-10-14 12:31:31.000000000 +0200 +++ new/core-1.7/man/Makefile 2022-07-01 22:47:48.000000000 +0200 @@ -15,6 +15,7 @@ ignw.1 \ wmp.1 \ slw.1 \ + atomx.1 \ wmutils.1 .POSIX: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/core-1.5/man/atomx.1 new/core-1.7/man/atomx.1 --- old/core-1.5/man/atomx.1 1970-01-01 01:00:00.000000000 +0100 +++ new/core-1.7/man/atomx.1 2022-07-01 22:47:48.000000000 +0200 @@ -0,0 +1,43 @@ +.Dd November 21, 2019 +.Dt ATOMX 1 +.Os wmutils +.Sh NAME +.Nm atomx +.Nd manage X atoms on a window +.Sh SYNOPSIS +.Nm atomx +.Op Fl d +.Ar atom +.Op Ar =value +.Ar wid +.Sh DESCRIPTION +.Nm +will print, add, change and remove X atoms on the window with ID +.Ar wid . +By default +.Nm +will print the value of the atom +.Ar atom +if it exists. +.Pp +To set an atom on a window, you must specify it as +.Ar atom=value . +.Bl -tag -width Ds +.It Fl d +Delete atom +.Ar atom +from the window. +.Sh ENVIRONMENT +.Nm +acts on the X display specified by the +.Ev DISPLAY +variable. +.Sh EXAMPLES +Print value of property "WM_CLASS" +.Dl $ atomx WM_CLASS 0x00e00005 +.Pp +Change window name to "atomx" +.Dl $ atomx WM_NAME=atomx 0x00e00005 +.Pp +Delete property "IS_FULLSCREEN" on a window +.Dl $ atomx -d IS_FULLSCREEN 0x00e00005 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/core-1.5/man/pdw.1 new/core-1.7/man/pdw.1 --- old/core-1.5/man/pdw.1 1970-01-01 01:00:00.000000000 +0100 +++ new/core-1.7/man/pdw.1 2022-07-01 22:47:48.000000000 +0200 @@ -0,0 +1,24 @@ +.Dd July 01, 2022 +.Dt PDW 1 +.Os wmutils +.Sh NAME +.Nm pdw +.Nd print decoration window +.Sh SYNOPSIS +.Nm pdw +.Op Ar wid +.Sh DESCRIPTION +Print the ID of the highest parent related to +.Ar wid +(or currently focused window when +.Ar wid +is omitted). +.Pp +In reparenting environments, this is usually the decoration window. +.Sh ENVIRONMENT +.Nm +acts on the X display specified by the +.Ev DISPLAY +variable. +.Sh SEE ALSO +.Xr pfw 1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/core-1.5/man/wmutils.1 new/core-1.7/man/wmutils.1 --- old/core-1.5/man/wmutils.1 2019-10-14 12:31:31.000000000 +0200 +++ new/core-1.7/man/wmutils.1 2022-07-01 22:47:48.000000000 +0200 @@ -23,6 +23,8 @@ map/unmap windows .It pfw print focused window +.It pdw +print decoration window .It wattr show window's attributes .It wmp @@ -35,6 +37,8 @@ focus a window .It wtp teleport a window +.It atomx +modify atoms on a window .El .Sh ENVIRONMENT .Nm @@ -49,10 +53,12 @@ .Xr lsw 1 , .Xr mapw 1 , .Xr pfw 1 , +.Xr pdw 1 , .Xr wattr 1 , .Xr wmp 1 , .Xr wmv 1 , .Xr wname 1 , .Xr wrs 1 , .Xr wtf 1 , -.Xr wtp 1 +.Xr wtp 1 , +.Xr atomx 1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/core-1.5/pdw.c new/core-1.7/pdw.c --- old/core-1.5/pdw.c 1970-01-01 01:00:00.000000000 +0100 +++ new/core-1.7/pdw.c 2022-07-01 22:47:48.000000000 +0200 @@ -0,0 +1,81 @@ +/* See LICENSE file for copyright and license details. */ + +#include <err.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <xcb/xcb.h> +#include <xcb/xcb_aux.h> + +#include "util.h" + +static xcb_connection_t *conn; +static xcb_screen_t *scrn; + +static void usage(char *); +static xcb_window_t focus_window(void); +static xcb_window_t parent(xcb_window_t); + +static void +usage(char *name) +{ + fprintf(stderr, "usage: %s [wid]\n", name); + exit(1); +} + +static xcb_window_t +focus_window(void) +{ + xcb_window_t w = 0; + xcb_get_input_focus_cookie_t c; + xcb_get_input_focus_reply_t *r; + + c = xcb_get_input_focus(conn); + r = xcb_get_input_focus_reply(conn, c, NULL); + if (r == NULL) + errx(1, "xcb_get_input_focus"); + + w = r->focus; + free(r); + + if (w == XCB_NONE || w == XCB_INPUT_FOCUS_POINTER_ROOT) + errx(1, "focus not set"); + + return w; +} + +static xcb_window_t +parent(xcb_window_t w) +{ + xcb_query_tree_cookie_t c; + xcb_query_tree_reply_t *r; + + c = xcb_query_tree(conn, w); + r = xcb_query_tree_reply(conn, c, NULL); + if (r == NULL) + errx(1, "failed to get parent"); + + w = (!r->parent || r->parent == scrn->root) ? w : parent(r->parent); + free(r); + + return w; +} + +int +main(int argc, char **argv) +{ + xcb_window_t w; + + if (argc > 2 || (argc > 1 && (!strncmp(argv[1], "-h", 2)))) + usage(argv[0]); + + init_xcb(&conn); + get_screen(conn, &scrn); + + w = (argc > 1) ? strtoul(argv[1], NULL, 16) : focus_window(); + + printf("0x%08x\n", parent(w)); + + kill_xcb(&conn); + return 0; +} ++++++ wmutils-cflags.patch ++++++ --- /var/tmp/diff_new_pack.sM4mFA/_old 2026-09-17 17:09:51.395375490 +0200 +++ /var/tmp/diff_new_pack.sM4mFA/_new 2026-09-17 17:09:51.401375742 +0200 @@ -1,8 +1,8 @@ -Index: core-1.4/Makefile +Index: core-1.7/Makefile =================================================================== ---- core-1.4.orig/Makefile -+++ core-1.4/Makefile -@@ -30,12 +30,12 @@ binutils: $(BIN) +--- core-1.7.orig/Makefile ++++ core-1.7/Makefile +@@ -33,12 +33,12 @@ binutils: $(BIN) $(OBJ): $(HDR) util.o .o: ++++++ wmutils-conflict.patch ++++++ --- /var/tmp/diff_new_pack.sM4mFA/_old 2026-09-17 17:09:51.433377085 +0200 +++ /var/tmp/diff_new_pack.sM4mFA/_new 2026-09-17 17:09:51.439377337 +0200 @@ -1,8 +1,8 @@ -Index: core-1.5/Makefile +Index: core-1.7/Makefile =================================================================== ---- core-1.5.orig/Makefile -+++ core-1.5/Makefile -@@ -40,6 +40,7 @@ $(OBJ): $(HDR) util.o +--- core-1.7.orig/Makefile ++++ core-1.7/Makefile +@@ -43,6 +43,7 @@ $(OBJ): $(HDR) util.o install: $(BIN) mkdir -p $(DESTDIR)$(PREFIX)/bin/ cp -f $(BIN) $(DESTDIR)$(PREFIX)/bin/ @@ -10,11 +10,11 @@ cd man; $(MAKE) install uninstall: -Index: core-1.5/man/Makefile +Index: core-1.7/man/Makefile =================================================================== ---- core-1.5.orig/man/Makefile -+++ core-1.5/man/Makefile -@@ -21,6 +21,7 @@ MAN = \ +--- core-1.7.orig/man/Makefile ++++ core-1.7/man/Makefile +@@ -23,6 +23,7 @@ MAN = \ install: $(MAN) mkdir -p $(DESTDIR)$(MANPREFIX)/man1/ cp -f $(MAN) $(DESTDIR)$(MANPREFIX)/man1/ @@ -22,30 +22,11 @@ uninstall: @echo "uninstalling manpages" -Index: core-1.5/man/wtf.1 +Index: core-1.7/man/wmutils.1 =================================================================== ---- core-1.5.orig/man/wtf.1 -+++ core-1.5/man/wtf.1 -@@ -1,11 +1,11 @@ - .Dd December 13, 2014 --.Dt WTF 1 -+.Dt WM_WTF 1 - .Os wmutils - .Sh NAME --.Nm wtf -+.Nm wm_wtf - .Nd transfer window focus - .Sh SYNOPSIS --.Nm wtf -+.Nm wm_wtf - .Ar wid - .Sh DESCRIPTION - .Nm -Index: core-1.5/man/wmutils.1 -=================================================================== ---- core-1.5.orig/man/wmutils.1 -+++ core-1.5/man/wmutils.1 -@@ -29,10 +29,10 @@ show window's attributes +--- core-1.7.orig/man/wmutils.1 ++++ core-1.7/man/wmutils.1 +@@ -31,10 +31,10 @@ show window's attributes move the mouse pointer .It wmv move a window @@ -57,12 +38,32 @@ -focus a window .It wtp teleport a window - .El -@@ -54,5 +54,5 @@ variable. + .It atomx +@@ -59,6 +59,6 @@ variable. .Xr wmv 1 , .Xr wname 1 , .Xr wrs 1 , -.Xr wtf 1 , +.Xr wm_wtf 1 , - .Xr wtp 1 + .Xr wtp 1 , + .Xr atomx 1 +Index: core-1.7/man/wtf.1 +=================================================================== +--- core-1.7.orig/man/wtf.1 ++++ core-1.7/man/wtf.1 +@@ -1,11 +1,11 @@ + .Dd December 13, 2014 +-.Dt WTF 1 ++.Dt WM_WTF 1 + .Os wmutils + .Sh NAME +-.Nm wtf ++.Nm wm_wtf + .Nd transfer window focus + .Sh SYNOPSIS +-.Nm wtf ++.Nm wm_wtf + .Ar wid + .Sh DESCRIPTION + .Nm
