commit a33ae166a64cdc536b97fbf672d057ebace7e545
parent 2018afa55f1121ba703251963f16fd201afa1bcb
Author: Jonathan Boeing <jonathan.n.boeing@gmail.com>
Date: Sun, 25 Jul 2021 20:43:31 -0700
Fix UI overwrite when clearing LiteHTML message
Diffstat:
2 files changed, 11 insertions(+), 22 deletions(-)
diff --git a/src/plugins/litehtml_viewer/lh_widget.cpp b/src/plugins/litehtml_viewer/lh_widget.cpp
@@ -61,6 +61,7 @@ lh_widget::lh_widget()
GtkWidget *item;
m_force_render = false;
+ m_blank = false;
/* scrolled window */
m_scrolled_window = gtk_scrolled_window_new(NULL, NULL);
@@ -197,6 +198,7 @@ void lh_widget::open_html(const gchar *contents)
adj = gtk_scrolled_window_get_vadjustment(
GTK_SCROLLED_WINDOW(m_scrolled_window));
gtk_adjustment_set_value(adj, 0.0);
+ m_blank = false;
}
lh_widget_statusbar_pop();
}
@@ -271,33 +273,21 @@ void lh_widget::redraw()
return;
}
cr = gdk_cairo_create(GDK_DRAWABLE(gdkwin));
- draw(cr);
-
- cairo_destroy(cr);
-}
-
-void lh_widget::paint_white()
-{
- GdkWindow *gdkwin = gtk_widget_get_window(m_drawing_area);
- if (gdkwin == NULL) {
- g_warning("lh_widget::clear: No GdkWindow to draw on!");
- return;
+ if(!std::atomic_exchange(&m_blank, false)) {
+ draw(cr);
+ } else {
+ cairo_rectangle(cr, rect.x, rect.y, rect.width, rect.height);
+ cairo_set_source_rgb(cr, 255, 255, 255);
+ cairo_fill(cr);
}
- cairo_t *cr = gdk_cairo_create(GDK_DRAWABLE(gdkwin));
-
- /* Paint white background. */
- gint width, height;
- gdk_drawable_get_size(gdkwin, &width, &height);
- cairo_rectangle(cr, 0, 0, width, height);
- cairo_set_source_rgb(cr, 255, 255, 255);
- cairo_fill(cr);
cairo_destroy(cr);
}
+
void lh_widget::clear()
{
m_html = nullptr;
- paint_white();
+ m_blank = true;
m_rendered_width = 0;
m_base_url.clear();
m_clicked_url.clear();
diff --git a/src/plugins/litehtml_viewer/lh_widget.h b/src/plugins/litehtml_viewer/lh_widget.h
@@ -76,8 +76,6 @@ class lh_widget : public container_linux
litehtml::tstring m_base_url;
private:
- void paint_white();
-
gint m_rendered_width;
GtkWidget *m_drawing_area;
GtkWidget *m_scrolled_window;
@@ -92,4 +90,5 @@ class lh_widget : public container_linux
litehtml::tchar_t *m_font_name;
int m_font_size;
std::atomic<bool> m_force_render;
+ std::atomic<bool> m_blank;
};