summaryrefslogtreecommitdiffhomepage
path: root/patch/bar_tagpreview.c
diff options
context:
space:
mode:
authorStein Gunnar Bakkeby <[email protected]>2022-07-05 14:55:42 +0200
committerGitHub <[email protected]>2022-07-05 14:55:42 +0200
commit5f7df0b0dc78ae00f21d5bbe892456c450506b9b (patch)
tree73610f0475c0e5b7ef5a2017e11813908e769fcd /patch/bar_tagpreview.c
parent20692bea017353bcaf069625bcf3bda6eed4ad51 (diff)
downloaddwm-flexipatch-5f7df0b0dc78ae00f21d5bbe892456c450506b9b.tar.gz
dwm-flexipatch-5f7df0b0dc78ae00f21d5bbe892456c450506b9b.zip
Adding tagpreview patch (#271)
Diffstat (limited to 'patch/bar_tagpreview.c')
-rw-r--r--patch/bar_tagpreview.c95
1 files changed, 95 insertions, 0 deletions
diff --git a/patch/bar_tagpreview.c b/patch/bar_tagpreview.c
new file mode 100644
index 0000000..c92d05f
--- /dev/null
+++ b/patch/bar_tagpreview.c
@@ -0,0 +1,95 @@
+#include <Imlib2.h>
+
+void
+showtagpreview(int tag, int x, int y)
+{
+ if (selmon->tagmap[tag]) {
+ XSetWindowBackgroundPixmap(dpy, selmon->tagwin, selmon->tagmap[tag]);
+ XCopyArea(dpy, selmon->tagmap[tag], selmon->tagwin, drw->gc, 0, 0, selmon->mw / scalepreview, selmon->mh / scalepreview, 0, 0);
+ XMoveWindow(dpy, selmon->tagwin, x, y);
+ XSync(dpy, False);
+ XMapWindow(dpy, selmon->tagwin);
+ } else
+ XUnmapWindow(dpy, selmon->tagwin);
+}
+
+void
+hidetagpreview(Monitor *m)
+{
+ m->previewshow = 0;
+ XUnmapWindow(dpy, m->tagwin);
+}
+
+void
+tagpreviewswitchtag(void)
+{
+ int i;
+ unsigned int occ = 0;
+ Client *c;
+ Imlib_Image image;
+
+ for (c = selmon->clients; c; c = c->next)
+ occ |= c->tags;
+ for (i = 0; i < NUMTAGS; i++) {
+ if (selmon->tagset[selmon->seltags] & 1 << i) {
+ if (selmon->tagmap[i] != 0) {
+ XFreePixmap(dpy, selmon->tagmap[i]);
+ selmon->tagmap[i] = 0;
+ }
+ if (occ & 1 << i) {
+ image = imlib_create_image(sw, sh);
+ imlib_context_set_image(image);
+ imlib_context_set_display(dpy);
+ #if BAR_ALPHA_PATCH
+ imlib_image_set_has_alpha(1);
+ imlib_context_set_blend(0);
+ imlib_context_set_visual(visual);
+ #else
+ imlib_context_set_visual(DefaultVisual(dpy, screen));
+ #endif // BAR_ALPHA_PATCH
+ imlib_context_set_drawable(root);
+ imlib_copy_drawable_to_image(0, selmon->mx, selmon->my, selmon->mw ,selmon->mh, 0, 0, 1);
+ #if BAR_ALPHA_PATCH
+ selmon->tagmap[i] = XCreatePixmap(dpy, selmon->tagwin, selmon->mw / scalepreview, selmon->mh / scalepreview, depth);
+ #else
+ selmon->tagmap[i] = XCreatePixmap(dpy, selmon->tagwin, selmon->mw / scalepreview, selmon->mh / scalepreview, DefaultDepth(dpy, screen));
+ #endif // BAR_ALPHA_PATCH
+ imlib_context_set_drawable(selmon->tagmap[i]);
+ imlib_render_image_part_on_drawable_at_size(0, 0, selmon->mw, selmon->mh, 0, 0, selmon->mw / scalepreview, selmon->mh / scalepreview);
+ imlib_free_image();
+ }
+ }
+ }
+}
+
+void
+updatepreview(void)
+{
+ Monitor *m;
+
+ XSetWindowAttributes wa = {
+ .override_redirect = True,
+ #if BAR_ALPHA_PATCH
+ .background_pixel = 0,
+ .border_pixel = 0,
+ .colormap = cmap,
+ #else
+ .background_pixmap = ParentRelative,
+ #endif // BAR_ALPHA_PATCH
+ .event_mask = ButtonPressMask|ExposureMask
+ };
+ for (m = mons; m; m = m->next) {
+ m->tagwin = XCreateWindow(dpy, root, m->wx, m->bar->by + bh, m->mw / 4, m->mh / 4, 0,
+ #if BAR_ALPHA_PATCH
+ depth, CopyFromParent, visual,
+ CWOverrideRedirect|CWBackPixel|CWBorderPixel|CWColormap|CWEventMask, &wa
+ #else
+ DefaultDepth(dpy, screen), CopyFromParent, DefaultVisual(dpy, screen),
+ CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa
+ #endif // BAR_ALPHA_PATCH
+ );
+ XDefineCursor(dpy, m->tagwin, cursor[CurNormal]->cursor);
+ XMapRaised(dpy, m->tagwin);
+ XUnmapWindow(dpy, m->tagwin);
+ }
+}