Merge pull request #9643 from Rmys/master

kio rebuild
This commit is contained in:
Rmys
2021-07-15 13:12:09 +03:00
committed by GitHub
6 changed files with 54 additions and 383 deletions
@@ -1,52 +0,0 @@
From ae87a7d6999fc6ad90ab300dd8ea0c9c68c02bd4 Mon Sep 17 00:00:00 2001
From: Maarten De Meyer <de.meyer.maarten@gmail.com>
Date: Mon, 8 Sep 2014 23:58:55 +0200
Subject: [PATCH 1/2] Fix thumbnails for mimetype groups.
KService::mimeTypes cannot handle mimetype groups. ex: text/*
Go back to KService::serviceTypes and remove 'ThumbCreator' entries.
REVIEW: 119958
---
src/widgets/previewjob.cpp | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/src/widgets/previewjob.cpp b/src/widgets/previewjob.cpp
index 55a3fb7..ca47934 100644
--- a/src/widgets/previewjob.cpp
+++ b/src/widgets/previewjob.cpp
@@ -268,20 +268,25 @@ void PreviewJobPrivate::startPreview()
protocols.append(p);
}
foreach (const QString &protocol, protocols) {
- const QStringList mtypes = (*it)->mimeTypes();
+ // We cannot use mimeTypes() here, it doesn't support groups such as: text/*
+ const QStringList mtypes = (*it)->serviceTypes();
// Add supported mimetype for this protocol
QStringList &_ms = m_remoteProtocolPlugins[protocol];
foreach (const QString &_m, mtypes) {
- protocolMap[protocol].insert(_m, *it);
- if (!_ms.contains(_m)) {
- _ms.append(_m);
+ if (_m != QLatin1String("ThumbCreator")) {
+ protocolMap[protocol].insert(_m, *it);
+ if (!_ms.contains(_m)) {
+ _ms.append(_m);
+ }
}
}
}
if (enabledPlugins.contains((*it)->desktopEntryName())) {
- const QStringList mimeTypes = (*it)->mimeTypes();
+ const QStringList mimeTypes = (*it)->serviceTypes();
for (QStringList::ConstIterator mt = mimeTypes.constBegin(); mt != mimeTypes.constEnd(); ++mt) {
- mimeMap.insert(*mt, *it);
+ if (*mt != QLatin1String("ThumbCreator")) {
+ mimeMap.insert(*mt, *it);
+ }
}
}
}
--
2.1.0
@@ -1,77 +0,0 @@
From 5a5aa4b1786e793f457ad5a88a4e49d7469a92fa Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Tinkl?= <lukas@kde.org>
Date: Tue, 9 Sep 2014 22:49:27 +0200
Subject: [PATCH 2/2] Fix relative paths being turned into http urls by
fromUserInput.
Reviewed-By: (well, written by) David Faure.
---
src/filewidgets/kfilewidget.cpp | 24 ++++++++++++++++++++----
1 file changed, 20 insertions(+), 4 deletions(-)
diff --git a/src/filewidgets/kfilewidget.cpp b/src/filewidgets/kfilewidget.cpp
index 42320e3..58dd92e 100644
--- a/src/filewidgets/kfilewidget.cpp
+++ b/src/filewidgets/kfilewidget.cpp
@@ -325,6 +325,22 @@ static bool containsProtocolSection(const QString &string)
return false;
}
+// this string-to-url conversion function handles relative paths, full paths and URLs
+// without the http-prepending that QUrl::fromUserInput does.
+static QUrl urlFromString(const QString& str)
+{
+ if (QDir::isAbsolutePath(str)) {
+ return QUrl::fromLocalFile(str);
+ }
+ QUrl url(str);
+ if (url.isRelative()) {
+ url.clear();
+ url.setPath(str);
+ }
+ return url;
+}
+
+
KFileWidget::KFileWidget(const QUrl &_startDir, QWidget *parent)
: QWidget(parent), d(new KFileWidgetPrivate(this))
{
@@ -909,7 +925,7 @@ void KFileWidget::slotOk()
containsProtocolSection(locationEditCurrentText))) {
QString fileName;
- QUrl url = QUrl::fromUserInput(locationEditCurrentText);
+ QUrl url = urlFromString(locationEditCurrentText);
if (d->operationMode == Opening) {
KIO::StatJob *statJob = KIO::stat(url, KIO::HideProgressInfo);
KJobWidgets::setWindow(statJob, this);
@@ -1447,7 +1463,7 @@ void KFileWidgetPrivate::_k_urlEntered(const QUrl &url)
bool blocked = locationEdit->blockSignals(true);
if (keepLocation) {
- QUrl currentUrl = QUrl::fromUserInput(filename);
+ QUrl currentUrl = urlFromString(filename);
locationEdit->changeUrl(0, QIcon::fromTheme(KIO::iconNameForUrl(currentUrl)), currentUrl);
locationEdit->lineEdit()->setModified(true);
}
@@ -1494,7 +1510,7 @@ void KFileWidgetPrivate::_k_enterUrl(const QString &url)
{
// qDebug();
- _k_enterUrl(QUrl::fromUserInput(KUrlCompletion::replacedPath(url, true, true)));
+ _k_enterUrl(urlFromString(KUrlCompletion::replacedPath(url, true, true)));
}
bool KFileWidgetPrivate::toOverwrite(const QUrl &url)
@@ -1677,7 +1693,7 @@ QList<QUrl> KFileWidgetPrivate::tokenize(const QString &line) const
urls.append(u);
}
} else {
- urls << QUrl::fromUserInput(line);
+ urls << QUrl::fromLocalFile(line);
}
return urls;
--
2.1.0
@@ -1,66 +0,0 @@
From 248941a0f4b4792b6935546da1c1e6bdda61846e Mon Sep 17 00:00:00 2001
From: Fabian Vogt <fabian@ritter-vogt.de>
Date: Thu, 11 Jan 2018 22:07:45 +0100
Subject: Fix KFilePreviewGenerator::LayoutBlocker
Summary:
QAbstractItemViews does layout in a timer event handler to avoid unnecessary
layout calculations. Changes which cause a relayout only start the timer.
LayoutBlocker has the restriction that it only works if the event loop is not
entered during its lifetime. Without an event loop there's no expensive
relayout anyway, making the LayoutBlocker pointless in such cases.
LayoutBlocker works by changing the uniformItemSizes property of the QListView
to true and in the destructor back to the original value again. Those changes
do not trigger a relayout in QListView, so if the QListView did a layout with
uniformItemSizes set to true, it stays that way.
Fix it by triggering a relayout in ~LayoutBlocker.
This got exposed by a change in Qt, which results in QListView doing a relayout
while the LayoutBlocker is active.
BUG: 352776
Test Plan: kfilewidgettest_gui has proper item sizes now.
Reviewers: #frameworks, dfaure
Reviewed By: dfaure
Tags: #frameworks
Differential Revision: https://phabricator.kde.org/D9830
---
src/filewidgets/kfilepreviewgenerator.cpp | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/src/filewidgets/kfilepreviewgenerator.cpp b/src/filewidgets/kfilepreviewgenerator.cpp
index 7965ab8..15b8ab8 100644
--- a/src/filewidgets/kfilepreviewgenerator.cpp
+++ b/src/filewidgets/kfilepreviewgenerator.cpp
@@ -70,10 +70,7 @@
*
* QListView does not invoke QItemDelegate::sizeHint() when the
* uniformItemSize property has been set to true, so this property is
- * set before exchanging a block of icons. It is important to reset
- * it again before the event loop is entered, otherwise QListView
- * would not get the correct size hints after dispatching the layoutChanged()
- * signal.
+ * set before exchanging a block of icons.
*/
class KFilePreviewGenerator::LayoutBlocker
{
@@ -92,6 +89,11 @@ public:
{
if (m_view != nullptr) {
m_view->setUniformItemSizes(m_uniformSizes);
+ /* The QListView did the layout with uniform item
+ * sizes, so trigger a relayout with the expected sizes. */
+ if (!m_uniformSizes) {
+ m_view->setGridSize(m_view->gridSize());
+ }
}
}
--
cgit v0.11.2
@@ -0,0 +1,53 @@
From 8ad6921524c92a0cf1b58336b3ce29e159e83b7d Mon Sep 17 00:00:00 2001
From: David Edmundson <kde@davidedmundson.co.uk>
Date: Wed, 14 Jul 2021 17:06:59 +0100
Subject: [PATCH] Fix selecting binaries from component chooser KCM
In the kcmshell for a component chooser we use the open with dialog to
select services for various scheme handlers.
If you select a binary instead of a .desktop file a temporary .desktop
file is created in ~/.local/share/applications
This is in the format
Exec=someBinary
MimeType=x-scheme-handler/http
When we then use this application for launching KIO::DesktopExecParser
then (sort of correctly) determines that that the chosen service cannot
handle the http scheme because even though it is a scheme handler it
does not have a "%u" in the exec line.
This leads to us potentially loading websites via kioclient or kio-fuse.
Testing done:
- kcmshell5 component chooser
- web browser -> other -> type "/usr/bin/firefox"
- kde-open5 http://kde.org
- Previously this gave a local URL, now it is correct
---
src/widgets/kopenwithdialog.cpp | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/src/widgets/kopenwithdialog.cpp b/src/widgets/kopenwithdialog.cpp
index 1831878ca..31295044d 100644
--- a/src/widgets/kopenwithdialog.cpp
+++ b/src/widgets/kopenwithdialog.cpp
@@ -1088,6 +1088,14 @@ bool KOpenWithDialogPrivate::checkAccept()
KConfigGroup cg = desktopFile.desktopGroup();
cg.writeEntry("Type", "Application");
cg.writeEntry("Name", initialServiceName);
+
+ // if we select a binary for a scheme handler, then it's safe to assume it can handle URLs
+ if (qMimeType.startsWith(QLatin1String("x-scheme-handler/"))) {
+ if (!typedExec.contains(QLatin1String("%u"), Qt::CaseInsensitive) && !typedExec.contains(QLatin1String("%f"), Qt::CaseInsensitive)) {
+ fullExec += QStringLiteral(" %u");
+ }
+ }
+
cg.writeEntry("Exec", fullExec);
cg.writeEntry("NoDisplay", true); // don't make it appear in the K menu
if (terminal->isChecked()) {
--
GitLab
@@ -1,187 +0,0 @@
diff -Nuar a/src/widgets/kpropertiesdialog.cpp b/src/widgets/kpropertiesdialog.cpp
--- a/src/widgets/kpropertiesdialog.cpp 2018-11-03 21:02:08.000000000 +0300
+++ b/src/widgets/kpropertiesdialog.cpp 2018-08-04 14:23:09.000000000 +0300
@@ -80,6 +80,7 @@
#include <QTextStream>
#include <QUrl>
#include <QVector>
+#include <qplatformdefs.h>
#if HAVE_POSIX_ACL
extern "C" {
@@ -774,10 +775,9 @@
QString mimeType;
QString oldFileName;
KLineEdit *m_lined;
- QLabel *m_fileNameLabel = nullptr;
- QGridLayout *m_grid = nullptr;
QWidget *iconArea;
+ QWidget *nameArea;
QLabel *m_sizeLabel;
QPushButton *m_sizeDetermineButton;
@@ -849,7 +849,6 @@
vbl->setMargin(0);
vbl->setObjectName(QStringLiteral("vbl"));
QGridLayout *grid = new QGridLayout(); // unknown rows
- d->m_grid = grid;
grid->setColumnStretch(0, 0);
grid->setColumnStretch(1, 0);
grid->setColumnStretch(2, 1);
@@ -980,24 +979,30 @@
iconLabel->setAlignment(Qt::AlignCenter);
int bsize = 66 + 2 * iconLabel->style()->pixelMetric(QStyle::PM_ButtonMargin);
iconLabel->setFixedSize(bsize, bsize);
- iconLabel->setPixmap(QIcon::fromTheme(iconStr).pixmap(48));
+ iconLabel->setPixmap(KIconLoader::global()->loadIcon(iconStr, KIconLoader::Desktop, 48));
d->iconArea = iconLabel;
}
grid->addWidget(d->iconArea, curRow, 0, Qt::AlignCenter);
- KFileItemListProperties itemList(KFileItemList() << item);
- if (d->bMultiple || isTrash || hasRoot || !(d->m_bFromTemplate || itemList.supportsMoving())) {
- setFileNameReadOnly(true);
+ if (d->bMultiple || isTrash || hasRoot) {
+ QLabel *lab = new QLabel(d->m_frame);
if (d->bMultiple) {
- d->m_fileNameLabel->setText(KIO::itemsSummaryString(iFileCount + iDirCount, iFileCount, iDirCount, 0, false));
+ lab->setText(KIO::itemsSummaryString(iFileCount + iDirCount, iFileCount, iDirCount, 0, false));
+ } else {
+ lab->setText(filename);
}
-
+ d->nameArea = lab;
} else {
d->m_lined = new KLineEdit(d->m_frame);
d->m_lined->setObjectName("KFilePropsPlugin::nameLineEdit");
d->m_lined->setText(filename);
+ d->nameArea = d->m_lined;
d->m_lined->setFocus();
+ //if we don't have permissions to rename, we need to make "m_lined" read only.
+ KFileItemListProperties itemList(KFileItemList() << item);
+ setFileNameReadOnly(!itemList.supportsMoving());
+
// Enhanced rename: Don't highlight the file extension.
QString extension = db.suffixForFileName(filename);
if (!extension.isEmpty()) {
@@ -1011,9 +1016,9 @@
connect(d->m_lined, SIGNAL(textChanged(QString)),
this, SLOT(nameFileChanged(QString)));
- grid->addWidget(d->m_lined, curRow, 2);
}
- ++curRow;
+
+ grid->addWidget(d->nameArea, curRow++, 2);
KSeparator *sep = new KSeparator(Qt::Horizontal, d->m_frame);
grid->addWidget(sep, curRow, 0, 1, 3);
@@ -1158,30 +1163,13 @@
if (isLocal) {
KMountPoint::Ptr mp = KMountPoint::currentMountPoints().findByPath(url.toLocalFile());
-
- l = new QLabel(i18n("File System:"), d->m_frame);
- grid->addWidget(l, curRow, 0, Qt::AlignRight);
-
- l = new QLabel(d->m_frame);
- grid->addWidget(l, curRow++, 2);
- l->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::TextSelectableByKeyboard);
- l->setText(mp->mountType());
-
- if (mp) {
+ if (mp && mp->mountPoint() != QLatin1String("/")) {
l = new QLabel(i18n("Mounted on:"), d->m_frame);
grid->addWidget(l, curRow, 0, Qt::AlignRight);
l = new KSqueezedTextLabel(mp->mountPoint(), d->m_frame);
l->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::TextSelectableByKeyboard);
grid->addWidget(l, curRow++, 2);
-
- l = new QLabel(i18n("Mounted from:"), d->m_frame);
- grid->addWidget(l, curRow, 0, Qt::AlignRight);
-
- l = new QLabel(d->m_frame);
- grid->addWidget(l, curRow++, 2);
- l->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::TextSelectableByKeyboard);
- l->setText(mp->mountedFrom());
}
}
@@ -1219,15 +1207,12 @@
void KFilePropsPlugin::setFileNameReadOnly(bool ro)
{
- Q_ASSERT(ro); // false isn't supported
- if (ro && !d->m_fileNameLabel) {
- Q_ASSERT(!d->m_bFromTemplate);
- delete d->m_lined;
- d->m_lined = nullptr;
- d->m_fileNameLabel = new QLabel(d->m_frame);
- d->m_fileNameLabel->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::TextSelectableByKeyboard);
- d->m_fileNameLabel->setText(d->oldName); // will get overwritten if d->bMultiple
- d->m_grid->addWidget(d->m_fileNameLabel, 0, 2);
+ if (d->m_lined && !d->m_bFromTemplate) {
+ d->m_lined->setReadOnly(ro);
+ if (ro) {
+ // Don't put the initial focus on the line edit when it is ro
+ properties->buttonBox()->button(QDialogButtonBox::Ok)->setFocus();
+ }
}
}
@@ -1390,8 +1375,8 @@
// qDebug() << "KFilePropsPlugin::applyChanges";
- if (d->m_lined) {
- QString n = d->m_lined->text();
+ if (qobject_cast<QLineEdit *>(d->nameArea)) {
+ QString n = ((QLineEdit *) d->nameArea)->text();
// Remove trailing spaces (#4345)
while (! n.isEmpty() && n[n.length() - 1].isSpace()) {
n.truncate(n.length() - 1);
@@ -1682,6 +1667,8 @@
d->cbRecursive = nullptr;
d->grpCombo = nullptr; d->grpEdit = nullptr;
d->usrEdit = nullptr;
+ QString path = properties->url().path();
+ QString fname = properties->url().fileName();
bool isLocal = properties->url().isLocalFile();
bool isTrash = (properties->url().scheme() == QLatin1String("trash"));
KUser myself(KUser::UseEffectiveUID);
@@ -1707,6 +1694,7 @@
KFileItemList::const_iterator it = items.begin();
const KFileItemList::const_iterator kend = items.end();
for (++it /*no need to check the first one again*/; it != kend; ++it) {
+ const QUrl url = (*it).url();
if (!d->isIrregular)
d->isIrregular |= isIrregular((*it).permissions(),
(*it).isDir() == isDir,
@@ -1884,6 +1872,7 @@
/*** Set Group ***/
QStringList groupList;
+ QByteArray strUser;
KUser user(KUser::UseEffectiveUID);
const bool isMyGroup = user.groupNames().contains(d->strGroup);
@@ -2783,7 +2772,7 @@
const QString checksum = cachedChecksum(algorithm);
- // Checksum already in cache.
+ // Checksum alread in cache.
if (!checksum.isEmpty()) {
const bool isMatch = (checksum == input);
if (isMatch) {
@@ -3113,7 +3102,7 @@
const QUrl url = job->mostLocalUrl();
if (!url.isLocalFile()) {
- KMessageBox::sorry(nullptr, i18n("Could not save properties. Only entries on local file systems are supported."));
+ //FIXME: 4.2 add this: KMessageBox::sorry(0, i18n("Could not save properties. Only entries on local file systems are supported."));
return;
}
+1 -1
View File
@@ -57,7 +57,7 @@
<Dependency versionFrom="5.84.0">kded-devel</Dependency>
</BuildDependencies>
<Patches>
<!-- <Patch>kpropertiesdialog.patch</Patch> -->
<Patch>8ad69215.patch</Patch>
</Patches>
</Source>