diff options
author | Gabriel Masei <gabriel.masei@1and1.ro> | 2020-09-02 19:22:23 +0300 |
---|---|---|
committer | Jan Holesovsky <kendy@collabora.com> | 2020-09-21 14:39:17 +0200 |
commit | 137440e161f0f8631e7e67ba0609680d6686fa94 (patch) | |
tree | 8a91ebb7f9d559ebdd891abfe798f94952a67109 /desktop | |
parent | 859596233146590f7ebac1f05bbb83ce5ea8aac4 (diff) |
lok: remove .uno:ModifiedStatus message from deduplication mechanism
This fixes the following issue in Online:
When a save is performed while a cell is still edited the save icon
does not reflect the correct state of the document: it shows that
the document is dirty although it is not. This is generated by two facts:
1. The status cache is avoided when sending the -dirty- status right
after the cell editing is finished. Because the cache has an old value
of -false- for ModifiedStatus, the notification that is sent after saving,
with -false- value, is ignored. We should not avoid the status cache.
2. Because there is a mechanism that keeps only the last notification
value for a status change in the queue that keeps messages that were not
sent yet (deduplication), the .uno:ModifiedStatus message with a value of -true-
that is enqueued right after the cell edit is finished is replaced by the same
message with a value of -false- that is enqueued after the save is finished.
This happens if the flush mechanism doesn't occur between them.
Change-Id: I3348bf230ba53a154c29e7d8ab064df7694adeae
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/101948
Tested-by: Jenkins
Reviewed-by: Jan Holesovsky <kendy@collabora.com>
Diffstat (limited to 'desktop')
-rw-r--r-- | desktop/source/lib/init.cxx | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index a5c2b7c4ea8b..ecef209842a8 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -1571,11 +1571,16 @@ void CallbackFlushHandler::queue(const int type, const char* data) if (pos != std::string::npos) { const std::string name = payload.substr(0, pos + 1); - removeAll( - [type, &name] (const queue_type::value_type& elem) { - return (elem.Type == type) && (elem.PayloadString.compare(0, name.size(), name) == 0); - } - ); + // This is needed because otherwise it creates some problems when + // a save occurs while a cell is still edited in Calc. + if (name != ".uno:ModifiedStatus=") + { + removeAll( + [type, &name] (const queue_type::value_type& elem) { + return (elem.Type == type) && (elem.PayloadString.compare(0, name.size(), name) == 0); + } + ); + } } } break; |