1diff -urw xc-orig/programs/Xserver/hw/xwin/InitOutput.c xc/programs/Xserver/hw/xwin/InitOutput.c
2--- xc-orig/programs/Xserver/hw/xwin/InitOutput.c	2012-03-16 14:45:50.640342810 +0100
3+++ xc/programs/Xserver/hw/xwin/InitOutput.c	2012-03-16 16:11:04.331114818 +0100
4@@ -97,6 +97,7 @@
5 extern FARPROC			g_fpTrackMouseEvent;
6 extern Bool			g_fNoHelpMessageBox;
7 extern Bool			g_fSilentDupError;
8+extern int			g_iKioskX;
9
10
11 /*
12@@ -797,6 +798,10 @@
13       /* We have to flag this as an explicit screen, even though it isn't */
14       g_ScreenInfo[0].fExplicitScreen = TRUE;
15     }
16+    if (getenv("NX_KIOSK_X") != NULL)
17+    {
18+        g_iKioskX = atoi(getenv("NX_KIOSK_X"));
19+    }
20 }
21
22
23diff -urw xc-orig/programs/Xserver/hw/xwin/winglobals.c xc/programs/Xserver/hw/xwin/winglobals.c
24--- xc-orig/programs/Xserver/hw/xwin/winglobals.c	2012-03-16 14:45:50.650342808 +0100
25+++ xc/programs/Xserver/hw/xwin/winglobals.c	2012-03-16 16:11:04.332114818 +0100
26@@ -79,6 +79,7 @@
27 Bool		g_fSilentDupError = FALSE;
28 Bool		g_fNoIcons = FALSE;
29
30+int		    g_iKioskX = 0;
31
32 /*
33  * Global variables for dynamically loaded libraries and
34diff -urw xc-orig/programs/Xserver/hw/xwin/win.h xc/programs/Xserver/hw/xwin/win.h
35--- xc-orig/programs/Xserver/hw/xwin/win.h	2012-03-16 14:45:50.653342808 +0100
36+++ xc/programs/Xserver/hw/xwin/win.h	2012-03-16 16:11:04.334114818 +0100
37@@ -206,6 +206,9 @@
38 #define WM_TRAYICON		(WM_USER + 1000)
39 #define WM_INIT_SYS_MENU	(WM_USER + 1001)
40 #define WM_GIVEUP		(WM_USER + 1002)
41+/* defined in winclipboardwndproc.c #define WM_USER_PASTE_COMPLETE		(WM_USER + 1003) */
42+/* defined in winclipboardwndproc.c #define WM_USER_SET_FILTER          (WM_USER + 1004) */
43+#define WM_USER_SET_KIOSK	(WM_USER + 1005)
44
45
46 /* Local includes */
47diff -urw xc-orig/programs/Xserver/hw/xwin/winmouse.c xc/programs/Xserver/hw/xwin/winmouse.c
48--- xc-orig/programs/Xserver/hw/xwin/winmouse.c	2009-03-18 18:13:40.000000000 +0100
49+++ xc/programs/Xserver/hw/xwin/winmouse.c	2012-03-16 16:11:04.335114818 +0100
50@@ -218,11 +218,26 @@
51  * Enqueue a mouse button event
52  */
53
54+extern winScreenInfo g_ScreenInfo[];
55+extern int           g_iLastScreen;
56+extern int           g_iKioskX;
57+
58 void
59 winMouseButtonsSendEvent (int iEventType, int iButton)
60 {
61   xEvent		xCurrentEvent;
62
63+  if (g_iKioskX) {
64+      int FS = (-1 == g_iLastScreen) ? g_ScreenInfo[0].fFullScreen : g_ScreenInfo[g_iLastScreen].fFullScreen;
65+      if (FS) {
66+          int x = -1;
67+          int y = -1;
68+          miPointerPosition(&x, &y);
69+          if ((0 == y) && ((g_iKioskX - 1) == x))
70+              return;
71+      }
72+  }
73+
74   /* Load an xEvent and enqueue the event */
75   xCurrentEvent.u.u.type = iEventType;
76 #if defined(XFree86Server) && defined(XINPUT)
77diff -urw xc-orig/programs/Xserver/hw/xwin/winwndproc.c xc/programs/Xserver/hw/xwin/winwndproc.c
78--- xc-orig/programs/Xserver/hw/xwin/winwndproc.c	2009-03-18 18:13:40.000000000 +0100
79+++ xc/programs/Xserver/hw/xwin/winwndproc.c	2012-03-16 16:12:07.167112017 +0100
80@@ -66,6 +66,7 @@
81 extern HWND			g_hwndKeyboardFocus;
82 extern Bool			g_fSoftwareCursor;
83 extern DWORD			g_dwCurrentThreadID;
84+extern int          g_iKioskX;
85
86
87 /*
88@@ -1234,6 +1235,11 @@
89 	}
90       break;
91
92+    case WM_USER_SET_KIOSK:
93+      g_iKioskX = (int)wParam;
94+      ErrorF ("Setting Kiosk X to %d\n", g_iKioskX);
95+      return 0;
96+
97     case WM_ENDSESSION:
98     case WM_GIVEUP:
99       /* Delete the tray Icon */
100