diff options
| author | Nikita Langer <nikitalanger@icloud.com> | 2026-07-14 14:18:24 +0200 |
|---|---|---|
| committer | Nikita Langer <nikitalanger@icloud.com> | 2026-07-14 14:18:24 +0200 |
| commit | ce36d2ea39fa4883e40f06d5d61fde2847bee987 (patch) | |
| tree | c3fc197a014c1e0ae2b85c4f85b11decc0edb473 /dwm.c | |
| parent | 240c2f060bd412c7a565a701674a1f4dca23b422 (diff) | |
| download | dwm-ce36d2ea39fa4883e40f06d5d61fde2847bee987.tar.gz dwm-ce36d2ea39fa4883e40f06d5d61fde2847bee987.tar.bz2 dwm-ce36d2ea39fa4883e40f06d5d61fde2847bee987.tar.xz dwm-ce36d2ea39fa4883e40f06d5d61fde2847bee987.zip | |
Diffstat (limited to 'dwm.c')
| -rw-r--r-- | dwm.c | 69 |
1 files changed, 61 insertions, 8 deletions
@@ -91,6 +91,8 @@ #define VERSION_MINOR 0 #define XEMBED_EMBEDDED_VERSION (VERSION_MAJOR << 16) | VERSION_MINOR +#define OPAQUE 0xffU + /* enums */ enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */ enum { SchemeNorm, SchemeSel }; /* color schemes */ @@ -298,6 +300,7 @@ static Client *wintosystrayicon(Window w); static int xerror(Display *dpy, XErrorEvent *ee); static int xerrordummy(Display *dpy, XErrorEvent *ee); static int xerrorstart(Display *dpy, XErrorEvent *ee); +static void xinitvisual(void); static void xrdb(const Arg *arg); static void zoom(const Arg *arg); @@ -344,6 +347,10 @@ static Display *dpy; static Drw *drw; static Monitor *mons, *selmon; static Window root, wmcheckwin; +static int useargb = 0; +static Visual *visual; +static int depth; +static Colormap cmap; static xcb_connection_t *xcon; @@ -1958,7 +1965,8 @@ setup(void) sw = DisplayWidth(dpy, screen); sh = DisplayHeight(dpy, screen); root = RootWindow(dpy, screen); - drw = drw_create(dpy, screen, root, sw, sh); + xinitvisual(); + drw = drw_create(dpy, screen, root, sw, sh, visual, depth, cmap); if (!drw_fontset_create(drw, fonts, LENGTH(fonts))) die("no fonts could be loaded."); lrpad = drw->fonts->h; @@ -1995,8 +2003,9 @@ setup(void) cursor[CurMove] = drw_cur_create(drw, XC_fleur); /* init appearance */ scheme = ecalloc(LENGTH(colors), sizeof(Clr *)); + unsigned int alphas[] = {borderalpha, baralpha, OPAQUE}; for (i = 0; i < LENGTH(colors); i++) - scheme[i] = drw_scm_create(drw, colors[i], 3); + scheme[i] = drw_scm_create(drw, colors[i], alphas, 3); /* init system tray */ updatesystray(); /* init bars */ @@ -2269,7 +2278,9 @@ updatebars(void) Monitor *m; XSetWindowAttributes wa = { .override_redirect = True, - .background_pixmap = ParentRelative, + .background_pixel = 0, + .border_pixel = 0, + .colormap = cmap, .event_mask = ButtonPressMask|ExposureMask }; XClassHint ch = {"dwm", "dwm"}; @@ -2279,9 +2290,12 @@ updatebars(void) w = m->ww; if (showsystray && m == systraytomon(m)) w -= getsystraywidth(); - m->barwin = XCreateWindow(dpy, root, m->wx, m->by, w, bh, 0, DefaultDepth(dpy, screen), - CopyFromParent, DefaultVisual(dpy, screen), - CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa); + // m->barwin = XCreateWindow(dpy, root, m->wx, m->by, w, bh, 0, DefaultDepth(dpy, screen), + // CopyFromParent, DefaultVisual(dpy, screen), + // CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa); + m->barwin = XCreateWindow(dpy, root, m->wx, m->by, w, bh, 0, depth, + InputOutput, visual, + CWOverrideRedirect|CWBackPixel|CWBorderPixel|CWColormap|CWEventMask, &wa); XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor); if (showsystray && m == systraytomon(m)) XMapRaised(dpy, systray->win); @@ -2578,7 +2592,8 @@ updatesystray(void) XMapSubwindows(dpy, systray->win); /* redraw background */ XSetForeground(dpy, drw->gc, scheme[SchemeNorm][ColBg].pixel); - XFillRectangle(dpy, systray->win, drw->gc, 0, 0, w, bh); + // XFillRectangle(dpy, systray->win, drw->gc, 0, 0, w, bh); + XFillRectangle(dpy, systray->win, XCreateGC(dpy, root, 0 , NULL), 0, 0, w, bh); XSync(dpy, False); } @@ -2883,13 +2898,51 @@ xrdb(const Arg *arg) { loadxrdb(); int i; + unsigned int alphas[] = {borderalpha, baralpha, OPAQUE}; for (i = 0; i < LENGTH(colors); i++) - scheme[i] = drw_scm_create(drw, colors[i], 3); + scheme[i] = drw_scm_create(drw, colors[i], alphas, 3); focus(NULL); arrange(NULL); } void +xinitvisual(void) +{ + XVisualInfo *infos; + XRenderPictFormat *fmt; + int nitems; + int i; + + XVisualInfo tpl = { + .screen = screen, + .depth = 32, + .class = TrueColor + }; + long masks = VisualScreenMask | VisualDepthMask | VisualClassMask; + + infos = XGetVisualInfo(dpy, masks, &tpl, &nitems); + visual = NULL; + for(i = 0; i < nitems; i++) { + fmt = XRenderFindVisualFormat(dpy, infos[i].visual); + if (fmt->type == PictTypeDirect && fmt->direct.alphaMask) { + visual = infos[i].visual; + depth = infos[i].depth; + cmap = XCreateColormap(dpy, root, visual, AllocNone); + useargb = 1; + break; + } + } + + XFree(infos); + + if (!visual) { + visual = DefaultVisual(dpy, screen); + depth = DefaultDepth(dpy, screen); + cmap = DefaultColormap(dpy, screen); + } +} + +void zoom(const Arg *arg) { Client *c = selmon->sel; |
