Implement volume control buttons

This commit is contained in:
Victor Tran 2020-06-15 21:28:36 +10:00
parent 14451aa7da
commit 0e19d61879
No known key found for this signature in database
GPG key ID: FBA10B22D602BAC1
350 changed files with 4390 additions and 8 deletions

View file

@ -130,6 +130,7 @@ BarWindow::BarWindow(QWidget* parent) :
connect(StateManager::statusCenterManager(), &StatusCenterManager::showStatusCenter, this, &BarWindow::showStatusCenter);
connect(StateManager::statusCenterManager(), &StatusCenterManager::hideStatusCenter, this, &BarWindow::hideStatusCenter);
KeyGrab* statusCenterGrab = new KeyGrab(QKeySequence(Qt::MetaModifier | Qt::Key_Tab));
connect(statusCenterGrab, &KeyGrab::activated, this, [ = ] {
StateManager::statusCenterManager()->show();

View file

@ -43,14 +43,6 @@ MainBarWidget::MainBarWidget(QWidget* parent) :
connect(new KeyGrab(QKeySequence(Qt::Key_Super_L), "gatewayOpen"), &KeyGrab::activated, this, [ = ] {
Gateway::instance()->show();
});
connect(new KeyGrab(QKeySequence(Qt::Key_VolumeUp), "volumeUp"), &KeyGrab::activated, this, [ = ] {
// Gateway::instance()->show();
StateManager::instance()->hudManager()->showHud({
{"icon", "audio-volume-high"},
{"title", "Volume"},
{"value", 1.4}
});
});
}
MainBarWidget::~MainBarWidget() {

View file

@ -0,0 +1,49 @@
QT += gui widgets
TEMPLATE = lib
CONFIG += plugin
CONFIG += c++11
# Include the-libs build tools
include(/usr/share/the-libs/pri/gentranslations.pri)
LIBS += -lKF5PulseAudioQt
INCLUDEPATH += /usr/include/KF5/KF5PulseAudioQt/PulseAudioQt
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
common.cpp \
eventhandler.cpp \
plugin.cpp
HEADERS += \
common.h \
eventhandler.h \
plugin.h
DISTFILES += \
Plugin.json \
defaults.conf
unix {
translations.files = translations/*.qm
translations.path = /usr/share/thedesk/AudioPlugin/translations
defaults.files = defaults.conf
defaults.path = /etc/theSuite/theDesk/AudioPlugin/
INSTALLS += translations defaults
}
include(../plugins.pri)

View file

@ -0,0 +1,8 @@
{
"name": "Audio Management",
"icon": "preferences-desktop-audio",
"uuid": "6a978f09-c3f4-4843-b32f-4e377ed6cd0f",
"vi": {
"name": "Quản lý âm thanh"
}
}

View file

@ -0,0 +1,50 @@
/****************************************
*
* INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE
* Copyright (C) 2020 Victor Tran
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* *************************************/
#include "common.h"
#include <Port>
Common::DevicePort Common::portForSink(PulseAudioQt::Sink* sink) {
PulseAudioQt::Port* port = sink->ports().at(sink->activePortIndex());
if (port->availability() == PulseAudioQt::Port::Unavailable) {
//Weird thing? Use a workaround here
QList<PulseAudioQt::Port*> availablePorts;
for (PulseAudioQt::Port* port : sink->ports()) {
if (port->availability() != PulseAudioQt::Port::Unavailable) availablePorts.append(port);
}
if (availablePorts.count() == 1) {
port = availablePorts.first();
} else {
port = nullptr;
}
}
if (port != nullptr) {
QString newPort;
if (port->name().contains("headphones", Qt::CaseInsensitive)) {
return Headphones;
} else if (port->name().contains("speaker", Qt::CaseInsensitive)) {
return Speakers;
}
}
return Unknown;
}

View file

@ -0,0 +1,35 @@
/****************************************
*
* INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE
* Copyright (C) 2020 Victor Tran
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* *************************************/
#ifndef COMMON_H
#define COMMON_H
#include <Sink>
namespace Common {
enum DevicePort {
Speakers,
Headphones,
Unknown
};
DevicePort portForSink(PulseAudioQt::Sink* sink);
}
#endif // COMMON_H

View file

View file

@ -0,0 +1,116 @@
/****************************************
*
* INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE
* Copyright (C) 2020 Victor Tran
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* *************************************/
#include "eventhandler.h"
#include "common.h"
#include <QKeySequence>
#include <statemanager.h>
#include <hudmanager.h>
#include <keygrab.h>
#include <Context>
#include <Server>
#include <QIcon>
struct EventHandlerPrivate {
KeyGrab* volumeUp;
KeyGrab* volumeDown;
KeyGrab* volumeMute;
PulseAudioQt::Sink* defaultSink = nullptr;
};
EventHandler::EventHandler(QObject* parent) : QObject(parent) {
d = new EventHandlerPrivate();
connect(PulseAudioQt::Context::instance()->server(), &PulseAudioQt::Server::defaultSinkChanged, this, &EventHandler::defaultSinkChanged);
d->volumeUp = new KeyGrab(QKeySequence(Qt::Key_VolumeUp), "volumeUp");
d->volumeDown = new KeyGrab(QKeySequence(Qt::Key_VolumeDown), "volumeDown");
d->volumeMute = new KeyGrab(QKeySequence(Qt::Key_VolumeMute), "volumeMute");
connect(d->volumeUp, &KeyGrab::activated, this, [ = ] {
this->adjustVolume(5);
});
connect(d->volumeDown, &KeyGrab::activated, this, [ = ] {
this->adjustVolume(-5);
});
connect(d->volumeMute, &KeyGrab::activated, this, [ = ] {
});
}
EventHandler::~EventHandler() {
d->volumeUp->deleteLater();
d->volumeDown->deleteLater();
d->volumeMute->deleteLater();
delete d;
}
void EventHandler::adjustVolume(int percentageChange) {
//Get the default sink and find the widget for this sink
PulseAudioQt::Sink* sink = PulseAudioQt::Context::instance()->server()->defaultSink();
if (!sink) {
StateManager::instance()->hudManager()->showHud({
{"icon", "audio-volume-muted"},
{"title", tr("No Audio Devices")}
});
return;
}
qint64 factor = PulseAudioQt::normalVolume();
qint64 newVolume = sink->volume() + (factor / 100) * percentageChange;
sink->setVolume(newVolume);
showHud(sink);
}
void EventHandler::defaultSinkChanged(PulseAudioQt::Sink* defaultSink) {
if (d->defaultSink) {
d->defaultSink->disconnect(this);
}
d->defaultSink = defaultSink;
if (defaultSink) {
connect(defaultSink, &PulseAudioQt::Sink::activePortIndexChanged, this, [ = ] {
showHud(defaultSink);
});
showHud(defaultSink);
}
}
void EventHandler::showHud(PulseAudioQt::Sink* sink) {
QVariantMap hudData;
hudData.insert("value", sink->volume() / static_cast<double>(PulseAudioQt::normalVolume()));
switch (Common::portForSink(sink)) {
case Common::Speakers:
hudData.insert("icon", "audio-volume-high");
hudData.insert("title", tr("Speakers"));
break;
case Common::Headphones:
hudData.insert("icon", "audio-headphones");
hudData.insert("title", tr("Headphones"));
break;
case Common::Unknown:
hudData.insert("icon", "audio-volume-high");
hudData.insert("title", tr("Volume"));
break;
}
StateManager::instance()->hudManager()->showHud(hudData);
}

View file

@ -0,0 +1,46 @@
/****************************************
*
* INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE
* Copyright (C) 2020 Victor Tran
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* *************************************/
#ifndef KEYHANDLER_H
#define KEYHANDLER_H
#include <QObject>
namespace PulseAudioQt {
class Sink;
}
struct EventHandlerPrivate;
class EventHandler : public QObject {
Q_OBJECT
public:
explicit EventHandler(QObject* parent = nullptr);
~EventHandler();
signals:
private:
EventHandlerPrivate* d;
void adjustVolume(int percentageChange);
void defaultSinkChanged(PulseAudioQt::Sink* defaultSink);
void showHud(PulseAudioQt::Sink* sink);
};
#endif // KEYHANDLER_H

View file

@ -0,0 +1,60 @@
/****************************************
*
* INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE
* Copyright (C) 2020 Victor Tran
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* *************************************/
#include "plugin.h"
#include <QDebug>
#include <QApplication>
#include <statemanager.h>
#include <localemanager.h>
#include <statuscentermanager.h>
#include <QDir>
#include <tsettings.h>
#include "eventhandler.h"
struct PluginPrivate {
int translationSet;
EventHandler* keyHandler;
};
Plugin::Plugin() {
d = new PluginPrivate();
}
Plugin::~Plugin() {
delete d;
}
void Plugin::activate() {
d->translationSet = StateManager::localeManager()->addTranslationSet({
QDir::cleanPath(qApp->applicationDirPath() + "/../plugins/AudioPlugin/translations"),
"/usr/share/thedesk/AudioPlugin/translations"
});
tSettings::registerDefaults(QDir::cleanPath(qApp->applicationDirPath() + "/../plugins/AudioPlugin/defaults.conf"));
tSettings::registerDefaults("/etc/theSuite/theDesk/AudioPlugin/defaults.conf");
d->keyHandler = new EventHandler();
}
void Plugin::deactivate() {
d->keyHandler->deleteLater();
StateManager::localeManager()->removeTranslationSet(d->translationSet);
}

View file

@ -0,0 +1,44 @@
/****************************************
*
* INSERT-PROJECT-NAME-HERE - INSERT-GENERIC-NAME-HERE
* Copyright (C) 2020 Victor Tran
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* *************************************/
#ifndef PLUGIN_H
#define PLUGIN_H
#include "plugininterface.h"
struct PluginPrivate;
class Plugin : public QObject, public PluginInterface {
Q_OBJECT
Q_PLUGIN_METADATA(IID PluginInterface_iid FILE "Plugin.json")
Q_INTERFACES(PluginInterface)
public:
Plugin();
~Plugin();
private:
PluginPrivate* d;
// PluginInterface interface
public:
void activate();
void deactivate();
};
#endif // PLUGIN_H

View file

@ -0,0 +1 @@
<クd<>箆!ソ`。スン

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -0,0 +1 @@
<クd<>箆!ソ`。スン

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

Binary file not shown.

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="et_EE" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -0,0 +1 @@
<クd<>箆!ソ`。スン

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -0,0 +1 @@
<クd<>箆!ソ`。スン

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

Binary file not shown.

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="et_EE" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -0,0 +1 @@
<クd<>箆!ソ`。スン

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -0,0 +1 @@
<クd<>箆!ソ`。スン

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -0,0 +1 @@
<クd<>箆!ソ`。スン

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

Binary file not shown.

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="dz_BT" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -0,0 +1 @@
<クd<>箆!ソ`。スン

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -0,0 +1 @@
<クd<>箆!ソ`。スン

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -0,0 +1 @@
<クd<>箆!ソ`。スン

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -0,0 +1 @@
<クd<>箆!ソ`。スン

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

Binary file not shown.

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="km_KH" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

Binary file not shown.

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="kw_GB" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

Binary file not shown.

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="lb_LU" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -0,0 +1 @@
<クd<>箆!ソ`。スン

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -0,0 +1 @@
<クd<>箆!ソ`。スン

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

Binary file not shown.

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="mr_IN" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

Binary file not shown.

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="om_ET" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

Binary file not shown.

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="ps_AF" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -0,0 +1 @@
<クd<>箆!ソ`。スン

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

Binary file not shown.

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="sa_IN" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

Binary file not shown.

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="sd_PK" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

Binary file not shown.

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="so_SO" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -0,0 +1 @@
<クd<>箆!ソ`。スン

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -0,0 +1 @@
<クd<>箆!ソ`。スン

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

Binary file not shown.

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="tn_ZA" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -0,0 +1 @@
<クd<>箆!ソ`。スン

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -0,0 +1 @@
<クd<>箆!ソ`。スン

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

Binary file not shown.

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="id_ID" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -0,0 +1 @@
<クd<>箆!ソ`。スン

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

Binary file not shown.

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="az_AZ" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -0,0 +1 @@
<クd<>箆!ソ`。スン

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

Binary file not shown.

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="bg_BG" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -0,0 +1 @@
<クd<>箆!ソ`。スン

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -0,0 +1 @@
<クd<>箆!ソ`。スン

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

Binary file not shown.

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="ba_RU" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -0,0 +1 @@
<クd<>箆!ソ`。スン

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

Binary file not shown.

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="ca_ES" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -0,0 +1 @@
<クd<>箆!ソ`。スン

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -0,0 +1 @@
<クd<>箆!ソ`。スン

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -0,0 +1 @@
<クd<>箆!ソ`。スン

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" sourcelanguage="en_US">
<context>
<name>EventHandler</name>
<message>
<source>No Audio Devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Speakers</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Headphones</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Volume</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -0,0 +1 @@
<クd<>箆!ソ`。スン

Some files were not shown because too many files have changed in this diff Show more