Fixed segfault that occurs when undoing while drawing

This commit is contained in:
Yousef Khadadeh 2025-07-23 17:21:56 +03:00
parent 0a8add3df1
commit 7f905f01df
5 changed files with 9 additions and 11 deletions

View file

@ -16,7 +16,6 @@
BrushTool::BrushTool(DrawingProgram& initDrawP):
drawP(initDrawP)
{
controls.intermediateItem = std::make_shared<DrawBrushStroke>();
}
void BrushTool::reset_tool() {
@ -172,13 +171,13 @@ void BrushTool::gui_toolbox() {
}
void BrushTool::commit_stroke() {
if(controls.intermediateItem) {
if(controls.intermediateItem && controls.intermediateItem->collabListInfo.lock()) {
if(!controls.intermediateItem->d.points.empty()) {
controls.intermediateItem->client_send_update_final(drawP);
controls.intermediateItem->final_update(drawP);
controls.intermediateItem = nullptr;
}
}
controls.intermediateItem = nullptr;
}
void BrushTool::draw(SkCanvas* canvas, const DrawData& drawData) {

View file

@ -66,7 +66,7 @@ void EditTool::add_point_handle(const HandleData& handle) {
void EditTool::reset_tool() {
auto a = controls.compToEdit.lock();
if(a) {
if(a && a->collabListInfo.lock()) {
switch(a->get_type()) {
case DRAWCOMPONENT_TEXTBOX:
drawP.textBoxTool.commit_edit_updates(std::static_pointer_cast<DrawTextBox>(a), controls.prevData);

View file

@ -140,11 +140,11 @@ void EllipseDrawTool::tool_update() {
}
void EllipseDrawTool::commit() {
if(controls.intermediateItem) {
if(controls.intermediateItem && controls.intermediateItem->collabListInfo.lock()) {
controls.intermediateItem->client_send_update_final(drawP);
controls.intermediateItem->final_update(drawP);
controls.intermediateItem = nullptr;
}
controls.intermediateItem = nullptr;
}
void EllipseDrawTool::draw(SkCanvas* canvas, const DrawData& drawData) {

View file

@ -140,11 +140,11 @@ void RectDrawTool::tool_update() {
}
void RectDrawTool::commit_rectangle() {
if(controls.intermediateItem) {
if(controls.intermediateItem && controls.intermediateItem->collabListInfo.lock()) {
controls.intermediateItem->client_send_update_final(drawP);
controls.intermediateItem->final_update(drawP);
controls.intermediateItem = nullptr;
}
controls.intermediateItem = nullptr;
}
void RectDrawTool::draw(SkCanvas* canvas, const DrawData& drawData) {

View file

@ -274,12 +274,11 @@ void TextBoxTool::update_textbox_network(const std::shared_ptr<DrawTextBox>& tex
}
void TextBoxTool::commit() {
if(controls.intermediateItem) {
if(controls.intermediateItem && controls.intermediateItem->collabListInfo.lock()) {
controls.intermediateItem->client_send_update_final(drawP);
controls.intermediateItem->final_update(drawP);
//controls.intermediateItem->currentlyUpdating = true; // It remains true, as we are about to start writing into the text box we just placed
controls.intermediateItem = nullptr;
}
controls.intermediateItem = nullptr;
}
void TextBoxTool::draw(SkCanvas* canvas, const DrawData& drawData) {