From fd5d6abe34f41f8687c1fc5e2ab0a2f65c570304 Mon Sep 17 00:00:00 2001 From: "Shih-Yuan Lee (FourDollars)" Date: Tue, 18 Nov 2014 10:26:10 +0800 Subject: [PATCH] Fix invisible cairo caret issue. Do more check of Cairo context before using it. https://code.google.com/p/pcmanx-gtk2/issues/detail?id=68 --- src/core/caret.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/core/caret.cpp b/src/core/caret.cpp index 99fdca2d..15b66254 100644 --- a/src/core/caret.cpp +++ b/src/core/caret.cpp @@ -108,10 +108,17 @@ void CCaret::DrawInverse() if (m_Cairo == NULL) { m_Cairo = gdk_cairo_create(m_pParent->window); + if (cairo_status(m_Cairo) != CAIRO_STATUS_SUCCESS) { + cairo_destroy(m_Cairo); + m_Cairo = NULL; + } + } + + if (m_Cairo) { + cairo_set_source_rgb(m_Cairo, 1, 1, 1); + cairo_set_operator(m_Cairo, CAIRO_OPERATOR_DIFFERENCE); + cairo_rectangle(m_Cairo, m_Pos.x, m_Pos.y, m_Width, m_Height); + cairo_fill(m_Cairo); } - cairo_set_source_rgb(m_Cairo, 1, 1, 1); - cairo_set_operator(m_Cairo, CAIRO_OPERATOR_DIFFERENCE); - cairo_rectangle(m_Cairo, m_Pos.x, m_Pos.y, m_Width, m_Height); - cairo_fill(m_Cairo); }