diff -urw xc-orig/programs/Xserver/hw/xwin/InitOutput.c xc/programs/Xserver/hw/xwin/InitOutput.c --- xc-orig/programs/Xserver/hw/xwin/InitOutput.c 2012-03-16 14:45:50.640342810 +0100 +++ xc/programs/Xserver/hw/xwin/InitOutput.c 2012-03-16 16:11:04.331114818 +0100 @@ -97,6 +97,7 @@ extern FARPROC g_fpTrackMouseEvent; extern Bool g_fNoHelpMessageBox; extern Bool g_fSilentDupError; +extern int g_iKioskX; /* @@ -797,6 +798,10 @@ /* We have to flag this as an explicit screen, even though it isn't */ g_ScreenInfo[0].fExplicitScreen = TRUE; } + if (getenv("NX_KIOSK_X") != NULL) + { + g_iKioskX = atoi(getenv("NX_KIOSK_X")); + } } diff -urw xc-orig/programs/Xserver/hw/xwin/winglobals.c xc/programs/Xserver/hw/xwin/winglobals.c --- xc-orig/programs/Xserver/hw/xwin/winglobals.c 2012-03-16 14:45:50.650342808 +0100 +++ xc/programs/Xserver/hw/xwin/winglobals.c 2012-03-16 16:11:04.332114818 +0100 @@ -79,6 +79,7 @@ Bool g_fSilentDupError = FALSE; Bool g_fNoIcons = FALSE; +int g_iKioskX = 0; /* * Global variables for dynamically loaded libraries and diff -urw xc-orig/programs/Xserver/hw/xwin/win.h xc/programs/Xserver/hw/xwin/win.h --- xc-orig/programs/Xserver/hw/xwin/win.h 2012-03-16 14:45:50.653342808 +0100 +++ xc/programs/Xserver/hw/xwin/win.h 2012-03-16 16:11:04.334114818 +0100 @@ -206,6 +206,9 @@ #define WM_TRAYICON (WM_USER + 1000) #define WM_INIT_SYS_MENU (WM_USER + 1001) #define WM_GIVEUP (WM_USER + 1002) +/* defined in winclipboardwndproc.c #define WM_USER_PASTE_COMPLETE (WM_USER + 1003) */ +/* defined in winclipboardwndproc.c #define WM_USER_SET_FILTER (WM_USER + 1004) */ +#define WM_USER_SET_KIOSK (WM_USER + 1005) /* Local includes */ diff -urw xc-orig/programs/Xserver/hw/xwin/winmouse.c xc/programs/Xserver/hw/xwin/winmouse.c --- xc-orig/programs/Xserver/hw/xwin/winmouse.c 2009-03-18 18:13:40.000000000 +0100 +++ xc/programs/Xserver/hw/xwin/winmouse.c 2012-03-16 16:11:04.335114818 +0100 @@ -218,11 +218,26 @@ * Enqueue a mouse button event */ +extern winScreenInfo g_ScreenInfo[]; +extern int g_iLastScreen; +extern int g_iKioskX; + void winMouseButtonsSendEvent (int iEventType, int iButton) { xEvent xCurrentEvent; + if (g_iKioskX) { + int FS = (-1 == g_iLastScreen) ? g_ScreenInfo[0].fFullScreen : g_ScreenInfo[g_iLastScreen].fFullScreen; + if (FS) { + int x = -1; + int y = -1; + miPointerPosition(&x, &y); + if ((0 == y) && ((g_iKioskX - 1) == x)) + return; + } + } + /* Load an xEvent and enqueue the event */ xCurrentEvent.u.u.type = iEventType; #if defined(XFree86Server) && defined(XINPUT) diff -urw xc-orig/programs/Xserver/hw/xwin/winwndproc.c xc/programs/Xserver/hw/xwin/winwndproc.c --- xc-orig/programs/Xserver/hw/xwin/winwndproc.c 2009-03-18 18:13:40.000000000 +0100 +++ xc/programs/Xserver/hw/xwin/winwndproc.c 2012-03-16 16:12:07.167112017 +0100 @@ -66,6 +66,7 @@ extern HWND g_hwndKeyboardFocus; extern Bool g_fSoftwareCursor; extern DWORD g_dwCurrentThreadID; +extern int g_iKioskX; /* @@ -1234,6 +1235,11 @@ } break; + case WM_USER_SET_KIOSK: + g_iKioskX = (int)wParam; + ErrorF ("Setting Kiosk X to %d\n", g_iKioskX); + return 0; + case WM_ENDSESSION: case WM_GIVEUP: /* Delete the tray Icon */