aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--calmwm.h6
-rw-r--r--group.c29
-rw-r--r--xutil.c5
3 files changed, 29 insertions, 11 deletions
diff --git a/calmwm.h b/calmwm.h
index a800ca4..ec93768 100644
--- a/calmwm.h
+++ b/calmwm.h
@@ -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];
diff --git a/group.c b/group.c
index 0929b49..ffe6b5f 100644
--- a/group.c
+++ b/group.c
@@ -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;
+ }
}
}
diff --git a/xutil.c b/xutil.c
index b0b11fd..db9fe8c 100644
--- a/xutil.c
+++ b/xutil.c
@@ -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