Release all pressed keys when we lose focus. This is how we've always done it
and it has been the most sane approach.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4369 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/vncviewer/DesktopWindow.cxx b/vncviewer/DesktopWindow.cxx
index 4c1775f..189b521 100644
--- a/vncviewer/DesktopWindow.cxx
+++ b/vncviewer/DesktopWindow.cxx
@@ -185,6 +185,7 @@
 int DesktopWindow::handle(int event)
 {
   int buttonMask, wheelMask;
+  DownMap::const_iterator iter;
 
   switch (event) {
   case FL_PUSH:
@@ -219,6 +220,14 @@
     // Yes, we would like some focus please!
     return 1;
 
+  case FL_UNFOCUS:
+    // Release all keys that were pressed as that generally makes most
+    // sense (e.g. Alt+Tab where we only see the Alt press)
+    for (iter = downKeySym.begin();iter != downKeySym.end();++iter)
+      cc->writer()->keyEvent(iter->second, false);
+    downKeySym.clear();
+    return 1;
+
   case FL_KEYDOWN:
     handleKeyEvent(Fl::event_key(), Fl::event_compose_symbol(), true);
     return 1;