summary refs log tree commit diff
path: root/xevents.c
diff options
context:
space:
mode:
authorokan <okan>2008-06-14 21:48:54 +0000
committerokan <okan>2008-06-14 21:48:54 +0000
commitbdcbbe7f53ce140df98f06a31dfe5cb19a40d708 (patch)
tree58a64d48acdfbaca8ec894b89909da5c6d8880f1 /xevents.c
parentb4ae492b7ba7bf40147c1ad4b8d036aa32053f58 (diff)
downloadcwm-bdcbbe7f53ce140df98f06a31dfe5cb19a40d708.tar.gz
cwm-bdcbbe7f53ce140df98f06a31dfe5cb19a40d708.tar.xz
cwm-bdcbbe7f53ce140df98f06a31dfe5cb19a40d708.zip
confable menu and window mouse bindings from rivo nurges (thanks!) with
some minor fixups, man page bits and knf.

ok oga@
Diffstat (limited to 'xevents.c')
-rw-r--r--xevents.c109
1 files changed, 13 insertions, 96 deletions
diff --git a/xevents.c b/xevents.c
index 076f30b..fed91e6 100644
--- a/xevents.c
+++ b/xevents.c
@@ -221,113 +221,30 @@ void
 xev_handle_buttonpress(struct xevent *xev, XEvent *ee)
 {
 	XButtonEvent *e = &ee->xbutton;
-	struct client_ctx *cc, *old_cc = client_current();
+	struct client_ctx *cc;
 	struct screen_ctx *sc = screen_fromroot(e->root);
 	char *wname;
-	int altcontrol = e->state == (ControlMask|Mod1Mask);
+	struct mousebinding *mb;
 
 	cc = client_find(e->window);
 
-	if (sc->rootwin == e->window && !altcontrol) {
-		struct menu_q menuq;
-		struct menu *mi;
-
-		/* XXXSIGH!!!! */
-		if (e->button == Button2) {
-			group_menu(e);
-			goto out;
-		}
-
-		TAILQ_INIT(&menuq);
-
-		switch (e->button) {
-		case Button1:
-			TAILQ_FOREACH(cc, &Clientq, entry) {
-				if (cc->flags & CLIENT_HIDDEN) {
-					if (cc->label != NULL)
-						wname = cc->label;
-					else
-						wname = cc->name;
-
-					if (wname == NULL)
-						continue;
-
-					XCALLOC(mi, struct menu);
-					strlcpy(mi->text,
-					    wname, sizeof(mi->text));
-					mi->ctx = cc;
-					TAILQ_INSERT_TAIL(&menuq, mi, entry);
-				}
-			}
-			break;
-		case Button3: {
-			struct cmd *cmd;
-			conf_reload(&Conf);
-			TAILQ_FOREACH(cmd, &Conf.cmdq, entry) {
-				XCALLOC(mi, struct menu);
-				strlcpy(mi->text, cmd->label, sizeof(mi->text));
-				mi->ctx = cmd;
-				TAILQ_INSERT_TAIL(&menuq, mi, entry);
-			}
-			break;
-		}
-		default:
-			break;
-		}
-
-		if (TAILQ_EMPTY(&menuq))
-			goto out;
-
-		mi = menu_filter(&menuq, NULL, NULL, 0, NULL, NULL);
-		if (mi == NULL)
-			goto cleanup;
-
-		switch (e->button) {
-		case Button1:
-			cc = (struct client_ctx *)mi->ctx;
-			client_unhide(cc);
-
-			if (old_cc != NULL)
-				client_ptrsave(old_cc);
-			client_ptrwarp(cc);
-			break;
-		case Button3:
-			u_spawn(((struct cmd *)mi->ctx)->image);
-			break;
-		default:
-			break;
-		}
-
-	cleanup:
-		while ((mi = TAILQ_FIRST(&menuq)) != NULL) {
-			TAILQ_REMOVE(&menuq, mi, entry);
-			xfree(mi);
+	if (sc->rootwin == e->window)
+		TAILQ_FOREACH(mb, &Conf.mousebindingq, entry) {
+			if(e->button!=mb->button || e->state!=mb->modmask ||
+			    mb->context!=MOUSEBIND_CTX_ROOT)
+				continue;
+			(*mb->callback)(cc, e);
 		}
 
-		goto out;
-	}
-
 	if (cc == NULL || e->state == 0)
 		goto out;
 
-	sc = CCTOSC(cc);
+	TAILQ_FOREACH(mb, &Conf.mousebindingq, entry) {
+		if(e->button!=mb->button || e->state!=mb->modmask ||
+		   mb->context!=MOUSEBIND_CTX_WIN)
+			continue;
 
-	switch (e->button) {
-	case Button1:
-		if (altcontrol)
-			group_sticky_toggle_enter(cc);
-		else {
-			grab_drag(cc);
-			client_move(cc);
-		}
-		break;
-	case Button2:
-		grab_sweep(cc);
-		client_resize(cc);
-		break;
-	case Button3:
-		client_ptrsave(cc);
-		client_lower(cc);
+		(*mb->callback)(cc, NULL);
 		break;
 	}
 out: