Lines 37-42
Link Here
|
37 |
#include "PasswdDialog.h" |
37 |
#include "PasswdDialog.h" |
38 |
#include "parameters.h" |
38 |
#include "parameters.h" |
39 |
|
39 |
|
|
|
40 |
#ifdef HAVE_XINERAMA |
41 |
# include <X11/extensions/Xinerama.h> |
42 |
#endif |
43 |
|
40 |
using namespace rfb; |
44 |
using namespace rfb; |
41 |
|
45 |
|
42 |
static rfb::LogWriter vlog("CConn"); |
46 |
static rfb::LogWriter vlog("CConn"); |
Lines 49-55
Link Here
|
49 |
StringParameter windowName("name", "The X window name", ""); |
53 |
StringParameter windowName("name", "The X window name", ""); |
50 |
|
54 |
|
51 |
CConn::CConn(Display* dpy_, int argc_, char** argv_, network::Socket* sock_, |
55 |
CConn::CConn(Display* dpy_, int argc_, char** argv_, network::Socket* sock_, |
52 |
char* vncServerName) |
56 |
char* vncServerName, int xineramascreen) |
53 |
: dpy(dpy_), argc(argc_), |
57 |
: dpy(dpy_), argc(argc_), |
54 |
argv(argv_), serverHost(0), serverPort(0), sock(sock_), viewport(0), |
58 |
argv(argv_), serverHost(0), serverPort(0), sock(sock_), viewport(0), |
55 |
desktop(0), desktopEventHandler(0), |
59 |
desktop(0), desktopEventHandler(0), |
Lines 62-68
Link Here
|
62 |
{ |
66 |
{ |
63 |
CharArray menuKeyStr(menuKey.getData()); |
67 |
CharArray menuKeyStr(menuKey.getData()); |
64 |
menuKeysym = XStringToKeysym(menuKeyStr.buf); |
68 |
menuKeysym = XStringToKeysym(menuKeyStr.buf); |
65 |
|
69 |
xineramaScreen = xineramascreen; |
66 |
setShared(shared); |
70 |
setShared(shared); |
67 |
addSecType(secTypeNone); |
71 |
addSecType(secTypeNone); |
68 |
addSecType(secTypeVncAuth); |
72 |
addSecType(secTypeVncAuth); |
Lines 566-572
Link Here
|
566 |
if (fullScreen) { |
570 |
if (fullScreen) { |
567 |
XGrabKeyboard(dpy, desktop->win(), True, GrabModeAsync, GrabModeAsync, |
571 |
XGrabKeyboard(dpy, desktop->win(), True, GrabModeAsync, GrabModeAsync, |
568 |
CurrentTime); |
572 |
CurrentTime); |
|
|
573 |
desktop->setGrabKeyboard(true); |
569 |
} else { |
574 |
} else { |
|
|
575 |
desktop->setGrabKeyboard(false); |
570 |
XUngrabKeyboard(dpy, CurrentTime); |
576 |
XUngrabKeyboard(dpy, CurrentTime); |
571 |
} |
577 |
} |
572 |
if (oldViewport) delete oldViewport; |
578 |
if (oldViewport) delete oldViewport; |
Lines 576-581
Link Here
|
576 |
{ |
582 |
{ |
577 |
viewport->setMaxSize(cp.width, cp.height); |
583 |
viewport->setMaxSize(cp.width, cp.height); |
578 |
if (fullScreen) { |
584 |
if (fullScreen) { |
|
|
585 |
#ifdef HAVE_XINERAMA |
586 |
int number; |
587 |
XineramaScreenInfo* info = XineramaQueryScreens (dpy, &number); |
588 |
// Find requested Xinerama screen |
589 |
for (int i = 0; (info != NULL) && (i < number); i++) { |
590 |
// Setup window to match found Xinerama screen |
591 |
if (info[i].screen_number == xineramaScreen) { |
592 |
viewport->setUSPosition(info[i].x_org, info[i].y_org); |
593 |
viewport->resize(info[i].width, info[i].height); |
594 |
XFree(info); |
595 |
return; |
596 |
} |
597 |
} |
598 |
XFree(info); |
599 |
#endif |
600 |
// No Xinerama screen found, or none requested, fill default display |
579 |
viewport->resize(DisplayWidth(dpy,DefaultScreen(dpy)), |
601 |
viewport->resize(DisplayWidth(dpy,DefaultScreen(dpy)), |
580 |
DisplayHeight(dpy,DefaultScreen(dpy))); |
602 |
DisplayHeight(dpy,DefaultScreen(dpy))); |
581 |
} else { |
603 |
} else { |