fix bogus fb/drawable information

the framebuffer objects attached to drawables can have invalidate state
associated with them, since for the window framebuffer this is per-context
state and not per-fbo state. Since drivers rely on that information
(otherwise would need to check if currently the window-framebuffer is
bound in a lot of places) fix it up in _mesa_make_current (ugly).
(Brought over from i915tex_privbuffers, where it fixes xdemos/wincopy
when switching to front buffer rendering.)
diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index 21adcf3..2ad1bad 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -1495,9 +1495,20 @@
           */
          if (!newCtx->DrawBuffer || newCtx->DrawBuffer->Name == 0) {
             _mesa_reference_framebuffer(&newCtx->DrawBuffer, drawBuffer);
+         /* fix up the fb fields - these will end up wrong otherwise
+            if the DRIdrawable changes, and someone may rely on them.
+          */
+            /* What a mess!?! */
+            int i;
+            GLenum buffers[MAX_DRAW_BUFFERS];
+            for(i = 0; i < newCtx->Const.MaxDrawBuffers; i++) {
+               buffers[i] = newCtx->Color.DrawBuffer[i];
+            }
+            _mesa_drawbuffers(newCtx, newCtx->Const.MaxDrawBuffers, buffers, NULL);
          }
          if (!newCtx->ReadBuffer || newCtx->ReadBuffer->Name == 0) {
             _mesa_reference_framebuffer(&newCtx->ReadBuffer, readBuffer);
+            _mesa_ReadBuffer(newCtx->Pixel.ReadBuffer);
          }
 
 	 newCtx->NewState |= _NEW_BUFFERS;