Introduction
Introduction Statistics Contact Development Disclaimer Help
st-netwmicon-0.8.5-v2.diff - sites - public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log
Files
Refs
---
st-netwmicon-0.8.5-v2.diff (4200B)
---
1 From 8b0128e8b295fc97bfa3bc5fb4b5e64856d4e3cb Mon Sep 17 00:00:00 2001
2 From: Aleksandrs Stier <[email protected]>
3 Date: Sat, 4 Jun 2022 01:24:07 +0200
4 Subject: [PATCH] Set _NET_WM_ICON with a png-image
5
6 ---
7 Makefile | 3 +++
8 config.mk | 6 ++++--
9 st.h | 2 ++
10 x.c | 37 ++++++++++++++++++++++++++++++++++++-
11 4 files changed, 45 insertions(+), 3 deletions(-)
12
13 diff --git a/Makefile b/Makefile
14 index 470ac86..96e27e3 100644
15 --- a/Makefile
16 +++ b/Makefile
17 @@ -49,9 +49,12 @@ install: st
18 chmod 644 $(DESTDIR)$(MANPREFIX)/man1/st.1
19 tic -sx st.info
20 @echo Please see the README file regarding the terminfo entry o…
21 + mkdir -p $(DESTDIR)$(ICONPREFIX)
22 + [ -f $(ICONNAME) ] && cp -f $(ICONNAME) $(DESTDIR)$(ICONPREFIX)…
23
24 uninstall:
25 rm -f $(DESTDIR)$(PREFIX)/bin/st
26 rm -f $(DESTDIR)$(MANPREFIX)/man1/st.1
27 + rm -f $(DESTDIR)$(ICONPREFIX)/$(ICONNAME)
28
29 .PHONY: all options clean dist install uninstall
30 diff --git a/config.mk b/config.mk
31 index 4c4c5d5..f8fc780 100644
32 --- a/config.mk
33 +++ b/config.mk
34 @@ -6,6 +6,8 @@ VERSION = 0.8.5
35 # paths
36 PREFIX = /usr/local
37 MANPREFIX = $(PREFIX)/share/man
38 +ICONPREFIX = $(PREFIX)/share/pixmaps
39 +ICONNAME = st.png
40
41 X11INC = /usr/X11R6/include
42 X11LIB = /usr/X11R6/lib
43 @@ -16,12 +18,12 @@ PKG_CONFIG = pkg-config
44 INCS = -I$(X11INC) \
45 `$(PKG_CONFIG) --cflags fontconfig` \
46 `$(PKG_CONFIG) --cflags freetype2`
47 -LIBS = -L$(X11LIB) -lm -lrt -lX11 -lutil -lXft \
48 +LIBS = -L$(X11LIB) -lm -lrt -lX11 -lutil -lXft -lgd \
49 `$(PKG_CONFIG) --libs fontconfig` \
50 `$(PKG_CONFIG) --libs freetype2`
51
52 # flags
53 -STCPPFLAGS = -DVERSION=\"$(VERSION)\" -D_XOPEN_SOURCE=600
54 +STCPPFLAGS = -DVERSION=\"$(VERSION)\" -DICON=\"$(ICONPREFIX)/$(ICONNAME…
55 STCFLAGS = $(INCS) $(STCPPFLAGS) $(CPPFLAGS) $(CFLAGS)
56 STLDFLAGS = $(LIBS) $(LDFLAGS)
57
58 diff --git a/st.h b/st.h
59 index 519b9bd..c10af86 100644
60 --- a/st.h
61 +++ b/st.h
62 @@ -3,6 +3,8 @@
63 #include <stdint.h>
64 #include <sys/types.h>
65
66 +#include <gd.h>
67 +
68 /* macros */
69 #define MIN(a, b) ((a) < (b) ? (a) : (b))
70 #define MAX(a, b) ((a) < (b) ? (b) : (a))
71 diff --git a/x.c b/x.c
72 index 8a16faa..169e833 100644
73 --- a/x.c
74 +++ b/x.c
75 @@ -93,7 +93,7 @@ typedef struct {
76 Window win;
77 Drawable buf;
78 GlyphFontSpec *specbuf; /* font spec buffer used for rendering …
79 - Atom xembed, wmdeletewin, netwmname, netwmiconname, netwmpid;
80 + Atom xembed, wmdeletewin, netwmname, netwmicon, netwmiconname, …
81 struct {
82 XIM xim;
83 XIC xic;
84 @@ -1204,6 +1204,41 @@ xinit(int cols, int rows)
85 xw.netwmiconname = XInternAtom(xw.dpy, "_NET_WM_ICON_NAME", Fal…
86 XSetWMProtocols(xw.dpy, xw.win, &xw.wmdeletewin, 1);
87
88 + /* use a png-image to set _NET_WM_ICON */
89 + FILE* file = fopen(ICON, "r");
90 + if (file) {
91 + /* load image in rgba-format */
92 + const gdImagePtr icon_rgba = gdImageCreateFromPng(file);
93 + fclose(file);
94 + /* declare icon-variable which will store the image in …
95 + const int width = gdImageSX(icon_rgba);
96 + const int height = gdImageSY(icon_rgba);
97 + const int icon_n = width * height + 2;
98 + long icon_argb[icon_n];
99 + /* set width and height of the icon */
100 + int i = 0;
101 + icon_argb[i++] = width;
102 + icon_argb[i++] = height;
103 + /* rgba -> argb */
104 + for (int y = 0; y < height; y++) {
105 + for (int x = 0; x < width; x++) {
106 + const int pixel_rgba = gdImageGetPixel(…
107 + unsigned char *pixel_argb = (unsigned c…
108 + pixel_argb[0] = gdImageBlue(icon_rgba, …
109 + pixel_argb[1] = gdImageGreen(icon_rgba,…
110 + pixel_argb[2] = gdImageRed(icon_rgba, p…
111 + /* scale alpha from 0-127 to 0-255 */
112 + const unsigned char alpha = 127 - gdIma…
113 + pixel_argb[3] = alpha == 127 ? 255 : al…
114 + }
115 + }
116 + gdImageDestroy(icon_rgba);
117 + /* set _NET_WM_ICON */
118 + xw.netwmicon = XInternAtom(xw.dpy, "_NET_WM_ICON", Fals…
119 + XChangeProperty(xw.dpy, xw.win, xw.netwmicon, XA_CARDIN…
120 + PropModeReplace, (uchar *) icon_argb, i…
121 + }
122 +
123 xw.netwmpid = XInternAtom(xw.dpy, "_NET_WM_PID", False);
124 XChangeProperty(xw.dpy, xw.win, xw.netwmpid, XA_CARDINAL, 32,
125 PropModeReplace, (uchar *)&thispid, 1);
126 --
127 2.36.1
128
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.