Cherry-picking upstream release 0.11.0.

* Synced debian foo with experimental
* Added Multi-Arch: same, following the Multiarch hinter
* Bumped compat to 10
* Removed --parallel from rules, standard in compat 10
* Bumped Standards to 3.9.8, no changes needed
* Bumped minimum version debhelper (>= 10)
* Bumped minimum version liblxqt-dev (>= 0.11.0)
* Bumped minimum version libqtxdg-dev (>= 2.0.0)
* Added build dependency libqt5svg5-dev
* Added build dependency libqt5xdgiconloader-dev
* Fixed VCS fields, using https and plain /git/
* Removed README.debian, no longer needed
* Fixed copyrights Format field to https
* Bumped years in copyrights
* Fixed copyrights Source field
* Removed outdated file and license from copyrights
* Added hardening options
* Added translation control to rules
* Set CMAKE_BUILD_TYPE=RelWithDebInfo
* Exported LC_ALL=C.UTF-8, make builds reproducible
* Added a basic gbp.conf
ubuntu/bionic debian/0.11.0-3
Alf Gaida 8 years ago
parent 488517dc24
commit 651f286425

@ -3,8 +3,7 @@ Upstream Authors:
Hong Jen Yee (PCMan) <pcman.tw@gmail.com>
Copyright:
Copyright (c) 2013-2014 LXQt team
Copyright (c) 2013-2016 LXQt team
License: LGPL-2.1+
The full text of the licenses can be found in the 'COPYING' file.
src/qiconloader_p.h is under LGPL-2.1 or 3 with Digia Qt LGPL Exception version 1.1

