Cherry-picked upstream version 0.9.0+20151101.

Install manpage for lxqt-panel
Deleted debian/lintian-overrides
Added minimum version for liblxqt and libqtxdg
ubuntu/bionic
Alf Gaida 9 years ago
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

@ -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

@ -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),

@ -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

@ -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…
Cancel
Save