Implementation of calling native file dialog (Linux)

This commit is contained in:
SimplestStudio
2022-08-16 16:47:06 +03:00
parent 2d26bdb138
commit 3113dc9e9e
4 changed files with 1130 additions and 11 deletions

View File

@ -196,7 +196,8 @@ core_linux {
$$PWD/src/windows/platform_linux/cwindowplatform.h \
$$PWD/src/platform_linux/cdialogopenssl.h \
$$PWD/src/platform_linux/cdialogcertificateinfo.h \
$$PWD/src/platform_linux/singleapplication.h
$$PWD/src/platform_linux/singleapplication.h \
$$PWD/src/platform_linux/xdgdesktopportal.h
SOURCES += $$PWD/src/windows/platform_linux/cx11decoration.cpp \
#$$PWD/src/windows/platform_linux/gtk_addon.cpp \
@ -204,7 +205,8 @@ core_linux {
$$PWD/src/windows/platform_linux/cwindowplatform.cpp \
$$PWD/src/platform_linux/cdialogopenssl.cpp \
$$PWD/src/platform_linux/cdialogcertificateinfo.cpp \
$$PWD/src/platform_linux/singleapplication.cpp
$$PWD/src/platform_linux/singleapplication.cpp \
$$PWD/src/platform_linux/xdgdesktopportal.cpp
contains(DEFINES, XDG_DESKTOP_PORTAL_KDE) {
HEADERS += $$PWD/src/platform_linux/kdefiledialog.h
@ -212,7 +214,7 @@ core_linux {
}
CONFIG += link_pkgconfig
PKGCONFIG += glib-2.0 gtk+-3.0 atk
PKGCONFIG += glib-2.0 gtk+-3.0 atk dbus-1
LIBS += -lX11
LIBS += $$CORE_3DPARTY_PATH/icu/$$PLATFORM_BUILD/build/libicuuc.so.58

View File

@ -47,6 +47,7 @@
#ifdef Q_OS_WIN
# include <shobjidl.h>
#else
# include "platform_linux/xdgdesktopportal.h"
# ifdef XDG_DESKTOP_PORTAL_KDE
# include "platform_linux/kdefiledialog.h"
# endif
@ -344,14 +345,12 @@ bool CFileDialogWrapper::modalSaveAs(QString& fileName, int selected)
#endif
#ifdef __linux__
# ifdef XDG_DESKTOP_PORTAL_KDE
if (WindowHelper::getEnvInfo() == "KDE") {
QStringList result = Kde::openNativeDialog(qobject_cast<QWidget*>(parent()),
Kde::Mode::SAVE, tr("Save As"),
QStringList result = XdgPortal::openNativeDialog(qobject_cast<QWidget*>(parent()),
PortalMode::SAVE, tr("Save As"),
n, "", f, &sf);
return (result.size() > 0) ? result.at(0) : QString();
}
# endif
#endif
return QFileDialog::getSaveFileName(p, tr("Save As"), n, f, &sf, _opts);
};
@ -459,13 +458,11 @@ QStringList CFileDialogWrapper::modalOpen(const QString& path, const QString& fi
#ifndef _WIN32
WindowHelper::CParentDisable oDisabler(qobject_cast<QWidget*>(parent()));
# ifdef XDG_DESKTOP_PORTAL_KDE
if (WindowHelper::getEnvInfo() == "KDE") {
return Kde::openNativeDialog(qobject_cast<QWidget*>(parent()),
Kde::Mode::OPEN, tr("Open Document"), "",
return XdgPortal::openNativeDialog(qobject_cast<QWidget*>(parent()),
PortalMode::OPEN, tr("Open Document"), "",
path, _filter_, &_sel_filter, multi);
}
# endif
return multi ? QFileDialog::getOpenFileNames(_parent, tr("Open Document"), path, _filter_, &_sel_filter, _opts) :
QStringList(QFileDialog::getOpenFileName(_parent, tr("Open Document"), path, _filter_, &_sel_filter, _opts));
#else

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,25 @@
#ifndef XDGDESKTOPPORTAL_H
#define XDGDESKTOPPORTAL_H
#include <QWidget>
#include <QString>
typedef enum PortalMode {
OPEN = 0, SAVE = 1, FOLDER = 2
} PortalMode;
namespace XdgPortal
{
QStringList openNativeDialog(QWidget *parent,
PortalMode mode,
const QString &title,
const QString &file_name,
const QString &path,
const QString &filter,
QString *sel_filter,
bool sel_multiple = false);
}
#endif // XDGDESKTOPPORTAL_H