diff options
-rw-r--r-- | calmwm.h | 6 | ||||
-rw-r--r-- | group.c | 29 | ||||
-rw-r--r-- | xutil.c | 5 |
3 files changed, 29 insertions, 11 deletions
@@ -15,7 +15,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $Id: calmwm.h,v 1.80 2009/01/23 19:00:59 okan Exp $ + * $Id: calmwm.h,v 1.81 2009/01/27 00:42:53 oga Exp $ */ #ifndef _CALMWM_H_ @@ -140,6 +140,7 @@ extern const char *shortcut_to_name[]; struct group_ctx { TAILQ_ENTRY(group_ctx) entry; struct client_ctx_q clients; + const char *name; int shortcut; int hidden; int nhidden; @@ -523,7 +524,8 @@ extern struct conf Conf; #define WM_TAKE_FOCUS cwm_atoms[2] #define WM_PROTOCOLS cwm_atoms[3] #define _MOTIF_WM_HINTS cwm_atoms[4] -#define CWM_NO_ATOMS 5 +#define _CWM_GRP cwm_atoms[5] +#define CWM_NO_ATOMS 6 extern Atom cwm_atoms[CWM_NO_ATOMS]; @@ -16,7 +16,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $Id: group.c,v 1.22 2009/01/16 15:24:14 okan Exp $ + * $Id: group.c,v 1.23 2009/01/27 00:42:53 oga Exp $ */ #include "headers.h" @@ -52,6 +52,9 @@ _group_add(struct group_ctx *gc, struct client_ctx *cc) if (cc->group != NULL) TAILQ_REMOVE(&cc->group->clients, cc, group_entry); + XChangeProperty(X_Dpy, cc->win, _CWM_GRP, XA_STRING, + 8, PropModeReplace, gc->name, strlen(gc->name)); + TAILQ_INSERT_TAIL(&gc->clients, cc, group_entry); cc->group = gc; } @@ -62,6 +65,10 @@ _group_remove(struct client_ctx *cc) if (cc == NULL || cc->group == NULL) errx(1, "_group_remove: a ctx is NULL"); + XChangeProperty(X_Dpy, cc->win, _CWM_GRP, XA_STRING, 8, + PropModeReplace, shortcut_to_name[0], + strlen(shortcut_to_name[0])); + TAILQ_REMOVE(&cc->group->clients, cc, group_entry); cc->group = NULL; } @@ -132,6 +139,7 @@ group_init(void) TAILQ_INIT(&Groups[i].clients); Groups[i].hidden = 0; Groups[i].shortcut = i + 1; + Groups[i].name = shortcut_to_name[Groups[i].shortcut]; TAILQ_INSERT_TAIL(&Groupq, &Groups[i], entry); } @@ -325,16 +333,23 @@ group_autogroup(struct client_ctx *cc) { struct autogroupwin *aw; struct group_ctx *gc; + unsigned char *grpstr = NULL; char group[CALMWM_MAXNAMELEN]; if (cc->app_class == NULL || cc->app_name == NULL) return; - - TAILQ_FOREACH(aw, &Conf.autogroupq, entry) { - if (strcmp(aw->class, cc->app_class) == 0 && - (aw->name == NULL || strcmp(aw->name, cc->app_name) == 0)) { - strlcpy(group, aw->group, sizeof(group)); - break; + if (xu_getprop(cc, _CWM_GRP, XA_STRING, + (CALMWM_MAXNAMELEN - 1)/sizeof(long), &grpstr) > 0) { + strlcpy(group, grpstr, sizeof(group)); + XFree(grpstr); + } else { + TAILQ_FOREACH(aw, &Conf.autogroupq, entry) { + if (strcmp(aw->class, cc->app_class) == 0 && + (aw->name == NULL || + strcmp(aw->name, cc->app_name) == 0)) { + strlcpy(group, aw->group, sizeof(group)); + break; + } } } @@ -15,7 +15,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $Id: xutil.c,v 1.13 2009/01/23 20:07:20 oga Exp $ + * $Id: xutil.c,v 1.14 2009/01/27 00:42:53 oga Exp $ */ #include "headers.h" @@ -175,7 +175,8 @@ char *atoms[CWM_NO_ATOMS] = { "WM_DELETE_WINDOW", "WM_TAKE_FOCUS", "WM_PROTOCOLS", - "_MOTIF_WM_HINTS" + "_MOTIF_WM_HINTS", + "_CWM_GRP", }; void |