ST: Add WM_ICON_NAME property support - st - simple terminal | |
git clone git://git.suckless.org/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 28b4c822c5c0acec300fdf15c6e3ede9f5e2335d | |
parent fa253f077f19b3220c7655b81bd91e52f4367803 | |
Author: John Collis <[email protected]> | |
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(-) | |
--- | |
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; |