As you said 
[here](https://github.com/geany/geany/issues/2540#issuecomment-1774779482), you 
want to make two lists:

Just to be clear about something, the _document_ is the in memory object, the 
_file_ is the thing on disk.

For open documents where the file has changed on disk, you want a list where 
the document has unsaved changes, and a list where it does not, lets call them 
`unsaved list` and `unchanged list`.

AFAICT the algorithm to do that is simply:

```
for d in all open documents
    if document_check_disk_status(d) 
         if d->changed add d to the unsaved list
        else add d to unchanged list
```

You MUST call `document_check_disk_status()` for all open documents to get up 
to date status, do not try to use existing monitoring states, they are created 
by a timer, so you have no idea how old they are and they may not reflect the 
current file state.  But `doc->changed` is the correct thing to indicate the 
document has been modified.

Then if the either list is not empty go to the GUI and show the lists, its fine 
if one is empty, but do not go to the GUI if there is nothing to reload.  If 
the response is `cancel` then do nothing, if the response is `reload only 
unchanged` then iterate the `unchanged list` only and reload those documents, 
if the response is `reload all` then iterate both lists and reload those 
documents, if the response is `overwrite all` then iterate both lists and save 
the buffers (I guess thats what you meant by "overwrite", maybe that needs more 
discussion if its a good idea).

-- 
Reply to this email directly or view it on GitHub:
https://github.com/geany/geany/issues/3711#issuecomment-1848379349
You are receiving this because you are subscribed to this thread.

Message ID: <geany/geany/issues/3711/1848379...@github.com>

Reply via email to