@ -0,0 +1,72 @@
lxqt-qtplugin-0.11.0 / 2016-09-24
=================================
* Add Qt5XdgIconLoader as dependency (#13)
* Update README.md
* statusnotifieritem: Correctly handle menu
* Cleaned up licenses
* Use XdgIconLoader library (#10)
* xdgIconThemePaths: Use QString::SkipEmptyParts
* xdgIconThemePaths: Remove duplicated paths
* Adds $XDG_DATA_HOME to the XdgIconThemePaths
* Bump year in AUTHORS
0.10.0 / 2015-11-02
===================
* Remove unnecessary qDebug calls
* Use markdown for README
* Fix license file
* Fix mixed indents
* Remove Qt >= 5.3 check
* Removed GPL2, added Digia Qt LGPL Exception version 1.1
* SNI: don't create a SNI if support isn't available
* SNI: monitor the watcher in case the host restarts
* SNI: implement scroll, showMessage and improve icons
* SNI: create default context menu
* Support the StatusNotifierItem spec natively
* Use the standard palette of the current Qt theme
* Handles CMake policy CMP0063
* Use the LXQtCompilerSettings CMake module
* Add .gitignore
* Updates the build system to use the Targets infrastructure
* Remove trailing whitespaces
* removed debug (which makes every app too verbose)
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
==================
* 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.
* Make the code compile with Qt 5.2, fix lxde-qt bug #207.
* Fix lxde-qt bug #207: lxqt-qtplugin fail to build with Qt5.
* Use qmake to query the path of Qt5 plugin dir, which is much more reliable.
* Update README and provide information for usage and debugging.
* Use a more reliable and portable way to get the path of Qt5 plugin dir.
* Support setting default UI font.
* Make "oxygen" the default icon theme name. * Apply new style name and icon theme name when the config file is changed.
* Simplify the Qt5 plugin and remove liblxqt dependency from it.
* Correctly read config values.
* Try to load some Qt settings.
* Implement a very basic Qt5 platform theme plugin.
* Prepare for Qt5 support.
* Use preferred header style.
* Remove unnecessary debug messages.
* Fix int-to-enum casting
0.7.0 / 2014-04-29
==================
* Update AUTHORS and COPYING
* Add CPack rules for creating tarball
* Support toolbar styles and activating items with single click.
* Initial import.

@ -11,6 +11,7 @@ find_package(Qt5DBus REQUIRED QUIET)
find_package(dbusmenu-qt5 REQUIRED QUIET)
find_package(lxqt REQUIRED QUIET)
find_package(Qt5XdgIconLoader REQUIRED QUIET)
include(LXQtCompilerSettings NO_POLICY_SCOPE)

@ -1,25 +0,0 @@
Digia Qt LGPL Exception version 1.1
===================================
As an additional permission to the GNU Lesser General Public License version
2.1, the object code form of a "work that uses the Library" may incorporate
material from a header file that is part of the Library. You may distribute
such object code under terms of your choice, provided that:
(i) the header files of the Library have not been modified; and
(ii) the incorporated material is limited to numerical parameters, data
structure layouts, accessors, macros, inline functions and
templates; and
(iii) you comply with the terms of Section 6 of the GNU Lesser General
Public License version 2.1.
Moreover, you may apply this exception to a modified version of the Library,
provided that such modification does not involve copying material from the
Library into the modified Library's header files unless such material is
limited to (i) numerical parameters; (ii) data structure layouts;
(iii) accessors; and (iv) small macros, templates and inline functions of
five lines or less in length.
Furthermore, you are not required to apply this additional permission to a
modified version of the Library.

@ -1,14 +1,27 @@
# libqtlxqt
# lxqt-qtplugin
LXQt system integration plugin for Qt.
## Overview
With this plugin, all Qt-based programs can adopt settings of
LXQt, such as the icon theme.
This repository is providing a library `libqtlxqt` to integrate Qt with LXQt.
To use the plugin in Qt 5, we have to export the environment
variable QT_QPA_PLATFORMTHEME=lxqt. Then every Qt5 program
can load the theme plugin.
If, for some unknown reasons, the plugin is not loaded, we can
debug the plugin by exporting QT_DEBUG_PLUGINS=1.
Then, Qt5 will print detailed information and error messages
about all plugins in the console when running any Qt5 programs.
With this plugin, all Qt-based programs can adopt settings of LXQt, such as the icon theme.
## Installation
### Compiling source code
Runtime dependencies are libdbusmenu-qt5 and [liblxqt](https://github.com/lxde/liblxqt).
Additional build dependencies are CMake and qttools, optionally Git to pull latest VCS checkouts.
Code configuration is handled by CMake. CMake variable `CMAKE_INSTALL_PREFIX` has to be set to `/usr` on most operating systems.
To build run `make`, to install `make install` which accepts variable `DESTDIR` as usual.
### Binary packages
Official binary packages are provided by all major Linux distributions like Arch Linux, Debian (as of Debian stretch only), Fedora and openSUSE. Just use your package manager to search for string `lxqt-qtplugin`.
## Configuration, Usage
To use the plugin in Qt 5, we have to export environment variable `QT_QPA_PLATFORMTHEME=lxqt`. Then every Qt5 program can load the theme plugin.
If, for some unknown reasons, the plugin is not loaded, we can debug the plugin by exporting `QT_DEBUG_PLUGINS=1`. Then, Qt5 will print detailed information and error messages about all plugins in the console when running any Qt5 programs.

2
debian/.gitignore vendored

@ -1,7 +1,7 @@
/*.debhelper
/*.log
/*.substvars
/debhelper-build-stamp
/files
/lxqt-qtplugin/
/lxqt-qtplugin-dbg/

@ -1,4 +0,0 @@
lxqt-qtplugin for Debian
------------------------
'LGPL_EXCEPTION.txt' move to debian/copyright LGPL-2.1-or-3-with-Digia-1.1-exception section.

27
debian/changelog vendored

@ -1,3 +1,30 @@
lxqt-qtplugin (0.11.0-3) unstable; urgency=medium
* Cherry-picking upstream release 0.11.0.
* Synced debian foo with experimental
* Added Multi-Arch: same, following the Multiarch hinter
* Bumped compat to 10
* Removed --parallel from rules, standard in compat 10
* Bumped Standards to 3.9.8, no changes needed
* Bumped minimum version debhelper (>= 10)
* Bumped minimum version liblxqt-dev (>= 0.11.0)
* Bumped minimum version libqtxdg-dev (>= 2.0.0)
* Added build dependency libqt5svg5-dev
* Added build dependency libqt5xdgiconloader-dev
* Fixed VCS fields, using https and plain /git/
* Removed README.debian, no longer needed
* Fixed copyrights Format field to https
* Bumped years in copyrights
* Fixed copyrights Source field
* Removed outdated file and license from copyrights
* Added hardening options
* Added translation control to rules
* Set CMAKE_BUILD_TYPE=RelWithDebInfo
* Exported LC_ALL=C.UTF-8, make builds reproducible
* Added a basic gbp.conf
-- Alf Gaida <agaida@siduction.org> Tue, 18 Oct 2016 17:44:28 +0200
lxqt-qtplugin (0.10.0-3) unstable; urgency=medium
* Remove dbg package in favor of dbgsym.

2
debian/compat vendored

@ -1 +1 @@
9
10

21
debian/control vendored

@ -5,29 +5,32 @@ Uploaders: Alf Gaida <agaida@siduction.org>,
Yukiharu YABUKI <yyabuki@debian.org>
Section: x11
Priority: optional
Build-Depends: debhelper (>= 9),
Build-Depends: debhelper (>= 10),
cmake (>= 3.0.2),
libdbusmenu-qt5-dev,
libkf5windowsystem-dev,
liblxqt0-dev (>= 0.10.0),
liblxqt0-dev (>= 0.11.0),
libqt5svg5-dev,
libqt5x11extras5-dev,
libqt5xdg-dev (>= 1.3.0),
libqt5xdg-dev (>= 2.0.0),
libqt5xdgiconloader-dev,
libx11-dev,
pkg-config,
qtbase5-private-dev,
qttools5-dev,
qttools5-dev-tools,
Standards-Version: 3.9.6
Vcs-Browser: http://anonscm.debian.org/cgit/pkg-lxqt/lxqt-qtplugin.git/?h=debian/sid
Vcs-Git: git://anonscm.debian.org/pkg-lxqt/lxqt-qtplugin.git -b debian/sid
qttools5-dev-tools
Standards-Version: 3.9.8
Vcs-Browser: https://anonscm.debian.org/cgit/pkg-lxqt/lxqt-qtplugin.git/?h=debian/sid
Vcs-Git: https://anonscm.debian.org/git/pkg-lxqt/lxqt-qtplugin.git -b debian/sid
Homepage: https://github.com/lxde/lxqt-qtplugin
Package: lxqt-qtplugin
Architecture: any
Multi-Arch: same
Depends: ${misc:Depends},
${shlibs:Depends},
${shlibs:Depends}
Description: LXQt system integration plugin for Qt
With this plugin, all Qt-based programs can adopt settings of
LXQt, such as the icon theme.
.
This package provides the lxqt qtplugin interface.
This package provides the LXQt qtplugin interface.

54
debian/copyright vendored

@ -1,20 +1,14 @@
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: lxqt-qtplugin
Source: https://github.com/lxde/lxqt-panel
Source: https://github.com/lxde/lxqt-qtplugin
Files: *
Copyright: 2013-2015 LXQt team
Copyright: 2013-2016 LXQt team
2010-2012 Razor team
License: LGPL-2.1+
Files: src/qiconloader_p.h
Copyright: 2013 Digia Plc and/or its subsidiary(-ies).
2010-2012 Razor team
2013-2015 LXQt team
License: LGPL-2.1-or-3-with-Digia-1.1-exception
Files: debian/*
Copyright: 2014-2015 Alf Gaida <agaida@siduction.org>
Copyright: 2014-2016 Alf Gaida <agaida@siduction.org>
2015 ChangZhuo Chen (陳昌倬) <czchen@debian.org>
2015 Yukiharu YABUKI <yyabuki@debian.org>
License: LGPL-2.1+
@ -32,43 +26,3 @@ License: LGPL-2.1+
.
On Debian systems, the complete text of the GNU Lesser General
Public License version 2.1 can be found in "/usr/share/common-licenses/LGPL-2.1".
License: LGPL-2.1-or-3-with-Digia-1.1-exception
GNU Lesser General Public License:
This file may be used under the terms of the GNU Lesser General Public
License version 2.1 or version 3 as published by the Free Software
Foundation and appearing in the file LICENSE.LGPLv21 and LICENSE.LGPLv3
included in the packaging of this file. Please review the following
information to ensure the GNU Lesser General Public License requirements
will be met: https://www.gnu.org/licenses/lgpl.html.
.
On Debian systems, the complete text of the GNU Lesser General Public
License 2.1 can be found in `/usr/share/common-licenses/LGPL-2.1`.
The complete text of the GNU Lesser General Public License version 3 can be
found in `/usr/share/common-licenses/LGPL-3`.
.
In addition, as a special exception, Digia gives you certain additional
rights.
.
Digia Qt LGPL Exception version 1.1:
As an additional permission to the GNU Lesser General Public License version
2.1, the object code form of a "work that uses the Library" may incorporate
material from a header file that is part of the Library. You may distribute
such object code under terms of your choice, provided that:
.
(i) the header files of the Library have not been modified; and
(ii) the incorporated material is limited to numerical parameters, data
structure layouts, accessors, macros, inline functions and
templates; and
(iii) you comply with the terms of Section 6 of the GNU Lesser General
Public License version 2.1.
.
Moreover, you may apply this exception to a modified version of the Library,
provided that such modification does not involve copying material from the
Library into the modified Library's header files unless such material is
limited to (i) numerical parameters; (ii) data structure layouts;
(iii) accessors; and (iv) small macros, templates and inline functions of
five lines or less in length.
.
Furthermore, you are not required to apply this additional permission to a
modified version of the Library.

8
debian/gbp.conf vendored

@ -0,0 +1,8 @@
[DEFAULT]
debian-branch = debian/sid
upstream-branch = upstream/latest
pristine-tar = True
[import-orig]
# Use git cherrypick -n upstream instead.
merge = False

13
debian/rules vendored

@ -1,8 +1,15 @@
#!/usr/bin/make -f
#export DH_VERBOSE=1
# export DH_VERBOSE=1
export LC_ALL=C.UTF-8
export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
%:
dh ${@} --buildsystem cmake \
--parallel
dh ${@} --buildsystem cmake
override_dh_auto_configure:
dh_auto_configure --\
-DPULL_TRANSLATIONS=OFF\
-DUPDATE_TRANSLATIONS=OFF\
-DCMAKE_BUILD_TYPE=RelWithDebInfo

@ -1,63 +1,50 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.22 (GNU/Linux)
mQINBFJevCYBEACx+Hvy+Vsuf+V5jeLUnzjAmHoy8DfTeGWr3ts30IapLHrfi0+U
WpzNnISO77yTr4VNboVZH+GHM/rnPfieODfB4ZW6CZLlInMSKUXcgQsEqXpyBZhA
Ib/SPy2bOfHly1uRJes0uRDsH5+v/hD74sByfnjQlrvI68O6wvGZmDFMNNPVO8+/
OWBSBNkBuVrrZOMSPsLwQGJ4UtUQ4whburaPJG4VZJc5DLbzJGbEuACc0IAEYJS3
7AfXVXn4j4Gc9F3o1xTUnbOBnwGPquWwUIm3FM7Ec2OdkvMt3EwvnkMAfeVrq3iE
FDD/KZTxdL0BZH3QD8gB7Jm4v4f3Nkobg6JCvCbcH3wBdZW4mASbwWzfRaDC2zHb
ErTglD7PpShLKZZ0pr9okWZEGw4Ku3q8ALi1JXK/ePTmsBlvkVskOJ3Nnd0avgH4
+Q/vZoKfH8EhNY745rI+8CE9iv6V9XiSUt4CKEWAENt4A8hq6U2vV+jZv3B6AgD7
ZjiI59yD4YuYubu8rCnNizTgh1voVw3ietknn/x2H5yH8fByWZ5uL87C0ky/uma6
ZGbiiAtM4kdkyDMrfRV5nlEG9EKAGPVu5mjeSCrfkETwZ9OFPz1AuDye4ZEXrrcC
iRQ7RX6/GtW18aHER0kzGnfwx5KJzkDrRBY8A2PdXLBcrsN4WpK9EX01PQARAQAB
tCNKZXJvbWUgTGVjbGFuY2hlIDxqZXJvbWVAbGVjbGFuLmNoPokCPwQTAQIAKQUC
Ul68JgIbAwUJAeEzgAcLCQgHAwIBBhUIAgkKCwQWAgMBAh4BAheAAAoJEDfgrx/a
SPNzSHIP/1ewXcC0TFBcvDD7MrIP7anyNfiWfW7cxkR8GSamkg6HTa6Ndyr1FFjJ
OoDFUP37jWhu59CsHxs2D0zRWJktezfvElscRgqbHcdpIznqsGdI8hXCZafhBGVb
sdAB2LRawcXGxnXt7XajPcSVwLWRE62caBqohznU2iWvI780WNjEbZoA0LhZwaFF
UUPJm8ea9v0IkZVKUyg9WONZ1U7FEG9SaEiSpI8kJdx1fvCwZVDV/NRO5GqnJaho
P1LCne4YdwS6pt1/fRgk32IHxxZfHlLzLHxb6v1JmIg72x28qCmGyK9oFBDbbnYu
6Aq8XbHogOrD5vJM2Pfm2IhV0+JHOjfQbddv8tsAH1M+LI+tToXmg5st1AU3wnTn
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
=fF8P
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
=h7ww
-----END PGP PUBLIC KEY BLOCK-----

4
debian/watch vendored

@ -1,3 +1,3 @@
version=3
version=4
opts="pgpsigurlmangle=s/$/.asc/" \
https://github.com/lxde/lxqt-qtplugin/releases .*/([\d\.]+).tar.gz
https://github.com/lxde/lxqt-qtplugin/releases .*/lxqt-qtplugin-([\d\.]+).tar.xz

@ -31,6 +31,7 @@ target_link_libraries(qtlxqt
Qt5::DBus
dbusmenu-qt5
lxqt
Qt5XdgIconLoader
)
# there is no standard way to get the plugin dir of Qt5 with cmake

@ -44,7 +44,7 @@
#include <QFileInfo>
#include <QFileSystemWatcher>
#include <QStyle>
#include "qiconloader_p.h"
#include <private/xdgiconloader/xdgiconloader_p.h>
LXQtPlatformTheme::LXQtPlatformTheme():
settingsWatcher_(NULL)
@ -162,7 +162,7 @@ void LXQtPlatformTheme::onSettingsChanged() {
}
if(iconTheme_ != oldIconTheme) { // the icon theme is changed
QIconLoader::instance()->updateSystemTheme(); // this is a private internal API of Qt5.
XdgIconLoader::instance()->updateSystemTheme(); // this is a private internal API of Qt5.
}
// if font is changed
@ -294,22 +294,40 @@ QVariant LXQtPlatformTheme::themeHint(ThemeHint hint) const {
return QPlatformTheme::themeHint(hint);
}
QIconEngine *LXQtPlatformTheme::createIconEngine(const QString &iconName) const
{
return new XdgIconLoaderEngine(iconName);
}
// Helper to return the icon theme paths from XDG.
QStringList LXQtPlatformTheme::xdgIconThemePaths() const
{
QStringList paths;
QStringList xdgDirs;
// Add home directory first in search path
const QFileInfo homeIconDir(QDir::homePath() + QStringLiteral("/.icons"));
if (homeIconDir.isDir())
paths.prepend(homeIconDir.absoluteFilePath());
QString xdgDirString = QFile::decodeName(qgetenv("XDG_DATA_DIRS"));
if (xdgDirString.isEmpty())
xdgDirString = QLatin1String("/usr/local/share/:/usr/share/");
foreach (const QString &xdgDir, xdgDirString.split(QLatin1Char(':'))) {
const QFileInfo xdgIconsDir(xdgDir + QStringLiteral("/icons"));
if (xdgIconsDir.isDir())
paths.append(xdgIconsDir.absoluteFilePath());
QString xdgDataHome = QFile::decodeName(qgetenv("XDG_DATA_HOME"));
if (xdgDataHome.isEmpty())
xdgDataHome = QDir::homePath() + QLatin1String("/.local/share");
xdgDirs.append(xdgDataHome);
QString xdgDataDirs = QFile::decodeName(qgetenv("XDG_DATA_DIRS"));
if (xdgDataDirs.isEmpty())
xdgDataDirs = QLatin1String("/usr/local/share/:/usr/share/");
xdgDirs.append(xdgDataDirs);
foreach (const QString &s, xdgDirs) {
const QStringList r = s.split(QLatin1Char(':'), QString::SkipEmptyParts);
foreach (const QString &xdgDir, r) {
const QFileInfo xdgIconsDir(xdgDir + QStringLiteral("/icons"));
if (xdgIconsDir.isDir())
paths.append(xdgIconsDir.absoluteFilePath());
}
}
paths.removeDuplicates();
return paths;
}

@ -72,7 +72,7 @@ public:
// virtual QPixmap fileIconPixmap(const QFileInfo &fileInfo, const QSizeF &size,
// QPlatformTheme::IconOptions iconOptions = 0) const;
// virtual QIconEngine *createIconEngine(const QString &iconName) const;
virtual QIconEngine *createIconEngine(const QString &iconName) const;
// virtual QList<QKeySequence> keyBindings(QKeySequence::StandardKey key) const;

@ -286,7 +286,7 @@ void LXQtSystemTrayIcon::init()
// default menu
QPlatformMenu *menu = createMenu();
menu->setParent(this);
menu->setParent(mSni);
QPlatformMenuItem *menuItem = menu->createMenuItem();
menuItem->setParent(menu);
menuItem->setText(tr("Quit"));

@ -1,194 +0,0 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtGui module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia. For licensing terms and
** conditions see http://qt.digia.com/licensing. For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Digia gives you certain additional
** rights. These rights are described in the Digia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
#ifndef QICONLOADER_P_H
#define QICONLOADER_P_H
#include <QtCore/qglobal.h>
#ifndef QT_NO_ICON
//
// W A R N I N G
// -------------
//
// This file is not part of the Qt API. It exists purely as an
// implementation detail. This header file may change from version to
// version without notice, or even be removed.
//
// We mean it.
//
#include <QtGui/QIcon>
#include <QtGui/QIconEngine>
#include <QtGui/QPixmapCache>
#include <private/qicon_p.h>
#include <private/qfactoryloader_p.h>
#include <QtCore/QHash>
QT_BEGIN_NAMESPACE
class QIconLoader;
struct QIconDirInfo
{
enum Type { Fixed, Scalable, Threshold };
QIconDirInfo(const QString &_path = QString()) :
path(_path),
size(0),
maxSize(0),
minSize(0),
threshold(0),
type(Threshold) {}
QString path;
short size;
short maxSize;
short minSize;
short threshold;
Type type : 4;
};
class QIconLoaderEngineEntry
{
public:
virtual ~QIconLoaderEngineEntry() {}
virtual QPixmap pixmap(const QSize &size,
QIcon::Mode mode,
QIcon::State state) = 0;
QString filename;
QIconDirInfo dir;
static int count;
};
struct ScalableEntry : public QIconLoaderEngineEntry
{
QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state);
QIcon svgIcon;
};
struct PixmapEntry : public QIconLoaderEngineEntry
{
QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state);
QPixmap basePixmap;
};
typedef QList<QIconLoaderEngineEntry*> QThemeIconEntries;
class QIconLoaderEngine : public QIconEngine
{
public:
QIconLoaderEngine(const QString& iconName = QString());
~QIconLoaderEngine();
void paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state);
QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state);
QSize actualSize(const QSize &size, QIcon::Mode mode, QIcon::State state);
QIconEngine *clone() const;
bool read(QDataStream &in);
bool write(QDataStream &out) const;
private:
QString key() const;
bool hasIcon() const;
void ensureLoaded();
void virtual_hook(int id, void *data);
QIconLoaderEngineEntry *entryForSize(const QSize &size);
QIconLoaderEngine(const QIconLoaderEngine &other);
QThemeIconEntries m_entries;
QString m_iconName;
uint m_key;
friend class QIconLoader;
};
class QIconTheme
{
public:
QIconTheme(const QString &name);
QIconTheme() : m_valid(false) {}
QStringList parents() { return m_parents; }
QList <QIconDirInfo> keyList() { return m_keyList; }
QString contentDir() { return m_contentDir; }
bool isValid() { return m_valid; }
private:
QString m_contentDir;
QList <QIconDirInfo> m_keyList;
QStringList m_parents;
bool m_valid;
};
class Q_GUI_EXPORT QIconLoader : public QObject
{
public:
QIconLoader();
QThemeIconEntries loadIcon(const QString &iconName) const;
uint themeKey() const { return m_themeKey; }
QString themeName() const { return m_userTheme.isEmpty() ? m_systemTheme : m_userTheme; }
void setThemeName(const QString &themeName);
QIconTheme theme() { return themeList.value(themeName()); }
void setThemeSearchPath(const QStringList &searchPaths);
QStringList themeSearchPaths() const;
QIconDirInfo dirInfo(int dirindex);
static QIconLoader *instance();
void updateSystemTheme();
void invalidateKey() { m_themeKey++; }
void ensureInitialized();
private:
QThemeIconEntries findIconHelper(const QString &themeName,
const QString &iconName,
QStringList &visited) const;
uint m_themeKey;
bool m_supportsSvg;
bool m_initialized;
mutable QString m_userTheme;
mutable QString m_systemTheme;
mutable QStringList m_iconDirs;
mutable QHash <QString, QIconTheme> themeList;
};
QT_END_NAMESPACE
#endif // QT_NO_ICON
#endif // QICONLOADER_P_H

