aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--calmwm.h8
-rw-r--r--client.c80
-rw-r--r--xevents.c23
3 files changed, 38 insertions, 73 deletions
diff --git a/calmwm.h b/calmwm.h
index aa8493b..00239b9 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.
*
- * $OpenBSD: calmwm.h,v 1.228 2013/11/12 21:25:00 okan Exp $
+ * $OpenBSD: calmwm.h,v 1.229 2013/11/27 00:01:23 okan Exp $
*/
#ifndef _CALMWM_H_
@@ -368,8 +368,7 @@ void client_applysizehints(struct client_ctx *);
void client_config(struct client_ctx *);
struct client_ctx *client_current(void);
void client_cycle(struct screen_ctx *, int);
-void client_cycle_leave(struct screen_ctx *,
- struct client_ctx *);
+void client_cycle_leave(struct screen_ctx *);
void client_delete(struct client_ctx *);
void client_draw_border(struct client_ctx *);
struct client_ctx *client_find(Window);
@@ -378,7 +377,6 @@ void client_getsizehints(struct client_ctx *);
void client_hide(struct client_ctx *);
void client_hmaximize(struct client_ctx *);
void client_htile(struct client_ctx *);
-void client_leave(struct client_ctx *);
void client_lower(struct client_ctx *);
void client_map(struct client_ctx *);
void client_maximize(struct client_ctx *);
@@ -390,7 +388,7 @@ void client_ptrwarp(struct client_ctx *);
void client_raise(struct client_ctx *);
void client_resize(struct client_ctx *, int);
void client_send_delete(struct client_ctx *);
-void client_setactive(struct client_ctx *, int);
+void client_setactive(struct client_ctx *);
void client_setname(struct client_ctx *);
int client_snapcalc(int, int, int, int, int);
void client_transient(struct client_ctx *);
diff --git a/client.c b/client.c
index fadbc18..50be63c 100644
--- a/client.c
+++ b/client.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.
*
- * $OpenBSD: client.c,v 1.149 2013/11/12 21:25:00 okan Exp $
+ * $OpenBSD: client.c,v 1.150 2013/11/27 00:01:23 okan Exp $
*/
#include <sys/param.h>
@@ -180,53 +180,35 @@ client_delete(struct client_ctx *cc)
}
void
-client_leave(struct client_ctx *cc)
+client_setactive(struct client_ctx *cc)
{
- if (cc == NULL)
- cc = client_current();
- if (cc == NULL)
- return;
-}
-
-void
-client_setactive(struct client_ctx *cc, int fg)
-{
- struct screen_ctx *sc;
-
- if (cc == NULL)
- cc = client_current();
- if (cc == NULL)
- return;
+ struct screen_ctx *sc = cc->sc;
+ struct client_ctx *oldcc;
- sc = cc->sc;
+ XInstallColormap(X_Dpy, cc->colormap);
- if (fg) {
- XInstallColormap(X_Dpy, cc->colormap);
- if ((cc->flags & CLIENT_INPUT) ||
- ((cc->flags & CLIENT_WM_TAKE_FOCUS) == 0)) {
- XSetInputFocus(X_Dpy, cc->win,
- RevertToPointerRoot, CurrentTime);
- }
- if (cc->flags & CLIENT_WM_TAKE_FOCUS)
- client_msg(cc, cwmh[WM_TAKE_FOCUS]);
- conf_grab_mouse(cc->win);
- /*
- * If we're in the middle of alt-tabbing, don't change
- * the order please.
- */
- if (!sc->cycling)
- client_mtf(cc);
- } else
- client_leave(cc);
+ if ((cc->flags & CLIENT_INPUT) ||
+ ((cc->flags & CLIENT_WM_TAKE_FOCUS) == 0)) {
+ XSetInputFocus(X_Dpy, cc->win,
+ RevertToPointerRoot, CurrentTime);
+ }
+ if (cc->flags & CLIENT_WM_TAKE_FOCUS)
+ client_msg(cc, cwmh[WM_TAKE_FOCUS]);
- if (fg && cc != client_current()) {
- client_setactive(NULL, 0);
- _curcc = cc;
- xu_ewmh_net_active_window(sc, cc->win);
+ if ((oldcc = client_current())) {
+ oldcc->active = 0;
+ client_draw_border(oldcc);
}
- cc->active = fg;
+ /* If we're in the middle of cycing, don't change the order. */
+ if (!sc->cycling)
+ client_mtf(cc);
+
+ _curcc = cc;
+ cc->active = 1;
client_draw_border(cc);
+ conf_grab_mouse(cc->win);
+ xu_ewmh_net_active_window(sc, cc->win);
}
/*
@@ -640,12 +622,14 @@ client_cycle(struct screen_ctx *sc, int flags)
}
void
-client_cycle_leave(struct screen_ctx *sc, struct client_ctx *cc)
+client_cycle_leave(struct screen_ctx *sc)
{
+ struct client_ctx *cc;
+
sc->cycling = 0;
- client_mtf(NULL);
- if (cc) {
+ if ((cc = client_current())) {
+ client_mtf(cc);
group_sticky_toggle_exit(cc);
XUngrabKeyboard(X_Dpy, CurrentTime);
}
@@ -724,14 +708,8 @@ client_placecalc(struct client_ctx *cc)
static void
client_mtf(struct client_ctx *cc)
{
- struct screen_ctx *sc;
-
- if (cc == NULL)
- cc = client_current();
- if (cc == NULL)
- return;
+ struct screen_ctx *sc = cc->sc;
- sc = cc->sc;
TAILQ_REMOVE(&sc->mruq, cc, mru_entry);
TAILQ_INSERT_HEAD(&sc->mruq, cc, mru_entry);
}
diff --git a/xevents.c b/xevents.c
index 854df0c..f7f772a 100644
--- a/xevents.c
+++ b/xevents.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.
*
- * $OpenBSD: xevents.c,v 1.92 2013/11/12 21:25:00 okan Exp $
+ * $OpenBSD: xevents.c,v 1.93 2013/11/27 00:01:23 okan Exp $
*/
/*
@@ -43,7 +43,6 @@ static void xev_handle_destroynotify(XEvent *);
static void xev_handle_configurerequest(XEvent *);
static void xev_handle_propertynotify(XEvent *);
static void xev_handle_enternotify(XEvent *);
-static void xev_handle_leavenotify(XEvent *);
static void xev_handle_buttonpress(XEvent *);
static void xev_handle_buttonrelease(XEvent *);
static void xev_handle_keypress(XEvent *);
@@ -60,7 +59,6 @@ void (*xev_handlers[LASTEvent])(XEvent *) = {
[ConfigureRequest] = xev_handle_configurerequest,
[PropertyNotify] = xev_handle_propertynotify,
[EnterNotify] = xev_handle_enternotify,
- [LeaveNotify] = xev_handle_leavenotify,
[ButtonPress] = xev_handle_buttonpress,
[ButtonRelease] = xev_handle_buttonrelease,
[KeyPress] = xev_handle_keypress,
@@ -81,7 +79,7 @@ xev_handle_maprequest(XEvent *ee)
struct client_ctx *cc = NULL, *old_cc;
XWindowAttributes xattr;
- if ((old_cc = client_current()) != NULL)
+ if ((old_cc = client_current()))
client_ptrsave(old_cc);
if ((cc = client_find(e->window)) == NULL) {
@@ -211,13 +209,7 @@ xev_handle_enternotify(XEvent *ee)
struct client_ctx *cc;
if ((cc = client_find(e->window)) != NULL)
- client_setactive(cc, 1);
-}
-
-static void
-xev_handle_leavenotify(XEvent *ee)
-{
- client_leave(NULL);
+ client_setactive(cc);
}
/* We can split this into two event handlers. */
@@ -256,7 +248,7 @@ xev_handle_buttonrelease(XEvent *ee)
{
struct client_ctx *cc;
- if ((cc = client_current()) != NULL)
+ if ((cc = client_current()))
group_sticky_toggle_exit(cc);
}
@@ -311,17 +303,15 @@ xev_handle_keyrelease(XEvent *ee)
{
XKeyEvent *e = &ee->xkey;
struct screen_ctx *sc;
- struct client_ctx *cc;
KeySym keysym;
u_int i;
sc = screen_fromroot(e->root);
- cc = client_current();
keysym = XkbKeycodeToKeysym(X_Dpy, e->keycode, 0, 0);
for (i = 0; i < nitems(modkeys); i++) {
if (keysym == modkeys[i]) {
- client_cycle_leave(sc, cc);
+ client_cycle_leave(sc);
break;
}
}
@@ -344,8 +334,7 @@ xev_handle_clientmessage(XEvent *ee)
client_send_delete(cc);
if (e->message_type == ewmh[_NET_ACTIVE_WINDOW] && e->format == 32) {
- old_cc = client_current();
- if (old_cc)
+ if ((old_cc = client_current()))
client_ptrsave(old_cc);
client_ptrwarp(cc);
}