From: Christian Kamm Date: Thu, 15 Jun 2017 14:03:24 +0000 (+0200) Subject: Link share: Remove direct download if unavailable #5837 X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~704^2^2~57 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=99b1f69271b230e59b70dd02773ad483046a4328;p=nextcloud-desktop.git Link share: Remove direct download if unavailable #5837 It would have been much nicer to keep the menu assigned to the QToolButton, but if one switches away from InstantPopup (to adjust the entries before they're displayed), the button always gets a menu indicator that can't be removed. --- diff --git a/src/gui/sharelinkwidget.cpp b/src/gui/sharelinkwidget.cpp index 79973b8e4..bba3151bb 100644 --- a/src/gui/sharelinkwidget.cpp +++ b/src/gui/sharelinkwidget.cpp @@ -156,6 +156,8 @@ ShareLinkWidget::ShareLinkWidget(AccountPtr account, // Prepare sharing menu _shareLinkMenu = new QMenu(this); + connect(_shareLinkMenu, SIGNAL(triggered(QAction *)), + SLOT(slotShareLinkActionTriggered(QAction *))); _openLinkAction = _shareLinkMenu->addAction(tr("Open link in browser")); _copyLinkAction = _shareLinkMenu->addAction(tr("Copy link to clipboard")); _copyDirectLinkAction = _shareLinkMenu->addAction(tr("Copy link to clipboard (direct download)")); @@ -245,9 +247,7 @@ void ShareLinkWidget::slotSharesFetched(const QList> &shar auto shareButton = new QToolButton; shareButton->setText("..."); shareButton->setProperty(propertyShareC, QVariant::fromValue(linkShare)); - shareButton->setMenu(_shareLinkMenu); - shareButton->setPopupMode(QToolButton::InstantPopup); - connect(shareButton, SIGNAL(triggered(QAction *)), SLOT(slotShareLinkButtonTriggered(QAction *))); + connect(shareButton, SIGNAL(clicked(bool)), SLOT(slotShareLinkButtonClicked())); table->setCellWidget(row, 1, shareButton); auto deleteButton = new QToolButton; @@ -514,7 +514,18 @@ void ShareLinkWidget::openShareLink(const QUrl &url) Utility::openBrowser(url, this); } -void ShareLinkWidget::slotShareLinkButtonTriggered(QAction *action) +void ShareLinkWidget::slotShareLinkButtonClicked() +{ + auto share = sender()->property(propertyShareC).value>(); + bool downloadEnabled = share->getShowFileListing(); + _copyDirectLinkAction->setVisible(downloadEnabled); + _emailDirectLinkAction->setVisible(downloadEnabled); + + _shareLinkMenu->setProperty(propertyShareC, QVariant::fromValue(share)); + _shareLinkMenu->exec(QCursor::pos()); +} + +void ShareLinkWidget::slotShareLinkActionTriggered(QAction *action) { auto share = sender()->property(propertyShareC).value>(); diff --git a/src/gui/sharelinkwidget.h b/src/gui/sharelinkwidget.h index 4dd5f1ec6..1d8397505 100644 --- a/src/gui/sharelinkwidget.h +++ b/src/gui/sharelinkwidget.h @@ -70,7 +70,8 @@ private slots: void slotPasswordChanged(const QString &newText); void slotNameEdited(QTableWidgetItem *item); - void slotShareLinkButtonTriggered(QAction *action); + void slotShareLinkButtonClicked(); + void slotShareLinkActionTriggered(QAction *action); void slotDeleteShareFetched(); void slotCreateShareFetched(const QSharedPointer share);