aboutsummaryrefslogtreecommitdiffhomepage
path: root/gtk/PlatGTK.cxx
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2014-06-16 11:20:32 +1000
committerNeil <nyamatongwe@gmail.com>2014-06-16 11:20:32 +1000
commitc54f34fb7c42c4e4b271ed6086e5790d7a97bf00 (patch)
tree4f800a266022d5d8fae8ea50e76098c88c3b7eb8 /gtk/PlatGTK.cxx
parent96f0779b2d648c9cbe8b12b1a9cd368898e04803 (diff)
downloadscintilla-mirror-c54f34fb7c42c4e4b271ed6086e5790d7a97bf00.tar.gz
Fix crashes on Ubuntu 12.04 caused by overlay scrolll bar causing the drawing
surface to be finished.
Diffstat (limited to 'gtk/PlatGTK.cxx')
-rw-r--r--gtk/PlatGTK.cxx16
1 files changed, 16 insertions, 0 deletions
diff --git a/gtk/PlatGTK.cxx b/gtk/PlatGTK.cxx
index c1e5566e5..d4572a912 100644
--- a/gtk/PlatGTK.cxx
+++ b/gtk/PlatGTK.cxx
@@ -527,6 +527,22 @@ void SurfaceImpl::Release() {
}
bool SurfaceImpl::Initialised() {
+ if (inited && context) {
+ if (cairo_status(context) == CAIRO_STATUS_SUCCESS) {
+ // Even when status is success, the target surface may have been
+ // finished whch may cause an assertion to fail crashing the application.
+ // The cairo_surface_has_show_text_glyphs call checks the finished flag
+ // and when set, sets the status to CAIRO_STATUS_SURFACE_FINISHED
+ // which leads to warning messages instead of crashes.
+ // Performing the check in this method as it is called rarely and has no
+ // other side effects.
+ cairo_surface_t *psurfContext = cairo_get_target(context);
+ if (psurfContext) {
+ cairo_surface_has_show_text_glyphs(psurfContext);
+ }
+ }
+ return cairo_status(context) == CAIRO_STATUS_SUCCESS;
+ }
return inited;
}