Hello community, here is the log from the commit of package lxqt-qtplugin for openSUSE:Factory checked in at 2019-02-25 17:49:33 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/lxqt-qtplugin (Old) and /work/SRC/openSUSE:Factory/.lxqt-qtplugin.new.28833 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "lxqt-qtplugin" Mon Feb 25 17:49:33 2019 rev:11 rq:670393 version:0.14.0 Changes: -------- --- /work/SRC/openSUSE:Factory/lxqt-qtplugin/lxqt-qtplugin.changes 2018-06-29 22:31:22.486256834 +0200 +++ /work/SRC/openSUSE:Factory/.lxqt-qtplugin.new.28833/lxqt-qtplugin.changes 2019-02-25 17:49:34.414803609 +0100 @@ -1,0 +2,13 @@ +Thu Jan 31 10:21:21 UTC 2019 - Michael Vetter <[email protected]> + +- Update to 0.14.0: + * Dynamically load libfm-qt on demand to create + the file dialog helper. + * Don't use automatic string conversions + * Improved cmake scripting + - Set cmake_minimum_required to 3.1.0 + - Removed locale compile definitons + - Removed the superfluous libfm-qt dependency +- Move translation from lxqt-l10n into package + +------------------------------------------------------------------- Old: ---- lxqt-qtplugin-0.13.0.tar.xz lxqt-qtplugin-0.13.0.tar.xz.asc New: ---- lxqt-qtplugin-0.14.0.tar.xz lxqt-qtplugin-0.14.0.tar.xz.asc ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ lxqt-qtplugin.spec ++++++ --- /var/tmp/diff_new_pack.bITt4q/_old 2019-02-25 17:49:35.438803189 +0100 +++ /var/tmp/diff_new_pack.bITt4q/_new 2019-02-25 17:49:35.438803189 +0100 @@ -1,7 +1,7 @@ # # spec file for package lxqt-qtplugin # -# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -12,12 +12,12 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# Please submit bugfixes or comments via https://bugs.opensuse.org/ # Name: lxqt-qtplugin -Version: 0.13.0 +Version: 0.14.0 Release: 0 Summary: LXQt platform integration plugin for Qt 5 License: LGPL-2.1-or-later @@ -26,12 +26,11 @@ Source: https://github.com/lxqt/%{name}/releases/download/%{version}/%{name}-%{version}.tar.xz Source1: https://github.com/lxqt/%{name}/releases/download/%{version}/%{name}-%{version}.tar.xz.asc Source2: %{name}.keyring -BuildRequires: cmake >= 3.0.2 +BuildRequires: cmake >= 3.1.0 BuildRequires: gcc-c++ BuildRequires: libQt5Gui-private-headers-devel BuildRequires: libexif-devel -BuildRequires: libfm-qt-devel >= 0.13.0 -BuildRequires: lxqt-build-tools-devel >= 0.5.0 +BuildRequires: lxqt-build-tools-devel >= 0.6.0 BuildRequires: pkgconfig BuildRequires: cmake(KF5WindowSystem) BuildRequires: pkgconfig(Qt5Gui) ++++++ lxqt-qtplugin-0.13.0.tar.xz -> lxqt-qtplugin-0.14.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lxqt-qtplugin-0.13.0/CHANGELOG new/lxqt-qtplugin-0.14.0/CHANGELOG --- old/lxqt-qtplugin-0.13.0/CHANGELOG 2018-05-21 20:41:42.000000000 +0200 +++ new/lxqt-qtplugin-0.14.0/CHANGELOG 2019-01-24 23:04:03.000000000 +0100 @@ -1,4 +1,16 @@ +lxqt-qtplugin-0.14.0 / 2019-01-25 +================================= + + * Bumped version to 0.14.0 + * Dynamically load libfm-qt on demand to create + the file dialog helper. + * Don't use automatic string conversions + * Improved cmake scripting + - Set cmake_minimum_required to 3.1.0 + - Removed locale compile definitons + - Removed the superfluous libfm-qt dependency + lxqt-qtplugin-0.13.0 / 2018-05-21 ================================= @@ -12,8 +24,8 @@ * Silent unused parameters warnings * Remember the view mode -0.12.0 / 2017-10-21 -=================== +lxqt-qtplugin-0.12.0 / 2017-10-21 +================================= * Release 0.12.0: Update changelog * Set an informal patch version @@ -41,16 +53,16 @@ * Bump year * Updates lxqt-build-tools required version -0.11.1 / 2016-12-11 -=================== +lxqt-qtplugin-0.11.1 / 2016-12-11 +================================= * Release 0.11.1: Update changelog * Use lxqt-build-tools * Use the new lxqt-build-tools package * Remove cpack (#14) -0.11.0 / 2016-09-24 -=================== +lxqt-qtplugin-0.11.0 / 2016-09-24 +================================= * Release 0.11.0: Add changelog * Add Qt5XdgIconLoader as dependency (#13) @@ -63,8 +75,8 @@ * Adds $XDG_DATA_HOME to the XdgIconThemePaths * Bump year in AUTHORS -0.10.0 / 2015-11-02 -=================== +lxqt-qtplugin-0.10.0 / 2015-11-02 +================================= * Remove unnecessary qDebug calls * Use markdown for README @@ -85,16 +97,16 @@ * Remove trailing whitespaces * removed debug (which makes every app too verbose) -0.9.0 / 2015-01-19 -================== +lxqt-qtplugin-0.9.0 / 2015-01-19 +================================ * Try to workaround bug #441 - All LXQt::Settings and QSettings file change monitoring stop working. * - Unify naming for a unique lxqt. No more suffixes * Qt5: Use XDG_DATA_DIR for themeHint::IconThemeSearchPaths * CMakeLists.txt cleanuop and drop Qt4 support -0.8.0 / 2014-07-18 -================== +lxqt-qtplugin-0.8.0 / 2014-07-18 +================================ * Apply the default application font on program startup. * Apply the new font to all apps correctly and fix lxde/lxde-qt bug #212 - Changing font or theme in lxqt-config-appearance has no effect. @@ -114,8 +126,8 @@ * Remove unnecessary debug messages. * Fix int-to-enum casting -0.7.0 / 2014-04-29 -================== +lxqt-qtplugin-0.7.0 / 2014-04-29 +================================ * Update AUTHORS and COPYING * Add CPack rules for creating tarball diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lxqt-qtplugin-0.13.0/CMakeLists.txt new/lxqt-qtplugin-0.14.0/CMakeLists.txt --- old/lxqt-qtplugin-0.13.0/CMakeLists.txt 2018-05-21 20:41:42.000000000 +0200 +++ new/lxqt-qtplugin-0.14.0/CMakeLists.txt 2019-01-24 23:04:03.000000000 +0100 @@ -1,32 +1,32 @@ -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) +cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR) +# CMP0000: Call the cmake_minimum_required() command at the beginning of the top-level +# CMakeLists.txt file even before calling the project() command. +# The cmake_minimum_required(VERSION) command implicitly invokes the cmake_policy(VERSION) +# command to specify that the current project code is written for the given range of CMake +# versions. project(lxqt-qtplugin) include(GNUInstallDirs) -set(LXQTBT_MINIMUM_VERSION "0.5.0") - set(CMAKE_AUTOMOC ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_POSITION_INDEPENDENT_CODE ON) -find_package(Qt5Widgets REQUIRED) -find_package(Qt5LinguistTools REQUIRED) -find_package(Qt5DBus REQUIRED) -find_package(dbusmenu-qt5 REQUIRED) +# Minimum Versions +set(LXQTBT_MINIMUM_VERSION "0.6.0") +set(QT_MINIMUM_VERSION "5.7.1") +set(QTXDG_MINIMUM_VERSION "3.3.0") + +find_package(Qt5DBus ${QT_MINIMUM_VERSION} REQUIRED) +find_package(Qt5LinguistTools ${QT_MINIMUM_VERSION} REQUIRED) +find_package(Qt5Widgets ${QT_MINIMUM_VERSION} REQUIRED) +find_package(Qt5XdgIconLoader ${QTXDG_MINIMUM_VERSION} REQUIRED) find_package(lxqt-build-tools ${LXQTBT_MINIMUM_VERSION} REQUIRED) -find_package(Qt5XdgIconLoader REQUIRED) +find_package(dbusmenu-qt5 REQUIRED) # Patch Version 0 -# for file dialog support -find_package(Qt5X11Extras REQUIRED) -find_package(fm-qt REQUIRED) - include(LXQtPreventInSourceBuilds) include(LXQtCompilerSettings NO_POLICY_SCOPE) -if(NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE Release) -endif() - add_subdirectory(src) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lxqt-qtplugin-0.13.0/src/CMakeLists.txt new/lxqt-qtplugin-0.14.0/src/CMakeLists.txt --- old/lxqt-qtplugin-0.13.0/src/CMakeLists.txt 2018-05-21 20:41:42.000000000 +0200 +++ new/lxqt-qtplugin-0.14.0/src/CMakeLists.txt 2019-01-24 23:04:03.000000000 +0100 @@ -6,7 +6,6 @@ set(qtlxqt_HDRS lxqtplatformtheme.h lxqtsystemtrayicon.h - lxqtfiledialoghelper.h statusnotifieritem/statusnotifieritem.h statusnotifieritem/dbustypes.h ) @@ -15,7 +14,6 @@ main.cpp lxqtplatformtheme.cpp lxqtsystemtrayicon.cpp - lxqtfiledialoghelper.cpp statusnotifieritem/statusnotifieritem.cpp statusnotifieritem/dbustypes.cpp ) @@ -31,6 +29,11 @@ target_compile_definitions(qtlxqt PRIVATE "QT_NO_FOREACH" + "QT_USE_QSTRINGBUILDER" + "QT_NO_CAST_FROM_ASCII" + "QT_NO_CAST_TO_ASCII" + "QT_NO_URL_CAST_FROM_STRING" + "QT_NO_CAST_FROM_BYTEARRAY" ) target_link_libraries(qtlxqt @@ -38,7 +41,6 @@ Qt5::DBus dbusmenu-qt5 Qt5XdgIconLoader - fm-qt ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lxqt-qtplugin-0.13.0/src/lxqtfiledialoghelper.cpp new/lxqt-qtplugin-0.14.0/src/lxqtfiledialoghelper.cpp --- old/lxqt-qtplugin-0.13.0/src/lxqtfiledialoghelper.cpp 2018-05-21 20:41:42.000000000 +0200 +++ new/lxqt-qtplugin-0.14.0/src/lxqtfiledialoghelper.cpp 1970-01-01 01:00:00.000000000 +0100 @@ -1,276 +0,0 @@ -#include "lxqtfiledialoghelper.h" - -#include <libfm-qt/libfmqt.h> -#include <libfm-qt/filedialog.h> - -#include <QWindow> -#include <QDebug> -#include <QTimer> -#include <QSettings> - -#include <memory> - -static std::unique_ptr<Fm::LibFmQt> libfmQtContext_; - -inline static const QString viewModeToString(Fm::FolderView::ViewMode value); -inline static Fm::FolderView::ViewMode viewModeFromString(const QString& str); - -LXQtFileDialogHelper::LXQtFileDialogHelper() { - if(!libfmQtContext_) { - // initialize libfm-qt only once - libfmQtContext_ = std::unique_ptr<Fm::LibFmQt>{new Fm::LibFmQt()}; - } - - // can only be used after libfm-qt initialization - dlg_ = std::unique_ptr<Fm::FileDialog>(new Fm::FileDialog()); - connect(dlg_.get(), &Fm::FileDialog::accepted, [this]() { - saveSettings(); - accept(); - }); - connect(dlg_.get(), &Fm::FileDialog::rejected, [this]() { - saveSettings(); - reject(); - }); - - connect(dlg_.get(), &Fm::FileDialog::fileSelected, this, &LXQtFileDialogHelper::fileSelected); - connect(dlg_.get(), &Fm::FileDialog::filesSelected, this, &LXQtFileDialogHelper::filesSelected); - connect(dlg_.get(), &Fm::FileDialog::currentChanged, this, &LXQtFileDialogHelper::currentChanged); - connect(dlg_.get(), &Fm::FileDialog::directoryEntered, this, &LXQtFileDialogHelper::directoryEntered); - connect(dlg_.get(), &Fm::FileDialog::filterSelected, this, &LXQtFileDialogHelper::filterSelected); -} - -LXQtFileDialogHelper::~LXQtFileDialogHelper() { -} - -void LXQtFileDialogHelper::exec() { - dlg_->exec(); -} - -bool LXQtFileDialogHelper::show(Qt::WindowFlags windowFlags, Qt::WindowModality windowModality, QWindow* parent) { - dlg_->setAttribute(Qt::WA_NativeWindow, true); // without this, sometimes windowHandle() will return nullptr - - dlg_->setWindowFlags(windowFlags); - dlg_->setWindowModality(windowModality); - - // Reference: KDE implementation - // https://github.com/KDE/plasma-integration/blob/master/src/platformtheme/kdeplatformfiledialoghelper.cpp - dlg_->windowHandle()->setTransientParent(parent); - - applyOptions(); - - loadSettings(); - // central positioning with respect to the parent window - if(parent && parent->isVisible()) { - dlg_->move(parent->x() + (parent->width() - dlg_->width()) / 2, - parent->y() + (parent->height() - dlg_->height()) / 2); - } - - // NOTE: the timer here is required as a workaround borrowed from KDE. Without this, the dialog UI will be blocked. - // QFileDialog calls our platform plugin to show our own native file dialog instead of showing its widget. - // However, it still creates a hidden dialog internally, and then make it modal. - // So user input from all other windows that are not the children of the QFileDialog widget will be blocked. - // This includes our own dialog. After the return of this show() method, QFileDialog creates its own window and - // then make it modal, which blocks our UI. The timer schedule a delayed popup of our file dialog, so we can - // show again after QFileDialog and override the modal state. Then our UI can be unblocked. - QTimer::singleShot(0, dlg_.get(), &QDialog::show); - dlg_->setFocus(); - return true; -} - -void LXQtFileDialogHelper::hide() { - dlg_->hide(); -} - -bool LXQtFileDialogHelper::defaultNameFilterDisables() const { - return false; -} - -void LXQtFileDialogHelper::setDirectory(const QUrl& directory) { - dlg_->setDirectory(directory); -} - -QUrl LXQtFileDialogHelper::directory() const { - return dlg_->directory(); -} - -void LXQtFileDialogHelper::selectFile(const QUrl& filename) { - dlg_->selectFile(filename); -} - -QList<QUrl> LXQtFileDialogHelper::selectedFiles() const { - return dlg_->selectedFiles(); -} - -void LXQtFileDialogHelper::setFilter() { - // FIXME: what's this? - // The gtk+ 3 file dialog helper in Qt5 update options in this method. - applyOptions(); -} - -void LXQtFileDialogHelper::selectNameFilter(const QString& filter) { - dlg_->selectNameFilter(filter); -} - -#if QT_VERSION >= QT_VERSION_CHECK(5, 9, 0) -QString LXQtFileDialogHelper::selectedMimeTypeFilter() const { - return dlg_->selectedMimeTypeFilter(); -} - -void LXQtFileDialogHelper::selectMimeTypeFilter(const QString& filter) { - dlg_->selectMimeTypeFilter(filter); -} -#endif - -QString LXQtFileDialogHelper::selectedNameFilter() const { - return dlg_->selectedNameFilter(); -} - -bool LXQtFileDialogHelper::isSupportedUrl(const QUrl& url) const { - return dlg_->isSupportedUrl(url); -} - -void LXQtFileDialogHelper::applyOptions() { - auto& opt = options(); - - // set title - if(opt->windowTitle().isEmpty()) { - dlg_->setWindowTitle(opt->acceptMode() == QFileDialogOptions::AcceptOpen ? tr("Open File") - : tr("Save File")); - } - else { - dlg_->setWindowTitle(opt->windowTitle()); - } - - dlg_->setFilter(opt->filter()); - dlg_->setFileMode(QFileDialog::FileMode(opt->fileMode())); - dlg_->setAcceptMode(QFileDialog::AcceptMode(opt->acceptMode())); // also sets a default label for accept button - // bool useDefaultNameFilters() const; - dlg_->setNameFilters(opt->nameFilters()); - if(!opt->mimeTypeFilters().empty()) { - dlg_->setMimeTypeFilters(opt->mimeTypeFilters()); - } - - dlg_->setDefaultSuffix(opt->defaultSuffix()); - // QStringList history() const; - - // explicitly set labels - for(int i = 0; i < QFileDialogOptions::DialogLabelCount; ++i) { - auto label = static_cast<QFileDialogOptions::DialogLabel>(i); - if(opt->isLabelExplicitlySet(label)) { - dlg_->setLabelText(static_cast<QFileDialog::DialogLabel>(label), opt->labelText(label)); - } - } - - auto url = opt->initialDirectory(); - if(url.isValid()) { - dlg_->setDirectory(url); - } - - -#if QT_VERSION >= QT_VERSION_CHECK(5, 9, 0) - auto filter = opt->initiallySelectedMimeTypeFilter(); - if(!filter.isEmpty()) { - selectMimeTypeFilter(filter); - } - else { - filter = opt->initiallySelectedNameFilter(); - if(!filter.isEmpty()) { - selectNameFilter(opt->initiallySelectedNameFilter()); - } - } -#else - auto filter = opt->initiallySelectedNameFilter(); - if(!filter.isEmpty()) { - selectNameFilter(filter); - } -#endif - - auto selectedFiles = opt->initiallySelectedFiles(); - for(const auto& selectedFile: selectedFiles) { - selectFile(selectedFile); - } - // QStringList supportedSchemes() const; -} - -static const QString viewModeToString(Fm::FolderView::ViewMode value) { - QString ret; - switch(value) { - case Fm::FolderView::DetailedListMode: - default: - ret = QLatin1String("Detailed"); - break; - case Fm::FolderView::CompactMode: - ret = QLatin1String("Compact"); - break; - case Fm::FolderView::IconMode: - ret = QLatin1String("Icon"); - break; - case Fm::FolderView::ThumbnailMode: - ret = QLatin1String("Thumbnail"); - break; - } - return ret; -} - -Fm::FolderView::ViewMode viewModeFromString(const QString& str) { - Fm::FolderView::ViewMode ret; - if(str == QLatin1String("Detailed")) { - ret = Fm::FolderView::DetailedListMode; - } - else if(str == QLatin1String("Compact")) { - ret = Fm::FolderView::CompactMode; - } - else if(str == QLatin1String("Icon")) { - ret = Fm::FolderView::IconMode; - } - else if(str == QLatin1String("Thumbnail")) { - ret = Fm::FolderView::ThumbnailMode; - } - else { - ret = Fm::FolderView::DetailedListMode; - } - return ret; -} - -void LXQtFileDialogHelper::loadSettings() { - QSettings settings(QSettings::UserScope, "lxqt", "filedialog"); - settings.beginGroup ("Sizes"); - dlg_->resize(settings.value("WindowSize", QSize(700, 500)).toSize()); - dlg_->setSplitterPos(settings.value("SplitterPos", 200).toInt()); - settings.endGroup(); - - settings.beginGroup ("View"); - dlg_->setViewMode(viewModeFromString(settings.value("Mode", "Detailed").toString())); - settings.endGroup(); -} - -void LXQtFileDialogHelper::saveSettings() { - QSettings settings(QSettings::UserScope, "lxqt", "filedialog"); - settings.beginGroup ("Sizes"); - QSize windowSize = dlg_->size(); - if(settings.value("WindowSize") != windowSize) { // no redundant write - settings.setValue("WindowSize", windowSize); - } - int splitterPos = dlg_->splitterPos(); - if(settings.value("SplitterPos") != splitterPos) { - settings.setValue("SplitterPos", splitterPos); - } - settings.endGroup(); - - settings.beginGroup ("View"); - QString mode = viewModeToString(dlg_->viewMode()); - if(settings.value("Mode") != mode) { - settings.setValue("Mode", mode); - } - settings.endGroup(); -} - -/* -FileDialogPlugin::FileDialogPlugin() { - -} - -QPlatformFileDialogHelper *FileDialogPlugin::createHelper() { - return new LXQtFileDialogHelper(); -} -*/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lxqt-qtplugin-0.13.0/src/lxqtfiledialoghelper.h new/lxqt-qtplugin-0.14.0/src/lxqtfiledialoghelper.h --- old/lxqt-qtplugin-0.13.0/src/lxqtfiledialoghelper.h 2018-05-21 20:41:42.000000000 +0200 +++ new/lxqt-qtplugin-0.14.0/src/lxqtfiledialoghelper.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,50 +0,0 @@ -#ifndef LXQTFILEDIALOGHELPER_H -#define LXQTFILEDIALOGHELPER_H - -#include <qpa/qplatformdialoghelper.h> // this private header is subject to changes -#include <memory> - -namespace Fm { -class FileDialog; -} - -class Q_GUI_EXPORT LXQtFileDialogHelper : public QPlatformFileDialogHelper { - Q_OBJECT - -public: - LXQtFileDialogHelper(); - - virtual ~LXQtFileDialogHelper(); - - // QPlatformDialogHelper - void exec() override; - bool show(Qt::WindowFlags windowFlags, Qt::WindowModality windowModality, QWindow *parent) override; - void hide() override; - - // QPlatformFileDialogHelper - bool defaultNameFilterDisables() const override; - void setDirectory(const QUrl &directory) override; - QUrl directory() const override; - void selectFile(const QUrl &filename) override; - QList<QUrl> selectedFiles() const override; - void setFilter() override; - void selectNameFilter(const QString &filter) override; -#if QT_VERSION >= QT_VERSION_CHECK(5, 9, 0) - QString selectedMimeTypeFilter() const override; - void selectMimeTypeFilter(const QString &filter) override; -#endif - QString selectedNameFilter() const override; - - bool isSupportedUrl(const QUrl &url) const override; - -private: - void applyOptions(); - void loadSettings(); - void saveSettings(); - -private: - std::unique_ptr<Fm::FileDialog> dlg_; -}; - - -#endif // LXQTFILEDIALOGHELPER_H diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lxqt-qtplugin-0.13.0/src/lxqtplatformtheme.cpp new/lxqt-qtplugin-0.14.0/src/lxqtplatformtheme.cpp --- old/lxqt-qtplugin-0.13.0/src/lxqtplatformtheme.cpp 2018-05-21 20:41:42.000000000 +0200 +++ new/lxqt-qtplugin-0.14.0/src/lxqtplatformtheme.cpp 2019-01-24 23:04:03.000000000 +0100 @@ -45,8 +45,14 @@ #include <QFileSystemWatcher> #include <QStyle> #include <private/xdgiconloader/xdgiconloader_p.h> +#include <QLibrary> + + +// Function to create a new Fm::FileDialogHelper object. +// This is dynamically loaded at runtime on demand from libfm-qt. +typedef QPlatformDialogHelper* (*CreateFileDialogHelperFunc)(); +static CreateFileDialogHelperFunc createFileDialogHelper = nullptr; -#include "lxqtfiledialoghelper.h" LXQtPlatformTheme::LXQtPlatformTheme(): iconFollowColorScheme_(true) @@ -87,15 +93,15 @@ // as a fallback if a key is missing from the user config file ~/.config/lxqt/lxqt.conf. // So we can customize the default values in /etc/xdg/lxqt/lxqt.conf and does // not necessarily to hard code the default values here. - QSettings settings(QSettings::UserScope, "lxqt", "lxqt"); + QSettings settings(QSettings::UserScope, QLatin1String("lxqt"), QLatin1String("lxqt")); settingsFile_ = settings.fileName(); // icon theme - iconTheme_ = settings.value("icon_theme", "oxygen").toString(); - iconFollowColorScheme_ = settings.value("icon_follow_color_scheme", iconFollowColorScheme_).toBool(); + iconTheme_ = settings.value(QLatin1String("icon_theme"), QLatin1String("oxygen")).toString(); + iconFollowColorScheme_ = settings.value(QLatin1String("icon_follow_color_scheme"), iconFollowColorScheme_).toBool(); // read other widget related settings form LxQt settings. - QByteArray tb_style = settings.value("tool_button_style").toByteArray(); + QByteArray tb_style = settings.value(QLatin1String("tool_button_style")).toByteArray(); // convert toolbar style name to value QMetaEnum me = QToolBar::staticMetaObject.property(QToolBar::staticMetaObject.indexOfProperty("toolButtonStyle")).enumerator(); int value = me.keyToValue(tb_style.constData()); @@ -105,7 +111,7 @@ toolButtonStyle_ = static_cast<Qt::ToolButtonStyle>(value); // single click activation - singleClickActivate_ = settings.value("single_click_activate").toBool(); + singleClickActivate_ = settings.value(QLatin1String("single_click_activate")).toBool(); // load Qt settings settings.beginGroup(QLatin1String("Qt")); @@ -222,8 +228,32 @@ QPlatformDialogHelper *LXQtPlatformTheme::createPlatformDialogHelper(DialogType type) const { if(type == FileDialog && qobject_cast<QApplication *>(QCoreApplication::instance())) { // QML may not have qApp - // use our own file dialog - return new LXQtFileDialogHelper(); + // use our own file dialog provided by libfm + + // When a process has this environment set, that means glib event loop integration is disabled. + // In this case, libfm-qt just won't work. So let's disable the file dialog helper and return nullptr. + if(QString::fromLocal8Bit(qgetenv("QT_NO_GLIB")) == QLatin1String("1")) { + return nullptr; + } + + // The createFileDialogHelper() method is dynamically loaded from libfm-qt on demand + if(createFileDialogHelper == nullptr) { + // try to dynamically load libfm-qt.so + QLibrary libfmQtLibrary{QLatin1String("libfm-qt")}; + libfmQtLibrary.load(); + if(!libfmQtLibrary.isLoaded()) { + return nullptr; + } + + // try to resolve the symbol to get the function pointer + createFileDialogHelper = reinterpret_cast<CreateFileDialogHelperFunc>(libfmQtLibrary.resolve("createFileDialogHelper")); + if(!createFileDialogHelper) { + return nullptr; + } + } + + // create a new file dialog helper provided by libfm + return createFileDialogHelper(); } return nullptr; } @@ -277,7 +307,7 @@ case SystemIconThemeName: return iconTheme_; case SystemIconFallbackThemeName: - return "hicolor"; + return QLatin1String("hicolor"); case IconThemeSearchPaths: return xdgIconThemePaths(); case StyleNames: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lxqt-qtplugin-0.13.0/src/lxqtsystemtrayicon.cpp new/lxqt-qtplugin-0.14.0/src/lxqtsystemtrayicon.cpp --- old/lxqt-qtplugin-0.13.0/src/lxqtsystemtrayicon.cpp 2018-05-21 20:41:42.000000000 +0200 +++ new/lxqt-qtplugin-0.14.0/src/lxqtsystemtrayicon.cpp 2019-01-24 23:04:03.000000000 +0100 @@ -290,7 +290,7 @@ QPlatformMenuItem *menuItem = menu->createMenuItem(); menuItem->setParent(menu); menuItem->setText(tr("Quit")); - menuItem->setIcon(QIcon::fromTheme("application-exit")); + menuItem->setIcon(QIcon::fromTheme(QLatin1String("application-exit"))); connect(menuItem, &QPlatformMenuItem::activated, qApp, &QApplication::quit); menu->insertMenuItem(menuItem, nullptr); updateMenu(menu); @@ -369,9 +369,9 @@ bool LXQtSystemTrayIcon::isSystemTrayAvailable() const { - QDBusInterface systrayHost("org.kde.StatusNotifierWatcher", - "/StatusNotifierWatcher", - "org.kde.StatusNotifierWatcher"); + QDBusInterface systrayHost(QLatin1String("org.kde.StatusNotifierWatcher"), + QLatin1String("/StatusNotifierWatcher"), + QLatin1String("org.kde.StatusNotifierWatcher")); return systrayHost.isValid() && systrayHost.property("IsStatusNotifierHostRegistered").toBool(); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lxqt-qtplugin-0.13.0/src/statusnotifieritem/statusnotifieritem.cpp new/lxqt-qtplugin-0.14.0/src/statusnotifieritem/statusnotifieritem.cpp --- old/lxqt-qtplugin-0.13.0/src/statusnotifieritem/statusnotifieritem.cpp 2018-05-21 20:41:42.000000000 +0200 +++ new/lxqt-qtplugin-0.14.0/src/statusnotifieritem/statusnotifieritem.cpp 2019-01-24 23:04:03.000000000 +0100 @@ -36,12 +36,12 @@ StatusNotifierItem::StatusNotifierItem(QString id, QObject *parent) : QObject(parent), mAdaptor(new StatusNotifierItemAdaptor(this)), - mService(QString("org.freedesktop.StatusNotifierItem-%1-%2") + mService(QString::fromLatin1("org.freedesktop.StatusNotifierItem-%1-%2") .arg(QCoreApplication::applicationPid()) .arg(++mServiceCounter)), mId(id), - mTitle("Test"), - mStatus("Active"), + mTitle(QLatin1String("Test")), + mStatus(QLatin1String("Active")), mMenu(nullptr), mMenuExporter(nullptr), mSessionBus(QDBusConnection::connectToBus(QDBusConnection::SessionBus, mService)) @@ -58,7 +58,7 @@ registerToHost(); // monitor the watcher service in case the host restarts - QDBusServiceWatcher *watcher = new QDBusServiceWatcher("org.kde.StatusNotifierWatcher", + QDBusServiceWatcher *watcher = new QDBusServiceWatcher(QLatin1String("org.kde.StatusNotifierWatcher"), mSessionBus, QDBusServiceWatcher::WatchForOwnerChange, this); @@ -75,11 +75,11 @@ void StatusNotifierItem::registerToHost() { - QDBusInterface interface("org.kde.StatusNotifierWatcher", - "/StatusNotifierWatcher", - "org.kde.StatusNotifierWatcher", + QDBusInterface interface(QLatin1String("org.kde.StatusNotifierWatcher"), + QLatin1String("/StatusNotifierWatcher"), + QLatin1String("org.kde.StatusNotifierWatcher"), mSessionBus); - interface.asyncCall("RegisterStatusNotifierItem", mService); + interface.asyncCall(QLatin1String("RegisterStatusNotifierItem"), mService); } void StatusNotifierItem::onServiceOwnerChanged(const QString& service, const QString& oldOwner, @@ -230,7 +230,7 @@ } mMenu = menu; - setMenuPath("/MenuBar"); + setMenuPath(QLatin1String("/MenuBar")); //Note: we need to destroy menu exporter before creating new one -> to free the DBus object path for new menu delete mMenuExporter; if (nullptr != mMenu) @@ -242,16 +242,16 @@ void StatusNotifierItem::Activate(int x, int y) { - if (mStatus == "NeedsAttention") - mStatus = "Active"; + if (mStatus == QLatin1String("NeedsAttention")) + mStatus = QLatin1String("Active"); Q_EMIT activateRequested(QPoint(x, y)); } void StatusNotifierItem::SecondaryActivate(int x, int y) { - if (mStatus == "NeedsAttention") - mStatus = "Active"; + if (mStatus == QLatin1String("NeedsAttention")) + mStatus = QLatin1String("Active"); Q_EMIT secondaryActivateRequested(QPoint(x, y)); } @@ -270,7 +270,7 @@ void StatusNotifierItem::Scroll(int delta, const QString &orientation) { Qt::Orientation orient = Qt::Vertical; - if (orientation.toLower() == "horizontal") + if (orientation.toLower() == QLatin1String("horizontal")) orient = Qt::Horizontal; Q_EMIT scrollRequested(delta, orient); @@ -279,9 +279,9 @@ void StatusNotifierItem::showMessage(const QString& title, const QString& msg, const QString& iconName, int secs) { - QDBusInterface interface("org.freedesktop.Notifications", "/org/freedesktop/Notifications", - "org.freedesktop.Notifications", mSessionBus); - interface.call("Notify", mTitle, (uint) 0, iconName, title, + QDBusInterface interface(QLatin1String("org.freedesktop.Notifications"), QLatin1String("/org/freedesktop/Notifications"), + QLatin1String("org.freedesktop.Notifications"), mSessionBus); + interface.call(QLatin1String("Notify"), mTitle, (uint) 0, iconName, title, msg, QStringList(), QVariantMap(), secs); }
