summaryrefslogtreecommitdiff
path: root/x.c
diff options
context:
space:
mode:
authorzachir <zachir@librem.one>2022-01-18 21:19:16 -0600
committerzachir <zachir@librem.one>2022-01-18 21:19:16 -0600
commite77592fb54057e331dea65d293ede7856d2f2ba1 (patch)
tree4c95c84418f1f3990667aaea0b18cb5a512a2eb0 /x.c
parent9075ac883494635eec1be82a82fe99f87f01783b (diff)
st: update base to 0.8.5
Diffstat (limited to 'x.c')
-rw-r--r--x.c106
1 files changed, 67 insertions, 39 deletions
diff --git a/x.c b/x.c
index 3334498..8f90cc7 100644
--- a/x.c
+++ b/x.c
@@ -65,7 +65,7 @@ typedef struct {
/* X modifiers */
#define XK_ANY_MOD UINT_MAX
#define XK_NO_MOD 0
-#define XK_SWITCH_MOD (1<<13)
+#define XK_SWITCH_MOD (1<<13|1<<14)
/* function definitions used in config.h */
static void clipcopy(const Arg *);
@@ -115,7 +115,7 @@ typedef struct {
Window win;
Drawable buf;
GlyphFontSpec *specbuf; /* font spec buffer used for rendering */
- Atom xembed, wmdeletewin, netwmname, netwmicon, netwmpid;
+ Atom xembed, wmdeletewin, netwmname, netwmiconname, netwmicon, netwmpid;
struct {
XIM xim;
XIC xic;
@@ -184,7 +184,7 @@ static void xresize(int, int);
static void xhints(void);
static int xloadcolor(int, const char *, Color *);
static int xloadfont(Font *, FcPattern *);
-static void xloadfonts(char *, double);
+static void xloadfonts(const char *, double);
static int xloadsparefont(FcPattern *, int);
static void xloadsparefonts(void);
static void xunloadfont(Font *);
@@ -421,7 +421,9 @@ mousereport(XEvent *e)
button = 3;
} else {
button -= Button1;
- if (button >= 3)
+ if (button >= 7)
+ button += 128 - 7;
+ else if (button >= 3)
button += 64 - 3;
}
if (e->xbutton.type == ButtonPress) {
@@ -851,6 +853,19 @@ xloadcols(void)
}
int
+xgetcolor(int x, unsigned char *r, unsigned char *g, unsigned char *b)
+{
+ if (!BETWEEN(x, 0, dc.collen))
+ return 1;
+
+ *r = dc.col[x].color.red >> 8;
+ *g = dc.col[x].color.green >> 8;
+ *b = dc.col[x].color.blue >> 8;
+
+ return 0;
+}
+
+int
xsetcolorname(int x, const char *name)
{
Color ncolor;
@@ -1009,7 +1024,7 @@ xloadfont(Font *f, FcPattern *pattern)
}
void
-xloadfonts(char *fontstr, double fontsize)
+xloadfonts(const char *fontstr, double fontsize)
{
FcPattern *pattern;
double fontval;
@@ -1017,7 +1032,7 @@ xloadfonts(char *fontstr, double fontsize)
if (fontstr[0] == '-')
pattern = XftXlfdParse(fontstr, False, False);
else
- pattern = FcNameParse((FcChar8 *)fontstr);
+ pattern = FcNameParse((const FcChar8 *)fontstr);
if (!pattern)
die("can't open font %s\n", fontstr);
@@ -1351,18 +1366,19 @@ xinit(int cols, int rows)
}
XRecolorCursor(xw.dpy, xw.vpointer, &xmousefg, &xmousebg);
- blankpm = XCreateBitmapFromData(xw.dpy, xw.win, &(char){0}, 1, 1);
- xw.bpointer = XCreatePixmapCursor(xw.dpy, blankpm, blankpm,
- &xmousefg, &xmousebg, 0, 0);
+ blankpm = XCreateBitmapFromData(xw.dpy, xw.win, &(char){0}, 1, 1);
+ xw.bpointer = XCreatePixmapCursor(xw.dpy, blankpm, blankpm,
+ &xmousefg, &mousebg, 0, 0);
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.netwmicon = XInternAtom(xw.dpy, "_NET_WM_ICON", False);
- XChangeProperty(xw.dpy, xw.win, xw.netwmicon, XA_CARDINAL, 32,
- PropModeReplace, (uchar *)&icon, LEN(icon));
+ xw.netwmicon = XInternAtom(xw.dpy, "_NET_WM_ICON", False);
+ XChangeProperty(xw.dpy, xw.win, xw.netwmicon, XA_CARDINAL, 32,
+ PropModeReplace, (uchar *)&icon, LEN(icon));
xw.netwmpid = XInternAtom(xw.dpy, "_NET_WM_PID", False);
XChangeProperty(xw.dpy, xw.win, xw.netwmpid, XA_CARDINAL, 32,
@@ -1762,32 +1778,45 @@ xsetenv(void)
}
void
-xfreetitlestack(void)
+xseticontitle(char *p)
{
- for (int i = 0; i < LEN(titlestack); i++) {
- free(titlestack[i]);
- titlestack[i] = NULL;
- }
+ XTextProperty prop;
+ DEFAULT(p, opt_title);
+
+ if (Xutf8TextListToTextProperty(xw.dpy, &p, 1, XUTF8StringStyle,
+ &prop) != Success)
+ return;
+ XSetWMIconName(xw.dpy, xw.win, &prop);
+ XSetTextProperty(xw.dpy, xw.win, &prop, xw.netwmiconname);
+ XFree(prop.value);
+}
+
+void xfreetitlestack(void)
+{
+ for (int i = 0; i < LEN(titlestack); i++) {
+ free(titlestack[i]);
+ titlestack[i] = NULL;
+ }
}
void
xsettitle(char *p, int pop)
{
- XTextProperty prop;
-
- free(titlestack[tstki]);
- if (pop) {
- titlestack[tstki] = NULL;
- tstki = (tstki - 1 + TITLESTACKSIZE) % TITLESTACKSIZE;
- p = titlestack[tstki] ? titlestack[tstki] : opt_title;
- } else if (p) {
- titlestack[tstki] = xstrdup(p);
- } else {
- titlestack[tstki] = NULL;
- p = opt_title;
- }
-
- Xutf8TextListToTextProperty(xw.dpy, &p, 1, XUTF8StringStyle, &prop);
+ XTextProperty prop;
+
+ free(titlestack[tstki]);
+ if (pop) {
+ titlestack[tstki] = NULL;
+ tstki = (tstki - 1 + TITLESTACKSIZE) % TITLESTACKSIZE;
+ p = titlestack[tstki] ? titlestack[tstki] : opt_title;
+ } else if (p) {
+ titlestack[tstki] = xstrdup(p);
+ } else {
+ titlestack[tstki] = NULL;
+ p = opt_title;
+ }
+
+ Xutf8TextListToTextProperty(xw.dpy, &p, 1, XUTF8StringStyle, &prop);
XSetWMName(xw.dpy, xw.win, &prop);
XSetTextProperty(xw.dpy, xw.win, &prop, xw.netwmname);
XFree(prop.value);
@@ -1796,18 +1825,17 @@ xsettitle(char *p, int pop)
void
xpushtitle(void)
{
- int tstkin = (tstki + 1) % TITLESTACKSIZE;
-
- free(titlestack[tstkin]);
- titlestack[tstkin] = titlestack[tstki] ? xstrdup(titlestack[tstki]) : NULL;
- tstki = tstkin;
+ int tstkin = (tstki + 1) % TITLESTACKSIZE;
+ free(titlestack[tstkin]);
+ titlestack[tstkin] = titlestack[tstki] ? xstrdup(titlestack[tstki]) : NULL;
+ tstki = tstkin;
}
int
xstartdraw(void)
{
- if (IS_SET(MODE_VISIBLE))
- XCopyArea(xw.dpy, xw.win, xw.buf, dc.gc, 0, 0, win.w, win.h, 0, 0);
+ if (IS_SET(MODE_VISIBLE))
+ XCopyArea(xw.dpy, xw.win, xw.buf, dc.gc, 0, 0, win.w, win.h, 0, 0);
return IS_SET(MODE_VISIBLE);
}