Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/desktop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Kamm <mail@ckamm.de>2017-03-22 15:22:22 +0300
committerckamm <mail@ckamm.de>2017-03-24 11:52:01 +0300
commita0e88477c1464437daa336a6551aaf1028479f3f (patch)
treeac116bbe9f663ece32ca0fc3e7115e1929ef4d34 /src/gui/shareusergroupwidget.cpp
parentda45d99b8fed9a37df8031433e11eb574c28a8df (diff)
ShareDialog: Make "can edit" partially checked sometimes #5642
Previously the check box was checked if *any* of its sub-permissions were granted. This can hide the fact that only a limited subset of them are actually granted. The new behavior is to display as "partially checked" if only some of the sub-permissions are available. Clicking the check box itself still toggles between granting all or none of them.
Diffstat (limited to 'src/gui/shareusergroupwidget.cpp')
-rw-r--r--src/gui/shareusergroupwidget.cpp36
1 files changed, 26 insertions, 10 deletions
diff --git a/src/gui/shareusergroupwidget.cpp b/src/gui/shareusergroupwidget.cpp
index e339d6a1c..450c2e21a 100644
--- a/src/gui/shareusergroupwidget.cpp
+++ b/src/gui/shareusergroupwidget.cpp
@@ -374,12 +374,19 @@ void ShareWidget::slotEditPermissionsChanged()
{
setEnabled(false);
+ // Can never manually be set to "partial".
+ // This works because the state cycle for clicking is
+ // unchecked -> partial -> checked -> unchecked.
+ if (_ui->permissionsEdit->checkState() == Qt::PartiallyChecked) {
+ _ui->permissionsEdit->setCheckState(Qt::Checked);
+ }
+
Share::Permissions permissions = SharePermissionRead;
if (_ui->permissionShare->checkState() == Qt::Checked) {
permissions |= SharePermissionShare;
}
-
+
if (_ui->permissionsEdit->checkState() == Qt::Checked) {
if (_permissionUpdate->isEnabled())
permissions |= SharePermissionUpdate;
@@ -461,24 +468,33 @@ QSharedPointer<Share> ShareWidget::share() const
void ShareWidget::displayPermissions()
{
+ auto perm = _share->getPermissions();
+
+ _permissionUpdate->setChecked(false);
_permissionCreate->setChecked(false);
- _ui->permissionsEdit->setCheckState(Qt::Unchecked);
_permissionDelete->setChecked(false);
- _ui->permissionShare->setCheckState(Qt::Unchecked);
- _permissionUpdate->setChecked(false);
-
- if (_share->getPermissions() & SharePermissionUpdate) {
+ if (perm & SharePermissionUpdate) {
_permissionUpdate->setChecked(true);
- _ui->permissionsEdit->setCheckState(Qt::Checked);
}
- if (!_isFile && _share->getPermissions() & SharePermissionCreate) {
+ if (!_isFile && perm & SharePermissionCreate) {
_permissionCreate->setChecked(true);
- _ui->permissionsEdit->setCheckState(Qt::Checked);
}
- if (!_isFile && _share->getPermissions() & SharePermissionDelete) {
+ if (!_isFile && perm & SharePermissionDelete) {
_permissionDelete->setChecked(true);
+ }
+
+ if (perm & SharePermissionUpdate
+ && (_isFile
+ || (perm & SharePermissionCreate
+ && perm & SharePermissionDelete))) {
_ui->permissionsEdit->setCheckState(Qt::Checked);
+ } else if (perm & (SharePermissionUpdate | SharePermissionCreate | SharePermissionDelete)) {
+ _ui->permissionsEdit->setCheckState(Qt::PartiallyChecked);
+ } else {
+ _ui->permissionsEdit->setCheckState(Qt::Unchecked);
}
+
+ _ui->permissionShare->setCheckState(Qt::Unchecked);
if (_share->getPermissions() & SharePermissionShare) {
_ui->permissionShare->setCheckState(Qt::Checked);
}