1
0
mirror of https://invent.kde.org/system/dolphin synced 2024-07-02 16:31:23 +00:00

Show installation progress on install button

Also reopen the menu if it is currently open while the installation
finishes.
This commit is contained in:
Felix Ernst 2024-06-08 15:05:40 +02:00 committed by Felix Ernst
parent fb651f0cbc
commit 982cb7e58c

View File

@ -153,9 +153,9 @@ void StatusBarSpaceInfo::updateMenu()
vLayout->addSpacing(Dolphin::VERTICAL_SPACER_HEIGHT); vLayout->addSpacing(Dolphin::VERTICAL_SPACER_HEIGHT);
auto installFilelightButton = const QString installFilelightButtonDefaultText{i18nc("@action:button", "Install Filelight…")};
new QPushButton(QIcon::fromTheme(QStringLiteral("filelight")), i18nc("@action:button", "Install Filelight…"), containerWidget); auto installFilelightButton = new QPushButton(QIcon::fromTheme(QStringLiteral("filelight")), installFilelightButtonDefaultText, containerWidget);
installFilelightButton->setFixedWidth(std::max(installFilelightButton->sizeHint().width(), installFilelightTitle->sizeHint().width())); installFilelightButton->setMinimumWidth(std::max(installFilelightButton->sizeHint().width(), installFilelightTitle->sizeHint().width()));
auto buttonLayout = new QHBoxLayout{containerWidget}; auto buttonLayout = new QHBoxLayout{containerWidget};
buttonLayout->addWidget(installFilelightButton, 0, Qt::AlignHCenter); buttonLayout->addWidget(installFilelightButton, 0, Qt::AlignHCenter);
vLayout->addLayout(buttonLayout); vLayout->addLayout(buttonLayout);
@ -166,9 +166,9 @@ void StatusBarSpaceInfo::updateMenu()
containerWidget->setFocusProxy(installFilelightButton); containerWidget->setFocusProxy(installFilelightButton);
installFilelightButton->setAccessibleDescription(installFilelightBody->text()); installFilelightButton->setAccessibleDescription(installFilelightBody->text());
connect(installFilelightButton, &QAbstractButton::clicked, this, [this] { connect(installFilelightButton, &QAbstractButton::clicked, this, [this, installFilelightButton, installFilelightButtonDefaultText] {
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
QDesktopServices::openUrl(QUrl("https://apps.kde.org/filelight")); QDesktopServices::openUrl(QUrl("https://apps.kde.org/filelight"));
#else #else
auto packageInstaller = new DolphinPackageInstaller( auto packageInstaller = new DolphinPackageInstaller(
FILELIGHT_PACKAGE_NAME, FILELIGHT_PACKAGE_NAME,
@ -177,13 +177,25 @@ void StatusBarSpaceInfo::updateMenu()
return KService::serviceByDesktopName(QStringLiteral("org.kde.filelight")); return KService::serviceByDesktopName(QStringLiteral("org.kde.filelight"));
}, },
this); 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()) { if (job->error()) {
Q_EMIT showMessage(job->errorString(), KMessageWidget::Error); Q_EMIT showMessage(job->errorString(), KMessageWidget::Error);
} else { } else {
Q_EMIT showMessage(xi18nc("@info", "<application>Filelight</application> installed successfully."), KMessageWidget::Positive); Q_EMIT showMessage(xi18nc("@info", "<application>Filelight</application> 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(); packageInstaller->start();
#endif #endif
}); });