Index: gdk/win32/gdkinput-win32.c
===================================================================
RCS file: /cvs/gnome/gtk+/gdk/win32/gdkinput-win32.c,v
retrieving revision 1.41.2.9
diff -u -r1.41.2.9 gdkinput-win32.c
--- gdk/win32/gdkinput-win32.c	25 Sep 2004 20:25:25 -0000	1.41.2.9
+++ gdk/win32/gdkinput-win32.c	6 Oct 2004 20:07:49 -0000
@@ -130,6 +130,7 @@
   if (lc->lcLocks & CXL_INASPECT) g_print (" CXL_INASPECT");
   if (lc->lcLocks & CXL_SENSITIVITY) g_print (" CXL_SENSITIVITY");
   if (lc->lcLocks & CXL_MARGIN) g_print (" CXL_MARGIN");
+  if (lc->lcLocks & CXL_SYSOUT) g_print (" CXL_SYSOUT");
   g_print ("\n");
   g_print ("lcMsgBase = %#x, lcDevice = %#x, lcPktRate = %d\n",
 	  lc->lcMsgBase, lc->lcDevice, lc->lcPktRate);
@@ -284,6 +285,12 @@
 #endif
 	      lc.lcStatus = 0;
 	      WTInfo (WTI_DDCTXS + devix, CTX_LOCKS, &lc.lcLocks);
+	      /* Lock system cursor mapping to get absolute system pointer
+	       * movement for a Wacom puck that is configured in relative mode
+	       * since otherwise that field is ignored by the Wacom drivers
+	       * (bug #154657)
+	       */
+	      lc.lcLocks |= CXL_SYSOUT;
 	      lc.lcMsgBase = WT_DEFBASE;
 	      lc.lcDevice = devix;
 	      lc.lcPktRate = 50;
@@ -305,7 +312,8 @@
 	      WTInfo (WTI_DDCTXS + devix, CTX_SENSX, &lc.lcSensX);
 	      WTInfo (WTI_DDCTXS + devix, CTX_SENSY, &lc.lcSensY);
 	      WTInfo (WTI_DDCTXS + devix, CTX_SENSZ, &lc.lcSensZ);
-	      WTInfo (WTI_DDCTXS + devix, CTX_SYSMODE, &lc.lcSysMode);
+	      lc.lcSysMode = 0; /* We want system pointer to always use
+				 * absolute tracking */
 	      WTInfo (WTI_DDCTXS + devix, CTX_SYSORGX, &lc.lcSysOrgX);
 	      WTInfo (WTI_DDCTXS + devix, CTX_SYSORGY, &lc.lcSysOrgY);
 	      WTInfo (WTI_DDCTXS + devix, CTX_SYSEXTX, &lc.lcSysExtX);
