diff --git a/src/statusbar/statusbarspaceinfo.cpp b/src/statusbar/statusbarspaceinfo.cpp index e1d22c0566..1febd4caf4 100644 --- a/src/statusbar/statusbarspaceinfo.cpp +++ b/src/statusbar/statusbarspaceinfo.cpp @@ -153,9 +153,9 @@ void StatusBarSpaceInfo::updateMenu() vLayout->addSpacing(Dolphin::VERTICAL_SPACER_HEIGHT); - auto installFilelightButton = - new QPushButton(QIcon::fromTheme(QStringLiteral("filelight")), i18nc("@action:button", "Install Filelight…"), containerWidget); - installFilelightButton->setFixedWidth(std::max(installFilelightButton->sizeHint().width(), installFilelightTitle->sizeHint().width())); + const QString installFilelightButtonDefaultText{i18nc("@action:button", "Install Filelight…")}; + auto installFilelightButton = new QPushButton(QIcon::fromTheme(QStringLiteral("filelight")), installFilelightButtonDefaultText, containerWidget); + installFilelightButton->setMinimumWidth(std::max(installFilelightButton->sizeHint().width(), installFilelightTitle->sizeHint().width())); auto buttonLayout = new QHBoxLayout{containerWidget}; buttonLayout->addWidget(installFilelightButton, 0, Qt::AlignHCenter); vLayout->addLayout(buttonLayout); @@ -166,9 +166,9 @@ void StatusBarSpaceInfo::updateMenu() containerWidget->setFocusProxy(installFilelightButton); installFilelightButton->setAccessibleDescription(installFilelightBody->text()); - connect(installFilelightButton, &QAbstractButton::clicked, this, [this] { + connect(installFilelightButton, &QAbstractButton::clicked, this, [this, installFilelightButton, installFilelightButtonDefaultText] { #ifdef Q_OS_WIN - QDesktopServices::openUrl(QUrl("https://apps.kde.org/filelight")); + QDesktopServices::openUrl(QUrl("https://apps.kde.org/filelight")); #else auto packageInstaller = new DolphinPackageInstaller( FILELIGHT_PACKAGE_NAME, @@ -177,13 +177,25 @@ void StatusBarSpaceInfo::updateMenu() return KService::serviceByDesktopName(QStringLiteral("org.kde.filelight")); }, this); - connect(packageInstaller, &KJob::result, this, [this](KJob *job) { + connect(packageInstaller, &KJob::result, this, [this, installFilelightButton, installFilelightButtonDefaultText](KJob *job) { + installFilelightButton->setText(installFilelightButtonDefaultText); if (job->error()) { Q_EMIT showMessage(job->errorString(), KMessageWidget::Error); } else { Q_EMIT showMessage(xi18nc("@info", "Filelight installed successfully."), KMessageWidget::Positive); + if (m_textInfoButton->menu()->isVisible()) { + m_textInfoButton->menu()->hide(); + updateMenu(); + m_textInfoButton->menu()->show(); + } } }); + connect(packageInstaller, &KJob::percentChanged, installFilelightButton, [installFilelightButton](KJob */* job */, long unsigned int percent) { + if (percent > 100) { + return; // For some reason it instantly reports 101% completion for me when it starts. + } + installFilelightButton->setText(i18nc("@action:button which also shows progress %1 in percent", "Install Filelight… (%1%)", percent)); + }); packageInstaller->start(); #endif });