mirror of
https://github.com/leahneukirchen/cwm.git
synced 2023-08-10 21:13:12 +03:00
If _NET_WM_DESKTOP is set to -1 during client creation, place the client into
group 0 (nogroup); solves problem initially discovered by oga@nicotinebsd with tint2. A clientmessage *after* client creation already handles this case. Go further and assign every client to a group; in non-sticky mode, group 0 (nogroup) and sticky mode, the active group. In both cases, autogroup will override the group assignment. Removing a group from a client always places the client back into group 0 (nogroup). Autogroup can also assign a client to group 0 (nogroup) to keep a client always visible (unless of course one opts to hide all clients).
This commit is contained in:
parent
98d8483d35
commit
3cb81ebeea
40
group.c
40
group.c
@ -32,8 +32,7 @@
|
|||||||
|
|
||||||
#include "calmwm.h"
|
#include "calmwm.h"
|
||||||
|
|
||||||
static void group_add(struct group_ctx *, struct client_ctx *);
|
static void group_assign(struct group_ctx *, struct client_ctx *);
|
||||||
static void group_remove(struct client_ctx *);
|
|
||||||
static void group_hide(struct screen_ctx *, struct group_ctx *);
|
static void group_hide(struct screen_ctx *, struct group_ctx *);
|
||||||
static void group_show(struct screen_ctx *, struct group_ctx *);
|
static void group_show(struct screen_ctx *, struct group_ctx *);
|
||||||
static void group_fix_hidden_state(struct group_ctx *);
|
static void group_fix_hidden_state(struct group_ctx *);
|
||||||
@ -46,11 +45,10 @@ const char *shortcut_to_name[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
group_add(struct group_ctx *gc, struct client_ctx *cc)
|
group_assign(struct group_ctx *gc, struct client_ctx *cc)
|
||||||
{
|
{
|
||||||
if (cc == NULL || gc == NULL)
|
if (gc == NULL)
|
||||||
errx(1, "group_add: a ctx is NULL");
|
gc = TAILQ_FIRST(&cc->sc->groupq);
|
||||||
|
|
||||||
if (cc->group == gc)
|
if (cc->group == gc)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -63,18 +61,6 @@ group_add(struct group_ctx *gc, struct client_ctx *cc)
|
|||||||
xu_ewmh_net_wm_desktop(cc);
|
xu_ewmh_net_wm_desktop(cc);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
group_remove(struct client_ctx *cc)
|
|
||||||
{
|
|
||||||
if (cc == NULL || cc->group == NULL)
|
|
||||||
errx(1, "group_remove: a ctx is NULL");
|
|
||||||
|
|
||||||
TAILQ_REMOVE(&cc->group->clients, cc, group_entry);
|
|
||||||
cc->group = NULL;
|
|
||||||
|
|
||||||
xu_ewmh_net_wm_desktop(cc);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
group_hide(struct screen_ctx *sc, struct group_ctx *gc)
|
group_hide(struct screen_ctx *sc, struct group_ctx *gc)
|
||||||
{
|
{
|
||||||
@ -186,7 +172,7 @@ group_movetogroup(struct client_ctx *cc, int idx)
|
|||||||
client_hide(cc);
|
client_hide(cc);
|
||||||
gc->nhidden++;
|
gc->nhidden++;
|
||||||
}
|
}
|
||||||
group_add(gc, cc);
|
group_assign(gc, cc);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -199,10 +185,10 @@ group_sticky_toggle_enter(struct client_ctx *cc)
|
|||||||
struct group_ctx *gc = sc->group_active;
|
struct group_ctx *gc = sc->group_active;
|
||||||
|
|
||||||
if (gc == cc->group) {
|
if (gc == cc->group) {
|
||||||
group_remove(cc);
|
group_assign(NULL, cc);
|
||||||
cc->flags |= CLIENT_UNGROUP;
|
cc->flags |= CLIENT_UNGROUP;
|
||||||
} else {
|
} else {
|
||||||
group_add(gc, cc);
|
group_assign(gc, cc);
|
||||||
cc->flags |= CLIENT_GROUP;
|
cc->flags |= CLIENT_GROUP;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -369,7 +355,7 @@ group_autogroup(struct client_ctx *cc)
|
|||||||
|
|
||||||
if (xu_getprop(cc->win, ewmh[_NET_WM_DESKTOP],
|
if (xu_getprop(cc->win, ewmh[_NET_WM_DESKTOP],
|
||||||
XA_CARDINAL, 1, (unsigned char **)&grpno) > 0) {
|
XA_CARDINAL, 1, (unsigned char **)&grpno) > 0) {
|
||||||
if (*grpno == 0xffffffff)
|
if (*grpno == -1)
|
||||||
no = 0;
|
no = 0;
|
||||||
else if (*grpno > CALMWM_NGROUPS || *grpno < 0)
|
else if (*grpno > CALMWM_NGROUPS || *grpno < 0)
|
||||||
no = CALMWM_NGROUPS - 1;
|
no = CALMWM_NGROUPS - 1;
|
||||||
@ -389,19 +375,17 @@ group_autogroup(struct client_ctx *cc)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* no group please */
|
|
||||||
if (no == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
TAILQ_FOREACH(gc, &sc->groupq, entry) {
|
TAILQ_FOREACH(gc, &sc->groupq, entry) {
|
||||||
if (gc->shortcut == no) {
|
if (gc->shortcut == no) {
|
||||||
group_add(gc, cc);
|
group_assign(gc, cc);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Conf.flags & CONF_STICKY_GROUPS)
|
if (Conf.flags & CONF_STICKY_GROUPS)
|
||||||
group_add(sc->group_active, cc);
|
group_assign(sc->group_active, cc);
|
||||||
|
else
|
||||||
|
group_assign(NULL, cc);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Loading…
Reference in New Issue
Block a user