diff -ru gtk+-2.20.1-orig/gdk/x11/gdkinput-x11.c gtk+-2.20.1/gdk/x11/gdkinput-x11.c
--- gtk+-2.20.1-orig/gdk/x11/gdkinput-x11.c	2010-04-09 22:19:54.000000000 -0400
+++ gtk+-2.20.1/gdk/x11/gdkinput-x11.c	2010-11-16 06:08:21.000000000 -0500
@@ -404,6 +404,7 @@
 				 gdouble          *y_out)
 {
   GdkWindowObject *priv, *impl_window;
+  GdkRectangle rect;
 
   int i;
   int x_axis = 0;
@@ -454,11 +455,16 @@
 
   if (gdkdev->info.mode == GDK_MODE_SCREEN)
     {
-      x_scale = gdk_screen_get_width (gdk_drawable_get_screen (window)) / device_width;
-      y_scale = gdk_screen_get_height (gdk_drawable_get_screen (window)) / device_height;
+      i = gdk_screen_get_monitor_at_point(gdk_drawable_get_screen(window),
+               impl_window->input_window->root_x,
+	       impl_window->input_window->root_y);
+      gdk_screen_get_monitor_geometry(gdk_drawable_get_screen(window),i,&rect);
 
-      x_offset = - impl_window->input_window->root_x - priv->abs_x;
-      y_offset = - impl_window->input_window->root_y - priv->abs_y;
+      x_scale = rect.width / device_width;
+      y_scale = rect.height / device_height;
+
+      x_offset = - impl_window->input_window->root_x - priv->abs_x + rect.x;
+      y_offset = - impl_window->input_window->root_y - priv->abs_y + rect.y;
     }
   else				/* GDK_MODE_WINDOW */
     {
