From 12bb936c16e88b2327479b859898def5d374a1dd Mon Sep 17 00:00:00 2001 From: Yousef Khadadeh Date: Thu, 4 Jun 2026 17:16:26 +0300 Subject: [PATCH] App doesn't crash when attempting to open bad file through double click --- src/MainProgram.cpp | 1 - src/MainProgram.hpp | 1 - src/Screens/DesktopDrawingProgramScreen.cpp | 4 +--- src/Toolbar.cpp | 4 +++- src/main.cpp | 16 +++++++--------- 5 files changed, 11 insertions(+), 15 deletions(-) diff --git a/src/MainProgram.cpp b/src/MainProgram.cpp index aa9a8d6..254d241 100755 --- a/src/MainProgram.cpp +++ b/src/MainProgram.cpp @@ -361,7 +361,6 @@ void MainProgram::set_tab_to_close(World* world) { void MainProgram::switch_to_tab(size_t wIndex) { world = worlds[wIndex]; - worldIndex = wIndex; } void MainProgram::post_callback() { diff --git a/src/MainProgram.hpp b/src/MainProgram.hpp index e06f8f0..bc4b343 100644 --- a/src/MainProgram.hpp +++ b/src/MainProgram.hpp @@ -153,7 +153,6 @@ class MainProgram { bool drawGui = true; - size_t worldIndex = 0; std::shared_ptr world; std::vector> worlds; diff --git a/src/Screens/DesktopDrawingProgramScreen.cpp b/src/Screens/DesktopDrawingProgramScreen.cpp index adfea75..38af825 100644 --- a/src/Screens/DesktopDrawingProgramScreen.cpp +++ b/src/Screens/DesktopDrawingProgramScreen.cpp @@ -108,9 +108,7 @@ void DesktopDrawingProgramScreen::on_tab_close() { main.create_new_tab({ .isClient = false }); - else if(main.world) - main.worldIndex = std::find(main.worlds.begin(), main.worlds.end(), main.world) - main.worlds.begin(); - else + else if(!main.world) main.switch_to_tab(0); } diff --git a/src/Toolbar.cpp b/src/Toolbar.cpp index efc6cd6..55749e8 100644 --- a/src/Toolbar.cpp +++ b/src/Toolbar.cpp @@ -445,9 +445,11 @@ void Toolbar::top_toolbar() { tabNames.emplace_back(w->netObjMan.is_connected() ? "data/icons/network.svg" : "", w->name + (shouldAddStarNextToName ? "*" : "")); } + size_t worldIndex = std::find(main.worlds.begin(), main.worlds.end(), main.world) - main.worlds.begin(); + gui.element("file tab list", MovableTabListData{ .tabNames = tabNames, - .selectedTab = main.worldIndex, + .selectedTab = worldIndex, .changeSelectedTab = [&] (size_t i) { main.switch_to_tab(i); }, diff --git a/src/main.cpp b/src/main.cpp index 5bbbddc..2330699 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -560,19 +560,17 @@ SDL_AppResult SDL_AppInit(void **appstate, int argc, char **argv) { mS.m->set_first_screen(std::make_unique(*mS.m)); else { mS.m->set_first_screen(std::make_unique(*mS.m)); - if(listOfFilesToOpenFromCommand.empty()) { + for(std::filesystem::path& f : listOfFilesToOpenFromCommand) { + mS.m->create_new_tab({ + .isClient = false, + .filePathSource = f + }); + } + if(mS.m->worlds.empty()) { mS.m->create_new_tab({ .isClient = false }); } - else { - for(std::filesystem::path& f : listOfFilesToOpenFromCommand) { - mS.m->create_new_tab({ - .isClient = false, - .filePathSource = f - }); - } - } } mS.m->update(); // Run update once to make sure that callbacks dont crash