Cherry-picked upstream version 0.9.0+20151101.
Install manpage for lxqt-panel Deleted debian/lintian-overrides Added minimum version for liblxqt and libqtxdg
This commit is contained in:
		
							parent
							
								
									5e62c03710
								
							
						
					
					
						commit
						117e853247
					
				@ -1,9 +1,8 @@
 | 
			
		||||
 | 
			
		||||
                  GNU LESSER GENERAL PUBLIC LICENSE
 | 
			
		||||
                       Version 2.1, February 1999
 | 
			
		||||
 | 
			
		||||
 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
 | 
			
		||||
	51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 | 
			
		||||
 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 | 
			
		||||
 Everyone is permitted to copy and distribute verbatim copies
 | 
			
		||||
 of this license document, but changing it is not allowed.
 | 
			
		||||
 | 
			
		||||
@ -23,8 +22,7 @@ specially designated software packages--typically libraries--of the
 | 
			
		||||
Free Software Foundation and other authors who decide to use it.  You
 | 
			
		||||
can use it too, but we suggest you first think carefully about whether
 | 
			
		||||
this license or the ordinary General Public License is the better
 | 
			
		||||
strategy to use in any particular case, based on the explanations
 | 
			
		||||
below.
 | 
			
		||||
strategy to use in any particular case, based on the explanations below.
 | 
			
		||||
 | 
			
		||||
  When we speak of free software, we are referring to freedom of use,
 | 
			
		||||
not price.  Our General Public Licenses are designed to make sure that
 | 
			
		||||
@ -89,9 +87,9 @@ libraries.  However, the Lesser license provides advantages in certain
 | 
			
		||||
special circumstances.
 | 
			
		||||
 | 
			
		||||
  For example, on rare occasions, there may be a special need to
 | 
			
		||||
encourage the widest possible use of a certain library, so that it
 | 
			
		||||
becomes a de-facto standard.  To achieve this, non-free programs must
 | 
			
		||||
be allowed to use the library.  A more frequent case is that a free
 | 
			
		||||
encourage the widest possible use of a certain library, so that it becomes
 | 
			
		||||
a de-facto standard.  To achieve this, non-free programs must be
 | 
			
		||||
allowed to use the library.  A more frequent case is that a free
 | 
			
		||||
library does the same job as widely used non-free libraries.  In this
 | 
			
		||||
case, there is little to gain by limiting the free library to free
 | 
			
		||||
software only, so we use the Lesser General Public License.
 | 
			
		||||
@ -138,8 +136,8 @@ included without limitation in the term "modification".)
 | 
			
		||||
  "Source code" for a work means the preferred form of the work for
 | 
			
		||||
making modifications to it.  For a library, complete source code means
 | 
			
		||||
all the source code for all modules it contains, plus any associated
 | 
			
		||||
interface definition files, plus the scripts used to control
 | 
			
		||||
compilation and installation of the library.
 | 
			
		||||
interface definition files, plus the scripts used to control compilation
 | 
			
		||||
and installation of the library.
 | 
			
		||||
 | 
			
		||||
  Activities other than copying, distribution and modification are not
 | 
			
		||||
covered by this License; they are outside its scope.  The act of
 | 
			
		||||
@ -305,10 +303,10 @@ of these things:
 | 
			
		||||
    the user installs one, as long as the modified version is
 | 
			
		||||
    interface-compatible with the version that the work was made with.
 | 
			
		||||
 | 
			
		||||
    c) Accompany the work with a written offer, valid for at least
 | 
			
		||||
    three years, to give the same user the materials specified in
 | 
			
		||||
    Subsection 6a, above, for a charge no more than the cost of
 | 
			
		||||
    performing this distribution.
 | 
			
		||||
    c) Accompany the work with a written offer, valid for at
 | 
			
		||||
    least three years, to give the same user the materials
 | 
			
		||||
    specified in Subsection 6a, above, for a charge no more
 | 
			
		||||
    than the cost of performing this distribution.
 | 
			
		||||
 | 
			
		||||
    d) If distribution of the work is made by offering access to copy
 | 
			
		||||
    from a designated place, offer equivalent access to copy the above
 | 
			
		||||
@ -386,10 +384,9 @@ all those who receive copies directly or indirectly through you, then
 | 
			
		||||
the only way you could satisfy both it and this License would be to
 | 
			
		||||
refrain entirely from distribution of the Library.
 | 
			
		||||
 | 
			
		||||
If any portion of this section is held invalid or unenforceable under
 | 
			
		||||
any particular circumstance, the balance of the section is intended to
 | 
			
		||||
apply, and the section as a whole is intended to apply in other
 | 
			
		||||
circumstances.
 | 
			
		||||
If any portion of this section is held invalid or unenforceable under any
 | 
			
		||||
particular circumstance, the balance of the section is intended to apply,
 | 
			
		||||
and the section as a whole is intended to apply in other circumstances.
 | 
			
		||||
 | 
			
		||||
It is not the purpose of this section to induce you to infringe any
 | 
			
		||||
patents or other property right claims or to contest validity of any
 | 
			
		||||
@ -407,11 +404,11 @@ be a consequence of the rest of this License.
 | 
			
		||||
 | 
			
		||||
  12. If the distribution and/or use of the Library is restricted in
 | 
			
		||||
certain countries either by patents or by copyrighted interfaces, the
 | 
			
		||||
original copyright holder who places the Library under this License
 | 
			
		||||
may add an explicit geographical distribution limitation excluding those
 | 
			
		||||
countries, so that distribution is permitted only in or among
 | 
			
		||||
countries not thus excluded.  In such case, this License incorporates
 | 
			
		||||
the limitation as if written in the body of this License.
 | 
			
		||||
original copyright holder who places the Library under this License may add
 | 
			
		||||
an explicit geographical distribution limitation excluding those countries,
 | 
			
		||||
so that distribution is permitted only in or among countries not thus
 | 
			
		||||
excluded.  In such case, this License incorporates the limitation as if
 | 
			
		||||
written in the body of this License.
 | 
			
		||||
 | 
			
		||||
  13. The Free Software Foundation may publish revised and/or new
 | 
			
		||||
versions of the Lesser General Public License from time to time.
 | 
			
		||||
							
								
								
									
										8
									
								
								debian/changelog
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								debian/changelog
									
									
									
									
										vendored
									
									
								
							@ -1,10 +1,12 @@
 | 
			
		||||
lxqt-panel (0.9.0+20151024-1) experimental; urgency=medium
 | 
			
		||||
lxqt-panel (0.9.0+20151101-1) unstable; urgency=medium
 | 
			
		||||
 | 
			
		||||
  [ Alf Gaida ]
 | 
			
		||||
  * Cherry-picked upstream version 0.9.0+20151024.
 | 
			
		||||
  * Cherry-picked upstream version 0.9.0+20151101.
 | 
			
		||||
  * Install manpage for lxqt-panel
 | 
			
		||||
  * Deleted debian/lintian-overrides
 | 
			
		||||
  * Cleaned up debian/.gitignore
 | 
			
		||||
  * Switched to experimental because of LXQt namespace change
 | 
			
		||||
  * Added minimum version for liblxqt0-dev (>= 0.9.0+20150911)
 | 
			
		||||
  * Added minimum version for liblxqt and libqtxdg
 | 
			
		||||
  * Added upstream signing key and use it in watch file
 | 
			
		||||
  * drop transitional packages
 | 
			
		||||
  * drop breaks/replaces
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										4
									
								
								debian/control
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								debian/control
									
									
									
									
										vendored
									
									
								
							@ -11,7 +11,7 @@ Build-Depends: cmake (>= 3.0.2),
 | 
			
		||||
               libdbusmenu-qt5-dev,
 | 
			
		||||
               libglib2.0-dev,
 | 
			
		||||
               libicu-dev,
 | 
			
		||||
               liblxqt0-dev (>= 0.9.0-20150911),
 | 
			
		||||
               liblxqt0-dev (>= 0.9.0-20151026),
 | 
			
		||||
               liblxqt-globalkeys0-dev,
 | 
			
		||||
               liblxqt-globalkeys-ui0-dev,
 | 
			
		||||
               libkf5windowsystem-dev,
 | 
			
		||||
@ -19,7 +19,7 @@ Build-Depends: cmake (>= 3.0.2),
 | 
			
		||||
               libmenu-cache-dev,
 | 
			
		||||
               libpulse-dev,
 | 
			
		||||
               libqt5x11extras5-dev,
 | 
			
		||||
               libqt5xdg-dev,
 | 
			
		||||
               libqt5xdg-dev (>= 1.3.0),
 | 
			
		||||
               libsensors4-dev,
 | 
			
		||||
               libstatgrab-dev,
 | 
			
		||||
               libsysstat-qt5-0-dev (>= 0.3.0),
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										3
									
								
								debian/lintian-overrides
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								debian/lintian-overrides
									
									
									
									
										vendored
									
									
								
							@ -1,3 +0,0 @@
 | 
			
		||||
# there will now manpage in a foreseable future
 | 
			
		||||
lxqt-panel: binary-without-manpage usr/bin/lxqt-panel
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								debian/manpages
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								debian/manpages
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
			
		||||
panel/man/lxqt-panel.1
 | 
			
		||||
 | 
			
		||||
@ -53,7 +53,7 @@ AddPluginDialog::AddPluginDialog(QWidget *parent):
 | 
			
		||||
    desktopFilesDirs << QString("%1/%2").arg(XdgDirs::dataHome(), "/lxqt/lxqt-panel");
 | 
			
		||||
    desktopFilesDirs << PLUGIN_DESKTOPS_DIR;
 | 
			
		||||
 | 
			
		||||
    mPlugins = LXQt::PluginInfo::search(desktopFilesDirs, QStringLiteral("LXQtPanel/Plugin"), QStringLiteral("*"));
 | 
			
		||||
    mPlugins = LXQt::PluginInfo::search(desktopFilesDirs, QLatin1String("LXQtPanel/Plugin"), QLatin1String("*"));
 | 
			
		||||
    std::sort(mPlugins.begin(), mPlugins.end(), [](const LXQt::PluginInfo &p1, const LXQt::PluginInfo &p2) {
 | 
			
		||||
        return p1.name() < p2.name() || (p1.name() == p2.name() && p1.comment() < p2.comment());
 | 
			
		||||
    });
 | 
			
		||||
