commit 759769131a4e5bd021ddb5e8fc5995a2af537e05
Author: Pavel Sanda <sa...@lyx.org>
Date:   Fri Dec 14 18:50:36 2018 +0100

    Keep permissions of the saved files intact. (Backporting 04fe818b2239).
    
    Apparently this code helps for qt5 only.
    qt4 accepts setPermission, but does not seem to actually implement it.
---
 src/Buffer.cpp           |    3 +++
 src/support/FileName.cpp |    7 +++++++
 src/support/FileName.h   |    2 ++
 3 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/src/Buffer.cpp b/src/Buffer.cpp
index 2987678..6be7d0e 100644
--- a/src/Buffer.cpp
+++ b/src/Buffer.cpp
@@ -1431,6 +1431,9 @@ bool Buffer::save() const
 
        FileName savefile(tempfile->name());
        LYXERR(Debug::FILES, "Saving to " << savefile.absFileName());
+       if (!savefile.clonePermissions(fileName()))
+               LYXERR0("Failed to clone the permission from " << 
fileName().absFileName() << " to " << savefile.absFileName());
+
        if (!writeFile(savefile))
                return false;
 
diff --git a/src/support/FileName.cpp b/src/support/FileName.cpp
index 890c95a..9d00de3 100644
--- a/src/support/FileName.cpp
+++ b/src/support/FileName.cpp
@@ -278,6 +278,13 @@ bool FileName::changePermission(unsigned long int mode) 
const
        return true;
 }
 
+bool FileName::clonePermissions(FileName const & source)
+{
+       QFile fin(toqstr(source.absFileName()));
+       QFile f(toqstr(absFileName()));
+
+       return f.setPermissions(fin.permissions());
+}
 
 string FileName::toFilesystemEncoding() const
 {
diff --git a/src/support/FileName.h b/src/support/FileName.h
index 8264d80..3bfdf13 100644
--- a/src/support/FileName.h
+++ b/src/support/FileName.h
@@ -150,6 +150,8 @@ public:
        /// support this.
        /// \return true on success.
        bool changePermission(unsigned long int mode) const;
+       // sets permission based on the file given as an argument
+       bool clonePermissions(FileName const & source);
 
        /// remove pointed directory and all contents.
        /// \return true on success.

Reply via email to