| 157 | } |
| 158 | |
| 159 | bool ensureWritable(const QList<QUrl>& urls) |
| 160 | { |
| 161 | QStringList notWritable; |
| 162 | for (const QUrl& url : urls) { |
| 163 | if (url.isLocalFile()) { |
| 164 | QFile file(url.toLocalFile()); |
| 165 | if (file.exists() && !(file.permissions() & QFileDevice::WriteOwner) && |
| 166 | !(file.permissions() & QFileDevice::WriteGroup)) { |
| 167 | notWritable << url.toLocalFile(); |
| 168 | } |
| 169 | } |
| 170 | } |
| 171 | |
| 172 | if (!notWritable.isEmpty()) { |
| 173 | int answer = KMessageBox::questionTwoActionsCancel( |
| 174 | ICore::self()->uiController()->activeMainWindow(), |
| 175 | i18n("You don't have write permissions for the following files; add write permissions for owner before " |
| 176 | "saving?") |
| 177 | + QLatin1String("\n\n") + notWritable.join(QLatin1Char('\n')), |
| 178 | i18nc("@title:window", "Some Files are Write-Protected"), |
| 179 | KGuiItem(i18nc("@action:button", "Set Write Permissions"), QStringLiteral("dialog-ok")), |
| 180 | KGuiItem(i18nc("@action:button", "Ignore"), QStringLiteral("dialog-cancel")), KStandardGuiItem::cancel()); |
| 181 | if (answer == KMessageBox::PrimaryAction) { |
| 182 | bool success = true; |
| 183 | for (const QString& filename : std::as_const(notWritable)) { |
| 184 | QFile file(filename); |
| 185 | QFileDevice::Permissions permissions = file.permissions(); |
| 186 | permissions |= QFileDevice::WriteOwner; |
| 187 | success &= file.setPermissions(permissions); |
| 188 | } |
| 189 | |
| 190 | if (!success) { |
| 191 | KMessageBox::error(ICore::self()->uiController()->activeMainWindow(), |
| 192 | i18n("Failed adding write permissions for some files."), |
| 193 | i18nc("@title:window", "Failed Setting Permissions")); |
| 194 | return false; |
| 195 | } |
| 196 | } |
| 197 | return answer != KMessageBox::Cancel; |
| 198 | } |
| 199 | return true; |
| 200 | } |
| 201 | |
| 202 | bool restoreAndAutoSaveGeometry(QWidget& widget, const QString& configGroupName, const QString& configSubgroupName) |
| 203 | { |
no test coverage detected