ST: Add WM_ICON_NAME property support - st - Personal fork of st
 (HTM) git clone git://git.drkhsh.at/st.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 28b4c822c5c0acec300fdf15c6e3ede9f5e2335d
 (DIR) parent fa253f077f19b3220c7655b81bd91e52f4367803
 (HTM) 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:
         M st.c                                |       9 +++++++++
         M win.h                               |       1 +
         M x.c                                 |      16 +++++++++++++++-
       
       3 files changed, 25 insertions(+), 1 deletion(-)
       ---
 (DIR) 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]);
 (DIR) 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);
 (DIR) 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;