# st

Unnamed repository; edit this file 'description' to name the repository.

| Log | Files | Refs | README | LICENSE

    commit 28b4c822c5c0acec300fdf15c6e3ede9f5e2335d
    parent fa253f077f19b3220c7655b81bd91e52f4367803
    Author: John Collis <john.collis@alliedtelesis.co.nz>
    Date:   Sun,  6 Sep 2020 17:53:41 +1200

    ST: Add WM_ICON_NAME property support

    Also added _NET_WM_ICON_NAME.

    Diffstat:
    Mst.c | 9+++++++++
    Mwin.h | 1+
    Mx.c | 16+++++++++++++++-

    3 files changed, 25 insertions(+), 1 deletion(-)
    diff --git a/st.c b/st.c
    @@ -1844,6 +1844,7 @@ strhandle(void)
     {
     	char *p = NULL, *dec;
     	int j, narg, par;
    +	static int winname = 0;

     	term.esc &= ~(ESC_STR_END|ESC_STR);
     	strparse();
    @@ -1853,7 +1854,15 @@ strhandle(void)
     	case ']': /* OSC -- Operating System Command */
     		switch (par) {
     		case 0:
    +			if (narg > 1) {
    +				xsettitle(strescseq.args[1]);
    +				xseticontitle(strescseq.args[1]);
    +			}
    +			return;
     		case 1:
    +			if (narg > 1)
    +				xseticontitle(strescseq.args[1]);
    +			return;
     		case 2:
     			if (narg > 1)
     				xsettitle(strescseq.args[1]);
    diff --git a/win.h b/win.h
    @@ -30,6 +30,7 @@ void xdrawline(Line, int, int, int);
     void xfinishdraw(void);
     void xloadcols(void);
     int xsetcolorname(int, const char *);
    +void xseticontitle(char *);
     void xsettitle(char *);
     int xsetcursor(int);
     void xsetmode(int, unsigned int);
    diff --git a/x.c b/x.c
    @@ -93,7 +93,7 @@ typedef struct {
     	Window win;
     	Drawable buf;
     	GlyphFontSpec *specbuf; /* font spec buffer used for rendering */
    -	Atom xembed, wmdeletewin, netwmname, netwmpid;
    +	Atom xembed, wmdeletewin, netwmname, netwmiconname, netwmpid;
     	struct {
     		XIM xim;
     		XIC xic;
    @@ -1186,6 +1186,7 @@ xinit(int cols, int rows)
     	xw.xembed = XInternAtom(xw.dpy, "_XEMBED", False);
     	xw.wmdeletewin = XInternAtom(xw.dpy, "WM_DELETE_WINDOW", False);
     	xw.netwmname = XInternAtom(xw.dpy, "_NET_WM_NAME", False);
    +	xw.netwmiconname = XInternAtom(xw.dpy, "_NET_WM_ICON_NAME", False);
     	XSetWMProtocols(xw.dpy, xw.win, &xw.wmdeletewin, 1);

     	xw.netwmpid = XInternAtom(xw.dpy, "_NET_WM_PID", False);
    @@ -1580,6 +1581,19 @@ xsetenv(void)
     }

     void
    +xseticontitle(char *p)
    +{
    +	XTextProperty prop;
    +	DEFAULT(p, opt_title);
    +
    +	Xutf8TextListToTextProperty(xw.dpy, &p, 1, XUTF8StringStyle,
    +			&prop);
    +	XSetWMIconName(xw.dpy, xw.win, &prop);
    +	XSetTextProperty(xw.dpy, xw.win, &prop, xw.netwmiconname);
    +	XFree(prop.value);
    +}
    +
    +void
     xsettitle(char *p)
     {
     	XTextProperty prop;