Introduction
Introduction Statistics Contact Development Disclaimer Help
ttags should be persistent now during X server run - dwm - [fork] customized bu…
git clone git://src.adamsgaard.dk/dwm
Log
Files
Refs
README
LICENSE
---
commit 9e56e1ded6889335035c8ffbe2763d3d83978673
parent e4ad3205995865f53b806a912bc7beb44fb90598
Author: Anselm R. Garbe <[email protected]>
Date: Mon, 13 Aug 2007 20:06:00 +0200
ttags should be persistent now during X server run
Diffstat:
M dwm.h | 2 +-
M layout.c | 6 +++---
M main.c | 3 ++-
M tag.c | 29 +++++++++++++++++++++++++++--
4 files changed, 33 insertions(+), 7 deletions(-)
---
diff --git a/dwm.h b/dwm.h
t@@ -81,7 +81,7 @@ extern int wax, way, wah, waw; /* win…
extern unsigned int bh, blw, bpos; /* bar height, bar layout la…
extern unsigned int ntags, numlockmask; /* number of tags, numl…
extern void (*handler[LASTEvent])(XEvent *); /* event handler */
-extern Atom wmatom[WMLast], netatom[NetLast];
+extern Atom dwmtags, wmatom[WMLast], netatom[NetLast];
extern Bool selscreen, *seltag; /* seltag is array of B…
extern Client *clients, *sel, *stack; /* global client list and…
extern Cursor cursor[CurLast];
diff --git a/layout.c b/layout.c
t@@ -2,6 +2,8 @@
#include "dwm.h"
#include <stdlib.h>
+/* static */
+
typedef struct {
const char *symbol;
void (*arrange)(void);
t@@ -10,10 +12,8 @@ typedef struct {
unsigned int blw = 0;
static Layout *lt = NULL;
-/* static */
-
static void
-floating(void) {
+floating(void) { /* default floating layout */
Client *c;
for(c = clients; c; c = c->next)
diff --git a/main.c b/main.c
t@@ -19,7 +19,7 @@ int screen, sx, sy, sw, sh, wax, way, waw, wah;
unsigned int bh, ntags;
unsigned int bpos = BARPOS;
unsigned int numlockmask = 0;
-Atom wmatom[WMLast], netatom[NetLast];
+Atom dwmtags, wmatom[WMLast], netatom[NetLast];
Bool *seltag;
Bool selscreen = True;
Client *clients = NULL;
t@@ -139,6 +139,7 @@ setup(void) {
XSetWindowAttributes wa;
/* init atoms */
+ dwmtags = XInternAtom(dpy, "__DWM_TAGS", False);
wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False);
wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False);
wmatom[WMState] = XInternAtom(dpy, "WM_STATE", False);
diff --git a/tag.c b/tag.c
t@@ -3,6 +3,8 @@
#include <regex.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
+#include <X11/Xatom.h>
#include <X11/Xutil.h>
/* static */
t@@ -23,6 +25,7 @@ RULES
static Regs *regs = NULL;
static unsigned int nrules = 0;
+static char prop[512];
/* extern */
t@@ -65,16 +68,32 @@ isvisible(Client *c) {
void
settags(Client *c, Client *trans) {
- char prop[512];
unsigned int i, j;
regmatch_t tmp;
Bool matched = trans != NULL;
XClassHint ch = { 0 };
+ XTextProperty name;
- if(matched)
+ if(matched) {
for(i = 0; i < ntags; i++)
c->tags[i] = trans->tags[i];
+ return;
+ }
else {
+ /* check if window has set a property */
+ name.nitems = 0;
+ XGetTextProperty(dpy, c->win, &name, dwmtags);
+ if(name.nitems && name.encoding == XA_STRING) {
+ strncpy(prop, (char *)name.value, sizeof prop - 1);
+ prop[sizeof prop - 1] = '\0';
+ XFree(name.value);
+ for(i = 0; i < ntags && i < sizeof prop - 1 && prop[i]…
+ if((c->tags[i] = prop[i] == '+'))
+ matched = True;
+ }
+ if(matched)
+ return;
+ /* rule matching */
XGetClassHint(dpy, c->win, &ch);
snprintf(prop, sizeof prop, "%s:%s:%s",
ch.res_class ? ch.res_class : "",
t@@ -110,6 +129,12 @@ tag(const char *arg) {
i = arg ? atoi(arg) : 0;
if(i >= 0 && i < ntags)
sel->tags[i] = True;
+ if(sel) {
+ for(i = 0; i < ntags && i < sizeof prop - 1; i++)
+ prop[i] = sel->tags[i] ? '+' : '-';
+ prop[i] = '\0';
+ XChangeProperty(dpy, sel->win, dwmtags, XA_STRING, 8, PropMode…
+ }
arrange();
}
You are viewing proxied material from mx1.adamsgaard.dk. 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.