Hello community,
here is the log from the commit of package lxqt-qtplugin for openSUSE:Factory checked in at 2017-10-24 22:23:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/lxqt-qtplugin (Old)
and /work/SRC/openSUSE:Factory/.lxqt-qtplugin.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "lxqt-qtplugin"
Tue Oct 24 22:23:13 2017 rev:9 rq:535980 version:0.12.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/lxqt-qtplugin/lxqt-qtplugin.changes 2017-03-13 15:33:43.892173117 +0100
+++ /work/SRC/openSUSE:Factory/.lxqt-qtplugin.new/lxqt-qtplugin.changes 2017-10-24 22:23:14.288805887 +0200
@@ -1,0 +2,29 @@
+Mon Oct 23 11:27:07 UTC 2017 - mvetter@suse.com
+
+- Update to 0.12.0:
+ * Set an informal patch version
+ * Don't export github templates
+ * Flag unused vars in onServiceOwnerChanged
+ * Fix missing variable declaration
+ * Handle QML (as @PCMan suggested)
+ * Use mime functions added by @PCMan
+ * Loading and saving window/splitter size
+ * Central positioning with respect to parent
+ * Set window title correctly
+ * Qt version conditions
+ * Just made it compilable
+ * Handle mime-type filters for file dialog. Set custom file dialog labels.
+ * Update options properly.
+ * Implement a basic file dialog helper using libfm-qt's Fm::FileDialog.
+ * Avoid using Qt-specific keywords such as signal/slot and foreach. Instead, use macros.
+ * LXQtPlatformTheme: Make Qt use default palette (#22)
+ * LXQtPlatformTheme: Add icon FollowColorScheme config (#21)
+ * Prevent a possible C++11 range for detach (#20)
+ * Use the CMake MODULE library type.
+ * LXQtPlatformTheme: Propagate wheelScrollLines
+ * LXQtPlatformTheme: Do not provide own palette
+ * Fix multiple StatusNotifierItems.
+ * Bump year
+ * Updates lxqt-build-tools required version
+
+-------------------------------------------------------------------
Old:
----
lxqt-qtplugin-0.11.1.tar.xz
lxqt-qtplugin-0.11.1.tar.xz.asc
New:
----
lxqt-qtplugin-0.12.0.tar.xz
lxqt-qtplugin-0.12.0.tar.xz.asc
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ lxqt-qtplugin.spec ++++++
--- /var/tmp/diff_new_pack.RkS1wk/_old 2017-10-24 22:23:15.008772231 +0200
+++ /var/tmp/diff_new_pack.RkS1wk/_new 2017-10-24 22:23:15.008772231 +0200
@@ -17,14 +17,14 @@
Name: lxqt-qtplugin
-Version: 0.11.1
+Version: 0.12.0
Release: 0
Summary: LXQt platform integration plugin for Qt 5
License: LGPL-2.1+
Group: System/GUI/LXQt
Url: http://www.lxqt.org
-Source0: http://downloads.lxqt.org/%{name}/%{version}/%{name}-%{version}.tar.xz
-Source1: http://downloads.lxqt.org/%{name}/%{version}/%{name}-%{version}.tar.xz.asc
+Source: https://github.com/lxde/%{name}/releases/download/%{version}/%{name}-%{version}.tar.xz
+Source1: https://github.com/lxde/%{name}/releases/download/%{version}/%{name}-%{version}.tar.xz.asc
Source2: %{name}.keyring
BuildRequires: cmake >= 3.0.2
BuildRequires: gcc-c++
@@ -36,6 +36,9 @@
BuildRequires: pkgconfig(lxqt) >= %{version}
BuildRequires: pkgconfig(dbusmenu-qt5)
BuildRequires: pkgconfig(Qt5XdgIconLoader)
+BuildRequires: pkgconfig(Qt5X11Extras)
+BuildRequires: libfm-qt-devel
+BuildRequires: libexif-devel
%if 0%{?fedora_version}
%requires_eq qt5-qtbase-gui
%else
++++++ lxqt-qtplugin-0.11.1.tar.xz -> lxqt-qtplugin-0.12.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lxqt-qtplugin-0.11.1/AUTHORS new/lxqt-qtplugin-0.12.0/AUTHORS
--- old/lxqt-qtplugin-0.11.1/AUTHORS 2016-12-11 01:52:27.000000000 +0100
+++ new/lxqt-qtplugin-0.12.0/AUTHORS 2017-10-21 21:34:23.000000000 +0200
@@ -3,7 +3,7 @@
Hong Jen Yee (PCMan)
Copyright:
- Copyright (c) 2013-2016 LXQt team
+ Copyright (c) 2013-2017 LXQt team
License: LGPL-2.1+
The full text of the licenses can be found in the 'COPYING' file.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lxqt-qtplugin-0.11.1/CHANGELOG new/lxqt-qtplugin-0.12.0/CHANGELOG
--- old/lxqt-qtplugin-0.11.1/CHANGELOG 2016-12-11 01:52:27.000000000 +0100
+++ new/lxqt-qtplugin-0.12.0/CHANGELOG 2017-10-21 21:34:23.000000000 +0200
@@ -1,7 +1,36 @@
-lxqt-qtplugin-0.11.1 / 2016-12-11
+lxqt-qtplugin-0.12.0 / 2017-10-21
=================================
+ * Set an informal patch version
+ * Don't export github templates
+ * Flag unused vars in onServiceOwnerChanged
+ * Fix missing variable declaration
+ * Handle QML (as @PCMan suggested)
+ * Use mime functions added by @PCMan
+ * Loading and saving window/splitter size
+ * Central positioning with respect to parent
+ * Set window title correctly
+ * Qt version conditions
+ * Just made it compilable
+ * Handle mime-type filters for file dialog. Set custom file dialog labels.
+ * Update options properly.
+ * Implement a basic file dialog helper using libfm-qt's Fm::FileDialog.
+ * Avoid using Qt-specific keywords such as signal/slot and foreach. Instead, use macros.
+ * LXQtPlatformTheme: Make Qt use default palette (#22)
+ * LXQtPlatformTheme: Add icon FollowColorScheme config (#21)
+ * Prevent a possible C++11 range for detach (#20)
+ * Use the CMake MODULE library type.
+ * LXQtPlatformTheme: Propagate wheelScrollLines
+ * LXQtPlatformTheme: Do not provide own palette
+ * Fix multiple StatusNotifierItems.
+ * Bump year
+ * Updates lxqt-build-tools required version
+
+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)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lxqt-qtplugin-0.11.1/CMakeLists.txt new/lxqt-qtplugin-0.12.0/CMakeLists.txt
--- old/lxqt-qtplugin-0.11.1/CMakeLists.txt 2016-12-11 01:52:27.000000000 +0100
+++ new/lxqt-qtplugin-0.12.0/CMakeLists.txt 2017-10-21 21:34:23.000000000 +0200
@@ -3,18 +3,24 @@
include(GNUInstallDirs)
-set(LXQTBT_MINIMUM_VERSION "0.1.0")
+set(LXQTBT_MINIMUM_VERSION "0.4.0")
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
-find_package(Qt5Widgets REQUIRED QUIET)
-find_package(Qt5LinguistTools REQUIRED QUIET)
-find_package(Qt5DBus REQUIRED QUIET)
-find_package(dbusmenu-qt5 REQUIRED QUIET)
+find_package(Qt5Widgets REQUIRED)
+find_package(Qt5LinguistTools REQUIRED)
+find_package(Qt5DBus REQUIRED)
+find_package(dbusmenu-qt5 REQUIRED)
find_package(lxqt-build-tools ${LXQTBT_MINIMUM_VERSION} REQUIRED)
-find_package(Qt5XdgIconLoader REQUIRED QUIET)
+find_package(Qt5XdgIconLoader REQUIRED)
+
+# Patch Version 0
+
+# for file dialog support
+find_package(Qt5X11Extras REQUIRED)
+find_package(fm-qt REQUIRED)
include(LXQtCompilerSettings NO_POLICY_SCOPE)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lxqt-qtplugin-0.11.1/src/CMakeLists.txt new/lxqt-qtplugin-0.12.0/src/CMakeLists.txt
--- old/lxqt-qtplugin-0.11.1/src/CMakeLists.txt 2016-12-11 01:52:27.000000000 +0100
+++ new/lxqt-qtplugin-0.12.0/src/CMakeLists.txt 2017-10-21 21:34:23.000000000 +0200
@@ -6,6 +6,7 @@
set(qtlxqt_HDRS
lxqtplatformtheme.h
lxqtsystemtrayicon.h
+ lxqtfiledialoghelper.h
statusnotifieritem/statusnotifieritem.h
statusnotifieritem/dbustypes.h
)
@@ -14,6 +15,7 @@
main.cpp
lxqtplatformtheme.cpp
lxqtsystemtrayicon.cpp
+ lxqtfiledialoghelper.cpp
statusnotifieritem/statusnotifieritem.cpp
statusnotifieritem/dbustypes.cpp
)
@@ -24,15 +26,17 @@
StatusNotifierItem
)
-add_library(qtlxqt SHARED ${qtlxqt_HDRS} ${qtlxqt_SRCS})
+add_library(qtlxqt MODULE ${qtlxqt_HDRS} ${qtlxqt_SRCS})
target_link_libraries(qtlxqt
Qt5::Widgets
Qt5::DBus
dbusmenu-qt5
Qt5XdgIconLoader
+ fm-qt
)
+
# there is no standard way to get the plugin dir of Qt5 with cmake
# The best way is get_target_property(QT_PLUGINS_DIR Qt5::QGtk2ThemePlugin LOCATION).
# This directly returns the platformthemes dir. However, this does not work
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lxqt-qtplugin-0.11.1/src/lxqtfiledialoghelper.cpp new/lxqt-qtplugin-0.12.0/src/lxqtfiledialoghelper.cpp
--- old/lxqt-qtplugin-0.11.1/src/lxqtfiledialoghelper.cpp 1970-01-01 01:00:00.000000000 +0100
+++ new/lxqt-qtplugin-0.12.0/src/lxqtfiledialoghelper.cpp 2017-10-21 21:34:23.000000000 +0200
@@ -0,0 +1,224 @@
+#include "lxqtfiledialoghelper.h"
+
+#include
+#include
+
+#include <QWindow>
+#include <QDebug>
+#include <QTimer>
+#include <QSettings>
+
+#include <memory>
+
+static std::unique_ptrFm::LibFmQt libfmQtContext_;
+
+LXQtFileDialogHelper::LXQtFileDialogHelper() {
+ if(!libfmQtContext_) {
+ // initialize libfm-qt only once
+ libfmQtContext_ = std::unique_ptrFm::LibFmQt{new Fm::LibFmQt()};
+ }
+
+ // can only be used after libfm-qt initialization
+ dlg_ = std::unique_ptrFm::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/kdep...
+ dlg_->windowHandle()->setTransientParent(parent);
+
+ 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);
+ }
+
+ applyOptions();
+
+ // 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_->setViewMode(opt->viewMode() == QFileDialogOptions::Detail ? Fm::FolderView::DetailedListMode
+ : Fm::FolderView::CompactMode);
+ 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_castQFileDialogOptions::DialogLabel(i);
+ if(opt->isLabelExplicitlySet(label)) {
+ dlg_->setLabelText(static_castQFileDialog::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;
+}
+
+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();
+}
+
+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();
+}
+
+/*
+FileDialogPlugin::FileDialogPlugin() {
+
+}
+
+QPlatformFileDialogHelper *FileDialogPlugin::createHelper() {
+ return new LXQtFileDialogHelper();
+}
+*/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lxqt-qtplugin-0.11.1/src/lxqtfiledialoghelper.h new/lxqt-qtplugin-0.12.0/src/lxqtfiledialoghelper.h
--- old/lxqt-qtplugin-0.11.1/src/lxqtfiledialoghelper.h 1970-01-01 01:00:00.000000000 +0100
+++ new/lxqt-qtplugin-0.12.0/src/lxqtfiledialoghelper.h 2017-10-21 21:34:23.000000000 +0200
@@ -0,0 +1,50 @@
+#ifndef LXQTFILEDIALOGHELPER_H
+#define LXQTFILEDIALOGHELPER_H
+
+#include // 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_ptrFm::FileDialog dlg_;
+};
+
+
+#endif // LXQTFILEDIALOGHELPER_H
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lxqt-qtplugin-0.11.1/src/lxqtplatformtheme.cpp new/lxqt-qtplugin-0.12.0/src/lxqtplatformtheme.cpp
--- old/lxqt-qtplugin-0.11.1/src/lxqtplatformtheme.cpp 2016-12-11 01:52:27.000000000 +0100
+++ new/lxqt-qtplugin-0.12.0/src/lxqtplatformtheme.cpp 2017-10-21 21:34:23.000000000 +0200
@@ -46,8 +46,11 @@
#include <QStyle>
#include
+#include "lxqtfiledialoghelper.h"
+
LXQtPlatformTheme::LXQtPlatformTheme():
- settingsWatcher_(NULL)
+ iconFollowColorScheme_(true)
+ , settingsWatcher_(NULL)
{
// When the plugin is loaded, it seems that the app is not yet running and
// QThread environment is not completely set up. So creating filesystem watcher
@@ -80,6 +83,7 @@
// icon theme
iconTheme_ = settings.value("icon_theme", "oxygen").toString();
+ iconFollowColorScheme_ = settings.value("icon_follow_color_scheme", iconFollowColorScheme_).toBool();
// read other widget related settings form LxQt settings.
QByteArray tb_style = settings.value("tool_button_style").toByteArray();
@@ -164,6 +168,7 @@
if(iconTheme_ != oldIconTheme) { // the icon theme is changed
XdgIconLoader::instance()->updateSystemTheme(); // this is a private internal API of Qt5.
}
+ XdgIconLoader::instance()->setFollowColorScheme(iconFollowColorScheme_);
// if font is changed
if(oldFont != fontStr_ || oldFixedFont != fixedFontStr_){
@@ -184,6 +189,8 @@
QApplication::setFont(font_);
}
+ QApplication::setWheelScrollLines(wheelScrollLines_.toInt());
+
// emit a ThemeChange event to all widgets
Q_FOREACH(QWidget* widget, QApplication::allWidgets()) {
// Qt5 added a QEvent::ThemeChange event.
@@ -193,21 +200,26 @@
}
bool LXQtPlatformTheme::usePlatformNativeDialog(DialogType type) const {
+ if(type == FileDialog
+ && qobject_cast(QCoreApplication::instance())) { // QML may not have qApp
+ // use our own file dialog
+ return true;
+ }
return false;
}
-#if 0
+
QPlatformDialogHelper *LXQtPlatformTheme::createPlatformDialogHelper(DialogType type) const {
- return 0;
+ if(type == FileDialog
+ && qobject_cast(QCoreApplication::instance())) { // QML may not have qApp
+ // use our own file dialog
+ return new LXQtFileDialogHelper();
+ }
+ return nullptr;
}
-#endif
const QPalette *LXQtPlatformTheme::palette(Palette type) const {
-
- if (type == QPlatformTheme::SystemPalette)
- // the default constructor uses the default palette
- return new QPalette;
- return QPlatformTheme::palette(type);
+ return nullptr;
}
const QFont *LXQtPlatformTheme::font(Font type) const {
@@ -288,6 +300,9 @@
break;
case MouseDoubleClickDistance:
break;
+ case WheelScrollLines:
+ return wheelScrollLines_;
+ break;
default:
break;
}
@@ -320,9 +335,9 @@
xdgDataDirs = QLatin1String("/usr/local/share/:/usr/share/");
xdgDirs.append(xdgDataDirs);
- foreach (const QString &s, xdgDirs) {
+ for (const auto &s: xdgDirs) {
const QStringList r = s.split(QLatin1Char(':'), QString::SkipEmptyParts);
- foreach (const QString &xdgDir, r) {
+ for (const auto& xdgDir: r) {
const QFileInfo xdgIconsDir(xdgDir + QStringLiteral("/icons"));
if (xdgIconsDir.isDir())
paths.append(xdgIconsDir.absoluteFilePath());
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lxqt-qtplugin-0.11.1/src/lxqtplatformtheme.h new/lxqt-qtplugin-0.12.0/src/lxqtplatformtheme.h
--- old/lxqt-qtplugin-0.11.1/src/lxqtplatformtheme.h 2016-12-11 01:52:27.000000000 +0100
+++ new/lxqt-qtplugin-0.12.0/src/lxqtplatformtheme.h 2017-10-21 21:34:23.000000000 +0200
@@ -48,7 +48,7 @@
// virtual QPlatformMenuBar* createPlatformMenuBar() const;
virtual bool usePlatformNativeDialog(DialogType type) const;
- // virtual QPlatformDialogHelper *createPlatformDialogHelper(DialogType type) const;
+ virtual QPlatformDialogHelper *createPlatformDialogHelper(DialogType type) const;
virtual const QPalette *palette(Palette type = SystemPalette) const;
@@ -90,6 +90,7 @@
QString iconTheme_;
Qt::ToolButtonStyle toolButtonStyle_;
bool singleClickActivate_;
+ bool iconFollowColorScheme_;
// other Qt settings
// widget
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lxqt-qtplugin-0.11.1/src/lxqtsystemtrayicon.cpp new/lxqt-qtplugin-0.12.0/src/lxqtsystemtrayicon.cpp
--- old/lxqt-qtplugin-0.11.1/src/lxqtsystemtrayicon.cpp 2016-12-11 01:52:27.000000000 +0100
+++ new/lxqt-qtplugin-0.12.0/src/lxqtsystemtrayicon.cpp 2017-10-21 21:34:23.000000000 +0200
@@ -297,12 +297,12 @@
connect(mSni, &StatusNotifierItem::activateRequested, [this](const QPoint &)
{
- emit activated(QPlatformSystemTrayIcon::Trigger);
+ Q_EMIT activated(QPlatformSystemTrayIcon::Trigger);
});
connect(mSni, &StatusNotifierItem::secondaryActivateRequested, [this](const QPoint &)
{
- emit activated(QPlatformSystemTrayIcon::MiddleClick);
+ Q_EMIT activated(QPlatformSystemTrayIcon::MiddleClick);
});
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lxqt-qtplugin-0.11.1/src/statusnotifieritem/statusnotifieritem.cpp new/lxqt-qtplugin-0.12.0/src/statusnotifieritem/statusnotifieritem.cpp
--- old/lxqt-qtplugin-0.11.1/src/statusnotifieritem/statusnotifieritem.cpp 2016-12-11 01:52:27.000000000 +0100
+++ new/lxqt-qtplugin-0.12.0/src/statusnotifieritem/statusnotifieritem.cpp 2017-10-21 21:34:23.000000000 +0200
@@ -43,17 +43,23 @@
mTitle("Test"),
mStatus("Active"),
mMenu(nullptr),
- mMenuExporter(nullptr)
+ mMenuExporter(nullptr),
+ mSessionBus(QDBusConnection::connectToBus(QDBusConnection::SessionBus, mService))
{
+ // Separate DBus connection to the session bus is created, because QDbus does not provide
+ // a way to register different objects for different services with the same paths.
+ // For status notifiers we need different /StatusNotifierItem for each service.
+
// register service
- QDBusConnection::sessionBus().registerService(mService);
- QDBusConnection::sessionBus().registerObject("/StatusNotifierItem", this);
+
+ mSessionBus.registerService(mService);
+ mSessionBus.registerObject(QLatin1String("/StatusNotifierItem"), this);
registerToHost();
// monitor the watcher service in case the host restarts
QDBusServiceWatcher *watcher = new QDBusServiceWatcher("org.kde.StatusNotifierWatcher",
- QDBusConnection::sessionBus(),
+ mSessionBus,
QDBusServiceWatcher::WatchForOwnerChange,
this);
connect(watcher, &QDBusServiceWatcher::serviceOwnerChanged,
@@ -62,9 +68,9 @@
StatusNotifierItem::~StatusNotifierItem()
{
- QDBusConnection::sessionBus().unregisterObject("/StatusNotifierItem");
- QDBusConnection::sessionBus().unregisterService(mService);
- QDBusConnection::sessionBus().disconnectFromBus(mService);
+ mSessionBus.unregisterObject(QLatin1String("/StatusNotifierItem"));
+ mSessionBus.unregisterService(mService);
+ QDBusConnection::disconnectFromBus(mService);
}
void StatusNotifierItem::registerToHost()
@@ -72,13 +78,16 @@
QDBusInterface interface("org.kde.StatusNotifierWatcher",
"/StatusNotifierWatcher",
"org.kde.StatusNotifierWatcher",
- QDBusConnection::sessionBus());
+ mSessionBus);
interface.asyncCall("RegisterStatusNotifierItem", mService);
}
void StatusNotifierItem::onServiceOwnerChanged(const QString& service, const QString& oldOwner,
const QString& newOwner)
{
+ Q_UNUSED(service);
+ Q_UNUSED(oldOwner);
+
if (!newOwner.isEmpty())
registerToHost();
}
@@ -95,7 +104,7 @@
return;
mTitle = title;
- emit mAdaptor->NewTitle();
+ Q_EMIT mAdaptor->NewTitle();
}
void StatusNotifierItem::setStatus(const QString &status)
@@ -104,7 +113,7 @@
return;
mStatus = status;
- emit mAdaptor->NewStatus(mStatus);
+ Q_EMIT mAdaptor->NewStatus(mStatus);
}
void StatusNotifierItem::setMenuPath(const QString& path)
@@ -118,7 +127,7 @@
return;
mIconName = name;
- emit mAdaptor->NewIcon();
+ Q_EMIT mAdaptor->NewIcon();
}
void StatusNotifierItem::setIconByPixmap(const QIcon &icon)
@@ -129,7 +138,7 @@
mIconCacheKey = icon.cacheKey();
mIcon = iconToPixmapList(icon);
mIconName.clear();
- emit mAdaptor->NewIcon();
+ Q_EMIT mAdaptor->NewIcon();
}
void StatusNotifierItem::setOverlayIconByName(const QString &name)
@@ -138,7 +147,7 @@
return;
mOverlayIconName = name;
- emit mAdaptor->NewOverlayIcon();
+ Q_EMIT mAdaptor->NewOverlayIcon();
}
void StatusNotifierItem::setOverlayIconByPixmap(const QIcon &icon)
@@ -149,7 +158,7 @@
mOverlayIconCacheKey = icon.cacheKey();
mOverlayIcon = iconToPixmapList(icon);
mOverlayIconName.clear();
- emit mAdaptor->NewOverlayIcon();
+ Q_EMIT mAdaptor->NewOverlayIcon();
}
void StatusNotifierItem::setAttentionIconByName(const QString &name)
@@ -158,7 +167,7 @@
return;
mAttentionIconName = name;
- emit mAdaptor->NewAttentionIcon();
+ Q_EMIT mAdaptor->NewAttentionIcon();
}
void StatusNotifierItem::setAttentionIconByPixmap(const QIcon &icon)
@@ -169,7 +178,7 @@
mAttentionIconCacheKey = icon.cacheKey();
mAttentionIcon = iconToPixmapList(icon);
mAttentionIconName.clear();
- emit mAdaptor->NewAttentionIcon();
+ Q_EMIT mAdaptor->NewAttentionIcon();
}
void StatusNotifierItem::setToolTipTitle(const QString &title)
@@ -178,7 +187,7 @@
return;
mTooltipTitle = title;
- emit mAdaptor->NewToolTip();
+ Q_EMIT mAdaptor->NewToolTip();
}
void StatusNotifierItem::setToolTipSubTitle(const QString &subTitle)
@@ -187,7 +196,7 @@
return;
mTooltipSubtitle = subTitle;
- emit mAdaptor->NewToolTip();
+ Q_EMIT mAdaptor->NewToolTip();
}
void StatusNotifierItem::setToolTipIconByName(const QString &name)
@@ -196,7 +205,7 @@
return;
mTooltipIconName = name;
- emit mAdaptor->NewToolTip();
+ Q_EMIT mAdaptor->NewToolTip();
}
void StatusNotifierItem::setToolTipIconByPixmap(const QIcon &icon)
@@ -207,7 +216,7 @@
mTooltipIconCacheKey = icon.cacheKey();
mTooltipIcon = iconToPixmapList(icon);
mTooltipIconName.clear();
- emit mAdaptor->NewToolTip();
+ Q_EMIT mAdaptor->NewToolTip();
}
void StatusNotifierItem::setContextMenu(QMenu* menu)
@@ -227,7 +236,7 @@
if (nullptr != mMenu)
{
connect(mMenu, &QObject::destroyed, this, &StatusNotifierItem::onMenuDestroyed);
- mMenuExporter = new DBusMenuExporter{this->menu().path(), mMenu};
+ mMenuExporter = new DBusMenuExporter{this->menu().path(), mMenu, mSessionBus};
}
}
@@ -236,7 +245,7 @@
if (mStatus == "NeedsAttention")
mStatus = "Active";
- emit activateRequested(QPoint(x, y));
+ Q_EMIT activateRequested(QPoint(x, y));
}
void StatusNotifierItem::SecondaryActivate(int x, int y)
@@ -244,7 +253,7 @@
if (mStatus == "NeedsAttention")
mStatus = "Active";
- emit secondaryActivateRequested(QPoint(x, y));
+ Q_EMIT secondaryActivateRequested(QPoint(x, y));
}
void StatusNotifierItem::ContextMenu(int x, int y)
@@ -264,14 +273,14 @@
if (orientation.toLower() == "horizontal")
orient = Qt::Horizontal;
- emit scrollRequested(delta, orient);
+ Q_EMIT scrollRequested(delta, orient);
}
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", QDBusConnection::sessionBus());
+ "org.freedesktop.Notifications", mSessionBus);
interface.call("Notify", mTitle, (uint) 0, iconName, title,
msg, QStringList(), QVariantMap(), secs);
}
@@ -281,7 +290,8 @@
IconPixmapList pixmapList;
// long live KDE!
- for (const QSize &size : icon.availableSizes())
+ const QList<QSize> sizes = icon.availableSizes();
+ for (const QSize &size : sizes)
{
QImage image = icon.pixmap(size).toImage();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lxqt-qtplugin-0.11.1/src/statusnotifieritem/statusnotifieritem.h new/lxqt-qtplugin-0.12.0/src/statusnotifieritem/statusnotifieritem.h
--- old/lxqt-qtplugin-0.11.1/src/statusnotifieritem/statusnotifieritem.h 2016-12-11 01:52:27.000000000 +0100
+++ new/lxqt-qtplugin-0.12.0/src/statusnotifieritem/statusnotifieritem.h 2017-10-21 21:34:23.000000000 +0200
@@ -32,6 +32,7 @@
#include <QObject>
#include <QIcon>
#include <QMenu>
+#include <QDBusConnection>
#include "dbustypes.h"
@@ -132,7 +133,7 @@
*/
void setContextMenu(QMenu *menu);
-public slots:
+public Q_SLOTS:
void Activate(int x, int y);
void SecondaryActivate(int x, int y);
void ContextMenu(int x, int y);
@@ -144,12 +145,12 @@
void registerToHost();
IconPixmapList iconToPixmapList(const QIcon &icon);
-private slots:
+private Q_SLOTS:
void onServiceOwnerChanged(const QString &service, const QString &oldOwner,
const QString &newOwner);
void onMenuDestroyed();
-signals:
+Q_SIGNALS:
void activateRequested(const QPoint &pos);
void secondaryActivateRequested(const QPoint &pos);
void scrollRequested(int delta, Qt::Orientation orientation);
@@ -176,6 +177,7 @@
QMenu *mMenu;
QDBusObjectPath mMenuPath;
DBusMenuExporter *mMenuExporter;
+ QDBusConnection mSessionBus;
static int mServiceCounter;
};