mirror of
https://github.com/leahneukirchen/cwm.git
synced 2023-08-10 21:13:12 +03:00
re-add support for WM_TAKE_FOCUS, and additionally this time only call
XSetInputFocus() for clients that have the InputHint; latter fix discovered by Valery Masiutsin with a PoC patch - solves keyboard input focus loss for java apps.
This commit is contained in:
parent
6e17b41f56
commit
06eb13dfd9
1
calmwm.h
1
calmwm.h
@ -165,6 +165,7 @@ struct client_ctx {
|
||||
#define CLIENT_FREEZE 0x0010
|
||||
#define CLIENT_GROUP 0x0020
|
||||
#define CLIENT_UNGROUP 0x0040
|
||||
#define CLIENT_INPUT 0x0080
|
||||
|
||||
#define CLIENT_HIGHLIGHT (CLIENT_GROUP | CLIENT_UNGROUP)
|
||||
#define CLIENT_MAXFLAGS (CLIENT_VMAXIMIZED | CLIENT_HMAXIMIZED)
|
||||
|
25
client.c
25
client.c
@ -99,17 +99,22 @@ client_init(Window win, struct screen_ctx *sc, int mapped)
|
||||
cc->geom.h = wattr.height;
|
||||
cc->colormap = wattr.colormap;
|
||||
|
||||
if ((wmhints = XGetWMHints(X_Dpy, cc->win)) != NULL) {
|
||||
if (wmhints->flags & InputHint) {
|
||||
if (wmhints->input == 1)
|
||||
cc->flags |= CLIENT_INPUT;
|
||||
}
|
||||
}
|
||||
if (wattr.map_state != IsViewable) {
|
||||
client_placecalc(cc);
|
||||
client_move(cc);
|
||||
if ((wmhints = XGetWMHints(X_Dpy, cc->win)) != NULL) {
|
||||
if (wmhints->flags & StateHint) {
|
||||
cc->state = wmhints->initial_state;
|
||||
xu_set_wm_state(cc->win, cc->state);
|
||||
}
|
||||
XFree(wmhints);
|
||||
if ((wmhints) && (wmhints->flags & StateHint)) {
|
||||
cc->state = wmhints->initial_state;
|
||||
xu_set_wm_state(cc->win, cc->state);
|
||||
}
|
||||
}
|
||||
if (wmhints)
|
||||
XFree(wmhints);
|
||||
client_draw_border(cc);
|
||||
|
||||
if (xu_get_wm_state(cc->win, &state) < 0)
|
||||
@ -208,8 +213,12 @@ client_setactive(struct client_ctx *cc, int fg)
|
||||
|
||||
if (fg) {
|
||||
XInstallColormap(X_Dpy, cc->colormap);
|
||||
XSetInputFocus(X_Dpy, cc->win,
|
||||
RevertToPointerRoot, CurrentTime);
|
||||
if (cc->flags & CLIENT_INPUT) {
|
||||
XSetInputFocus(X_Dpy, cc->win,
|
||||
RevertToPointerRoot, CurrentTime);
|
||||
}
|
||||
if (cc->xproto & _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
|
||||
|
Loading…
Reference in New Issue
Block a user