Fluid: Fix crash when saving an empty project.

This commit is contained in:
Matthias Melcher
2025-11-29 17:21:40 +01:00
parent 349b818d3f
commit 8f55e0634c
2 changed files with 14 additions and 4 deletions
+6 -4
View File
@@ -587,10 +587,12 @@ void Application::save_project_file(void *v) {
fnfc.options(Fl_Native_File_Chooser::NEW_FOLDER|Fl_Native_File_Chooser::SAVEAS_CONFIRM); fnfc.options(Fl_Native_File_Chooser::NEW_FOLDER|Fl_Native_File_Chooser::SAVEAS_CONFIRM);
#endif #endif
fnfc.filter("FLUID Files\t*.f[ld]"); fnfc.filter("FLUID Files\t*.f[ld]");
if (!proj.projectfile_path().empty()) if (proj.proj_filename) {
fnfc.directory(proj.projectfile_path().c_str()); if (!proj.projectfile_path().empty())
if (!proj.projectfile_name().empty()) fnfc.directory(proj.projectfile_path().c_str());
fnfc.preset_file(proj.projectfile_name().c_str()); if (!proj.projectfile_name().empty())
fnfc.preset_file(proj.projectfile_name().c_str());
}
fnfc.filter("Fluid Project\t*.fl\nAny\t*"); fnfc.filter("Fluid Project\t*.fl\nAny\t*");
if (fnfc.show() != 0) return; if (fnfc.show() != 0) return;
c = fnfc.filename(); c = fnfc.filename();
+8
View File
@@ -73,6 +73,7 @@ void Project::update_settings_dialog() {
\return the path ending in '/' \return the path ending in '/'
*/ */
std::string Project::projectfile_path() const { std::string Project::projectfile_path() const {
if (!proj_filename) return std::string{};
return end_with_slash(fl_filename_absolute_str(fl_filename_path_str(proj_filename), Fluid.launch_path())); return end_with_slash(fl_filename_absolute_str(fl_filename_path_str(proj_filename), Fluid.launch_path()));
} }
@@ -81,6 +82,7 @@ std::string Project::projectfile_path() const {
\return the file name without path \return the file name without path
*/ */
std::string Project::projectfile_name() const { std::string Project::projectfile_name() const {
if (!proj_filename) return std::string{};
return fl_filename_name(proj_filename); return fl_filename_name(proj_filename);
} }
@@ -103,8 +105,10 @@ std::string Project::codefile_path() const {
std::string Project::codefile_name() const { std::string Project::codefile_name() const {
std::string name = fl_filename_name_str(code_file_name); std::string name = fl_filename_name_str(code_file_name);
if (name.empty()) { if (name.empty()) {
if (!proj_filename) return std::string{};
return fl_filename_setext_str(fl_filename_name(proj_filename), ".cxx"); return fl_filename_setext_str(fl_filename_name(proj_filename), ".cxx");
} else if (name[0] == '.') { } else if (name[0] == '.') {
if (!proj_filename) return std::string{};
return fl_filename_setext_str(fl_filename_name(proj_filename), code_file_name); return fl_filename_setext_str(fl_filename_name(proj_filename), code_file_name);
} else { } else {
return name; return name;
@@ -130,8 +134,10 @@ std::string Project::headerfile_path() const {
std::string Project::headerfile_name() const { std::string Project::headerfile_name() const {
std::string name = fl_filename_name_str(header_file_name); std::string name = fl_filename_name_str(header_file_name);
if (name.empty()) { if (name.empty()) {
if (!proj_filename) return std::string{};
return fl_filename_setext_str(fl_filename_name_str(proj_filename), ".h"); return fl_filename_setext_str(fl_filename_name_str(proj_filename), ".h");
} else if (name[0] == '.') { } else if (name[0] == '.') {
if (!proj_filename) return std::string{};
return fl_filename_setext_str(fl_filename_name_str(proj_filename), header_file_name); return fl_filename_setext_str(fl_filename_name_str(proj_filename), header_file_name);
} else { } else {
return name; return name;
@@ -158,6 +164,7 @@ std::string Project::stringsfile_path() const {
\return the file name without path \return the file name without path
*/ */
std::string Project::stringsfile_name() const { std::string Project::stringsfile_name() const {
if (!proj_filename) return std::string{};
switch (i18n.type) { switch (i18n.type) {
default: return fl_filename_setext_str(fl_filename_name(proj_filename), ".txt"); default: return fl_filename_setext_str(fl_filename_name(proj_filename), ".txt");
case fld::I18n_Type::GNU: return fl_filename_setext_str(fl_filename_name(proj_filename), ".po"); case fld::I18n_Type::GNU: return fl_filename_setext_str(fl_filename_name(proj_filename), ".po");
@@ -170,6 +177,7 @@ std::string Project::stringsfile_name() const {
\return the file name without path or extension \return the file name without path or extension
*/ */
std::string Project::basename() const { std::string Project::basename() const {
if (!proj_filename) return std::string{};
return fl_filename_setext_str(fl_filename_name(proj_filename), ""); return fl_filename_setext_str(fl_filename_name(proj_filename), "");
} }