st

fork of suckless's simple terminal
Index Commits 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;