[hackers] [tabbed] fix focus handling (thanks roman) || Connor Lane Smith

From: <hg_AT_suckless.org>
Date: Mon, 26 Sep 2011 23:40:14 +0200 (CEST)

changeset: 147:f9e98b8960a6
tag: tip
user: Connor Lane Smith <cls_AT_lubutu.com>
date: Mon Sep 26 22:39:59 2011 +0100
files: tabbed.c
description:
fix focus handling (thanks roman)

diff -r 83dfab8f4285 -r f9e98b8960a6 tabbed.c
--- a/tabbed.c Mon Sep 26 22:37:22 2011 +0100
+++ b/tabbed.c Mon Sep 26 22:39:59 2011 +0100
@@ -94,7 +94,6 @@
 static void drawbar();
 static void drawtext(const char *text, unsigned long col[ColLast]);
 static void *emallocz(size_t size);
-static void enternotify(const XEvent *e);
 static void expose(const XEvent *e);
 static void focus(Client *c);
 static void focusin(const XEvent *e);
@@ -134,7 +133,6 @@
         [ConfigureRequest] = configurerequest,
         [CreateNotify] = createnotify,
         [DestroyNotify] = destroynotify,
- [EnterNotify] = enternotify,
         [Expose] = expose,
         [FocusIn] = focusin,
         [KeyPress] = keypress,
@@ -368,11 +366,6 @@
 }
 
 void
-enternotify(const XEvent *e) {
- focus(sel);
-}
-
-void
 expose(const XEvent *e) {
         const XExposeEvent *ev = &e->xexpose;
 
@@ -390,6 +383,7 @@
         }
         resize(c, ww, wh - bh);
         XRaiseWindow(dpy, c->win);
+ XSetInputFocus(dpy, c->win, RevertToParent, CurrentTime);
         sendxembed(c, XEMBED_FOCUS_IN, XEMBED_FOCUS_CURRENT, 0, 0);
         sendxembed(c, XEMBED_WINDOW_ACTIVATE, 0, 0, 0);
         XStoreName(dpy, win, c->name);
@@ -402,7 +396,15 @@
 
 void
 focusin(const XEvent *e) {
- focus(sel);
+ const XFocusChangeEvent *ev = &e->xfocus;
+ int dummy;
+ Window focused;
+
+ if(ev->mode != NotifyUngrab) {
+ XGetInputFocus(dpy, &focused, &dummy);
+ if(focused == win)
+ focus(sel);
+ }
 }
 
 void
Received on Mon Sep 26 2011 - 23:40:14 CEST

This archive was generated by hypermail 2.2.0 : Mon Sep 26 2011 - 23:48:05 CEST