]> git.sur5r.net Git - i3/i3/commit
Use the last known timestamp when calling xcb_set_input_focus(). (#2332)
authorIngo Bürk <admin@airblader.de>
Thu, 5 May 2016 18:46:33 +0000 (20:46 +0200)
committerMichael Stapelberg <stapelberg@users.noreply.github.com>
Thu, 5 May 2016 18:46:33 +0000 (20:46 +0200)
commit6746aa4b5ff884f9bbebd45685f2aadb0a8a62f7
tree471bf74cc21e5928feac619842c514bba1d5614a
parentb2397c9f016b299f066c1ebe22eb8f9dc4ff06f7
Use the last known timestamp when calling xcb_set_input_focus(). (#2332)

In most cases this won't make a difference, but consider the following
scenario:

* Some application acquires input focus on its own (which the window manager
  is not involved in, so it will "always" work).
* Before the FocusIn / FocusOut events are processed by i3, the
  workflow to push X changes is run, resulting in xcb_set_input_focus()
  being called.

Using XCB_CURRENT_TIME, this means i3 will "win" and override the focus,
even though it simply wasn't aware (yet) that focus had already been taken
over by someone else. When processing the FocusIn / FocusOut events, i3
assumes that the focus is already set which results in a broken focus
state as i3 assumes some container has the input focus when it doesn't.

With the new behavior, i3's attempt to set the input focus will fail if
the FocusIn / FocusOut events have not yet processed. Once they are processed,
the focus state will be automatically corrected.

fixes #2322
src/x.c