aboutsummaryrefslogtreecommitdiffstats
path: root/vncviewer
diff options
context:
space:
mode:
authorPierre Ossman <ossman@cendio.se>2012-08-27 14:40:51 +0000
committerPierre Ossman <ossman@cendio.se>2012-08-27 14:40:51 +0000
commit3d75911a551fab492ceb71506f85ffbae993b3b7 (patch)
tree12b9cbee3dc034f38f59749adf4e4afc20bc0a9a /vncviewer
parent17e28044f1f8e8e1deb5e54f3622f69ac7b9c87e (diff)
downloadtigervnc-3d75911a551fab492ceb71506f85ffbae993b3b7.tar.gz
tigervnc-3d75911a551fab492ceb71506f85ffbae993b3b7.zip
The OS X keyboard grabbing code needs to be multi-head aware to function
properly. git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4977 3789f03b-4d11-0410-bbf8-ca57d06f2519
Diffstat (limited to 'vncviewer')
-rw-r--r--vncviewer/DesktopWindow.cxx8
-rw-r--r--vncviewer/cocoa.h2
-rw-r--r--vncviewer/cocoa.mm29
3 files changed, 33 insertions, 6 deletions
diff --git a/vncviewer/DesktopWindow.cxx b/vncviewer/DesktopWindow.cxx
index 6fc2b923..ca33ebeb 100644
--- a/vncviewer/DesktopWindow.cxx
+++ b/vncviewer/DesktopWindow.cxx
@@ -439,7 +439,13 @@ void DesktopWindow::grabKeyboard()
#elif defined(__APPLE__)
int ret;
- ret = cocoa_capture_display(this);
+ ret = cocoa_capture_display(this,
+#ifdef HAVE_FLTK_FULLSCREEN_SCREENS
+ fullScreenAllMonitors
+#else
+ false
+#endif
+ );
if (ret != 0)
vlog.error(_("Failure grabbing keyboard"));
#else
diff --git a/vncviewer/cocoa.h b/vncviewer/cocoa.h
index 3bbe6fa0..87980823 100644
--- a/vncviewer/cocoa.h
+++ b/vncviewer/cocoa.h
@@ -19,7 +19,7 @@
#ifndef __VNCVIEWER_COCOA_H__
#define __VNCVIEWER_COCOA_H__
-int cocoa_capture_display(Fl_Window *win);
+int cocoa_capture_display(Fl_Window *win, bool all_displays);
void cocoa_release_display(Fl_Window *win);
#endif
diff --git a/vncviewer/cocoa.mm b/vncviewer/cocoa.mm
index 6300d3c0..6872b230 100644
--- a/vncviewer/cocoa.mm
+++ b/vncviewer/cocoa.mm
@@ -24,15 +24,36 @@
static bool captured = false;
-int cocoa_capture_display(Fl_Window *win)
+int cocoa_capture_display(Fl_Window *win, bool all_displays)
{
NSWindow *nsw;
nsw = (NSWindow*)fl_xid(win);
if (!captured) {
- if (CGDisplayCapture(kCGDirectMainDisplay) != kCGErrorSuccess)
- return 1;
+ if (all_displays) {
+ if (CGCaptureAllDisplays() != kCGErrorSuccess)
+ return 1;
+ } else {
+ CGDirectDisplayID displays[16];
+ CGDisplayCount count;
+ int index;
+
+ if (CGGetActiveDisplayList(16, displays, &count) != kCGErrorSuccess)
+ return 1;
+
+ if (count != Fl::screen_count())
+ return 1;
+
+#ifdef HAVE_FLTK_FULLSCREEN_SCREENS
+ index = Fl::screen_num(win->x(), win->y(), win->w(), win->h());
+#else
+ index = 0;
+#endif
+
+ if (CGDisplayCapture(displays[index]) != kCGErrorSuccess)
+ return 1;
+ }
captured = true;
}
@@ -51,7 +72,7 @@ void cocoa_release_display(Fl_Window *win)
int newlevel;
if (captured)
- CGDisplayRelease(kCGDirectMainDisplay);
+ CGReleaseAllDisplays();
captured = false;