Use flatpak trash portal instad of g_file_trash

This commit is contained in:
2024-08-26 11:43:57 +02:00
parent 2c7a7d473f
commit d6e257e201
3 changed files with 28 additions and 18 deletions
+6 -6
View File
@@ -66,8 +66,6 @@ elseif(APPLE)
else() else()
set(tenmon_ICON "") set(tenmon_ICON "")
find_package(Qt6 COMPONENTS DBus REQUIRED) find_package(Qt6 COMPONENTS DBus REQUIRED)
find_package(PkgConfig REQUIRED)
pkg_search_module(GIO REQUIRED gio-2.0)
endif() endif()
qt_add_executable(tenmon WIN32 MACOSX_BUNDLE ${tenmon_ICON} ${TENMON_SRC}) qt_add_executable(tenmon WIN32 MACOSX_BUNDLE ${tenmon_ICON} ${TENMON_SRC})
@@ -80,15 +78,12 @@ if(COLOR_MANAGMENT)
target_compile_definitions(tenmon PRIVATE "COLOR_MANAGMENT") target_compile_definitions(tenmon PRIVATE "COLOR_MANAGMENT")
endif(COLOR_MANAGMENT) endif(COLOR_MANAGMENT)
if(UNIX AND NOT APPLE)
target_include_directories(tenmon PRIVATE ${GIO_INCLUDE_DIRS})
endif()
target_link_libraries(tenmon PRIVATE Qt6::Widgets Qt6::Sql Qt6::OpenGLWidgets Qt6::Qml ${GSL_LIB} ${GSLCBLAS_LIB} ${EXIF_LIB} ${FITS_LIB} ${RAW_LIB} ${WCS_LIB} XISF lcms2) target_link_libraries(tenmon PRIVATE Qt6::Widgets Qt6::Sql Qt6::OpenGLWidgets Qt6::Qml ${GSL_LIB} ${GSLCBLAS_LIB} ${EXIF_LIB} ${FITS_LIB} ${RAW_LIB} ${WCS_LIB} XISF lcms2)
if(APPLE) if(APPLE)
target_link_libraries(tenmon PRIVATE Qt6::DBus "-framework CoreFoundation") target_link_libraries(tenmon PRIVATE Qt6::DBus "-framework CoreFoundation")
elseif(UNIX) elseif(UNIX)
target_link_libraries(tenmon PRIVATE Qt6::DBus ${GIO_LDFLAGS}) target_link_libraries(tenmon PRIVATE Qt6::DBus)
endif(APPLE) endif(APPLE)
if(LIBRAW_STATIC) if(LIBRAW_STATIC)
@@ -96,6 +91,11 @@ if(LIBRAW_STATIC)
target_link_libraries(tenmon PRIVATE jasper) target_link_libraries(tenmon PRIVATE jasper)
endif() endif()
option(FLATPAK "Flatpak build" OFF)
if(FLATPAK)
target_compile_definitions(tenmon PRIVATE FLATPAK)
endif(FLATPAK)
install(TARGETS tenmon BUNDLE DESTINATION .) install(TARGETS tenmon BUNDLE DESTINATION .)
if(UNIX AND NOT APPLE) if(UNIX AND NOT APPLE)
include(GNUInstallDirs) include(GNUInstallDirs)
+1 -1
View File
@@ -2,7 +2,7 @@ FITS/XISF image viewer with multithreaded image loading
To get all dependencies install these packages To get all dependencies install these packages
sudo apt install qt6-base-dev qt6-declarative-dev libqt6opengl6-dev libraw-dev libexif-dev libcfitsio-dev libgsl-dev wcslib-dev cmake libzstd-dev pkg-config libqt6sql6-sqlite sudo apt install qt6-base-dev qt6-declarative-dev libqt6opengl6-dev libraw-dev libexif-dev libcfitsio-dev libgsl-dev wcslib-dev cmake libzstd-dev libqt6sql6-sqlite
on OpenSUSE on OpenSUSE
+21 -11
View File
@@ -1,20 +1,30 @@
#ifdef __linux__ #ifdef FLATPAK
#define QT_NO_KEYWORDS #include <QDBusConnection>
#include <QDBusMessage>
#include <QDBusUnixFileDescriptor>
#include <QString> #include <QString>
#include <iostream> #include <fcntl.h>
#include <gio/gio.h> #include <unistd.h>
//flatpak bug prevent to use QFile::moveToTrash //flatpak bug prevent to use QFile::moveToTrash
bool moveToTrash(const QString &path) bool moveToTrash(const QString &path)
{ {
GFile *gfile = g_file_new_for_path(path.toLocal8Bit().data()); QDBusConnection con = QDBusConnection::sessionBus();
GError *error = nullptr; QDBusMessage message = QDBusMessage::createMethodCall("org.freedesktop.portal.Desktop", "/org/freedesktop/portal/desktop", "org.freedesktop.portal.Trash", "TrashFile");
g_file_trash(gfile, nullptr, &error); int fd = ::open(path.toLocal8Bit().data(), O_RDWR);
if(error)std::cerr << "failed to trash file " << error->code << " " << error->message << std::endl; if(fd >= 0)
g_clear_error(&error); {
g_object_unref(gfile); QList<QVariant> args = {QVariant::fromValue(QDBusUnixFileDescriptor(fd))};
return true; message.setArguments(args);
QDBusMessage reply = con.call(message);
::close(fd);
if(reply.type() == QDBusMessage::ReplyMessage && reply.arguments().size() && reply.arguments().first().toInt())
return true;
else
return false;
}
return false;
} }
#else #else