be smart about skipping focusing a window from unmap events, watch the unmap_ignore
This commit is contained in:
parent
38396b8a8d
commit
f4b87e04a2
2 changed files with 14 additions and 5 deletions
|
@ -1248,7 +1248,7 @@ void Client::fullscreen(bool fs)
|
|||
}
|
||||
|
||||
|
||||
bool Client::focus() const
|
||||
bool Client::focus()
|
||||
{
|
||||
// won't try focus if the client doesn't want it, or if the window isn't
|
||||
// visible on the screen
|
||||
|
@ -1257,12 +1257,21 @@ bool Client::focus() const
|
|||
if (_focused) return true;
|
||||
|
||||
// do a check to see if the window has already been unmapped or destroyed
|
||||
// do this intelligently while watching out for unmaps we've generated
|
||||
// (ignore_unmaps > 0)
|
||||
XEvent ev;
|
||||
if (XCheckTypedWindowEvent(**otk::display, _window, UnmapNotify, &ev) ||
|
||||
XCheckTypedWindowEvent(**otk::display, _window, DestroyNotify, &ev)) {
|
||||
if (XCheckTypedWindowEvent(**otk::display, _window, DestroyNotify, &ev)) {
|
||||
XPutBackEvent(**otk::display, &ev);
|
||||
return false;
|
||||
}
|
||||
while (XCheckTypedWindowEvent(**otk::display, _window, UnmapNotify, &ev)) {
|
||||
if (ignore_unmaps) {
|
||||
--ignore_unmaps;
|
||||
} else {
|
||||
XPutBackEvent(**otk::display, &ev);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (_can_focus)
|
||||
XSetInputFocus(**otk::display, _window,
|
||||
|
@ -1397,7 +1406,7 @@ void Client::unmapHandler(const XUnmapEvent &e)
|
|||
{
|
||||
if (ignore_unmaps) {
|
||||
#ifdef DEBUG
|
||||
printf("Ignored UnmapNotify for 0x%lx (event 0x%lx)\n", e.window, e.event);
|
||||
// printf("Ignored UnmapNotify for 0x%lx (event 0x%lx)\n", e.window, e.event);
|
||||
#endif // DEBUG
|
||||
ignore_unmaps--;
|
||||
return;
|
||||
|
|
|
@ -580,7 +580,7 @@ BB @param window The window id that the Client class should handle
|
|||
void resize(Corner anchor, int w, int h);
|
||||
|
||||
//! Attempt to focus the client window
|
||||
bool focus() const;
|
||||
bool focus();
|
||||
|
||||
//! Remove focus from the client window
|
||||
void unfocus() const;
|
||||
|
|
Loading…
Reference in a new issue