@ -42,7 +42,8 @@ StatusNotifierItem::StatusNotifierItem(QString id, QObject *parent)
mId(id),
mTitle("Test"),
mStatus("Active"),
mMenu(nullptr)
mMenu(nullptr),
mMenuExporter(nullptr)
{
// register service
QDBusConnection::sessionBus().registerService(mService);
@ -64,8 +65,6 @@ StatusNotifierItem::~StatusNotifierItem()
QDBusConnection::sessionBus().unregisterObject("/StatusNotifierItem");
QDBusConnection::sessionBus().unregisterService(mService);
QDBusConnection::sessionBus().disconnectFromBus(mService);
delete mMenu;
}
void StatusNotifierItem::registerToHost()
@ -84,6 +83,12 @@ void StatusNotifierItem::onServiceOwnerChanged(const QString& service, const QSt
registerToHost();
}
void StatusNotifierItem::onMenuDestroyed()
{
mMenu = nullptr;
mMenuExporter = nullptr; //mMenu is a QObject parent of the mMenuExporter
}
void StatusNotifierItem::setTitle(const QString &title)
{
if (mTitle == title)
@ -210,12 +215,20 @@ void StatusNotifierItem::setContextMenu(QMenu* menu)
if (mMenu == menu)
return;
delete mMenu;
if (nullptr != mMenu)
{
disconnect(mMenu, &QObject::destroyed, this, &StatusNotifierItem::onMenuDestroyed);
}
mMenu = menu;
mMenu->setParent(nullptr);
setMenuPath("/MenuBar");
new DBusMenuExporter(this->menu().path(), mMenu);
//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)
{
connect(mMenu, &QObject::destroyed, this, &StatusNotifierItem::onMenuDestroyed);
mMenuExporter = new DBusMenuExporter{this->menu().path(), mMenu};
}
}
void StatusNotifierItem::Activate(int x, int y)

@ -36,6 +36,7 @@
#include "dbustypes.h"
class StatusNotifierItemAdaptor;
class DBusMenuExporter;
class StatusNotifierItem : public QObject
{
@ -126,6 +127,9 @@ public:
return tt;
}
/*!
* \Note: we don't take ownership for the \param menu
*/
void setContextMenu(QMenu *menu);
public slots:
@ -143,6 +147,7 @@ private:
private slots:
void onServiceOwnerChanged(const QString &service, const QString &oldOwner,
const QString &newOwner);
void onMenuDestroyed();
signals:
void activateRequested(const QPoint &pos);
@ -170,6 +175,7 @@ private:
// menu
QMenu *mMenu;
QDBusObjectPath mMenuPath;
DBusMenuExporter *mMenuExporter;
static int mServiceCounter;
};

Loading…
Cancel
Save