@ -97,7 +97,7 @@ void AddPluginDialog::filter()
 | 
			
		||||
    {
 | 
			
		||||
        const LXQt::PluginInfo &plugin = mPlugins.at(i);
 | 
			
		||||
 | 
			
		||||
        QString s = QStringLiteral("%1 %2 %3 %4 %5").arg(plugin.name(),
 | 
			
		||||
        QString s = QString("%1 %2 %3 %4 %5").arg(plugin.name(),
 | 
			
		||||
                                               plugin.comment(),
 | 
			
		||||
                                               plugin.value("Name").toString(),
 | 
			
		||||
                                               plugin.value("Comment").toString(),
 | 
			
		||||
@ -111,10 +111,10 @@ void AddPluginDialog::filter()
 | 
			
		||||
        {
 | 
			
		||||
            item->setFlags(item->flags() & ~Qt::ItemIsEnabled);
 | 
			
		||||
            item->setBackground(palette().brush(QPalette::Disabled, QPalette::Text));
 | 
			
		||||
            item->setText(QStringLiteral("<b>%1</b> (%2)<br>%3<br><small>%4</small>")
 | 
			
		||||
            item->setText(QString("<b>%1</b> (%2)<br>%3<br><small>%4</small>")
 | 
			
		||||
                    .arg(plugin.name(), plugin.id(), plugin.comment(), tr("(only one instance can run at a time)")));
 | 
			
		||||
        } else
 | 
			
		||||
            item->setText(QStringLiteral("<b>%1</b> (%2)<br>%3").arg(plugin.name(), plugin.id(), plugin.comment()));
 | 
			
		||||
            item->setText(QString("<b>%1</b> (%2)<br>%3").arg(plugin.name(), plugin.id(), plugin.comment()));
 | 
			
		||||
        item->setIcon(plugin.icon(fallIco));
 | 
			
		||||
        item->setData(INDEX_ROLE, i);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -35,11 +35,11 @@ ConfigPanelDialog::ConfigPanelDialog(LXQtPanel *panel, QWidget *parent):
 | 
			
		||||
    setAttribute(Qt::WA_DeleteOnClose);
 | 
			
		||||
 | 
			
		||||
    mPanelPage = new ConfigPanelWidget(panel, this);
 | 
			
		||||
    addPage(mPanelPage, tr("Panel"), QStringLiteral("configure"));
 | 
			
		||||
    addPage(mPanelPage, tr("Panel"), QLatin1String("configure"));
 | 
			
		||||
    connect(this, &ConfigPanelDialog::reset, mPanelPage, &ConfigPanelWidget::reset);
 | 
			
		||||
 | 
			
		||||
    mPluginsPage = new ConfigPluginsWidget(panel, this);
 | 
			
		||||
    addPage(mPluginsPage, tr("Widgets"), QStringLiteral("preferences-plugin"));
 | 
			
		||||
    addPage(mPluginsPage, tr("Widgets"), QLatin1String("preferences-plugin"));
 | 
			
		||||
    connect(this, &ConfigPanelDialog::reset, mPluginsPage, &ConfigPluginsWidget::reset);
 | 
			
		||||
 | 
			
		||||
    connect(this, &ConfigPanelDialog::accepted, [panel] {
 | 
			
		||||
 | 
			
		||||
@ -472,6 +472,7 @@ void LXQtPanel::updateWmStrut()
 | 
			
		||||
    if(wid == 0 || !isVisible())
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    const QRect wholeScreen = QApplication::desktop()->geometry();
 | 
			
		||||
    const QRect rect = geometry();
 | 
			
		||||
    // NOTE: http://standards.freedesktop.org/wm-spec/wm-spec-latest.html
 | 
			
		||||
    // Quote from the EWMH spec: " Note that the strut is relative to the screen edge, and not the edge of the xinerama monitor."
 | 
			
		||||
@ -484,7 +485,7 @@ void LXQtPanel::updateWmStrut()
 | 
			
		||||
        KWindowSystem::setExtendedStrut(wid,
 | 
			
		||||
                                        /* Left   */  0, 0, 0,
 | 
			
		||||
                                        /* Right  */  0, 0, 0,
 | 
			
		||||
                                        /* Top    */  getReserveDimension(), rect.left(), rect.right(),
 | 
			
		||||
                                        /* Top    */  rect.top() + getReserveDimension(), rect.left(), rect.right(),
 | 
			
		||||
                                        /* Bottom */  0, 0, 0
 | 
			
		||||
                                       );
 | 
			
		||||
        break;
 | 
			
		||||
@ -494,13 +495,13 @@ void LXQtPanel::updateWmStrut()
 | 
			
		||||
                                        /* Left   */  0, 0, 0,
 | 
			
		||||
                                        /* Right  */  0, 0, 0,
 | 
			
		||||
                                        /* Top    */  0, 0, 0,
 | 
			
		||||
                                        /* Bottom */  getReserveDimension(), rect.left(), rect.right()
 | 
			
		||||
                                        /* Bottom */  wholeScreen.bottom() - rect.bottom() + getReserveDimension(), rect.left(), rect.right()
 | 
			
		||||
                                       );
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
    case LXQtPanel::PositionLeft:
 | 
			
		||||
        KWindowSystem::setExtendedStrut(wid,
 | 
			
		||||
                                        /* Left   */  getReserveDimension(), rect.top(), rect.bottom(),
 | 
			
		||||
                                        /* Left   */  rect.left() + getReserveDimension(), rect.top(), rect.bottom(),
 | 
			
		||||
                                        /* Right  */  0, 0, 0,
 | 
			
		||||
                                        /* Top    */  0, 0, 0,
 | 
			
		||||
                                        /* Bottom */  0, 0, 0
 | 
			
		||||
@ -511,7 +512,7 @@ void LXQtPanel::updateWmStrut()
 | 
			
		||||
    case LXQtPanel::PositionRight:
 | 
			
		||||
        KWindowSystem::setExtendedStrut(wid,
 | 
			
		||||
                                        /* Left   */  0, 0, 0,
 | 
			
		||||
                                        /* Right  */  getReserveDimension(), rect.top(), rect.bottom(),
 | 
			
		||||
                                        /* Right  */  wholeScreen.right() - rect.right() + getReserveDimension(), rect.top(), rect.bottom(),
 | 
			
		||||
                                        /* Top    */  0, 0, 0,
 | 
			
		||||
                                        /* Bottom */  0, 0, 0
 | 
			
		||||
                                       );
 | 
			
		||||
@ -932,7 +933,7 @@ void LXQtPanel::showPopupMenu(Plugin *plugin)
 | 
			
		||||
 | 
			
		||||
    menu->addTitle(QIcon(), tr("Panel"));
 | 
			
		||||
 | 
			
		||||
    menu->addAction(XdgIcon::fromTheme(QStringLiteral("configure")),
 | 
			
		||||
    menu->addAction(XdgIcon::fromTheme(QLatin1String("configure")),
 | 
			
		||||
                   tr("Configure Panel"),
 | 
			
		||||
                   this, SLOT(showConfigDialog())
 | 
			
		||||
                  );
 | 
			
		||||
@ -950,7 +951,7 @@ void LXQtPanel::showPopupMenu(Plugin *plugin)
 | 
			
		||||
 | 
			
		||||
    if (a->count() > 1)
 | 
			
		||||
    {
 | 
			
		||||
        menu->addAction(XdgIcon::fromTheme(QStringLiteral("list-remove")),
 | 
			
		||||
        menu->addAction(XdgIcon::fromTheme(QLatin1String("list-remove")),
 | 
			
		||||
                       tr("Remove Panel"),
 | 
			
		||||
                       this, SLOT(userRequestForDeletion())
 | 
			
		||||
                      );
 | 
			
		||||
 | 
			
		||||
@ -39,16 +39,16 @@
 | 
			
		||||
LXQtPanelApplication::LXQtPanelApplication(int& argc, char** argv)
 | 
			
		||||
    : LXQt::Application(argc, argv, true)
 | 
			
		||||
{
 | 
			
		||||
    QCoreApplication::setApplicationName(QStringLiteral("lxqt-panel"));
 | 
			
		||||
    QCoreApplication::setApplicationName(QLatin1String("lxqt-panel"));
 | 
			
		||||
    QCoreApplication::setApplicationVersion(LXQT_VERSION);
 | 
			
		||||
 | 
			
		||||
    QCommandLineParser parser;
 | 
			
		||||
    parser.setApplicationDescription(QStringLiteral("LXQt panel"));
 | 
			
		||||
    parser.setApplicationDescription(QLatin1String("LXQt panel"));
 | 
			
		||||
    parser.addHelpOption();
 | 
			
		||||
    parser.addVersionOption();
 | 
			
		||||
 | 
			
		||||
    QCommandLineOption configFileOption(QStringList()
 | 
			
		||||
            << QStringLiteral("c") << QStringLiteral("config") << QStringLiteral("configfile"),
 | 
			
		||||
            << QLatin1String("c") << QLatin1String("config") << QLatin1String("configfile"),
 | 
			
		||||
            QCoreApplication::translate("main", "Use alternate configuration file."),
 | 
			
		||||
            QCoreApplication::translate("main", "Configuration file"));
 | 
			
		||||
    parser.addOption(configFileOption);
 | 
			
		||||
@ -58,7 +58,7 @@ LXQtPanelApplication::LXQtPanelApplication(int& argc, char** argv)
 | 
			
		||||
    const QString configFile = parser.value(configFileOption);
 | 
			
		||||
 | 
			
		||||
    if (configFile.isEmpty())
 | 
			
		||||
        mSettings = new LXQt::Settings(QStringLiteral("panel"), this);
 | 
			
		||||
        mSettings = new LXQt::Settings(QLatin1String("panel"), this);
 | 
			
		||||
    else
 | 
			
		||||
        mSettings = new LXQt::Settings(configFile, QSettings::IniFormat, this);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -38,7 +38,7 @@ Several plugins are loaded by default, the desktop menu and windows workspaces c
 | 
			
		||||
By right clickin over there show config setting options for each plugins and also panel itsefl.
 | 
			
		||||
.SH AUTOSTART
 | 
			
		||||
The module only are showed on \fBLXQt\fR desktop environment, but you can create an autostart action 
 | 
			
		||||
for you prefered desktop environment.
 | 
			
		||||
for you preferred desktop environment.
 | 
			
		||||
.SH "REPORTING BUGS"
 | 
			
		||||
Report bugs to https://github.com/LXDE/LXQt/issues
 | 
			
		||||
.SH "SEE ALSO"
 | 
			
		||||
 | 
			
		||||
@ -69,9 +69,9 @@ QVariant PanelPluginsModel::data(const QModelIndex & index, int role/* = Qt::Dis
 | 
			
		||||
    {
 | 
			
		||||
        case Qt::DisplayRole:
 | 
			
		||||
            if (plugin.second.isNull())
 | 
			
		||||
                ret = QStringLiteral("<b>Unknown</b> (%1)").arg(plugin.first);
 | 
			
		||||
                ret = QString("<b>Unknown</b> (%1)").arg(plugin.first);
 | 
			
		||||
            else
 | 
			
		||||
                ret = QStringLiteral("<b>%1</b> (%2)").arg(plugin.second->name(), plugin.first);
 | 
			
		||||
                ret = QString("<b>%1</b> (%2)").arg(plugin.second->name(), plugin.first);
 | 
			
		||||
            break;
 | 
			
		||||
        case Qt::DecorationRole:
 | 
			
		||||
            if (plugin.second.isNull())
 | 
			
		||||
@ -246,7 +246,7 @@ QString PanelPluginsModel::findNewPluginSettingsGroup(const QString &pluginType)
 | 
			
		||||
    groups.sort();
 | 
			
		||||
 | 
			
		||||
    // Generate new section name
 | 
			
		||||
    QString pluginName = QStringLiteral("%1").arg(pluginType);
 | 
			
		||||
    QString pluginName = QString("%1").arg(pluginType);
 | 
			
		||||
 | 
			
		||||
    if (!groups.contains(pluginName))
 | 
			
		||||
        return pluginName;
 | 
			
		||||
@ -254,7 +254,7 @@ QString PanelPluginsModel::findNewPluginSettingsGroup(const QString &pluginType)
 | 
			
		||||
    {
 | 
			
		||||
        for (int i = 2; true; ++i)
 | 
			
		||||
        {
 | 
			
		||||
            pluginName = QStringLiteral("%1%2").arg(pluginType).arg(i);
 | 
			
		||||
            pluginName = QString("%1%2").arg(pluginType).arg(i);
 | 
			
		||||
            if (!groups.contains(pluginName))
 | 
			
		||||
                return pluginName;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -199,34 +199,34 @@ namespace
 | 
			
		||||
    // to be not stripped (as unused/unreferenced) in static linking time
 | 
			
		||||
    static plugin_tuple_t const static_plugins[] = {
 | 
			
		||||
#if defined(WITH_CLOCK_PLUGIN)
 | 
			
		||||
        std::make_tuple(QStringLiteral("clock"), plugin_ptr_t{new LXQtClockPluginLibrary}, loadPluginTranslation_clock_helper),// clock
 | 
			
		||||
        std::make_tuple(QLatin1String("clock"), plugin_ptr_t{new LXQtClockPluginLibrary}, loadPluginTranslation_clock_helper),// clock
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(WITH_DESKTOPSWITCH_PLUGIN)
 | 
			
		||||
        std::make_tuple(QStringLiteral("desktopswitch"), plugin_ptr_t{new DesktopSwitchPluginLibrary}, loadPluginTranslation_desktopswitch_helper),// desktopswitch
 | 
			
		||||
        std::make_tuple(QLatin1String("desktopswitch"), plugin_ptr_t{new DesktopSwitchPluginLibrary}, loadPluginTranslation_desktopswitch_helper),// desktopswitch
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(WITH_MAINMENU_PLUGIN)
 | 
			
		||||
        std::make_tuple(QStringLiteral("mainmenu"), plugin_ptr_t{new LXQtMainMenuPluginLibrary}, loadPluginTranslation_mainmenu_helper),// mainmenu
 | 
			
		||||
        std::make_tuple(QLatin1String("mainmenu"), plugin_ptr_t{new LXQtMainMenuPluginLibrary}, loadPluginTranslation_mainmenu_helper),// mainmenu
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(WITH_QUICKLAUNCH_PLUGIN)
 | 
			
		||||
        std::make_tuple(QStringLiteral("quicklaunch"), plugin_ptr_t{new LXQtQuickLaunchPluginLibrary}, loadPluginTranslation_quicklaunch_helper),// quicklaunch
 | 
			
		||||
        std::make_tuple(QLatin1String("quicklaunch"), plugin_ptr_t{new LXQtQuickLaunchPluginLibrary}, loadPluginTranslation_quicklaunch_helper),// quicklaunch
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(WITH_SHOWDESKTOP_PLUGIN)
 | 
			
		||||
        std::make_tuple(QStringLiteral("showdesktop"), plugin_ptr_t{new ShowDesktopLibrary}, loadPluginTranslation_showdesktop_helper),// showdesktop
 | 
			
		||||
        std::make_tuple(QLatin1String("showdesktop"), plugin_ptr_t{new ShowDesktopLibrary}, loadPluginTranslation_showdesktop_helper),// showdesktop
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(WITH_SPACER_PLUGIN)
 | 
			
		||||
        std::make_tuple(QStringLiteral("spacer"), plugin_ptr_t{new SpacerPluginLibrary}, loadPluginTranslation_spacer_helper),// spacer
 | 
			
		||||
        std::make_tuple(QLatin1String("spacer"), plugin_ptr_t{new SpacerPluginLibrary}, loadPluginTranslation_spacer_helper),// spacer
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(WITH_STATUSNOTIFIER_PLUGIN)
 | 
			
		||||
        std::make_tuple(QStringLiteral("statusnotifier"), plugin_ptr_t{new StatusNotifierLibrary}, loadPluginTranslation_statusnotifier_helper),// statusnotifier
 | 
			
		||||
        std::make_tuple(QLatin1String("statusnotifier"), plugin_ptr_t{new StatusNotifierLibrary}, loadPluginTranslation_statusnotifier_helper),// statusnotifier
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(WITH_TASKBAR_PLUGIN)
 | 
			
		||||
        std::make_tuple(QStringLiteral("taskbar"), plugin_ptr_t{new LXQtTaskBarPluginLibrary}, loadPluginTranslation_taskbar_helper),// taskbar
 | 
			
		||||
        std::make_tuple(QLatin1String("taskbar"), plugin_ptr_t{new LXQtTaskBarPluginLibrary}, loadPluginTranslation_taskbar_helper),// taskbar
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(WITH_TRAY_PLUGIN)
 | 
			
		||||
        std::make_tuple(QStringLiteral("tray"), plugin_ptr_t{new LXQtTrayPluginLibrary}, loadPluginTranslation_tray_helper),// tray
 | 
			
		||||
        std::make_tuple(QLatin1String("tray"), plugin_ptr_t{new LXQtTrayPluginLibrary}, loadPluginTranslation_tray_helper),// tray
 | 
			
		||||
#endif
 | 
			
		||||
#if defined(WITH_WORLDCLOCK_PLUGIN)
 | 
			
		||||
        std::make_tuple(QStringLiteral("worldclock"), plugin_ptr_t{new LXQtWorldClockLibrary}, loadPluginTranslation_worldclock_helper),// worldclock
 | 
			
		||||
        std::make_tuple(QLatin1String("worldclock"), plugin_ptr_t{new LXQtWorldClockLibrary}, loadPluginTranslation_worldclock_helper),// worldclock
 | 
			
		||||
#endif
 | 
			
		||||
    };
 | 
			
		||||
    static constexpr plugin_tuple_t const * const plugins_begin = static_plugins;
 | 
			
		||||
@ -408,7 +408,7 @@ QMenu *Plugin::popupMenu() const
 | 
			
		||||
    if (mPlugin->flags().testFlag(ILXQtPanelPlugin::HaveConfigDialog))
 | 
			
		||||
    {
 | 
			
		||||
        QAction* configAction = new QAction(
 | 
			
		||||
            XdgIcon::fromTheme(QStringLiteral("preferences-other")),
 | 
			
		||||
            XdgIcon::fromTheme(QLatin1String("preferences-other")),
 | 
			
		||||
            tr("Configure \"%1\"").arg(name), menu);
 | 
			
		||||
        menu->addAction(configAction);
 | 
			
		||||
        connect(configAction, SIGNAL(triggered()), this, SLOT(showConfigureDialog()));
 | 
			
		||||
@ -421,7 +421,7 @@ QMenu *Plugin::popupMenu() const
 | 
			
		||||
    menu->addSeparator();
 | 
			
		||||
 | 
			
		||||
    QAction* removeAction = new QAction(
 | 
			
		||||
        XdgIcon::fromTheme(QStringLiteral("list-remove")),
 | 
			
		||||
        XdgIcon::fromTheme(QLatin1String("list-remove")),
 | 
			
		||||
        tr("Remove \"%1\"").arg(name), menu);
 | 
			
		||||
    menu->addAction(removeAction);
 | 
			
		||||
    connect(removeAction, SIGNAL(triggered()), this, SLOT(requestRemove()));
 | 
			
		||||
 | 
			
		||||
@ -41,7 +41,7 @@
 | 
			
		||||
#include "desktopswitchbutton.h"
 | 
			
		||||
#include "desktopswitchconfiguration.h"
 | 
			
		||||
 | 
			
		||||
#define DEFAULT_SHORTCUT_TEMPLATE QStringLiteral("Control+F%1")
 | 
			
		||||
static const QString DEFAULT_SHORTCUT_TEMPLATE("Control+F%1");
 | 
			
		||||
 | 
			
		||||
DesktopSwitch::DesktopSwitch(const ILXQtPanelPluginStartupInfo &startupInfo) :
 | 
			
		||||
    QObject(),
 | 
			
		||||
@ -84,7 +84,7 @@ void DesktopSwitch::registerShortcuts()
 | 
			
		||||
        path = QString("/panel/%1/desktop_%2").arg(settings()->group()).arg(i + 1);
 | 
			
		||||
        description = tr("Switch to desktop %1").arg(i + 1);
 | 
			
		||||
 | 
			
		||||
        gshortcut = GlobalKeyShortcut::Client::instance()->addAction(QStringLiteral(), path, description, this);
 | 
			
		||||
        gshortcut = GlobalKeyShortcut::Client::instance()->addAction(QString(), path, description, this);
 | 
			
		||||
        if (nullptr != gshortcut)
 | 
			
		||||
        {
 | 
			
		||||
            m_keys << gshortcut;
 | 
			
		||||
 | 
			
		||||
@ -106,5 +106,5 @@ void KbdStateConfig::save()
 | 
			
		||||
 | 
			
		||||
void KbdStateConfig::configureLayouts()
 | 
			
		||||
{
 | 
			
		||||
    QProcess::startDetached(QStringLiteral("lxqt-config-input"));
 | 
			
		||||
    QProcess::startDetached(QLatin1String("lxqt-config-input"));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -63,8 +63,7 @@ LXQtMainMenu::LXQtMainMenu(const ILXQtPanelPluginStartupInfo &startupInfo):
 | 
			
		||||
    QObject(),
 | 
			
		||||
    ILXQtPanelPlugin(startupInfo),
 | 
			
		||||
    mMenu(0),
 | 
			
		||||
    mShortcut(0),
 | 
			
		||||
    mLockCascadeChanges(false)
 | 
			
		||||
    mShortcut(0)
 | 
			
		||||
{
 | 
			
		||||
#ifdef HAVE_MENU_CACHE
 | 
			
		||||
    mMenuCache = NULL;
 | 
			
		||||
@ -84,8 +83,15 @@ LXQtMainMenu::LXQtMainMenu(const ILXQtPanelPluginStartupInfo &startupInfo):
 | 
			
		||||
 | 
			
		||||
    settingsChanged();
 | 
			
		||||
 | 
			
		||||
    connect(mShortcut, SIGNAL(activated()), &mDelayedPopup, SLOT(start()));
 | 
			
		||||
    connect(mShortcut, SIGNAL(shortcutChanged(QString,QString)), this, SLOT(shortcutChanged(QString,QString)));
 | 
			
		||||
    mShortcut = GlobalKeyShortcut::Client::instance()->addAction(QString{}, QString("/panel/%1/show_hide").arg(settings()->group()), tr("Show/hide main menu"), this);
 | 
			
		||||
    if (mShortcut)
 | 
			
		||||
    {
 | 
			
		||||
        connect(mShortcut, &GlobalKeyShortcut::Action::registrationFinished, [this] {
 | 
			
		||||
            if (mShortcut->shortcut().isEmpty())
 | 
			
		||||
                mShortcut->changeShortcut(DEFAULT_SHORTCUT);
 | 
			
		||||
        });
 | 
			
		||||
        connect(mShortcut, &GlobalKeyShortcut::Action::activated, [this] { if (!mHideTimer.isActive()) mDelayedPopup.start(); });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -110,31 +116,12 @@ LXQtMainMenu::~LXQtMainMenu()
 | 
			
		||||
 ************************************************/
 | 
			
		||||
void LXQtMainMenu::showHideMenu()
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    if (mMenu && (mMenu->isVisible() || mHideTimer.isActive()))
 | 
			
		||||
    if (mMenu && mMenu->isVisible())
 | 
			
		||||
        mMenu->hide();
 | 
			
		||||
    else
 | 
			
		||||
        showMenu();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/************************************************
 | 
			
		||||
 | 
			
		||||
 ************************************************/
 | 
			
		||||
void LXQtMainMenu::shortcutChanged(const QString &/*oldShortcut*/, const QString &newShortcut)
 | 
			
		||||
{
 | 
			
		||||
    if (!newShortcut.isEmpty())
 | 
			
		||||
    {
 | 
			
		||||
        mLockCascadeChanges = true;
 | 
			
		||||
 | 
			
		||||
        settings()->setValue("dialog/shortcut", newShortcut);
 | 
			
		||||
        settings()->sync();
 | 
			
		||||
        mShortcutSeq = QKeySequence(newShortcut);
 | 
			
		||||
 | 
			
		||||
        mLockCascadeChanges = false;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/************************************************
 | 
			
		||||
 | 
			
		||||
 ************************************************/
 | 
			
		||||
@ -161,9 +148,6 @@ void LXQtMainMenu::menuCacheReloadNotify(MenuCache* cache, gpointer user_data)
 | 
			
		||||
 ************************************************/
 | 
			
		||||
void LXQtMainMenu::settingsChanged()
 | 
			
		||||
{
 | 
			
		||||
    if (mLockCascadeChanges)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    if (settings()->value("showText", false).toBool())
 | 
			
		||||
    {
 | 
			
		||||
        mButton.setText(settings()->value("text", "Start").toString());
 | 
			
		||||
@ -213,18 +197,6 @@ void LXQtMainMenu::settingsChanged()
 | 
			
		||||
#endif
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    QString shortcut = settings()->value("shortcut", DEFAULT_SHORTCUT).toString();
 | 
			
		||||
    if (shortcut.isEmpty())
 | 
			
		||||
        shortcut = DEFAULT_SHORTCUT;
 | 
			
		||||
 | 
			
		||||
    if (!mShortcut)
 | 
			
		||||
        mShortcut = GlobalKeyShortcut::Client::instance()->addAction(shortcut, QString("/panel/%1/show_hide").arg(settings()->group()), tr("Show/hide main menu"), this);
 | 
			
		||||
    else if (mShortcut->shortcut() != shortcut)
 | 
			
		||||
    {
 | 
			
		||||
        mShortcut->changeShortcut(shortcut);
 | 
			
		||||
    }
 | 
			
		||||
    mShortcutSeq = QKeySequence(shortcut);
 | 
			
		||||
 | 
			
		||||
    setMenuFontSize();
 | 
			
		||||
 | 
			
		||||
    realign();
 | 
			
		||||
@ -301,7 +273,7 @@ void LXQtMainMenu::setMenuFontSize()
 | 
			
		||||
 ************************************************/
 | 
			
		||||
QDialog *LXQtMainMenu::configureDialog()
 | 
			
		||||
{
 | 
			
		||||
    return new LXQtMainMenuConfiguration(*settings(), DEFAULT_SHORTCUT);
 | 
			
		||||
    return new LXQtMainMenuConfiguration(*settings(), mShortcut, DEFAULT_SHORTCUT);
 | 
			
		||||
}
 | 
			
		||||
/************************************************
 | 
			
		||||
 | 
			
		||||
@ -333,8 +305,9 @@ bool LXQtMainMenu::eventFilter(QObject *obj, QEvent *event)
 | 
			
		||||
        {
 | 
			
		||||
            // if our shortcut key is pressed while the menu is open, close the menu
 | 
			
		||||
            QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event);
 | 
			
		||||
            if(mShortcutSeq == QKeySequence(keyEvent->modifiers() + keyEvent->key()))
 | 
			
		||||
            if (keyEvent->modifiers() & ~Qt::ShiftModifier)
 | 
			
		||||
            {
 | 
			
		||||
                mHideTimer.start();
 | 
			
		||||
                mMenu->hide(); // close the app menu
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -95,10 +95,8 @@ private:
 | 
			
		||||
    XdgMenu mXdgMenu;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    bool mLockCascadeChanges;
 | 
			
		||||
    QTimer mDelayedPopup;
 | 
			
		||||
    QTimer mHideTimer;
 | 
			
		||||
    QKeySequence mShortcutSeq;
 | 
			
		||||
    QString mMenuFile;
 | 
			
		||||
 | 
			
		||||
protected slots:
 | 
			
		||||
@ -109,7 +107,6 @@ protected slots:
 | 
			
		||||
private slots:
 | 
			
		||||
    void showMenu();
 | 
			
		||||
    void showHideMenu();
 | 
			
		||||
    void shortcutChanged(const QString &oldShortcut, const QString &newShortcut);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class LXQtMainMenuPluginLibrary: public QObject, public ILXQtPanelPluginLibrary
 | 
			
		||||
 | 
			
		||||
@ -30,15 +30,17 @@
 | 
			
		||||
#include "ui_lxqtmainmenuconfiguration.h"
 | 
			
		||||
#include <XdgMenu>
 | 
			
		||||
#include <XdgIcon>
 | 
			
		||||
#include <lxqt-globalkeys.h>
 | 
			
		||||
 | 
			
		||||
#include <QFileDialog>
 | 
			
		||||
 | 
			
		||||
LXQtMainMenuConfiguration::LXQtMainMenuConfiguration(QSettings &settings, const QString &defaultShortcut, QWidget *parent) :
 | 
			
		||||
LXQtMainMenuConfiguration::LXQtMainMenuConfiguration(QSettings &settings, GlobalKeyShortcut::Action * shortcut, const QString &defaultShortcut, QWidget *parent) :
 | 
			
		||||
    QDialog(parent),
 | 
			
		||||
    ui(new Ui::LXQtMainMenuConfiguration),
 | 
			
		||||
    mSettings(settings),
 | 
			
		||||
    mOldSettings(settings),
 | 
			
		||||
    mDefaultShortcut(defaultShortcut)
 | 
			
		||||
    mDefaultShortcut(defaultShortcut),
 | 
			
		||||
    mShortcut(shortcut)
 | 
			
		||||
{
 | 
			
		||||
    setAttribute(Qt::WA_DeleteOnClose);
 | 
			
		||||
    setObjectName("MainMenuConfigurationWindow");
 | 
			
		||||
@ -55,7 +57,7 @@ LXQtMainMenuConfiguration::LXQtMainMenuConfiguration(QSettings &settings, const
 | 
			
		||||
    connect(ui->chooseMenuFilePB, SIGNAL(clicked()), this, SLOT(chooseMenuFile()));
 | 
			
		||||
    connect(ui->menuFilePathLE, &QLineEdit::textChanged, [this] (QString const & file)
 | 
			
		||||
        {
 | 
			
		||||
            mSettings.setValue(QStringLiteral("menu_file"), file);
 | 
			
		||||
            mSettings.setValue(QLatin1String("menu_file"), file);
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
    connect(ui->shortcutEd, SIGNAL(shortcutGrabbed(QString)), this, SLOT(shortcutChanged(QString)));
 | 
			
		||||
@ -63,6 +65,8 @@ LXQtMainMenuConfiguration::LXQtMainMenuConfiguration(QSettings &settings, const
 | 
			
		||||
 | 
			
		||||
    connect(ui->customFontCB, SIGNAL(toggled(bool)), this, SLOT(customFontChanged(bool)));
 | 
			
		||||
    connect(ui->customFontSizeSB, SIGNAL(valueChanged(int)), this, SLOT(customFontSizeChanged(int)));
 | 
			
		||||
 | 
			
		||||
    connect(mShortcut, &GlobalKeyShortcut::Action::shortcutChanged, this, &LXQtMainMenuConfiguration::globalShortcutChanged);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
LXQtMainMenuConfiguration::~LXQtMainMenuConfiguration()
 | 
			
		||||
@ -81,7 +85,7 @@ void LXQtMainMenuConfiguration::loadSettings()
 | 
			
		||||
        menuFile = XdgMenu::getMenuFileName();
 | 
			
		||||
    }
 | 
			
		||||
    ui->menuFilePathLE->setText(menuFile);
 | 
			
		||||
    ui->shortcutEd->setText(mSettings.value("shortcut", "Alt+F1").toString());
 | 
			
		||||
    ui->shortcutEd->setText(nullptr != mShortcut ? mShortcut->shortcut() : mDefaultShortcut);
 | 
			
		||||
 | 
			
		||||
    ui->customFontCB->setChecked(mSettings.value("customFont", false).toBool());
 | 
			
		||||
    LXQt::Settings lxqtSettings("lxqt"); //load system font size as init value
 | 
			
		||||
@ -106,7 +110,7 @@ void LXQtMainMenuConfiguration::chooseMenuFile()
 | 
			
		||||
{
 | 
			
		||||
    QFileDialog *d = new QFileDialog(this,
 | 
			
		||||
                                     tr("Choose menu file"),
 | 
			
		||||
                                     QStringLiteral("/etc/xdg/menus"),
 | 
			
		||||
                                     QLatin1String("/etc/xdg/menus"),
 | 
			
		||||
                                     tr("Menu files (*.menu)"));
 | 
			
		||||
    d->setWindowModality(Qt::WindowModal);
 | 
			
		||||
    d->setAttribute(Qt::WA_DeleteOnClose);
 | 
			
		||||
@ -116,10 +120,15 @@ void LXQtMainMenuConfiguration::chooseMenuFile()
 | 
			
		||||
    d->show();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void LXQtMainMenuConfiguration::globalShortcutChanged(const QString &/*oldShortcut*/, const QString &newShortcut)
 | 
			
		||||
{
 | 
			
		||||
    ui->shortcutEd->setText(newShortcut);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void LXQtMainMenuConfiguration::shortcutChanged(const QString &value)
 | 
			
		||||
{
 | 
			
		||||
    ui->shortcutEd->setText(value);
 | 
			
		||||
    mSettings.setValue("shortcut", value);
 | 
			
		||||
    if (mShortcut)
 | 
			
		||||
        mShortcut->changeShortcut(value);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void LXQtMainMenuConfiguration::shortcutReset()
 | 
			
		||||
 | 
			
		||||
@ -40,12 +40,16 @@ namespace Ui {
 | 
			
		||||
    class LXQtMainMenuConfiguration;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
namespace GlobalKeyShortcut {
 | 
			
		||||
    class Action;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class LXQtMainMenuConfiguration : public QDialog
 | 
			
		||||
{
 | 
			
		||||
    Q_OBJECT
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
    explicit LXQtMainMenuConfiguration(QSettings &settings, const QString &defaultShortcut, QWidget *parent = 0);
 | 
			
		||||
    explicit LXQtMainMenuConfiguration(QSettings &settings, GlobalKeyShortcut::Action * shortcut, const QString &defaultShortcut, QWidget *parent = 0);
 | 
			
		||||
    ~LXQtMainMenuConfiguration();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
@ -53,8 +57,11 @@ private:
 | 
			
		||||
    QSettings &mSettings;
 | 
			
		||||
    LXQt::SettingsCache mOldSettings;
 | 
			
		||||
    QString mDefaultShortcut;
 | 
			
		||||
    GlobalKeyShortcut::Action * mShortcut;
 | 
			
		||||
 | 
			
		||||
private slots:
 | 
			
		||||
    void globalShortcutChanged(const QString &oldShortcut, const QString &newShortcut);
 | 
			
		||||
    void shortcutChanged(const QString &value);
 | 
			
		||||
    /*
 | 
			
		||||
      Saves settings in conf file.
 | 
			
		||||
    */
 | 
			
		||||
@ -63,7 +70,6 @@ private slots:
 | 
			
		||||
    void textButtonChanged(const QString &value);
 | 
			
		||||
    void showTextChanged(bool value);
 | 
			
		||||
    void chooseMenuFile();
 | 
			
		||||
    void shortcutChanged(const QString &value);
 | 
			
		||||
    void shortcutReset();
 | 
			
		||||
    void customFontChanged(bool value);
 | 
			
		||||
    void customFontSizeChanged(int value);
 | 
			
		||||
 | 
			
		||||
@ -32,7 +32,9 @@
 | 
			
		||||
Button::Button(QWidget * parent) :
 | 
			
		||||
    QToolButton(parent)
 | 
			
		||||
{
 | 
			
		||||
    setIcon(XdgIcon::fromTheme(QStringLiteral("drive-removable-media")));
 | 
			
		||||
    //Note: don't use the QStringLiteral here as it is causing a SEGFAULT in static finalization time
 | 
			
		||||
    //(the string is released upon our *.so removal, but the reference is still in held in libqtxdg...)
 | 
			
		||||
    setIcon(XdgIcon::fromTheme(QLatin1String("drive-removable-media")));
 | 
			
		||||
    setToolTip(tr("Removable media/devices manager"));
 | 
			
		||||
    setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -37,9 +37,9 @@ Configuration::Configuration(QSettings &settings, QWidget *parent) :
 | 
			
		||||
    ui(new Ui::Configuration)
 | 
			
		||||
{
 | 
			
		||||
    ui->setupUi(this);
 | 
			
		||||
    ui->devAddedCombo->addItem(tr("Popup menu"), QStringLiteral(ACT_SHOW_MENU));
 | 
			
		||||
    ui->devAddedCombo->addItem(tr("Show info"),  QStringLiteral(ACT_SHOW_INFO));
 | 
			
		||||
    ui->devAddedCombo->addItem(tr("Do nothing"), QStringLiteral(ACT_NOTHING));
 | 
			
		||||
    ui->devAddedCombo->addItem(tr("Popup menu"), QLatin1String(ACT_SHOW_MENU));
 | 
			
		||||
    ui->devAddedCombo->addItem(tr("Show info"),  QLatin1String(ACT_SHOW_INFO));
 | 
			
		||||
    ui->devAddedCombo->addItem(tr("Do nothing"), QLatin1String(ACT_NOTHING));
 | 
			
		||||
 | 
			
		||||
    loadSettings();
 | 
			
		||||
    connect(ui->devAddedCombo, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
 | 
			
		||||
@ -54,12 +54,12 @@ Configuration::~Configuration()
 | 
			
		||||
 | 
			
		||||
void Configuration::loadSettings()
 | 
			
		||||
{
 | 
			
		||||
    QVariant value = settings().value(QStringLiteral(CFG_KEY_ACTION), QStringLiteral(ACT_SHOW_INFO));
 | 
			
		||||
    QVariant value = settings().value(QLatin1String(CFG_KEY_ACTION), QLatin1String(ACT_SHOW_INFO));
 | 
			
		||||
    setComboboxIndexByData(ui->devAddedCombo, value, 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Configuration::devAddedChanged(int index)
 | 
			
		||||
{
 | 
			
		||||
    QString s = ui->devAddedCombo->itemData(index).toString();
 | 
			
		||||
    settings().setValue(QStringLiteral(CFG_KEY_ACTION), s);
 | 
			
		||||
    settings().setValue(QLatin1String(CFG_KEY_ACTION), s);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -66,7 +66,7 @@ void LXQtMountPlugin::realign()
 | 
			
		||||
 | 
			
		||||
void LXQtMountPlugin::settingsChanged()
 | 
			
		||||
{
 | 
			
		||||
    QString s = settings()->value(QStringLiteral(CFG_KEY_ACTION)).toString();
 | 
			
		||||
    QString s = settings()->value(QLatin1String(CFG_KEY_ACTION)).toString();
 | 
			
		||||
    DeviceAction::ActionId actionId = DeviceAction::stringToActionId(s, DeviceAction::ActionMenu);
 | 
			
		||||
 | 
			
		||||
    if (mDeviceAction == nullptr || mDeviceAction->Type() != actionId)
 | 
			
		||||
 | 
			
		||||
@ -49,7 +49,7 @@ public:
 | 
			
		||||
    ~LXQtMountPlugin();
 | 
			
		||||
 | 
			
		||||
    virtual QWidget *widget() { return mButton; }
 | 
			
		||||
    virtual QString themeId() const { return QStringLiteral("LXQtMount"); }
 | 
			
		||||
    virtual QString themeId() const { return QLatin1String("LXQtMount"); }
 | 
			
		||||
    virtual ILXQtPanelPlugin::Flags flags() const { return PreferRightAlignment | HaveConfigDialog; }
 | 
			
		||||
 | 
			
		||||
    Popup *popup() { return mPopup; }
 | 
			
		||||
 | 
			
		||||
@ -89,7 +89,9 @@ void MenuDiskItem::setMountStatus(bool mounted)
 | 
			
		||||
 | 
			
		||||
void MenuDiskItem::updateMountStatus()
 | 
			
		||||
{
 | 
			
		||||
    static const QIcon icon = XdgIcon::fromTheme(mDevice.icon(), QStringLiteral("drive-removable-media"));
 | 
			
		||||
    //Note: don't use the QStringLiteral here as it is causing a SEGFAULT in static finalization time
 | 
			
		||||
    //(the string is released upon our *.so removal, but the reference is still in held in libqtxdg...)
 | 
			
		||||
    static const QIcon icon = XdgIcon::fromTheme(mDevice.icon(), QLatin1String("drive-removable-media"));
 | 
			
		||||
 | 
			
		||||
    if (mDevice.isValid())
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
@ -31,9 +31,9 @@
 | 
			
		||||
//Note: strings can't actually be translated here (in static initialization time)
 | 
			
		||||
//      the QT_TR_NOOP here is just for qt translate tools to get the strings for translation
 | 
			
		||||
const QStringList SpacerConfiguration::msTypes = {
 | 
			
		||||
    QStringLiteral(QT_TR_NOOP("lined"))
 | 
			
		||||
    , QStringLiteral(QT_TR_NOOP("dotted"))
 | 
			
		||||
    , QStringLiteral(QT_TR_NOOP("invisible"))
 | 
			
		||||
    QLatin1String(QT_TR_NOOP("lined"))
 | 
			
		||||
    , QLatin1String(QT_TR_NOOP("dotted"))
 | 
			
		||||
    , QLatin1String(QT_TR_NOOP("invisible"))
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
SpacerConfiguration::SpacerConfiguration(QSettings *settings, QWidget *parent)
 | 
			
		||||
 | 
			
		||||
@ -42,7 +42,7 @@ SniAsync::SniAsync(const QString &service, const QString &path, const QDBusConne
 | 
			
		||||
 | 
			
		||||
QDBusPendingReply<QDBusVariant> SniAsync::asyncPropGet(QString const & property)
 | 
			
		||||
{
 | 
			
		||||
    QDBusMessage msg = QDBusMessage::createMethodCall(mSni.service(), mSni.path(), QStringLiteral("org.freedesktop.DBus.Properties"), QStringLiteral("Get"));
 | 
			
		||||
    QDBusMessage msg = QDBusMessage::createMethodCall(mSni.service(), mSni.path(), QLatin1String("org.freedesktop.DBus.Properties"), QLatin1String("Get"));
 | 
			
		||||
    msg << mSni.interface() << property;
 | 
			
		||||
    return mSni.connection().asyncCall(msg);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -50,20 +50,20 @@ StatusNotifierButton::StatusNotifierButton(QString service, QString objectPath,
 | 
			
		||||
    connect(interface, &SniAsync::NewToolTip, this, &StatusNotifierButton::newToolTip);
 | 
			
		||||
    connect(interface, &SniAsync::NewStatus, this, &StatusNotifierButton::newStatus);
 | 
			
		||||
 | 
			
		||||
    interface->propertyGetAsync(QStringLiteral("Menu"), [this] (QDBusObjectPath path) {
 | 
			
		||||
    interface->propertyGetAsync(QLatin1String("Menu"), [this] (QDBusObjectPath path) {
 | 
			
		||||
        if (!path.path().isEmpty())
 | 
			
		||||
        {
 | 
			
		||||
            mMenu = (new DBusMenuImporter(interface->service(), path.path(), this))->menu();
 | 
			
		||||
            dynamic_cast<QObject &>(*mMenu).setParent(this);
 | 
			
		||||
            mMenu->setObjectName(QStringLiteral("StatusNotifierMenu"));
 | 
			
		||||
            mMenu->setObjectName(QLatin1String("StatusNotifierMenu"));
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    interface->propertyGetAsync(QStringLiteral("Status"), [this] (QString status) {
 | 
			
		||||
    interface->propertyGetAsync(QLatin1String("Status"), [this] (QString status) {
 | 
			
		||||
        newStatus(status);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    interface->propertyGetAsync(QStringLiteral("IconThemePath"), [this] (QString value) {
 | 
			
		||||
    interface->propertyGetAsync(QLatin1String("IconThemePath"), [this] (QString value) {
 | 
			
		||||
        mThemePath = value;
 | 
			
		||||
        //do the logic of icons after we've got the theme path
 | 
			
		||||
        refetchIcon(Active);
 | 
			
		||||
@ -99,18 +99,18 @@ void StatusNotifierButton::refetchIcon(Status status)
 | 
			
		||||
    QString nameProperty, pixmapProperty;
 | 
			
		||||
    if (status == Active)
 | 
			
		||||
    {
 | 
			
		||||
        nameProperty = QStringLiteral("OverlayIconName");
 | 
			
		||||
        pixmapProperty = QStringLiteral("OverlayIconPixmap");
 | 
			
		||||
        nameProperty = QLatin1String("OverlayIconName");
 | 
			
		||||
        pixmapProperty = QLatin1String("OverlayIconPixmap");
 | 
			
		||||
    }
 | 
			
		||||
    else if (status == NeedsAttention)
 | 
			
		||||
    {
 | 
			
		||||
        nameProperty = QStringLiteral("AttentionIconName");
 | 
			
		||||
        pixmapProperty = QStringLiteral("AttentionIconPixmap");
 | 
			
		||||
        nameProperty = QLatin1String("AttentionIconName");
 | 
			
		||||
        pixmapProperty = QLatin1String("AttentionIconPixmap");
 | 
			
		||||
    }
 | 
			
		||||
    else // status == Passive
 | 
			
		||||
    {
 | 
			
		||||
        nameProperty = QStringLiteral("IconName");
 | 
			
		||||
        pixmapProperty = QStringLiteral("IconPixmap");
 | 
			
		||||
        nameProperty = QLatin1String("IconName");
 | 
			
		||||
        pixmapProperty = QLatin1String("IconPixmap");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    interface->propertyGetAsync(nameProperty, [this, status, pixmapProperty] (QString iconName) {
 | 
			
		||||
@ -204,12 +204,12 @@ void StatusNotifierButton::refetchIcon(Status status)
 | 
			
		||||
 | 
			
		||||
void StatusNotifierButton::newToolTip()
 | 
			
		||||
{
 | 
			
		||||
    interface->propertyGetAsync(QStringLiteral("ToolTip"), [this] (ToolTip tooltip) {
 | 
			
		||||
    interface->propertyGetAsync(QLatin1String("ToolTip"), [this] (ToolTip tooltip) {
 | 
			
		||||
        QString toolTipTitle = tooltip.title;
 | 
			
		||||
        if (!toolTipTitle.isEmpty())
 | 
			
		||||
            setToolTip(toolTipTitle);
 | 
			
		||||
        else
 | 
			
		||||
            interface->propertyGetAsync(QStringLiteral("Title"), [this] (QString title) {
 | 
			
		||||
            interface->propertyGetAsync(QLatin1String("Title"), [this] (QString title) {
 | 
			
		||||
                // we should get here only in case the ToolTip.title was empty
 | 
			
		||||
                if (!title.isEmpty())
 | 
			
		||||
                    setToolTip(title);
 | 
			
		||||
@ -220,9 +220,9 @@ void StatusNotifierButton::newToolTip()
 | 
			
		||||
void StatusNotifierButton::newStatus(QString status)
 | 
			
		||||
{
 | 
			
		||||
    Status newStatus;
 | 
			
		||||
    if (status == QStringLiteral("Passive"))
 | 
			
		||||
    if (status == QLatin1String("Passive"))
 | 
			
		||||
        newStatus = Passive;
 | 
			
		||||
    else if (status == QStringLiteral("Active"))
 | 
			
		||||
    else if (status == QLatin1String("Active"))
 | 
			
		||||
        newStatus = Active;
 | 
			
		||||
    else
 | 
			
		||||
        newStatus = NeedsAttention;
 | 
			
		||||
 | 
			
		||||
@ -133,28 +133,28 @@ public Q_SLOTS: // METHODS
 | 
			
		||||
    {
 | 
			
		||||
        QList<QVariant> argumentList;
 | 
			
		||||
        argumentList << QVariant::fromValue(x) << QVariant::fromValue(y);
 | 
			
		||||
        return asyncCallWithArgumentList(QStringLiteral("Activate"), argumentList);
 | 
			
		||||
        return asyncCallWithArgumentList(QLatin1String("Activate"), argumentList);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    inline QDBusPendingReply<> ContextMenu(int x, int y)
 | 
			
		||||
    {
 | 
			
		||||
        QList<QVariant> argumentList;
 | 
			
		||||
        argumentList << QVariant::fromValue(x) << QVariant::fromValue(y);
 | 
			
		||||
        return asyncCallWithArgumentList(QStringLiteral("ContextMenu"), argumentList);
 | 
			
		||||
        return asyncCallWithArgumentList(QLatin1String("ContextMenu"), argumentList);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    inline QDBusPendingReply<> Scroll(int delta, const QString &orientation)
 | 
			
		||||
    {
 | 
			
		||||
        QList<QVariant> argumentList;
 | 
			
		||||
        argumentList << QVariant::fromValue(delta) << QVariant::fromValue(orientation);
 | 
			
		||||
        return asyncCallWithArgumentList(QStringLiteral("Scroll"), argumentList);
 | 
			
		||||
        return asyncCallWithArgumentList(QLatin1String("Scroll"), argumentList);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    inline QDBusPendingReply<> SecondaryActivate(int x, int y)
 | 
			
		||||
    {
 | 
			
		||||
        QList<QVariant> argumentList;
 | 
			
		||||
        argumentList << QVariant::fromValue(x) << QVariant::fromValue(y);
 | 
			
		||||
        return asyncCallWithArgumentList(QStringLiteral("SecondaryActivate"), argumentList);
 | 
			
		||||
        return asyncCallWithArgumentList(QLatin1String("SecondaryActivate"), argumentList);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
Q_SIGNALS: // SIGNALS
 | 
			
		||||
 | 
			
		||||
@ -620,7 +620,7 @@ void LXQtSysStatContent::paintEvent(QPaintEvent *event)
 | 
			
		||||
 | 
			
		||||
void LXQtSysStatContent::toolTipInfo(QString const & tooltip)
 | 
			
		||||
{
 | 
			
		||||
    setToolTip(QStringLiteral("<b>%1(%2)</b><br>%3")
 | 
			
		||||
    setToolTip(QString("<b>%1(%2)</b><br>%3")
 | 
			
		||||
            .arg(QCoreApplication::translate("LXQtSysStatConfiguration", mDataType.toStdString().c_str()))
 | 
			
		||||
            .arg(QCoreApplication::translate("LXQtSysStatConfiguration", mDataSource.toStdString().c_str()))
 | 
			
		||||
            .arg(tooltip));
 | 
			
		||||
 | 
			
		||||
@ -38,9 +38,9 @@
 | 
			
		||||
//Note: strings can't actually be translated here (in static initialization time)
 | 
			
		||||
//      the QT_TR_NOOP here is just for qt translate tools to get the strings for translation
 | 
			
		||||
const QStringList LXQtSysStatConfiguration::msStatTypes = {
 | 
			
		||||
    QStringLiteral(QT_TR_NOOP("CPU"))
 | 
			
		||||
    , QStringLiteral(QT_TR_NOOP("Memory"))
 | 
			
		||||
    , QStringLiteral(QT_TR_NOOP("Network"))
 | 
			
		||||
    QLatin1String(QT_TR_NOOP("CPU"))
 | 
			
		||||
    , QLatin1String(QT_TR_NOOP("Memory"))
 | 
			
		||||
    , QLatin1String(QT_TR_NOOP("Network"))
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
namespace
 | 
			
		||||
 | 
			
		||||
@ -142,7 +142,7 @@ void LXQtTaskBar::dragEnterEvent(QDragEnterEvent* event)
 | 
			
		||||
    if (event->mimeData()->hasFormat(LXQtTaskGroup::mimeDataFormat()))
 | 
			
		||||
    {
 | 
			
		||||
        event->acceptProposedAction();
 | 
			
		||||
        buttonMove(nullptr, LXQtTaskGroup::mimeDataData(event->mimeData()), event->pos());
 | 
			
		||||
        buttonMove(nullptr, qobject_cast<LXQtTaskGroup *>(event->source()), event->pos());
 | 
			
		||||
    } else
 | 
			
		||||
        event->ignore();
 | 
			
		||||
    QWidget::dragEnterEvent(event);
 | 
			
		||||
@ -154,23 +154,22 @@ void LXQtTaskBar::dragEnterEvent(QDragEnterEvent* event)
 | 
			
		||||
void LXQtTaskBar::dragMoveEvent(QDragMoveEvent * event)
 | 
			
		||||
{
 | 
			
		||||
    //we don't get any dragMoveEvents if dragEnter wasn't accepted
 | 
			
		||||
    buttonMove(nullptr, LXQtTaskGroup::mimeDataData(event->mimeData()), event->pos());
 | 
			
		||||
    buttonMove(nullptr, qobject_cast<LXQtTaskGroup *>(event->source()), event->pos());
 | 
			
		||||
    QWidget::dragMoveEvent(event);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/************************************************
 | 
			
		||||
 | 
			
		||||
 ************************************************/
 | 
			
		||||
void LXQtTaskBar::buttonMove(LXQtTaskGroup * dst, QString const & srcWindow, QPoint const & pos)
 | 
			
		||||
void LXQtTaskBar::buttonMove(LXQtTaskGroup * dst, LXQtTaskGroup * src, QPoint const & pos)
 | 
			
		||||
{
 | 
			
		||||
    LXQtTaskGroup *src_group = mGroupsHash.value(srcWindow, nullptr);
 | 
			
		||||
    if (!src_group)
 | 
			
		||||
    int src_index;
 | 
			
		||||
    if (!src || -1 == (src_index = mLayout->indexOf(src)))
 | 
			
		||||
    {
 | 
			
		||||
        qDebug() << "Dropped invalid";
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const int src_index = mLayout->indexOf(src_group);
 | 
			
		||||
    const int size = mLayout->count();
 | 
			
		||||
    Q_ASSERT(0 < size);
 | 
			
		||||
    //dst is nullptr in case the drop occured on empty space in taskbar
 | 
			
		||||
@ -245,8 +244,8 @@ void LXQtTaskBar::addWindow(WId window, QString const & groupId)
 | 
			
		||||
        connect(group, SIGNAL(visibilityChanged(bool)), this, SLOT(refreshPlaceholderVisibility()));
 | 
			
		||||
        connect(group, &LXQtTaskGroup::popupShown, this, &LXQtTaskBar::groupPopupShown);
 | 
			
		||||
        connect(group, SIGNAL(windowDisowned(WId)), this, SLOT(refreshTaskList()));
 | 
			
		||||
        connect(group, &LXQtTaskButton::dragging, this, [this] (QString const & mimeWindow, QPoint const & pos) {
 | 
			
		||||
            buttonMove(qobject_cast<LXQtTaskGroup *>(sender()), mimeWindow, pos);
 | 
			
		||||
        connect(group, &LXQtTaskButton::dragging, this, [this] (QObject * dragSource, QPoint const & pos) {
 | 
			
		||||
            buttonMove(qobject_cast<LXQtTaskGroup *>(sender()), qobject_cast<LXQtTaskGroup *>(dragSource), pos);
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        mLayout->addWidget(group);
 | 
			
		||||
 | 
			
		||||
@ -95,7 +95,7 @@ private slots:
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    void addWindow(WId window, QString const & groupId);
 | 
			
		||||
    void buttonMove(LXQtTaskGroup * dst, QString const & srcWindow, QPoint const & pos);
 | 
			
		||||
    void buttonMove(LXQtTaskGroup * dst, LXQtTaskGroup * src, QPoint const & pos);
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    QHash<QString, LXQtTaskGroup*> mGroupsHash;
 | 
			
		||||
 | 
			
		||||
@ -52,7 +52,7 @@ LXQtTaskbarConfiguration::LXQtTaskbarConfiguration(QSettings &settings, QWidget
 | 
			
		||||
    //Note: in KWindowSystem desktops are numbered from 1..N
 | 
			
		||||
    const int desk_cnt = KWindowSystem::numberOfDesktops();
 | 
			
		||||
    for (int i = 1; desk_cnt >= i; ++i)
 | 
			
		||||
        ui->showDesktopNumCB->addItem(QStringLiteral("%1 - %2").arg(i).arg(KWindowSystem::desktopName(i)), i);
 | 
			
		||||
        ui->showDesktopNumCB->addItem(QString("%1 - %2").arg(i).arg(KWindowSystem::desktopName(i)), i);
 | 
			
		||||
 | 
			
		||||
    loadSettings();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -70,17 +70,6 @@ void LeftAlignedTextStyle::drawItemText(QPainter * painter, const QRect & rect,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/************************************************
 | 
			
		||||
 | 
			
		||||
************************************************/
 | 
			
		||||
QString LXQtTaskButton::mimeDataData(QMimeData const * mime)
 | 
			
		||||
{
 | 
			
		||||
    QString data;
 | 
			
		||||
    QDataStream stream(mime->data(mimeDataFormat()));
 | 
			
		||||
    stream >> data;
 | 
			
		||||
    return data;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/************************************************
 | 
			
		||||
 | 
			
		||||
************************************************/
 | 
			
		||||
@ -173,7 +162,7 @@ void LXQtTaskButton::dragEnterEvent(QDragEnterEvent *event)
 | 
			
		||||
    event->acceptProposedAction();
 | 
			
		||||
    if (event->mimeData()->hasFormat(mimeDataFormat()))
 | 
			
		||||
    {
 | 
			
		||||
        emit dragging(mimeDataData(event->mimeData()), event->pos());
 | 
			
		||||
        emit dragging(event->source(), event->pos());
 | 
			
		||||
        setAttribute(Qt::WA_UnderMouse, false);
 | 
			
		||||
    } else
 | 
			
		||||
    {
 | 
			
		||||
@ -187,7 +176,7 @@ void LXQtTaskButton::dragMoveEvent(QDragMoveEvent * event)
 | 
			
		||||
{
 | 
			
		||||
    if (event->mimeData()->hasFormat(mimeDataFormat()))
 | 
			
		||||
    {
 | 
			
		||||
        emit dragging(mimeDataData(event->mimeData()), event->pos());
 | 
			
		||||
        emit dragging(event->source(), event->pos());
 | 
			
		||||
        setAttribute(Qt::WA_UnderMouse, false);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -203,7 +192,7 @@ void LXQtTaskButton::dropEvent(QDropEvent *event)
 | 
			
		||||
    mDNDTimer->stop();
 | 
			
		||||
    if (event->mimeData()->hasFormat(mimeDataFormat()))
 | 
			
		||||
    {
 | 
			
		||||
        emit dropped(mimeDataData(event->mimeData()), event->pos());
 | 
			
		||||
        emit dropped(event->source(), event->pos());
 | 
			
		||||
        setAttribute(Qt::WA_UnderMouse, false);
 | 
			
		||||
    }
 | 
			
		||||
    QToolButton::dropEvent(event);
 | 
			
		||||
@ -266,7 +255,20 @@ void LXQtTaskButton::mouseMoveEvent(QMouseEvent* event)
 | 
			
		||||
    QDrag *drag = new QDrag(this);
 | 
			
		||||
    drag->setMimeData(mimeData());
 | 
			
		||||
    QIcon ico = icon();
 | 
			
		||||
    drag->setPixmap(ico.pixmap(ico.actualSize({32, 32})));
 | 
			
		||||
    QPixmap img = ico.pixmap(ico.actualSize({32, 32}));
 | 
			
		||||
    drag->setPixmap(img);
 | 
			
		||||
    switch (parentTaskBar()->panel()->position())
 | 
			
		||||
    {
 | 
			
		||||
        case ILXQtPanel::PositionLeft:
 | 
			
		||||
        case ILXQtPanel::PositionTop:
 | 
			
		||||
            drag->setHotSpot({0, 0});
 | 
			
		||||
            break;
 | 
			
		||||
        case ILXQtPanel::PositionRight:
 | 
			
		||||
        case ILXQtPanel::PositionBottom:
 | 
			
		||||
            drag->setHotSpot(img.rect().bottomRight());
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    sDraggging = true;
 | 
			
		||||
    drag->exec();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -85,7 +85,6 @@ public:
 | 
			
		||||
 | 
			
		||||
    void refreshIconGeometry(QRect const & geom);
 | 
			
		||||
    static QString mimeDataFormat() { return QLatin1String("lxqt/lxqttaskbutton"); }
 | 
			
		||||
    static QString mimeDataData(QMimeData const * mime);
 | 
			
		||||
    /*! \return true if this buttom received DragEnter event (and no DragLeave event yet)
 | 
			
		||||
     * */
 | 
			
		||||
    bool hasDragAndDropHover() const;
 | 
			
		||||
@ -136,8 +135,8 @@ private slots:
 | 
			
		||||
    void activateWithDraggable();
 | 
			
		||||
 | 
			
		||||
signals:
 | 
			
		||||
    void dropped(QString const & mimeWindow, QPoint const & pos);
 | 
			
		||||
    void dragging(QString const & mimeWindow, QPoint const & pos);
 | 
			
		||||
    void dropped(QObject * dragSource, QPoint const & pos);
 | 
			
		||||
    void dragging(QObject * dragSource, QPoint const & pos);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef QHash<WId,LXQtTaskButton*> LXQtTaskButtonHash;
 | 
			
		||||
 | 
			
		||||
@ -329,7 +329,7 @@ void LXQtTaskGroup::regroup()
 | 
			
		||||
    {
 | 
			
		||||
        QString t = QString("%1 - %2 windows").arg(mGroupName).arg(cont);
 | 
			
		||||
        setText(t);
 | 
			
		||||
        setToolTip(parentTaskBar()->isShowGroupOnHover() ? QStringLiteral() : t);
 | 
			
		||||
        setToolTip(parentTaskBar()->isShowGroupOnHover() ? QString() : t);
 | 
			
		||||
        setWindowId(0);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -155,17 +155,19 @@ void LXQtVolume::setAudioEngine(AudioEngine *engine)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_engine = engine;
 | 
			
		||||
    connect(m_engine, SIGNAL(sinkListChanged()), this, SLOT(updateConfigurationSinkList()));
 | 
			
		||||
    connect(m_engine, &AudioEngine::sinkListChanged, this, &LXQtVolume::handleSinkListChanged);
 | 
			
		||||
 | 
			
		||||
    updateConfigurationSinkList();
 | 
			
		||||
    handleSinkListChanged();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void LXQtVolume::settingsChanged()
 | 
			
		||||
{
 | 
			
		||||
    m_defaultSinkIndex = settings()->value(SETTINGS_DEVICE, SETTINGS_DEFAULT_DEVICE).toInt();
 | 
			
		||||
    QString engineName = settings()->value(SETTINGS_AUDIO_ENGINE, SETTINGS_DEFAULT_AUDIO_ENGINE).toString();
 | 
			
		||||
    qDebug() << "settingsChanged" << engineName;
 | 
			
		||||
    if (!m_engine || m_engine->backendName() != engineName) {
 | 
			
		||||
    const bool new_engine = !m_engine || m_engine->backendName() != engineName;
 | 
			
		||||
    if (new_engine) {
 | 
			
		||||
#if defined(USE_PULSEAUDIO) && defined(USE_ALSA)
 | 
			
		||||
        if (engineName == QLatin1String("PulseAudio"))
 | 
			
		||||
            setAudioEngine(new PulseAudioEngine(this));
 | 
			
		||||
@ -194,21 +196,25 @@ void LXQtVolume::settingsChanged()
 | 
			
		||||
    m_volumeButton->setMixerCommand(settings()->value(SETTINGS_MIXER_COMMAND, SETTINGS_DEFAULT_MIXER_COMMAND).toString());
 | 
			
		||||
    m_volumeButton->volumePopup()->setSliderStep(settings()->value(SETTINGS_STEP, SETTINGS_DEFAULT_STEP).toInt());
 | 
			
		||||
 | 
			
		||||
    m_defaultSinkIndex = settings()->value(SETTINGS_DEVICE, SETTINGS_DEFAULT_DEVICE).toInt();
 | 
			
		||||
    if (m_engine && m_engine->sinks().count() > 0) {
 | 
			
		||||
        m_defaultSinkIndex = qBound(0, m_defaultSinkIndex, m_engine->sinks().count()-1);
 | 
			
		||||
 | 
			
		||||
        m_defaultSink = m_engine->sinks().at(m_defaultSinkIndex);
 | 
			
		||||
        m_volumeButton->volumePopup()->setDevice(m_defaultSink);
 | 
			
		||||
 | 
			
		||||
        m_engine->setIgnoreMaxVolume(settings()->value(SETTINGS_IGNORE_MAX_VOLUME, SETTINGS_DEFAULT_IGNORE_MAX_VOLUME).toBool());
 | 
			
		||||
    }
 | 
			
		||||
    if (!new_engine)
 | 
			
		||||
        handleSinkListChanged();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void LXQtVolume::updateConfigurationSinkList()
 | 
			
		||||
void LXQtVolume::handleSinkListChanged()
 | 
			
		||||
{
 | 
			
		||||
    if (m_engine && m_configDialog)
 | 
			
		||||
        m_configDialog->setSinkList(m_engine->sinks());
 | 
			
		||||
    if (m_engine)
 | 
			
		||||
    {
 | 
			
		||||
        if (m_engine->sinks().count() > 0)
 | 
			
		||||
        {
 | 
			
		||||
            m_defaultSink = m_engine->sinks().at(qBound(0, m_defaultSinkIndex, m_engine->sinks().count()-1));
 | 
			
		||||
            m_volumeButton->volumePopup()->setDevice(m_defaultSink);
 | 
			
		||||
 | 
			
		||||
            m_engine->setIgnoreMaxVolume(settings()->value(SETTINGS_IGNORE_MAX_VOLUME, SETTINGS_DEFAULT_IGNORE_MAX_VOLUME).toBool());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (m_configDialog)
 | 
			
		||||
            m_configDialog->setSinkList(m_engine->sinks());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void LXQtVolume::handleShortcutVolumeUp()
 | 
			
		||||
 | 
			
		||||
@ -62,7 +62,7 @@ public:
 | 
			
		||||
    void setAudioEngine(AudioEngine *engine);
 | 
			
		||||
protected slots:
 | 
			
		||||
    virtual void settingsChanged();
 | 
			
		||||
    void updateConfigurationSinkList();
 | 
			
		||||
    void handleSinkListChanged();
 | 
			
		||||
    void handleShortcutVolumeUp();
 | 
			
		||||
    void handleShortcutVolumeDown();
 | 
			
		||||
    void handleShortcutVolumeMute();
 | 
			
		||||
 | 
			
		||||
@ -116,12 +116,10 @@ static void contextSuccessCallback(pa_context *context, int success, void *userd
 | 
			
		||||
static void contextSubscriptionCallback(pa_context *context, pa_subscription_event_type_t t, uint32_t idx, void *userdata)
 | 
			
		||||
{
 | 
			
		||||
    PulseAudioEngine *pulseEngine = reinterpret_cast<PulseAudioEngine*>(userdata);
 | 
			
		||||
    foreach (AudioDevice *dev, pulseEngine->sinks()) {
 | 
			
		||||
        if (dev->index() == idx) {
 | 
			
		||||
            pulseEngine->requestSinkInfoUpdate(dev);
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (PA_SUBSCRIPTION_EVENT_REMOVE == t)
 | 
			
		||||
        pulseEngine->removeSink(idx);
 | 
			
		||||
    else
 | 
			
		||||
        pulseEngine->requestSinkInfoUpdate(idx);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -171,6 +169,18 @@ PulseAudioEngine::~PulseAudioEngine()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void PulseAudioEngine::removeSink(uint32_t idx)
 | 
			
		||||
{
 | 
			
		||||
    auto dev_i = std::find_if(m_sinks.begin(), m_sinks.end(), [idx] (AudioDevice * dev) { return dev->index() == idx; });
 | 
			
		||||
    if (m_sinks.end() == dev_i)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    QScopedPointer<AudioDevice> dev{*dev_i};
 | 
			
		||||
    m_cVolumeMap.remove(dev.data());
 | 
			
		||||
    m_sinks.erase(dev_i);
 | 
			
		||||
    emit sinkListChanged();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void PulseAudioEngine::addOrUpdateSink(const pa_sink_info *info)
 | 
			
		||||
{
 | 
			
		||||
    AudioDevice *dev = 0;
 | 
			
		||||
@ -202,14 +212,20 @@ void PulseAudioEngine::addOrUpdateSink(const pa_sink_info *info)
 | 
			
		||||
    dev->setVolumeNoCommit(((double)v * 100.0) / m_maximumVolume);
 | 
			
		||||
 | 
			
		||||
    if (newSink) {
 | 
			
		||||
        m_sinks.append(dev);
 | 
			
		||||
        //keep the sinks sorted by index()
 | 
			
		||||
        m_sinks.insert(
 | 
			
		||||
                std::lower_bound(m_sinks.begin(), m_sinks.end(), dev,  [] (AudioDevice const * const a, AudioDevice const * const b) {
 | 
			
		||||
                    return a->name() < b->name();
 | 
			
		||||
                    })
 | 
			
		||||
                , dev
 | 
			
		||||
                );
 | 
			
		||||
        emit sinkListChanged();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void PulseAudioEngine::requestSinkInfoUpdate(AudioDevice *device)
 | 
			
		||||
void PulseAudioEngine::requestSinkInfoUpdate(uint32_t idx)
 | 
			
		||||
{
 | 
			
		||||
    emit sinkInfoChanged(device);
 | 
			
		||||
    emit sinkInfoChanged(idx);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void PulseAudioEngine::commitDeviceVolume(AudioDevice *device)
 | 
			
		||||
@ -258,7 +274,7 @@ void PulseAudioEngine::setupSubscription()
 | 
			
		||||
    if (!m_ready)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    connect(this, SIGNAL(sinkInfoChanged(AudioDevice*)), this, SLOT(retrieveSinkInfo(AudioDevice*)), Qt::QueuedConnection);
 | 
			
		||||
    connect(this, &PulseAudioEngine::sinkInfoChanged, this, &PulseAudioEngine::retrieveSinkInfo, Qt::QueuedConnection);
 | 
			
		||||
    pa_context_set_subscribe_callback(m_context, contextSubscriptionCallback, this);
 | 
			
		||||
 | 
			
		||||
    pa_threaded_mainloop_lock(m_mainLoop);
 | 
			
		||||
@ -349,7 +365,7 @@ void PulseAudioEngine::connectContext()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void PulseAudioEngine::retrieveSinkInfo(AudioDevice *device)
 | 
			
		||||
void PulseAudioEngine::retrieveSinkInfo(uint32_t idx)
 | 
			
		||||
{
 | 
			
		||||
    if (!m_ready)
 | 
			
		||||
        return;
 | 
			
		||||
@ -357,7 +373,7 @@ void PulseAudioEngine::retrieveSinkInfo(AudioDevice *device)
 | 
			
		||||
    pa_threaded_mainloop_lock(m_mainLoop);
 | 
			
		||||
 | 
			
		||||
    pa_operation *operation;
 | 
			
		||||
    operation = pa_context_get_sink_info_by_index(m_context, device->index(), sinkInfoCallback, this);
 | 
			
		||||
    operation = pa_context_get_sink_info_by_index(m_context, idx, sinkInfoCallback, this);
 | 
			
		||||
    while (pa_operation_get_state(operation) == PA_OPERATION_RUNNING)
 | 
			
		||||
        pa_threaded_mainloop_wait(m_mainLoop);
 | 
			
		||||
    pa_operation_unref(operation);
 | 
			
		||||
 | 
			
		||||
@ -56,7 +56,8 @@ public:
 | 
			
		||||
 | 
			
		||||
    int volumeMax(AudioDevice */*device*/) const { return m_maximumVolume; }
 | 
			
		||||
 | 
			
		||||
    void requestSinkInfoUpdate(AudioDevice *device);
 | 
			
		||||
    void requestSinkInfoUpdate(uint32_t idx);
 | 
			
		||||
    void removeSink(uint32_t idx);
 | 
			
		||||
    void addOrUpdateSink(const pa_sink_info *info);
 | 
			
		||||
 | 
			
		||||
    pa_context_state_t contextState() const { return m_contextState; }
 | 
			
		||||
@ -65,13 +66,13 @@ public:
 | 
			
		||||
 | 
			
		||||
public slots:
 | 
			
		||||
    void commitDeviceVolume(AudioDevice *device);
 | 
			
		||||
    void retrieveSinkInfo(AudioDevice *device);
 | 
			
		||||
    void retrieveSinkInfo(uint32_t idx);
 | 
			
		||||
    void setMute(AudioDevice *device, bool state);
 | 
			
		||||
    void setContextState(pa_context_state_t state);
 | 
			
		||||
    void setIgnoreMaxVolume(bool ignore);
 | 
			
		||||
 | 
			
		||||
signals:
 | 
			
		||||
    void sinkInfoChanged(AudioDevice *device);
 | 
			
		||||
    void sinkInfoChanged(uint32_t idx);
 | 
			
		||||
    void contextStateChanged(pa_context_state_t state);
 | 
			
		||||
    void readyChanged(bool ready);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -106,7 +106,7 @@ void VolumePopup::handleSliderValueChanged(int value)
 | 
			
		||||
        return;
 | 
			
		||||
    // qDebug("VolumePopup::handleSliderValueChanged: %d\n", value);
 | 
			
		||||
    m_device->setVolume(value);
 | 
			
		||||
    m_volumeSlider->setToolTip(QStringLiteral("%1%").arg(value));
 | 
			
		||||
    m_volumeSlider->setToolTip(QString("%1%").arg(value));
 | 
			
		||||
    dynamic_cast<QWidget&>(*parent()).setToolTip(m_volumeSlider->toolTip()); //parent is the button on panel
 | 
			
		||||
    QToolTip::showText(QCursor::pos(),  m_volumeSlider->toolTip(), m_volumeSlider);
 | 
			
		||||
}
 | 
			
		||||
@ -128,7 +128,7 @@ void VolumePopup::handleDeviceVolumeChanged(int volume)
 | 
			
		||||
    // signal emission.
 | 
			
		||||
    m_volumeSlider->blockSignals(true);
 | 
			
		||||
    m_volumeSlider->setValue(volume);
 | 
			
		||||
    m_volumeSlider->setToolTip(QStringLiteral("%1%").arg(volume));
 | 
			
		||||
    m_volumeSlider->setToolTip(QString("%1%").arg(volume));
 | 
			
		||||
    dynamic_cast<QWidget&>(*parent()).setToolTip(m_volumeSlider->toolTip()); //parent is the button on panel
 | 
			
		||||
    m_volumeSlider->blockSignals(false);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user