]> git.armaanb.net Git - st.git/commitdiff
ST: Add WM_ICON_NAME property support
authorJohn Collis <john.collis@alliedtelesis.co.nz>
Sun, 6 Sep 2020 05:53:41 +0000 (17:53 +1200)
committerHiltjo Posthuma <hiltjo@codemadness.org>
Sun, 18 Oct 2020 09:17:11 +0000 (11:17 +0200)
Also added _NET_WM_ICON_NAME.

st.c
win.h
x.c

diff --git a/st.c b/st.c
index 76b7e0d4386e0e39693a51364893ed3cd125f785..ae7fa633233a8098a16f891b0010abeef61b11db 100644 (file)
--- 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
index a6ef1b9736d188a78e014c482ecafde688974861..e6e43695fa17e2465756af66f6f883927b044fed 100644 (file)
--- 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
index 210f184a31f3a8a83705f44d9c1ce0432deb38fa..120e495df49c650856251a785e9716acf90d6a39 100644 (file)
--- 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);
@@ -1579,6 +1580,19 @@ xsetenv(void)
        setenv("WINDOWID", buf, 1);
 }
 
+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)
 {