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);