diff -urN gtk+-3.20.6-orig/gdk/x11/gdkscreen-x11.c gtk+-3.20.6/gdk/x11/gdkscreen-x11.c
--- gtk+-3.20.6-orig/gdk/x11/gdkscreen-x11.c	2016-03-26 11:46:38 +0900
+++ gtk+-3.20.6/gdk/x11/gdkscreen-x11.c	2016-07-03 05:32:49 +0900
@@ -779,8 +779,17 @@
 	{
 	  GdkX11Monitor monitor;
 	  XRRCrtcInfo *crtc = XRRGetCrtcInfo (x11_screen->xdisplay, resources, output_info->crtc);
+	  XRRPanning *panning = XRRGetPanning (x11_screen->xdisplay, resources, output_info->crtc);
+
+	  if (panning && (panning->left != 0 || panning->top != 0 || panning->width != 0 || panning->height != 0))
+	    {
+	      init_monitor_geometry (&monitor, panning->left, panning->top, panning->width, panning->height);
+	    }
+	  else
+	    {
+              init_monitor_geometry (&monitor, crtc->x, crtc->y, crtc->width, crtc->height);
+	    }
 
-          init_monitor_geometry (&monitor, crtc->x, crtc->y, crtc->width, crtc->height);
 	  monitor.output = output;
 	  monitor.width_mm = output_info->mm_width;
 	  monitor.height_mm = output_info->mm_height;
@@ -789,6 +798,8 @@
 	  g_array_append_val (monitors, monitor);
 
           XRRFreeCrtcInfo (crtc);
+	  if (panning)
+	    XRRFreePanning (panning);
 	}
 
       XRRFreeOutputInfo (output_info);
