Revision: 4501 http://geany.svn.sourceforge.net/geany/?rev=4501&view=rev Author: eht16 Date: 2009-12-20 20:29:45 +0000 (Sun, 20 Dec 2009)
Log Message: ----------- Mark the document only as changed if it is not closed afterwards. Prevent possible segfaults if the document was closed when it is missing from the filesystem.
Modified Paths: -------------- trunk/ChangeLog trunk/src/document.c
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2009-12-20 20:07:52 UTC (rev 4500) +++ trunk/ChangeLog 2009-12-20 20:29:45 UTC (rev 4501) @@ -12,6 +12,9 @@ * src/document.c: When closing a document after it was deleted from the filesystem, don't ask whether it should be saved first. + Mark the document only as changed if it is not closed afterwards. + Prevent possible segfaults if the document was closed when it is + missing from the filesystem. * src/keybindings.c, src/keyfile.c, src/main.c, src/msgwindow.c, src/msgwindow.h, src/prefs.c: Add MessageWindow::scribble and use it instead of searching the
Modified: trunk/src/document.c =================================================================== --- trunk/src/document.c 2009-12-20 20:07:52 UTC (rev 4500) +++ trunk/src/document.c 2009-12-20 20:29:45 UTC (rev 4501) @@ -2948,11 +2948,6 @@ gboolean want_reload = FALSE; gint ret;
- /* file is missing - set unsaved state */ - document_set_text_changed(doc, TRUE); - /* don't prompt more than once */ - setptr(doc->real_path, NULL); - ret = dialogs_show_prompt(NULL, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, @@ -2966,9 +2961,15 @@ } else if (ret == GTK_RESPONSE_CLOSE) { - doc->changed = FALSE; document_close(doc); } + if (ret != GTK_RESPONSE_CLOSE) + { + /* file is missing - set unsaved state */ + document_set_text_changed(doc, TRUE); + /* don't prompt more than once */ + setptr(doc->real_path, NULL); + }
return want_reload; } @@ -3027,11 +3028,13 @@ } g_free(locale_filename);
- old_status = doc->priv->file_disk_status; - doc->priv->file_disk_status = FILE_OK; - if (old_status != doc->priv->file_disk_status) - ui_update_tab_status(doc); - + if (DOC_VALID(doc)) + { /* doc can get invalid when a document was closed by monitor_resave_missing_file() */ + old_status = doc->priv->file_disk_status; + doc->priv->file_disk_status = FILE_OK; + if (old_status != doc->priv->file_disk_status) + ui_update_tab_status(doc); + } return ret; }
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.