aboutsummaryrefslogtreecommitdiffstats
path: root/group.c
diff options
context:
space:
mode:
Diffstat (limited to 'group.c')
-rw-r--r--group.c277
1 files changed, 9 insertions, 268 deletions
diff --git a/group.c b/group.c
index 26c0acd..3a5db32 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.5 2008/01/16 11:39:20 oga Exp $
+ * $Id: group.c,v 1.6 2008/03/22 15:09:45 oga Exp $
*/
#include "headers.h"
@@ -24,20 +24,13 @@
#define CALMWM_NGROUPS 9
-int Groupmode = 0;
int Groupnamemode = 0;
struct group_ctx *Group_active = NULL;
-struct group_ctx *Group_current = NULL;
struct group_ctx Groups[CALMWM_NGROUPS];
char Group_name[256];
-int Groupfocusset = 0;
-Window Groupfocuswin;
-int Groupfocusrevert;
int Grouphideall = 0;
struct group_ctx_q Groupq;
-#define GroupMask (KeyPressMask|ExposureMask)
-
static char *shortcut_to_name[] = {
"XXX", "one", "two", "three",
"four", "five", "six", "seven",
@@ -58,7 +51,6 @@ _group_add(struct group_ctx *gc, struct client_ctx *cc)
TAILQ_INSERT_TAIL(&gc->clients, cc, group_entry);
cc->group = gc;
- cc->groupcommit = 0;
}
static void
@@ -69,38 +61,11 @@ _group_remove(struct client_ctx *cc)
TAILQ_REMOVE(&cc->group->clients, cc, group_entry);
cc->group = NULL;
- cc->groupcommit = 0;
cc->highlight = 0;
client_draw_border(cc);
}
static void
-_group_commit(struct group_ctx *gc)
-{
- struct client_ctx *cc;
-
- if (gc == NULL)
- errx(1, "_group_commit: ctx is null");
-
- TAILQ_FOREACH(cc, &gc->clients, group_entry)
- cc->groupcommit = 1;
-}
-
-static void
-_group_purge(struct group_ctx *gc)
-{
- struct client_ctx *cc;
-
- if (gc == NULL)
- errx(1, "_group_purge: ctx is null");
-
- TAILQ_FOREACH(cc, &gc->clients, group_entry)
- if (cc->groupcommit == 0)
- _group_remove(cc);
-}
-
-
-static void
_group_hide(struct group_ctx *gc)
{
struct client_ctx *cc;
@@ -155,27 +120,6 @@ _group_show(struct group_ctx *gc)
Group_active = gc;
}
-
-
-static void
-_group_destroy(struct group_ctx *gc)
-{
- struct client_ctx *cc;
-
- if (gc->name != NULL) {
- xfree(gc->name);
- gc->name = NULL;
- }
-
- while ((cc = TAILQ_FIRST(&gc->clients)) != NULL) {
- TAILQ_REMOVE(&gc->clients, cc, group_entry);
- cc->group = NULL;
- cc->groupcommit = 0;
- cc->highlight = 0;
- client_draw_border(cc);
- }
-}
-
void
group_init(void)
{
@@ -190,110 +134,12 @@ group_init(void)
TAILQ_INSERT_TAIL(&Groupq, &Groups[i], entry);
}
- Group_current = Group_active = &Groups[0];
+ Group_active = &Groups[0];
}
-/*
- * manipulate the 'current group'
+/*
+ * Colouring for groups upon add/remove.
*/
-
-/* change the current group */
-void
-group_select(int idx)
-{
- struct group_ctx *gc = Group_current;
- struct client_ctx *cc;
-
- if (idx < 0 || idx >= CALMWM_NGROUPS)
- return;
-
- TAILQ_FOREACH(cc, &gc->clients, group_entry) {
- cc->highlight = 0;
- client_draw_border(cc);
- }
-
- _group_commit(gc);
- Group_current = &Groups[idx];
-
- group_display_draw(screen_current());
- return;
-}
-
-/* enter group mode */
-void
-group_enter(void)
-{
- if (Groupmode != 0)
- errx(1, "group_enter called twice");
-
- if (Group_current == NULL)
- Group_current = &Groups[0];
-
- /* setup input buffer */
- Group_name[0] = '\0';
-
- Groupmode = 1;
-
- group_display_init(screen_current());
- group_display_draw(screen_current());
-}
-
-/* exit group mode */
-void
-group_exit(int commit)
-{
- struct group_ctx *gc = Group_current;
- struct client_ctx *cc;
-
- if (Groupmode != 1)
- errx(1, "group_exit called twice");
-
- TAILQ_FOREACH(cc, &gc->clients, group_entry) {
- cc->highlight = 0;
- client_draw_border(cc);
- }
-
- if (commit) {
- _group_commit(gc);
- } else {
- /* abort */
- _group_purge(gc);
- if (!TAILQ_EMPTY(&gc->clients))
- _group_destroy(gc);
- }
-
- XUnmapWindow(X_Dpy, screen_current()->groupwin);
-
- if (Groupnamemode) {
- XSetInputFocus(X_Dpy, Groupfocuswin, Groupfocusrevert,
- CurrentTime);
- Groupfocusset = 0;
- }
-
- Groupmode = Groupnamemode = 0;
-}
-
-void
-group_click(struct client_ctx *cc)
-{
- struct group_ctx *gc = Group_current;
-
- if (gc == cc->group)
- _group_remove(cc);
- else
- _group_add(gc, cc);
- group_display_draw(screen_current());
-}
-
-
-/* Used to add a newly mapped window to the active group */
-
-void
-group_sticky(struct client_ctx *cc)
-{
- _group_add(Group_active, cc);
-}
-
void
group_sticky_toggle_enter(struct client_ctx *cc)
{
@@ -321,85 +167,6 @@ group_sticky_toggle_exit(struct client_ctx *cc)
* selection list display
*/
-void
-group_display_init(struct screen_ctx *sc)
-{
- sc->groupwin = XCreateSimpleWindow(X_Dpy, sc->rootwin, 0, 0,
- 1, 1, 1, sc->blackpixl, sc->whitepixl);
-}
-
-void
-group_display_draw(struct screen_ctx *sc)
-{
- struct group_ctx *gc = Group_current;
- int x, y, dx, dy, fontheight;
- struct client_ctx *cc;
- char titlebuf[1024];
- struct fontdesc *font = DefaultFont;
-
- snprintf(titlebuf, sizeof(titlebuf), "Editing group %d", gc->shortcut);
-
- x = y = 0;
-
- fontheight = font_ascent(font) + font_descent(font) + 1;
- dx = font_width(font, titlebuf, strlen(titlebuf));
- dy = fontheight;
-
- TAILQ_FOREACH(cc, &gc->clients, group_entry) {
- cc->highlight = CLIENT_HIGHLIGHT_BLUE;
- client_draw_border(cc);
- }
-
- XMoveResizeWindow(X_Dpy, sc->groupwin, x, y, dx, dy);
-
- /* XXX */
- XSelectInput(X_Dpy, sc->groupwin, GroupMask);
-
- XMapRaised(X_Dpy, sc->groupwin);
- XClearWindow(X_Dpy, sc->groupwin);
- font_draw(font, titlebuf, strlen(titlebuf), sc->groupwin,
- 0, font_ascent(font) + 1);
-}
-
-void
-group_display_keypress(KeyCode k)
-{
- struct group_ctx * gc = Group_current;
- char chr;
- enum ctltype ctl;
- int len;
-
- if (!Groupnamemode)
- return;
-
- if (input_keycodetrans(k, 0, &ctl, &chr, 1) < 0)
- goto out;
-
- switch (ctl) {
- case CTL_ERASEONE:
- if ((len = strlen(Group_name)) > 0)
- Group_name[len - 1] = '\0';
- break;
- case CTL_RETURN:
- if (gc->name != NULL)
- xfree(gc->name);
-
- gc->name = xstrdup(Group_name);
-
- group_exit(1);
- return;
- default:
- break;
- }
-
- if (chr != '\0')
- snprintf(Group_name, sizeof(Group_name), "%s%c",
- Group_name, chr);
-
-out:
- group_display_draw(screen_current());
-}
-
/* if group_hidetoggle would produce no effect, toggle the group's hidden state
*/
void
@@ -495,7 +262,6 @@ group_client_delete(struct client_ctx *cc)
TAILQ_REMOVE(&cc->group->clients, cc, group_entry);
cc->group = NULL; /* he he */
- cc->groupcommit = 0;
}
void
@@ -551,14 +317,6 @@ group_menu(XButtonEvent *e)
}
void
-group_namemode(void)
-{
- Groupnamemode = 1;
-
- group_display_draw(screen_current());
-}
-
-void
group_alltoggle(void)
{
int i;
@@ -577,34 +335,17 @@ group_alltoggle(void)
}
void
-group_deletecurrent(void)
-{
- _group_destroy(Group_current);
- XUnmapWindow(X_Dpy, screen_current()->groupwin);
-
- Groupmode = Groupnamemode = 0;
-}
-
-void
-group_done(void)
-{
- struct group_ctx *gc = Group_current;
-
- if (gc->name != NULL)
- xfree(gc->name);
-
- gc->name = xstrdup(shortcut_to_name[gc->shortcut]);
-
- group_exit(1);
-}
-
-void
group_autogroup(struct client_ctx *cc)
{
struct autogroupwin *aw;
struct group_ctx *gc;
char group[CALMWM_MAXNAMELEN];
+ if (Conf.flags & CONF_STICKY_GROUPS) {
+ _group_add(Group_active, cc);
+ return;
+ }
+
if (cc->app_class == NULL || cc->app_name == NULL)
return;