summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-01-23 15:43:55 +0000
committerDana Jansens <danakj@orodu.net>2003-01-23 15:43:55 +0000
commitf4b87e04a2a1d285f7b6f93b3db08f040ba5c32c (patch)
tree1cb68a752ec2bffd5eddb47ea3c0cc746db26fe2 /src
parent38396b8a8dd3f67bc893e26dde980d5338469521 (diff)
be smart about skipping focusing a window from unmap events, watch the unmap_ignore
Diffstat (limited to 'src')
-rw-r--r--src/client.cc17
-rw-r--r--src/client.hh2
2 files changed, 14 insertions, 5 deletions
diff --git a/src/client.cc b/src/client.cc
index 94813a2e..91d61f4b 100644
--- a/src/client.cc
+++ b/src/client.cc
@@ -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;
diff --git a/src/client.hh b/src/client.hh
index 8f04dc64..420a8c4a 100644
--- a/src/client.hh
+++ b/src/client.hh
@@ -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;