diff options
author | Pierre Ossman <ossman@cendio.se> | 2012-08-27 14:40:51 +0000 |
---|---|---|
committer | Pierre Ossman <ossman@cendio.se> | 2012-08-27 14:40:51 +0000 |
commit | 3d75911a551fab492ceb71506f85ffbae993b3b7 (patch) | |
tree | 12b9cbee3dc034f38f59749adf4e4afc20bc0a9a /vncviewer | |
parent | 17e28044f1f8e8e1deb5e54f3622f69ac7b9c87e (diff) | |
download | tigervnc-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.cxx | 8 | ||||
-rw-r--r-- | vncviewer/cocoa.h | 2 | ||||
-rw-r--r-- | vncviewer/cocoa.mm | 29 |
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; |