Implement a more robust method to handle the keyboard grab/focus voodoo as
it didn't catch some cases on OS X.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4496 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/vncviewer/cocoa.mm b/vncviewer/cocoa.mm
index 589da2d..6300d3c 100644
--- a/vncviewer/cocoa.mm
+++ b/vncviewer/cocoa.mm
@@ -22,19 +22,24 @@
 
 #import <Cocoa/Cocoa.h>
 
+static bool captured = false;
+
 int cocoa_capture_display(Fl_Window *win)
 {
   NSWindow *nsw;
 
   nsw = (NSWindow*)fl_xid(win);
 
-  // Already captured?
+  if (!captured) {
+    if (CGDisplayCapture(kCGDirectMainDisplay) != kCGErrorSuccess)
+      return 1;
+
+    captured = true;
+  }
+
   if ([nsw level] == CGShieldingWindowLevel())
     return 0;
 
-  if (CGDisplayCapture(kCGDirectMainDisplay) != kCGErrorSuccess)
-    return 1;
-
   [nsw setLevel:CGShieldingWindowLevel()];
 
   return 0;
@@ -45,7 +50,10 @@
   NSWindow *nsw;
   int newlevel;
 
-  CGDisplayRelease(kCGDirectMainDisplay);
+  if (captured)
+    CGDisplayRelease(kCGDirectMainDisplay);
+
+  captured = false;
 
   nsw = (NSWindow*)fl_xid(win);