diff options
| -rw-r--r-- | src/drivers/X11/Fl_X11_Screen_Driver.cxx | 8 | ||||
| -rw-r--r-- | src/drivers/X11/Fl_X11_Window_Driver.cxx | 2 |
2 files changed, 9 insertions, 1 deletions
diff --git a/src/drivers/X11/Fl_X11_Screen_Driver.cxx b/src/drivers/X11/Fl_X11_Screen_Driver.cxx index ad2958a36..4fa3b8698 100644 --- a/src/drivers/X11/Fl_X11_Screen_Driver.cxx +++ b/src/drivers/X11/Fl_X11_Screen_Driver.cxx @@ -670,7 +670,13 @@ Fl_RGB_Image *Fl_X11_Screen_Driver::read_win_rectangle(int X, int Y, int w, int // int allow_outside = w < 0; // negative w allows negative X or Y, that is, window frame if (w < 0) w = - w; - Window xid = (win && !allow_outside ? fl_xid(win) : fl_window); + Window xid; + if (win && !allow_outside) { + if (win->as_double_window()) { // read from the window's offscreen buffer + xid = Fl_X11_Window_Driver::driver(win)->other_xid->offscreen(); + win = NULL; + } else xid = fl_xid(win); + } else xid = fl_window; float s = allow_outside ? 1 : Fl_Surface_Device::surface()->driver()->scale(); int Xs = Fl_Scalable_Graphics_Driver::floor(X, s); diff --git a/src/drivers/X11/Fl_X11_Window_Driver.cxx b/src/drivers/X11/Fl_X11_Window_Driver.cxx index 65a194484..37a2e92a4 100644 --- a/src/drivers/X11/Fl_X11_Window_Driver.cxx +++ b/src/drivers/X11/Fl_X11_Window_Driver.cxx @@ -417,6 +417,8 @@ void Fl_X11_Window_Driver::make_current() { cairo_save(cairo_); } ((Fl_X11_Cairo_Graphics_Driver*)fl_graphics_driver)->set_cairo(cairo_); + } else if (other_xid) { + pWindow->damage(FL_DAMAGE_EXPOSE); } fl_graphics_driver->scale(scale); #elif USE_XFT |
