Ensure widgets are always updated on the main thread

Fixes crashes and widget freezes
This commit is contained in:
Dan Paulat 2024-10-27 09:02:29 -05:00
parent 194638f759
commit ac40fd93b7
3 changed files with 48 additions and 35 deletions

View file

@ -81,45 +81,57 @@ void LineLabel::set_border_width(std::size_t width)
{
p->borderWidth_ = width;
p->pixmapDirty_ = true;
updateGeometry();
update();
QMetaObject::invokeMethod(this, &QWidget::updateGeometry);
QMetaObject::invokeMethod(
this, static_cast<void (QWidget::*)()>(&QWidget::update));
}
void LineLabel::set_highlight_width(std::size_t width)
{
p->highlightWidth_ = width;
p->pixmapDirty_ = true;
updateGeometry();
update();
QMetaObject::invokeMethod(this, &QWidget::updateGeometry);
QMetaObject::invokeMethod(
this, static_cast<void (QWidget::*)()>(&QWidget::update));
}
void LineLabel::set_line_width(std::size_t width)
{
p->lineWidth_ = width;
p->pixmapDirty_ = true;
updateGeometry();
update();
QMetaObject::invokeMethod(this, &QWidget::updateGeometry);
QMetaObject::invokeMethod(
this, static_cast<void (QWidget::*)()>(&QWidget::update));
}
void LineLabel::set_border_color(boost::gil::rgba8_pixel_t color)
{
p->borderColor_ = color;
p->pixmapDirty_ = true;
update();
QMetaObject::invokeMethod(
this, static_cast<void (QWidget::*)()>(&QWidget::update));
}
void LineLabel::set_highlight_color(boost::gil::rgba8_pixel_t color)
{
p->highlightColor_ = color;
p->pixmapDirty_ = true;
update();
QMetaObject::invokeMethod(
this, static_cast<void (QWidget::*)()>(&QWidget::update));
}
void LineLabel::set_line_color(boost::gil::rgba8_pixel_t color)
{
p->lineColor_ = color;
p->pixmapDirty_ = true;
update();
QMetaObject::invokeMethod(
this, static_cast<void (QWidget::*)()>(&QWidget::update));
}
void LineLabel::set_line_settings(settings::LineSettings& lineSettings)