commit 86059e16d2f518d9c8cd3c594d1d590d6850ccad
parent 652ecd53c7b0cfdc40d0e724606ceb4e95572268
Author: Kris Maglione <jg@suckless.org>
Date: Thu, 20 Mar 2008 15:35:59 -0400
Support WM_TAKE_FOCUS.
Diffstat:
1 file changed, 16 insertions(+), 14 deletions(-)
diff --git a/cmd/wmii/client.c b/cmd/wmii/client.c
@@ -470,27 +470,29 @@ focus(Client *c, bool user) {
void
client_focus(Client *c) {
static long id;
+ long _id;
flushevents(FocusChangeMask, true);
- Dprint(DFocus, "client_focus([%C]%s) %ld\n", c, clientname(c), id++);
+ _id = id++ % 99;
+ Dprint(DFocus, "client_focus([%C]%s) %ld\n", c, clientname(c), _id);
- if(c) {
- if(c->noinput)
- return;
- if(c->group)
- c->group->client = c;
- }
+ if(c && c->group)
+ c->group->client = c;
sync();
flushevents(FocusChangeMask, true);
- Dprint(DFocus, "client_focus([%C]%s) %ld\n", c, clientname(c), id);
+
+ Dprint(DFocus, "\t%02d [%C]%s\n\t=> [%C]%s\n",
+ _id,
+ screen->focus, clientname(screen->focus),
+ c, clientname(c));
if(screen->focus != c) {
- Dprint(DFocus, "\t[%C]%s => [%C]%s\n",
- screen->focus, clientname(screen->focus),
- c, clientname(c));
- if(c)
- setfocus(&c->w, RevertToParent);
- else
+ if(c) {
+ if(c->proto & ProtoTakeFocus)
+ client_message(c, "WM_TAKE_FOCUS", 0);
+ else if(!c->noinput)
+ setfocus(&c->w, RevertToParent);
+ }else
setfocus(screen->barwin, RevertToParent);
event("ClientFocus %C\n", c);