diff options
85 files changed, 1712 insertions, 1918 deletions
diff --git a/src/ChannelListener.cpp b/src/ChannelListener.cpp index 382637aee..1f0656d19 100644 --- a/src/ChannelListener.cpp +++ b/src/ChannelListener.cpp @@ -10,18 +10,12 @@ #ifdef MUMBLE # include "ServerHandler.h" # include "Database.h" +# include "Global.h" #endif #include <QtCore/QReadLocker> #include <QtCore/QWriteLocker> - -#ifdef MUMBLE -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -# include "Global.h" -#endif - // init static instance ChannelListener ChannelListener::s_instance; @@ -255,7 +249,7 @@ void ChannelListener::setInitialServerSyncDone(bool done) { } void ChannelListener::saveToDB() { - if (!g.sh || g.sh->qbaDigest.isEmpty() || g.uiSession == 0) { + if (!Global::get().sh || Global::get().sh->qbaDigest.isEmpty() || Global::get().uiSession == 0) { // Can't save as we don't have enough context return; } @@ -268,9 +262,9 @@ void ChannelListener::saveToDB() { } // Save the currently listened channels - g.db->setChannelListeners(g.sh->qbaDigest, ChannelListener::getListenedChannelsForUser(g.uiSession)); + Global::get().db->setChannelListeners(Global::get().sh->qbaDigest, ChannelListener::getListenedChannelsForUser(Global::get().uiSession)); // And also the currently set volume adjustments (if they're not set to 1.0) - g.db->setChannelListenerLocalVolumeAdjustments(g.sh->qbaDigest, + Global::get().db->setChannelListenerLocalVolumeAdjustments(Global::get().sh->qbaDigest, ChannelListener::getAllListenerLocalVolumeAdjustments(true)); } #endif diff --git a/src/mumble/ACLEditor.cpp b/src/mumble/ACLEditor.cpp index b9f932687..c1863ecbe 100644 --- a/src/mumble/ACLEditor.cpp +++ b/src/mumble/ACLEditor.cpp @@ -19,8 +19,6 @@ # include <QtGui/QMessageBox> #endif -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. #include "Global.h" ACLGroup::ACLGroup(const QString &name) : Group(nullptr, name) { @@ -60,7 +58,7 @@ ACLEditor::ACLEditor(int channelparentid, QWidget *p) : QDialog(p) { qleChannelPassword->hide(); qlChannelPassword->hide(); - if (g.sh->uiVersion >= 0x010300) { + if (Global::get().sh->uiVersion >= 0x010300) { qsbChannelMaxUsers->setRange(0, INT_MAX); qsbChannelMaxUsers->setValue(0); qsbChannelMaxUsers->setSpecialValueText(tr("Default server value")); @@ -85,7 +83,7 @@ ACLEditor::ACLEditor(int channelid, const MumbleProto::ACL &mea, QWidget *p) : Q iChannel = channelid; Channel *pChannel = Channel::get(iChannel); if (!pChannel) { - g.l->log(Log::Warning, tr("Failed: Invalid channel")); + Global::get().l->log(Log::Warning, tr("Failed: Invalid channel")); QDialog::reject(); return; } @@ -126,7 +124,7 @@ ACLEditor::ACLEditor(int channelid, const MumbleProto::ACL &mea, QWidget *p) : Q qsbChannelPosition->setRange(INT_MIN, INT_MAX); qsbChannelPosition->setValue(pChannel->iPosition); - if (g.sh->uiVersion >= 0x010300) { + if (Global::get().sh->uiVersion >= 0x010300) { qsbChannelMaxUsers->setRange(0, INT_MAX); qsbChannelMaxUsers->setValue(pChannel->uiMaxUsers); qsbChannelMaxUsers->setSpecialValueText(tr("Default server value")); @@ -150,7 +148,7 @@ ACLEditor::ACLEditor(int channelid, const MumbleProto::ACL &mea, QWidget *p) : Q if (!name.isEmpty()) { // If the server's version is less than 1.4.0 then it won't support the new permission to reset a // comment/avatar. Skipping this iteration of the loop prevents checkboxes for it being added to the UI. - if ((g.sh->uiVersion < 0x010400) && (perm == ChanACL::ResetUserContent)) + if ((Global::get().sh->uiVersion < 0x010400) && (perm == ChanACL::ResetUserContent)) continue; QCheckBox *qcb; @@ -285,7 +283,7 @@ void ACLEditor::accept() { Channel *pChannel = Channel::get(iChannel); if (!pChannel) { // Channel gone while editing - g.l->log(Log::Warning, tr("Failed: Invalid channel")); + Global::get().l->log(Log::Warning, tr("Failed: Invalid channel")); QDialog::reject(); return; } @@ -299,7 +297,7 @@ void ACLEditor::accept() { // Update channel state if (bAddChannelMode) { - g.sh->createChannel(iChannel, qleChannelName->text(), rteChannelDescription->text(), + Global::get().sh->createChannel(iChannel, qleChannelName->text(), rteChannelDescription->text(), qsbChannelPosition->value(), qcbChannelTemporary->isChecked(), qsbChannelMaxUsers->value()); } else { bool needs_update = false; @@ -316,7 +314,7 @@ void ACLEditor::accept() { const QString &descriptionText = rteChannelDescription->text(); mpcs.set_description(u8(descriptionText)); needs_update = true; - g.db->setBlob(sha1(descriptionText), descriptionText.toUtf8()); + Global::get().db->setBlob(sha1(descriptionText), descriptionText.toUtf8()); } if (pChannel->iPosition != qsbChannelPosition->value()) { mpcs.set_position(qsbChannelPosition->value()); @@ -327,7 +325,7 @@ void ACLEditor::accept() { needs_update = true; } if (needs_update) - g.sh->sendMessage(mpcs); + Global::get().sh->sendMessage(mpcs); // Update ACL msg.set_inherit_acls(bInheritACL); @@ -363,7 +361,7 @@ void ACLEditor::accept() { if (pid >= 0) mpg->add_remove(pid); } - g.sh->sendMessage(msg); + Global::get().sh->sendMessage(msg); } QDialog::accept(); } @@ -384,7 +382,7 @@ int ACLEditor::id(const QString &uname) { if (!qhNameWait.contains(name)) { MumbleProto::QueryUsers mpuq; mpuq.add_names(u8(name)); - g.sh->sendMessage(mpuq); + Global::get().sh->sendMessage(mpuq); iUnknown--; qhNameWait.insert(name, iUnknown); diff --git a/src/mumble/ALSAAudio.cpp b/src/mumble/ALSAAudio.cpp index ec3828509..8c79c7c97 100644 --- a/src/mumble/ALSAAudio.cpp +++ b/src/mumble/ALSAAudio.cpp @@ -12,8 +12,6 @@ #include <alsa/asoundlib.h> #include <sys/poll.h> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. #include "Global.h" #define NBLOCKS 8 @@ -96,9 +94,9 @@ const QList< audioDevice > ALSAAudioInputRegistrar::getDeviceChoices() { QStringList qlInputDevs = cards->qhInput.keys(); std::sort(qlInputDevs.begin(), qlInputDevs.end()); - if (qlInputDevs.contains(g.s.qsALSAInput)) { - qlInputDevs.removeAll(g.s.qsALSAInput); - qlInputDevs.prepend(g.s.qsALSAInput); + if (qlInputDevs.contains(Global::get().s.qsALSAInput)) { + qlInputDevs.removeAll(Global::get().s.qsALSAInput); + qlInputDevs.prepend(Global::get().s.qsALSAInput); } foreach (const QString &dev, qlInputDevs) { @@ -130,9 +128,9 @@ const QList< audioDevice > ALSAAudioOutputRegistrar::getDeviceChoices() { QStringList qlOutputDevs = cards->qhOutput.keys(); std::sort(qlOutputDevs.begin(), qlOutputDevs.end()); - if (qlOutputDevs.contains(g.s.qsALSAOutput)) { - qlOutputDevs.removeAll(g.s.qsALSAOutput); - qlOutputDevs.prepend(g.s.qsALSAOutput); + if (qlOutputDevs.contains(Global::get().s.qsALSAOutput)) { + qlOutputDevs.removeAll(Global::get().s.qsALSAOutput); + qlOutputDevs.prepend(Global::get().s.qsALSAOutput); } foreach (const QString &dev, qlOutputDevs) { @@ -299,7 +297,7 @@ void ALSAAudioInput::run() { QMutexLocker qml(&qmALSA); snd_pcm_sframes_t readblapp; - QByteArray device_name = g.s.qsALSAInput.toLatin1(); + QByteArray device_name = Global::get().s.qsALSAInput.toLatin1(); snd_pcm_hw_params_t *hw_params = nullptr; snd_pcm_t *capture_handle = nullptr; @@ -351,7 +349,7 @@ void ALSAAudioInput::run() { snd_pcm_close(capture_handle); capture_handle = nullptr; } - g.mw->msgBox( + Global::get().mw->msgBox( tr("Opening chosen ALSA Input failed: %1").arg(QString::fromLatin1(snd_strerror(err)).toHtmlEscaped())); return; } @@ -420,7 +418,7 @@ void ALSAAudioOutput::run() { snd_pcm_hw_params_t *hw_params = nullptr; snd_pcm_sw_params_t *sw_params = nullptr; - QByteArray device_name = g.s.qsALSAOutput.toLatin1(); + QByteArray device_name = Global::get().s.qsALSAOutput.toLatin1(); snd_pcm_hw_params_alloca(&hw_params); snd_pcm_sw_params_alloca(&sw_params); @@ -444,7 +442,7 @@ void ALSAAudioOutput::run() { unsigned int iOutputSize = (iFrameSize * rrate) / SAMPLE_RATE; snd_pcm_uframes_t period_size = iOutputSize; - snd_pcm_uframes_t buffer_size = iOutputSize * (g.s.iOutputDelay + 1); + snd_pcm_uframes_t buffer_size = iOutputSize * (Global::get().s.iOutputDelay + 1); int dir = 1; ALSA_ERRBAIL(snd_pcm_hw_params_set_period_size_near(pcm_handle, hw_params, &period_size, &dir)); @@ -487,7 +485,7 @@ void ALSAAudioOutput::run() { snd_pcm_writei(pcm_handle, zerobuff, period_size); if (!bOk) { - g.mw->msgBox( + Global::get().mw->msgBox( tr("Opening chosen ALSA Output failed: %1").arg(QString::fromLatin1(snd_strerror(err)).toHtmlEscaped())); if (pcm_handle) { snd_pcm_close(pcm_handle); diff --git a/src/mumble/ASIOInput.cpp b/src/mumble/ASIOInput.cpp index 4f3150506..9742499a5 100644 --- a/src/mumble/ASIOInput.cpp +++ b/src/mumble/ASIOInput.cpp @@ -12,8 +12,6 @@ #include <cmath> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. #include "Global.h" // From os_win.cpp. @@ -76,7 +74,7 @@ void ASIOInit::initialize() { bool bFound = false; - if (!g.s.bASIOEnable) { + if (!Global::get().s.bASIOEnable) { qWarning("ASIOInput: ASIO forcefully disabled via 'asio/enable' config option."); return; } @@ -410,7 +408,7 @@ void ASIOConfig::clearQuery() { } ASIOInput::ASIOInput() { - QString qsCls = g.s.qsASIOclass; + QString qsCls = Global::get().s.qsASIOclass; CLSID clsid; iasio = nullptr; @@ -419,8 +417,8 @@ ASIOInput::ASIOInput() { // Sanity check things first. - iNumMic = g.s.qlASIOmic.count(); - iNumSpeaker = g.s.qlASIOspeaker.count(); + iNumMic = Global::get().s.qlASIOmic.count(); + iNumSpeaker = Global::get().s.qlASIOspeaker.count(); if ((iNumMic == 0) || (iNumSpeaker == 0)) { QMessageBox::warning(nullptr, QLatin1String("Mumble"), @@ -482,7 +480,7 @@ ASIOInput::ASIOInput() { int i, idx = 0; for (i = 0; i < iNumMic; i++) { abiInfo[idx].isInput = true; - abiInfo[idx].channelNum = g.s.qlASIOmic[i].toInt(); + abiInfo[idx].channelNum = Global::get().s.qlASIOmic[i].toInt(); aciInfo[idx].channel = abiInfo[idx].channelNum; aciInfo[idx].isInput = true; @@ -493,7 +491,7 @@ ASIOInput::ASIOInput() { } for (i = 0; i < iNumSpeaker; i++) { abiInfo[idx].isInput = true; - abiInfo[idx].channelNum = g.s.qlASIOspeaker[i].toInt(); + abiInfo[idx].channelNum = Global::get().s.qlASIOspeaker[i].toInt(); aciInfo[idx].channel = abiInfo[idx].channelNum; aciInfo[idx].isInput = true; diff --git a/src/mumble/About.cpp b/src/mumble/About.cpp index abf406a47..cfe211bb4 100644 --- a/src/mumble/About.cpp +++ b/src/mumble/About.cpp @@ -12,8 +12,6 @@ #include <QtWidgets/QPushButton> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. #include "Global.h" #define DOQUOTE(arg) #arg @@ -53,7 +51,7 @@ AboutDialog::AboutDialog(QWidget *p) : QDialog(p) { QWidget *about = new QWidget(qtwTab); QLabel *icon = new QLabel(about); - icon->setPixmap(g.mw->qiIcon.pixmap(g.mw->qiIcon.actualSize(QSize(128, 128)))); + icon->setPixmap(Global::get().mw->qiIcon.pixmap(Global::get().mw->qiIcon.actualSize(QSize(128, 128)))); QLabel *text = new QLabel(about); text->setTextInteractionFlags(Qt::TextBrowserInteraction); diff --git a/src/mumble/Audio.cpp b/src/mumble/Audio.cpp index 2710e267d..498f0e845 100644 --- a/src/mumble/Audio.cpp +++ b/src/mumble/Audio.cpp @@ -13,12 +13,10 @@ #endif #include "Log.h" #include "PacketDataStream.h" +#include "Global.h" #include <QtCore/QObject> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" class CodecInit : public DeferInit { public: @@ -36,7 +34,7 @@ void CodecInit::initialize() { OpusCodec *oCodec = new OpusCodec(); if (oCodec->isValid()) { oCodec->report(); - g.oCodec = oCodec; + Global::get().oCodec = oCodec; } else { Log::logOrDefer( Log::CriticalError, @@ -45,7 +43,7 @@ void CodecInit::initialize() { } #endif - if (g.s.bDisableCELT) { + if (Global::get().s.bDisableCELT) { // Kill switch for CELT activated. Do not initialize it. return; } @@ -56,7 +54,7 @@ void CodecInit::initialize() { codec = new CELTCodecSBCELT(); if (codec->isValid()) { codec->report(); - g.qmCodecs.insert(codec->bitstreamVersion(), codec); + Global::get().qmCodecs.insert(codec->bitstreamVersion(), codec); } else { delete codec; } @@ -64,13 +62,13 @@ void CodecInit::initialize() { codec = new CELTCodec070(QLatin1String("0.7.0")); if (codec->isValid()) { codec->report(); - g.qmCodecs.insert(codec->bitstreamVersion(), codec); + Global::get().qmCodecs.insert(codec->bitstreamVersion(), codec); } else { delete codec; codec = new CELTCodec070(QLatin1String("0.0.0")); if (codec->isValid()) { codec->report(); - g.qmCodecs.insert(codec->bitstreamVersion(), codec); + Global::get().qmCodecs.insert(codec->bitstreamVersion(), codec); } else { delete codec; } @@ -80,12 +78,12 @@ void CodecInit::initialize() { void CodecInit::destroy() { #ifdef USE_OPUS - delete g.oCodec; + delete Global::get().oCodec; #endif - foreach (CELTCodec *codec, g.qmCodecs) + foreach (CELTCodec *codec, Global::get().qmCodecs) delete codec; - g.qmCodecs.clear(); + Global::get().qmCodecs.clear(); } LoopUser::LoopUser() { @@ -101,7 +99,7 @@ LoopUser::LoopUser() { } void LoopUser::addFrame(const QByteArray &packet) { - if (DOUBLE_RAND < g.s.dPacketLoss) { + if (DOUBLE_RAND < Global::get().s.dPacketLoss) { qWarning("Drop"); return; } @@ -116,14 +114,14 @@ void LoopUser::addFrame(const QByteArray &packet) { if (restart) r = 0.0; else - r = DOUBLE_RAND * g.s.dMaxPacketDelay; + r = DOUBLE_RAND * Global::get().s.dMaxPacketDelay; qmPackets.insert(static_cast< float >(time + r), packet); } // Restart check if (qetLastFetch.elapsed() > 100) { - AudioOutputPtr ao = g.ao; + AudioOutputPtr ao = Global::get().ao; if (ao) { MessageHandler::UDPMessageType msgType = static_cast< MessageHandler::UDPMessageType >((packet.at(0) >> 5) & 0x7); @@ -135,7 +133,7 @@ void LoopUser::addFrame(const QByteArray &packet) { void LoopUser::fetchFrames() { QMutexLocker l(&qmLock); - AudioOutputPtr ao(g.ao); + AudioOutputPtr ao(Global::get().ao); if (!ao || qmPackets.isEmpty()) { return; } @@ -175,13 +173,13 @@ RecordUser::RecordUser() : LoopUser() { } RecordUser::~RecordUser() { - AudioOutputPtr ao = g.ao; + AudioOutputPtr ao = Global::get().ao; if (ao) ao->removeBuffer(this); } void RecordUser::addFrame(const QByteArray &packet) { - AudioOutputPtr ao(g.ao); + AudioOutputPtr ao(Global::get().ao); if (!ao) return; @@ -203,18 +201,18 @@ void RecordUser::addFrame(const QByteArray &packet) { } void Audio::startOutput(const QString &output) { - g.ao = AudioOutputRegistrar::newFromChoice(output); - if (g.ao) - g.ao->start(QThread::HighPriority); + Global::get().ao = AudioOutputRegistrar::newFromChoice(output); + if (Global::get().ao) + Global::get().ao->start(QThread::HighPriority); } void Audio::stopOutput() { // Take a copy of the global AudioOutput shared pointer // to keep a reference around. - AudioOutputPtr ao = g.ao; + AudioOutputPtr ao = Global::get().ao; // Reset the global AudioOutput shared pointer to the null pointer. - g.ao.reset(); + Global::get().ao.reset(); // Wait until our copy of the AudioOutput shared pointer (ao) // is the only one left. @@ -230,24 +228,24 @@ void Audio::stopOutput() { // One such example is PulseAudioInput, whose destructor // takes the PulseAudio mainloop lock. If the destructor // is called inside one of the PulseAudio callbacks that - // take copies of g.ai, the destructor will try to also + // take copies of Global::get().ai, the destructor will try to also // take the mainloop lock, causing an abort(). ao.reset(); } void Audio::startInput(const QString &input) { - g.ai = AudioInputRegistrar::newFromChoice(input); - if (g.ai) - g.ai->start(QThread::HighestPriority); + Global::get().ai = AudioInputRegistrar::newFromChoice(input); + if (Global::get().ai) + Global::get().ai->start(QThread::HighestPriority); } void Audio::stopInput() { // Take a copy of the global AudioInput shared pointer // to keep a reference around. - AudioInputPtr ai = g.ai; + AudioInputPtr ai = Global::get().ai; // Reset the global AudioInput shared pointer to the null pointer. - g.ai.reset(); + Global::get().ai.reset(); // Wait until our copy of the AudioInput shared pointer (ai) // is the only one left. @@ -263,7 +261,7 @@ void Audio::stopInput() { // One such example is PulseAudioInput, whose destructor // takes the PulseAudio mainloop lock. If the destructor // is called inside one of the PulseAudio callbacks that - // take copies of g.ai, the destructor will try to also + // take copies of Global::get().ai, the destructor will try to also // take the mainloop lock, causing an abort(). ai.reset(); } @@ -277,13 +275,13 @@ void Audio::stop() { // Take copies of the global AudioInput and AudioOutput // shared pointers to keep a reference to each of them // around. - AudioInputPtr ai = g.ai; - AudioOutputPtr ao = g.ao; + AudioInputPtr ai = Global::get().ai; + AudioOutputPtr ao = Global::get().ao; // Reset the global AudioInput and AudioOutput shared pointers // to the null pointer. - g.ao.reset(); - g.ai.reset(); + Global::get().ao.reset(); + Global::get().ai.reset(); // Wait until our copies of the AudioInput and AudioOutput shared pointers // (ai and ao) are the only ones left. @@ -300,7 +298,7 @@ void Audio::stop() { // One such example is PulseAudioInput, whose destructor // takes the PulseAudio mainloop lock. If the destructor // is called inside one of the PulseAudio callbacks that - // take copies of g.ai, the destructor will try to also + // take copies of Global::get().ai, the destructor will try to also // take the mainloop lock, causing an abort(). ai.reset(); ao.reset(); diff --git a/src/mumble/AudioConfigDialog.cpp b/src/mumble/AudioConfigDialog.cpp index 224b48616..8891842a6 100644 --- a/src/mumble/AudioConfigDialog.cpp +++ b/src/mumble/AudioConfigDialog.cpp @@ -112,9 +112,9 @@ AudioInputDialog::AudioInputDialog(Settings &st) : ConfigWidget(st) { qcbDevice->view()->setTextElideMode(Qt::ElideRight); - on_qcbPushClick_clicked(g.s.bTxAudioCue); + on_qcbPushClick_clicked(Global::get().s.bTxAudioCue); on_Tick_timeout(); - on_qcbIdleAction_currentIndexChanged(g.s.iaeIdleAction); + on_qcbIdleAction_currentIndexChanged(Global::get().s.iaeIdleAction); // Hide the slider by default showSpeexNoiseSuppressionSlider(false); @@ -374,7 +374,7 @@ void AudioInputDialog::updateBitrate() { if (NetworkConfig::TcpModeEnabled()) overhead += 100 * 8 * 12; - if (g.s.bTransmitPosition) + if (Global::get().s.bTransmitPosition) posrate = 12; else posrate = 0; @@ -388,7 +388,7 @@ void AudioInputDialog::updateBitrate() { QPalette pal; - if (g.uiSession && (total > g.iMaxBandwidth)) { + if (Global::get().uiSession && (total > Global::get().iMaxBandwidth)) { pal.setColor(qlBitrate->foregroundRole(), Qt::red); } @@ -431,7 +431,7 @@ void AudioInputDialog::on_qpbPushClickBrowseOff_clicked() { } void AudioInputDialog::on_qpbPushClickPreview_clicked() { - AudioOutputPtr ao = g.ao; + AudioOutputPtr ao = Global::get().ao; if (ao) { AudioOutputSample *sample = ao->playSample(qlePushClickPathOn->text()); if (sample) @@ -442,7 +442,7 @@ void AudioInputDialog::on_qpbPushClickPreview_clicked() { } void AudioInputDialog::continuePlayback() { - AudioOutputPtr ao = g.ao; + AudioOutputPtr ao = Global::get().ao; if (ao) { ao->playSample(qlePushClickPathOff->text()); } @@ -548,7 +548,7 @@ void AudioInputDialog::showSpeexNoiseSuppressionSlider(bool show) { } void AudioInputDialog::on_Tick_timeout() { - AudioInputPtr ai = g.ai; + AudioInputPtr ai = Global::get().ai; if (!ai.get() || !ai->sppPreprocess) return; diff --git a/src/mumble/AudioInput.cpp b/src/mumble/AudioInput.cpp index 4e1790afe..5a4723c97 100644 --- a/src/mumble/AudioInput.cpp +++ b/src/mumble/AudioInput.cpp @@ -172,11 +172,11 @@ AudioInputPtr AudioInputRegistrar::newFromChoice(QString choice) { return AudioInputPtr(); if (!choice.isEmpty() && qmNew->contains(choice)) { - g.s.qsAudioInput = choice; + Global::get().s.qsAudioInput = choice; current = choice; return AudioInputPtr(qmNew->value(current)->create()); } - choice = g.s.qsAudioInput; + choice = Global::get().s.qsAudioInput; if (qmNew->contains(choice)) { current = choice; return AudioInputPtr(qmNew->value(choice)->create()); @@ -201,18 +201,18 @@ bool AudioInputRegistrar::isMicrophoneAccessDeniedByOS() { return false; } -AudioInput::AudioInput() : opusBuffer(g.s.iFramesPerPacket * (SAMPLE_RATE / 100)) { - bDebugDumpInput = g.bDebugDumpInput; - resync.bDebugPrintQueue = g.bDebugPrintQueue; +AudioInput::AudioInput() : opusBuffer(Global::get().s.iFramesPerPacket * (SAMPLE_RATE / 100)) { + bDebugDumpInput = Global::get().bDebugDumpInput; + resync.bDebugPrintQueue = Global::get().bDebugPrintQueue; if (bDebugDumpInput) { outMic.open("raw_microphone_dump", std::ios::binary); outSpeaker.open("speaker_dump", std::ios::binary); outProcessed.open("processed_microphone_dump", std::ios::binary); } - adjustBandwidth(g.iMaxBandwidth, iAudioQuality, iAudioFrames, bAllowLowDelay); + adjustBandwidth(Global::get().iMaxBandwidth, iAudioQuality, iAudioFrames, bAllowLowDelay); - g.iAudioBandwidth = getNetworkBandwidth(iAudioQuality, iAudioFrames); + Global::get().iAudioBandwidth = getNetworkBandwidth(iAudioQuality, iAudioFrames); umtType = MessageHandler::UDPVoiceCELTAlpha; @@ -223,7 +223,7 @@ AudioInput::AudioInput() : opusBuffer(g.s.iFramesPerPacket * (SAMPLE_RATE / 100) ceEncoder = nullptr; #ifdef USE_OPUS - oCodec = g.oCodec; + oCodec = Global::get().oCodec; if (oCodec) { if (bAllowLowDelay && iAudioQuality >= 64000) { // > 64 kbit/s bitrate and low delay allowed opusState = oCodec->opus_encoder_create(SAMPLE_RATE, 1, OPUS_APPLICATION_RESTRICTED_LOWDELAY, nullptr); @@ -274,14 +274,14 @@ AudioInput::AudioInput() : opusBuffer(g.s.iFramesPerPacket * (SAMPLE_RATE / 100) iBitrate = 0; dPeakSignal = dPeakSpeaker = dPeakMic = dPeakCleanMic = 0.0; - if (g.uiSession) { - setMaxBandwidth(g.iMaxBandwidth); + if (Global::get().uiSession) { + setMaxBandwidth(Global::get().iMaxBandwidth); } bRunning = true; - connect(this, SIGNAL(doDeaf()), g.mw->qaAudioDeaf, SLOT(trigger()), Qt::QueuedConnection); - connect(this, SIGNAL(doMute()), g.mw->qaAudioMute, SLOT(trigger()), Qt::QueuedConnection); + connect(this, SIGNAL(doDeaf()), Global::get().mw->qaAudioDeaf, SLOT(trigger()), Qt::QueuedConnection); + connect(this, SIGNAL(doMute()), Global::get().mw->qaAudioMute, SLOT(trigger()), Qt::QueuedConnection); } AudioInput::~AudioInput() { @@ -514,7 +514,7 @@ void AudioInput::initializeMixer() { pfMicInput = new float[iMicLength]; if (iEchoChannels > 0) { - bEchoMulti = (g.s.echoOption == EchoCancelOptionID::SPEEX_MULTICHANNEL); + bEchoMulti = (Global::get().s.echoOption == EchoCancelOptionID::SPEEX_MULTICHANNEL); if (iEchoFreq != iSampleRate) srsEcho = speex_resampler_init(bEchoMulti ? iEchoChannels : 1, iEchoFreq, iSampleRate, 3, &err); iEchoLength = (iFrameSize * iEchoFreq) / iSampleRate; @@ -526,7 +526,7 @@ void AudioInput::initializeMixer() { pfEchoInput = nullptr; } - uiMicChannelMask = g.s.uiAudioInputChannelMask; + uiMicChannelMask = Global::get().s.uiAudioInputChannelMask; // There is no channel mask setting for the echo canceller, so allow all channels. uiEchoChannelMask = 0xffffffffffffffffULL; @@ -666,9 +666,9 @@ void AudioInput::addEcho(const void *data, unsigned int nsamp) { } void AudioInput::adjustBandwidth(int bitspersec, int &bitrate, int &frames, bool &allowLowDelay) { - frames = g.s.iFramesPerPacket; - bitrate = g.s.iQuality; - allowLowDelay = g.s.bAllowLowDelay; + frames = Global::get().s.iFramesPerPacket; + bitrate = Global::get().s.iQuality; + allowLowDelay = Global::get().s.bAllowLowDelay; if (bitspersec == -1) { // No limit @@ -692,7 +692,7 @@ void AudioInput::adjustBandwidth(int bitspersec, int &bitrate, int &frames, bool } void AudioInput::setMaxBandwidth(int bitspersec) { - if (bitspersec == g.iMaxBandwidth) + if (bitspersec == Global::get().iMaxBandwidth) return; int frames; @@ -700,20 +700,20 @@ void AudioInput::setMaxBandwidth(int bitspersec) { bool allowLowDelay; adjustBandwidth(bitspersec, bitrate, frames, allowLowDelay); - g.iMaxBandwidth = bitspersec; + Global::get().iMaxBandwidth = bitspersec; if (bitspersec != -1) { - if ((bitrate != g.s.iQuality) || (frames != g.s.iFramesPerPacket)) - g.mw->msgBox(tr("Server maximum network bandwidth is only %1 kbit/s. Audio quality auto-adjusted to %2 " + if ((bitrate != Global::get().s.iQuality) || (frames != Global::get().s.iFramesPerPacket)) + Global::get().mw->msgBox(tr("Server maximum network bandwidth is only %1 kbit/s. Audio quality auto-adjusted to %2 " "kbit/s (%3 ms)") .arg(bitspersec / 1000) .arg(bitrate / 1000) .arg(frames * 10)); } - AudioInputPtr ai = g.ai; + AudioInputPtr ai = Global::get().ai; if (ai) { - g.iAudioBandwidth = getNetworkBandwidth(bitrate, frames); + Global::get().iAudioBandwidth = getNetworkBandwidth(bitrate, frames); ai->iAudioQuality = bitrate; ai->iAudioFrames = frames; ai->bAllowLowDelay = allowLowDelay; @@ -728,7 +728,7 @@ void AudioInput::setMaxBandwidth(int bitspersec) { int AudioInput::getNetworkBandwidth(int bitrate, int frames) { int overhead = - 20 + 8 + 4 + 1 + 2 + (g.s.bTransmitPosition ? 12 : 0) + (NetworkConfig::TcpModeEnabled() ? 12 : 0) + frames; + 20 + 8 + 4 + 1 + 2 + (Global::get().s.bTransmitPosition ? 12 : 0) + (NetworkConfig::TcpModeEnabled() ? 12 : 0) + frames; overhead *= (800 / frames); int bw = overhead + bitrate; @@ -758,7 +758,7 @@ void AudioInput::resetAudioProcessor() { iArg = 30000; speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_AGC_TARGET, &iArg); - float v = 30000.0f / static_cast< float >(g.s.iMinLoudness); + float v = 30000.0f / static_cast< float >(Global::get().s.iMinLoudness); iArg = iroundf(floorf(20.0f * log10f(v))); speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_AGC_MAX_GAIN, &iArg); @@ -766,7 +766,7 @@ void AudioInput::resetAudioProcessor() { speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_AGC_DECREMENT, &iArg); if (noiseCancel == Settings::NoiseCancelSpeex) { - iArg = g.s.iSpeexNoiseCancelStrength; + iArg = Global::get().s.iSpeexNoiseCancelStrength; speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &iArg); } @@ -795,7 +795,7 @@ bool AudioInput::selectCodec() { useOpus = (umtType == MessageHandler::UDPVoiceOpus); } else { #ifdef USE_OPUS - if (g.bOpus || (g.s.lmLoopMode == Settings::Local)) { + if (Global::get().bOpus || (Global::get().s.lmLoopMode == Settings::Local)) { useOpus = true; } #endif @@ -803,23 +803,23 @@ bool AudioInput::selectCodec() { if (!useOpus) { CELTCodec *switchto = nullptr; - if ((!g.uiSession || (g.s.lmLoopMode == Settings::Local)) && (!g.qmCodecs.isEmpty())) { + if ((!Global::get().uiSession || (Global::get().s.lmLoopMode == Settings::Local)) && (!Global::get().qmCodecs.isEmpty())) { // Use latest for local loopback - QMap< int, CELTCodec * >::const_iterator i = g.qmCodecs.constEnd(); + QMap< int, CELTCodec * >::const_iterator i = Global::get().qmCodecs.constEnd(); --i; switchto = i.value(); } else { // Currently talking, don't switch unless you must. if (cCodec && bPreviousVoice) { int v = cCodec->bitstreamVersion(); - if ((v == g.iCodecAlpha) || (v == g.iCodecBeta)) + if ((v == Global::get().iCodecAlpha) || (v == Global::get().iCodecBeta)) switchto = cCodec; } } if (!switchto) { - switchto = g.qmCodecs.value(g.bPreferAlpha ? g.iCodecAlpha : g.iCodecBeta); + switchto = Global::get().qmCodecs.value(Global::get().bPreferAlpha ? Global::get().iCodecAlpha : Global::get().iCodecBeta); if (!switchto) - switchto = g.qmCodecs.value(g.bPreferAlpha ? g.iCodecBeta : g.iCodecAlpha); + switchto = Global::get().qmCodecs.value(Global::get().bPreferAlpha ? Global::get().iCodecBeta : Global::get().iCodecAlpha); } if (switchto != cCodec) { if (cCodec && ceEncoder) { @@ -839,13 +839,13 @@ bool AudioInput::selectCodec() { if (useOpus) { umtType = MessageHandler::UDPVoiceOpus; } else { - if (!g.uiSession) { + if (!Global::get().uiSession) { umtType = MessageHandler::UDPVoiceCELTAlpha; } else { int v = cCodec->bitstreamVersion(); - if (v == g.iCodecAlpha) + if (v == Global::get().iCodecAlpha) umtType = MessageHandler::UDPVoiceCELTAlpha; - else if (v == g.iCodecBeta) + else if (v == Global::get().iCodecBeta) umtType = MessageHandler::UDPVoiceCELTBeta; else { qWarning() << "Couldn't find message type for codec version" << v; @@ -863,7 +863,7 @@ bool AudioInput::selectCodec() { } void AudioInput::selectNoiseCancel() { - noiseCancel = g.s.noiseCancelMode; + noiseCancel = Global::get().s.noiseCancelMode; if (noiseCancel == Settings::NoiseCancelRNN || noiseCancel == Settings::NoiseCancelBoth) { #ifdef USE_RNNOISE @@ -950,12 +950,12 @@ void AudioInput::encodeAudioFrame(AudioChunk chunk) { iFrameCounter++; - // As g.iTarget is not protected by any locks, we avoid race-conditions by + // As Global::get().iTarget is not protected by any locks, we avoid race-conditions by // copying it once at this point and stick to whatever value it is here. Thus - // if the value of g.iTarget changes during the execution of this function, + // if the value of Global::get().iTarget changes during the execution of this function, // it won't cause any inconsistencies and the change is reflected once this // function is called again. - int voiceTargetID = g.iTarget; + int voiceTargetID = Global::get().iTarget; if (!bRunning) return; @@ -985,7 +985,7 @@ void AudioInput::encodeAudioFrame(AudioChunk chunk) { speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_GET_AGC_GAIN, &iArg); float gainValue = static_cast< float >(iArg); if (noiseCancel == Settings::NoiseCancelSpeex || noiseCancel == Settings::NoiseCancelBoth) { - iArg = g.s.iSpeexNoiseCancelStrength - iArg; + iArg = Global::get().s.iSpeexNoiseCancelStrength - iArg; speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &iArg); } @@ -1035,41 +1035,41 @@ void AudioInput::encodeAudioFrame(AudioChunk chunk) { // clean microphone level: peak of filtered signal attenuated by AGC gain dPeakCleanMic = qMax(dPeakSignal - gainValue, -96.0f); - float level = (g.s.vsVAD == Settings::SignalToNoise) ? fSpeechProb : (1.0f + dPeakCleanMic / 96.0f); + float level = (Global::get().s.vsVAD == Settings::SignalToNoise) ? fSpeechProb : (1.0f + dPeakCleanMic / 96.0f); bool bIsSpeech = false; - if (level > g.s.fVADmax) { + if (level > Global::get().s.fVADmax) { // Voice-activation threshold has been reached bIsSpeech = true; - } else if (level > g.s.fVADmin && bPreviousVoice) { + } else if (level > Global::get().s.fVADmin && bPreviousVoice) { // Voice-deactivation threshold has not yet been reached bIsSpeech = true; } if (!bIsSpeech) { iHoldFrames++; - if (iHoldFrames < g.s.iVoiceHold) + if (iHoldFrames < Global::get().s.iVoiceHold) bIsSpeech = true; } else { iHoldFrames = 0; } - if (g.s.atTransmit == Settings::Continuous) { + if (Global::get().s.atTransmit == Settings::Continuous) { // Continous transmission is enabled bIsSpeech = true; - } else if (g.s.atTransmit == Settings::PushToTalk) { + } else if (Global::get().s.atTransmit == Settings::PushToTalk) { // PTT is enabled, so check if it is currently active bIsSpeech = - g.s.uiDoublePush && ((g.uiDoublePush < g.s.uiDoublePush) || (g.tDoublePush.elapsed() < g.s.uiDoublePush)); + Global::get().s.uiDoublePush && ((Global::get().uiDoublePush < Global::get().s.uiDoublePush) || (Global::get().tDoublePush.elapsed() < Global::get().s.uiDoublePush)); } - // If g.iPushToTalk > 0 that means that we are currently in some sort of PTT action. For + // If Global::get().iPushToTalk > 0 that means that we are currently in some sort of PTT action. For // instance this could mean we're currently whispering - bIsSpeech = bIsSpeech || (g.iPushToTalk > 0); + bIsSpeech = bIsSpeech || (Global::get().iPushToTalk > 0); - ClientUser *p = ClientUser::get(g.uiSession); - if (g.s.bMute || ((g.s.lmLoopMode != Settings::Local) && p && (p->bMute || p->bSuppress)) || g.bPushToMute + ClientUser *p = ClientUser::get(Global::get().uiSession); + if (Global::get().s.bMute || ((Global::get().s.lmLoopMode != Settings::Local) && p && (p->bMute || p->bSuppress)) || Global::get().bPushToMute || (voiceTargetID < 0)) { bIsSpeech = false; } @@ -1091,33 +1091,33 @@ void AudioInput::encodeAudioFrame(AudioChunk chunk) { p->setTalking(Settings::Shouting); } - if (g.s.bTxAudioCue && g.uiSession != 0) { - AudioOutputPtr ao = g.ao; + if (Global::get().s.bTxAudioCue && Global::get().uiSession != 0) { + AudioOutputPtr ao = Global::get().ao; if (bIsSpeech && !bPreviousVoice && ao) - ao->playSample(g.s.qsTxAudioCueOn); + ao->playSample(Global::get().s.qsTxAudioCueOn); else if (ao && !bIsSpeech && bPreviousVoice) - ao->playSample(g.s.qsTxAudioCueOff); + ao->playSample(Global::get().s.qsTxAudioCueOff); } if (!bIsSpeech && !bPreviousVoice) { iBitrate = 0; - if ((tIdle.elapsed() / 1000000ULL) > g.s.iIdleTime) { + if ((tIdle.elapsed() / 1000000ULL) > Global::get().s.iIdleTime) { activityState = ActivityStateIdle; tIdle.restart(); - if (g.s.iaeIdleAction == Settings::Deafen && !g.s.bDeaf) { + if (Global::get().s.iaeIdleAction == Settings::Deafen && !Global::get().s.bDeaf) { emit doDeaf(); - } else if (g.s.iaeIdleAction == Settings::Mute && !g.s.bMute) { + } else if (Global::get().s.iaeIdleAction == Settings::Mute && !Global::get().s.bMute) { emit doMute(); } } if (activityState == ActivityStateReturnedFromIdle) { activityState = ActivityStateActive; - if (g.s.iaeIdleAction != Settings::Nothing && g.s.bUndoIdleActionUponActivity) { - if (g.s.iaeIdleAction == Settings::Deafen && g.s.bDeaf) { + if (Global::get().s.iaeIdleAction != Settings::Nothing && Global::get().s.bUndoIdleActionUponActivity) { + if (Global::get().s.iaeIdleAction == Settings::Deafen && Global::get().s.bDeaf) { emit doDeaf(); - } else if (g.s.iaeIdleAction == Settings::Mute && g.s.bMute) { + } else if (Global::get().s.iaeIdleAction == Settings::Mute && Global::get().s.bMute) { emit doMute(); } } @@ -1196,14 +1196,14 @@ void AudioInput::encodeAudioFrame(AudioChunk chunk) { } static void sendAudioFrame(const char *data, PacketDataStream &pds) { - ServerHandlerPtr sh = g.sh; + ServerHandlerPtr sh = Global::get().sh; if (sh) { VoiceRecorderPtr recorder(sh->recorder); if (recorder) recorder->getRecordUser().addFrame(QByteArray(data, pds.size() + 1)); } - if (g.s.lmLoopMode == Settings::Local) + if (Global::get().s.lmLoopMode == Settings::Local) LoopUser::lpLoopy.addFrame(QByteArray(data, pds.size() + 1)); else if (sh) sh->sendMessage(data, pds.size() + 1); @@ -1219,21 +1219,21 @@ void AudioInput::flushCheck(const QByteArray &frame, bool terminator, int voiceT if (voiceTargetID > 0) { flags = voiceTargetID; } - if (terminator && g.iPrevTarget > 0) { + if (terminator && Global::get().iPrevTarget > 0) { // If we have been whispering to some target but have just ended, terminator will be true. However // in the case of whispering this means that we just released the whisper key so this here is the - // last audio frame that is sent for whispering. The whisper key being released means that g.iTarget + // last audio frame that is sent for whispering. The whisper key being released means that Global::get().iTarget // is reset to 0 by now. In order to send the last whisper frame correctly, we have to use - // g.iPrevTarget which is set to whatever g.iTarget has been before its last change. + // Global::get().iPrevTarget which is set to whatever Global::get().iTarget has been before its last change. - flags = g.iPrevTarget; + flags = Global::get().iPrevTarget; - // We reset g.iPrevTarget as it has fulfilled its purpose for this whisper-action. It'll be set + // We reset Global::get().iPrevTarget as it has fulfilled its purpose for this whisper-action. It'll be set // accordingly once the client whispers for the next time. - g.iPrevTarget = 0; + Global::get().iPrevTarget = 0; } - if (g.s.lmLoopMode == Settings::Server) + if (Global::get().s.lmLoopMode == Settings::Server) flags = 0x1f; // Server loopback flags |= (umtType << 5); @@ -1271,10 +1271,10 @@ void AudioInput::flushCheck(const QByteArray &frame, bool terminator, int voiceT } } - if (g.s.bTransmitPosition && g.p && !g.bCenterPosition && g.p->fetch()) { - pds << g.p->fPosition[0]; - pds << g.p->fPosition[1]; - pds << g.p->fPosition[2]; + if (Global::get().s.bTransmitPosition && Global::get().p && !Global::get().bCenterPosition && Global::get().p->fetch()) { + pds << Global::get().p->fPosition[0]; + pds << Global::get().p->fPosition[1]; + pds << Global::get().p->fPosition[2]; } sendAudioFrame(data, pds); diff --git a/src/mumble/AudioOutput.cpp b/src/mumble/AudioOutput.cpp index cb0ff6f62..a52cc393b 100644 --- a/src/mumble/AudioOutput.cpp +++ b/src/mumble/AudioOutput.cpp @@ -27,9 +27,6 @@ #include "User.h" #include "Utils.h" #include "VoiceRecorder.h" - -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. #include "Global.h" // Remember that we cannot use static member classes that are not pointers, as the constructor @@ -55,11 +52,11 @@ AudioOutputPtr AudioOutputRegistrar::newFromChoice(QString choice) { return AudioOutputPtr(); if (!choice.isEmpty() && qmNew->contains(choice)) { - g.s.qsAudioOutput = choice; + Global::get().s.qsAudioOutput = choice; current = choice; return AudioOutputPtr(qmNew->value(choice)->create()); } - choice = g.s.qsAudioOutput; + choice = Global::get().s.qsAudioOutput; if (qmNew->contains(choice)) { current = choice; return AudioOutputPtr(qmNew->value(choice)->create()); @@ -109,23 +106,23 @@ float AudioOutput::calcGain(float dotproduct, float distance) { // No distance attenuation - if (g.s.fAudioMaxDistVolume > 0.99f) { - att = qMin(1.0f, dotfactor + g.s.fAudioBloom); - } else if (distance < g.s.fAudioMinDistance) { - float bloomfac = g.s.fAudioBloom * (1.0f - distance / g.s.fAudioMinDistance); + if (Global::get().s.fAudioMaxDistVolume > 0.99f) { + att = qMin(1.0f, dotfactor + Global::get().s.fAudioBloom); + } else if (distance < Global::get().s.fAudioMinDistance) { + float bloomfac = Global::get().s.fAudioBloom * (1.0f - distance / Global::get().s.fAudioMinDistance); att = qMin(1.0f, bloomfac + dotfactor); } else { float datt; - if (distance >= g.s.fAudioMaxDistance) { - datt = g.s.fAudioMaxDistVolume; + if (distance >= Global::get().s.fAudioMaxDistance) { + datt = Global::get().s.fAudioMaxDistVolume; } else { - float mvol = g.s.fAudioMaxDistVolume; + float mvol = Global::get().s.fAudioMaxDistVolume; if (mvol < 0.01f) mvol = 0.01f; - float drel = (distance - g.s.fAudioMinDistance) / (g.s.fAudioMaxDistance - g.s.fAudioMinDistance); + float drel = (distance - Global::get().s.fAudioMinDistance) / (Global::get().s.fAudioMaxDistance - Global::get().s.fAudioMinDistance); datt = powf(10.0f, log10f(mvol) * drel); } @@ -329,7 +326,7 @@ void AudioOutput::initializeMixer(const unsigned int *chanmasks, bool forceheadp qWarning("AudioOutput: Unknown speaker %d: %08x", i, chanmasks[i]); break; } - if (g.s.bPositionalHeadphone || forceheadphone) { + if (Global::get().s.bPositionalHeadphone || forceheadphone) { s[1] = 0.0f; s[2] = 0.0f; if (s[0] == 0.0f) @@ -366,17 +363,17 @@ bool AudioOutput::mix(void *outbuff, unsigned int frameCount) { // A list of users that no longer have any audio to play and can thus be deleted QList< AudioOutputUser * > qlDel; - if (g.s.fVolume < 0.01f) { + if (Global::get().s.fVolume < 0.01f) { return false; } const float adjustFactor = std::pow(10.f, -18.f / 20); - const float mul = g.s.fVolume; + const float mul = Global::get().s.fVolume; const unsigned int nchan = iChannels; - ServerHandlerPtr sh = g.sh; + ServerHandlerPtr sh = Global::get().sh; VoiceRecorderPtr recorder; if (sh) { - recorder = g.sh->recorder; + recorder = Global::get().sh->recorder; } qrwlOutputs.lockForRead(); @@ -400,7 +397,7 @@ bool AudioOutput::mix(void *outbuff, unsigned int frameCount) { ++it; } - if (g.prioritySpeakerActiveOverride) { + if (Global::get().prioritySpeakerActiveOverride) { prioritySpeakerActive = true; } @@ -429,13 +426,13 @@ bool AudioOutput::mix(void *outbuff, unsigned int frameCount) { for (unsigned int i = 0; i < iChannels; ++i) svol[i] = mul * fSpeakerVolume[i]; - if (g.s.bPositionalAudio && (iChannels > 1) && g.p->fetch() - && (g.bPosTest || g.p->fCameraPosition[0] != 0 || g.p->fCameraPosition[1] != 0 - || g.p->fCameraPosition[2] != 0)) { + if (Global::get().s.bPositionalAudio && (iChannels > 1) && Global::get().p->fetch() + && (Global::get().bPosTest || Global::get().p->fCameraPosition[0] != 0 || Global::get().p->fCameraPosition[1] != 0 + || Global::get().p->fCameraPosition[2] != 0)) { // Calculate the positional audio effects if it is enabled - float front[3] = { g.p->fCameraFront[0], g.p->fCameraFront[1], g.p->fCameraFront[2] }; - float top[3] = { g.p->fCameraTop[0], g.p->fCameraTop[1], g.p->fCameraTop[2] }; + float front[3] = { Global::get().p->fCameraFront[0], Global::get().p->fCameraFront[1], Global::get().p->fCameraFront[2] }; + float top[3] = { Global::get().p->fCameraTop[0], Global::get().p->fCameraTop[1], Global::get().p->fCameraTop[2] }; // Front vector is dominant; if it's zero we presume all is zero. @@ -528,7 +525,7 @@ bool AudioOutput::mix(void *outbuff, unsigned int frameCount) { const ClientUser *user = speech->p; volumeAdjustment *= user->getLocalVolumeAdjustments(); - if (user->cChannel && ChannelListener::isListening(g.uiSession, user->cChannel->iId) + if (user->cChannel && ChannelListener::isListening(Global::get().uiSession, user->cChannel->iId) && (speech->ucFlags & SpeechFlags::Listen)) { // We are receiving this audio packet only because we are listening to the channel // the speaking user is in. Thus we receive the audio via our "listener proxy". @@ -583,8 +580,8 @@ bool AudioOutput::mix(void *outbuff, unsigned int frameCount) { #endif // If positional audio is enabled, calculate the respective audio effect here - float dir[3] = { aop->fPos[0] - g.p->fCameraPosition[0], aop->fPos[1] - g.p->fCameraPosition[1], - aop->fPos[2] - g.p->fCameraPosition[2] }; + float dir[3] = { aop->fPos[0] - Global::get().p->fCameraPosition[0], aop->fPos[1] - Global::get().p->fCameraPosition[1], + aop->fPos[2] - Global::get().p->fCameraPosition[2] }; float len = sqrtf(dir[0] * dir[0] + dir[1] * dir[1] + dir[2] * dir[2]); if (len > 0.0f) { dir[0] /= len; diff --git a/src/mumble/AudioOutputSpeech.cpp b/src/mumble/AudioOutputSpeech.cpp index bc48ed858..a0f28579d 100644 --- a/src/mumble/AudioOutputSpeech.cpp +++ b/src/mumble/AudioOutputSpeech.cpp @@ -47,9 +47,9 @@ AudioOutputSpeech::AudioOutputSpeech(ClientUser *user, unsigned int freq, Messag // opus's "frame" means different from normal audio term "frame" // normally, a frame means a bundle of only one sample from each channel, - // e.g. for a stereo stream, ...[LR]LRLRLR.... where the bracket indicates a frame + // e.Global::get(). for a stereo stream, ...[LR]LRLRLR.... where the bracket indicates a frame // in opus term, a frame means samples that span a period of time, which can be either stereo or mono - // e.g. ...[LRLR....LRLR].... or ...[MMMM....MMMM].... for mono stream + // e.Global::get(). ...[LRLR....LRLR].... or ...[MMMM....MMMM].... for mono stream // opus supports frames with: 2.5, 5, 10, 20, 40 or 60 ms of audio data. // sample rate / 100 means 10ms mono audio data per frame. iFrameSizePerChannel = iFrameSize = iSampleRate / 100; // for mono stream @@ -59,7 +59,7 @@ AudioOutputSpeech::AudioOutputSpeech(ClientUser *user, unsigned int freq, Messag // Always pretend Stereo mode is true by default. since opus will convert mono stream to stereo stream. // https://tools.ietf.org/html/rfc6716#section-2.1.2 bStereo = true; - oCodec = g.oCodec; + oCodec = Global::get().oCodec; if (oCodec) { opusState = oCodec->opus_decoder_create(iSampleRate, bStereo ? 2 : 1, nullptr); oCodec->opus_decoder_ctl( @@ -123,7 +123,7 @@ AudioOutputSpeech::AudioOutputSpeech(ClientUser *user, unsigned int freq, Messag ucFlags = SpeechFlags::Invalid; jbJitter = jitter_buffer_init(iFrameSize); - int margin = g.s.iJitterBufferSize * iFrameSize; + int margin = Global::get().s.iJitterBufferSize * iFrameSize; jitter_buffer_ctl(jbJitter, JITTER_BUFFER_SET_MARGIN, &margin); fFadeIn = new float[iFrameSizePerChannel]; @@ -343,9 +343,9 @@ bool AudioOutputSpeech::prepareSampleBuffer(unsigned int frameCount) { QByteArray qba = qlFrames.takeFirst(); if (umtType == MessageHandler::UDPVoiceCELTAlpha || umtType == MessageHandler::UDPVoiceCELTBeta) { - int wantversion = (umtType == MessageHandler::UDPVoiceCELTAlpha) ? g.iCodecAlpha : g.iCodecBeta; - if ((p == &LoopUser::lpLoopy) && (!g.qmCodecs.isEmpty())) { - QMap< int, CELTCodec * >::const_iterator i = g.qmCodecs.constEnd(); + int wantversion = (umtType == MessageHandler::UDPVoiceCELTAlpha) ? Global::get().iCodecAlpha : Global::get().iCodecBeta; + if ((p == &LoopUser::lpLoopy) && (!Global::get().qmCodecs.isEmpty())) { + QMap< int, CELTCodec * >::const_iterator i = Global::get().qmCodecs.constEnd(); --i; wantversion = i.key(); } @@ -354,7 +354,7 @@ bool AudioOutputSpeech::prepareSampleBuffer(unsigned int frameCount) { cdDecoder = nullptr; } if (!cCodec) { - cCodec = g.qmCodecs.value(wantversion); + cCodec = Global::get().qmCodecs.value(wantversion); if (cCodec) { cdDecoder = cCodec->decoderCreate(); } diff --git a/src/mumble/AudioStats.cpp b/src/mumble/AudioStats.cpp index 798759ad5..1d2e30988 100644 --- a/src/mumble/AudioStats.cpp +++ b/src/mumble/AudioStats.cpp @@ -62,7 +62,7 @@ void AudioBar::paintEvent(QPaintEvent *) { int min = iroundf(static_cast< float >(iMin) * scale + 0.5f); int peak = iroundf(static_cast< float >(iPeak) * scale + 0.5f); - if (g.s.bHighContrast) { + if (Global::get().s.bHighContrast) { // Draw monochrome representation QColor fg = QPalette().windowText().color(); @@ -146,7 +146,7 @@ void AudioEchoWidget::paintEvent(QPaintEvent *) { paint.scale(width(), height()); paint.fillRect(rect(), Qt::black); - AudioInputPtr ai = g.ai; + AudioInputPtr ai = Global::get().ai; if (!ai || !ai->sesEcho) return; @@ -215,7 +215,7 @@ void AudioNoiseWidget::paintEvent(QPaintEvent *) { paint.fillRect(rect(), pal.color(QPalette::Window)); - AudioInputPtr ai = g.ai; + AudioInputPtr ai = Global::get().ai; if (!ai.get() || !ai->sppPreprocess) return; @@ -287,7 +287,7 @@ AudioStats::AudioStats(QWidget *p) : QDialog(p) { anwNoise->setAccessibleName(tr("Power spectrum of input signal and noise estimate")); aewEcho->setAccessibleName(tr("Weights of the echo canceller")); - AudioInputPtr ai = g.ai; + AudioInputPtr ai = Global::get().ai; if (ai && ai->sesEcho) { qgbEcho->setVisible(true); @@ -316,7 +316,7 @@ AudioStats::~AudioStats() { # define FORMAT_TO_TXT(format, arg) txt.sprintf(format, arg) #endif void AudioStats::on_Tick_timeout() { - AudioInputPtr ai = g.ai; + AudioInputPtr ai = Global::get().ai; if (!ai.get() || !ai->sppPreprocess) return; @@ -376,16 +376,16 @@ void AudioStats::on_Tick_timeout() { qlSpeechProb->setFont(f); } - if (g.uiDoublePush > 1000000) + if (Global::get().uiDoublePush > 1000000) txt = tr(">1000 ms"); else - FORMAT_TO_TXT("%04llu ms", g.uiDoublePush / 1000); + FORMAT_TO_TXT("%04llu ms", Global::get().uiDoublePush / 1000); qlDoublePush->setText(txt); - abSpeech->iBelow = iroundf(g.s.fVADmin * 32767.0f + 0.5f); - abSpeech->iAbove = iroundf(g.s.fVADmax * 32767.0f + 0.5f); + abSpeech->iBelow = iroundf(Global::get().s.fVADmin * 32767.0f + 0.5f); + abSpeech->iAbove = iroundf(Global::get().s.fVADmax * 32767.0f + 0.5f); - if (g.s.vsVAD == Settings::Amplitude) { + if (Global::get().s.vsVAD == Settings::Amplitude) { abSpeech->iValue = iroundf((32767.f / 96.0f) * (96.0f + ai->dPeakCleanMic) + 0.5f); } else { abSpeech->iValue = iroundf(ai->fSpeechProb * 32767.0f + 0.5f); diff --git a/src/mumble/AudioWizard.cpp b/src/mumble/AudioWizard.cpp index ebbf55d48..885858b0a 100644 --- a/src/mumble/AudioWizard.cpp +++ b/src/mumble/AudioWizard.cpp @@ -12,20 +12,17 @@ #include "Utils.h" #include "GlobalShortcut.h" #include "GlobalShortcutButtons.h" +#include "Global.h" #include <QtGui/QMouseEvent> #include <QtWidgets/QGraphicsEllipseItem> #include <cmath> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - AudioWizard::AudioWizard(QWidget *p) : QWizard(p) { bInit = true; bLastActive = false; - g.bInAudioWizard = true; + Global::get().bInAudioWizard = true; ticker = new QTimer(this); ticker->setObjectName(QLatin1String("Ticker")); @@ -41,7 +38,7 @@ AudioWizard::AudioWizard(QWidget *p) : QWizard(p) { qsVAD->setAccessibleName(tr("VAD level")); // Done - qcbUsage->setChecked(g.s.bUsage); + qcbUsage->setChecked(Global::get().s.bUsage); // Device if (AudioInputRegistrar::qmNew) { @@ -52,7 +49,7 @@ AudioWizard::AudioWizard(QWidget *p) : QWizard(p) { EchoCancelOptionID echoCancelOptionId = firstUsableEchoCancellation(air, qcbOutput->currentText()); if (echoCancelOptionId != EchoCancelOptionID::DISABLED) { qcbEcho->setEnabled(true); - qcbEcho->setChecked(g.s.echoOption != EchoCancelOptionID::DISABLED); + qcbEcho->setChecked(Global::get().s.echoOption != EchoCancelOptionID::DISABLED); } } QList< audioDevice > ql = air->getDeviceChoices(); @@ -78,26 +75,26 @@ AudioWizard::AudioWizard(QWidget *p) : QWizard(p) { qcbOutput->setEnabled(false); } - qcbHighContrast->setChecked(g.s.bHighContrast); - on_qcbHighContrast_clicked(g.s.bHighContrast); + qcbHighContrast->setChecked(Global::get().s.bHighContrast); + on_qcbHighContrast_clicked(Global::get().s.bHighContrast); #ifdef Q_OS_WIN // On windows we can autodetect this qcbHighContrast->setVisible(false); #endif // Settings - if (g.s.iQuality == 16000 && g.s.iFramesPerPacket == 6) + if (Global::get().s.iQuality == 16000 && Global::get().s.iFramesPerPacket == 6) qrbQualityLow->setChecked(true); - else if (g.s.iQuality == 40000 && g.s.iFramesPerPacket == 2) + else if (Global::get().s.iQuality == 40000 && Global::get().s.iFramesPerPacket == 2) qrbQualityBalanced->setChecked(true); - else if (g.s.iQuality == 72000 && g.s.iFramesPerPacket == 1) + else if (Global::get().s.iQuality == 72000 && Global::get().s.iFramesPerPacket == 1) qrbQualityUltra->setChecked(true); else qrbQualityCustom->setChecked(true); quint32 iMessage = Settings::LogNone; for (int i = Log::firstMsgType; i <= Log::lastMsgType; ++i) { - iMessage |= (g.s.qmMessages[i] & (Settings::LogSoundfile | Settings::LogTTS)); + iMessage |= (Global::get().s.qmMessages[i] & (Settings::LogSoundfile | Settings::LogTTS)); } #ifdef USE_NO_TTS @@ -107,7 +104,7 @@ AudioWizard::AudioWizard(QWidget *p) : QWizard(p) { qrbNotificationTTS->setDisabled(true); qrbNotificationSounds->setChecked(true); #else - if (iMessage == Settings::LogTTS && g.s.bTTS) + if (iMessage == Settings::LogTTS && Global::get().s.bTTS) qrbNotificationTTS->setChecked(true); else if (iMessage == Settings::LogSoundfile) qrbNotificationSounds->setChecked(true); @@ -119,8 +116,8 @@ AudioWizard::AudioWizard(QWidget *p) : QWizard(p) { qrbQualityCustom->setVisible(qrbQualityCustom->isChecked()); qlQualityCustom->setVisible(qrbQualityCustom->isChecked()); - qcbPositional->setChecked(g.s.bPositionalAudio); - qcbAttenuateOthers->setChecked(g.s.bAttenuateOthers); + qcbPositional->setChecked(Global::get().s.bPositionalAudio); + qcbAttenuateOthers->setChecked(Global::get().s.bAttenuateOthers); on_qcbInput_activated(qcbInput->currentIndex()); on_qcbOutput_activated(qcbOutput->currentIndex()); @@ -129,16 +126,16 @@ AudioWizard::AudioWizard(QWidget *p) : QWizard(p) { abAmplify->qcInside = Qt::green; abAmplify->qcAbove = Qt::red; - for (const auto &shortcut : g.s.qlShortcuts) { - if (shortcut.iIndex == g.mw->gsPushTalk->idx) { + for (const auto &shortcut : Global::get().s.qlShortcuts) { + if (shortcut.iIndex == Global::get().mw->gsPushTalk->idx) { pttButtons = shortcut.qlButtons; break; } } - if (g.s.atTransmit == Settings::PushToTalk) + if (Global::get().s.atTransmit == Settings::PushToTalk) qrPTT->setChecked(true); - else if (g.s.vsVAD == Settings::Amplitude) + else if (Global::get().s.vsVAD == Settings::Amplitude) qrAmplitude->setChecked(true); else qrSNR->setChecked(true); @@ -147,10 +144,10 @@ AudioWizard::AudioWizard(QWidget *p) : QWizard(p) { abVAD->qcInside = Qt::yellow; abVAD->qcAbove = Qt::green; - qsVAD->setValue(iroundf(g.s.fVADmax * 32767.f + 0.5f)); + qsVAD->setValue(iroundf(Global::get().s.fVADmax * 32767.f + 0.5f)); // Positional - qcbHeadphone->setChecked(g.s.bPositionalHeadphone); + qcbHeadphone->setChecked(Global::get().s.bPositionalHeadphone); fAngle = 0.0f; fX = fY = 0.0f; @@ -162,10 +159,10 @@ AudioWizard::AudioWizard(QWidget *p) : QWizard(p) { qgvView->setRenderHints(QPainter::Antialiasing); // Volume - qsMaxAmp->setValue(g.s.iMinLoudness); + qsMaxAmp->setValue(Global::get().s.iMinLoudness); // Device Tuning - qsOutputDelay->setValue(g.s.iOutputDelay); + qsOutputDelay->setValue(Global::get().s.iOutputDelay); on_qsOutputDelay_valueChanged(qsOutputDelay->value()); @@ -173,12 +170,12 @@ AudioWizard::AudioWizard(QWidget *p) : QWizard(p) { resize(700, 500); updateTriggerWidgets(qrPTT->isChecked()); - sOldSettings = g.s; - g.s.lmLoopMode = Settings::Local; - g.s.dPacketLoss = 0.0; - g.s.dMaxPacketDelay = 0.0; - g.s.bMute = true; - g.s.bDeaf = false; + sOldSettings = Global::get().s; + Global::get().s.lmLoopMode = Settings::Local; + Global::get().s.dPacketLoss = 0.0; + Global::get().s.dMaxPacketDelay = 0.0; + Global::get().s.bMute = true; + Global::get().s.bDeaf = false; bTransmitChanged = false; @@ -238,14 +235,14 @@ void AudioWizard::on_qcbInputDevice_activated(int) { AudioInputRegistrar *air = AudioInputRegistrar::qmNew->value(qcbInput->currentText()); int idx = qcbInputDevice->currentIndex(); if (idx > -1) { - air->setDeviceChoice(qcbInputDevice->itemData(idx), g.s); + air->setDeviceChoice(qcbInputDevice->itemData(idx), Global::get().s); } EchoCancelOptionID echoCancelOptionId = firstUsableEchoCancellation(air, qcbOutput->currentText()); qcbEcho->setEnabled(echoCancelOptionId != EchoCancelOptionID::DISABLED); - g.ai = AudioInputPtr(air->create()); - g.ai->start(QThread::HighestPriority); + Global::get().ai = AudioInputPtr(air->create()); + Global::get().ai->start(QThread::HighestPriority); } void AudioWizard::on_qcbOutput_activated(int) { @@ -278,7 +275,7 @@ void AudioWizard::on_qcbOutputDevice_activated(int) { AudioOutputRegistrar *aor = AudioOutputRegistrar::qmNew->value(qcbOutput->currentText()); int idx = qcbOutputDevice->currentIndex(); if (idx > -1) { - aor->setDeviceChoice(qcbOutputDevice->itemData(idx), g.s); + aor->setDeviceChoice(qcbOutputDevice->itemData(idx), Global::get().s); bDelay = aor->usesOutputDelay(); } @@ -286,18 +283,18 @@ void AudioWizard::on_qcbOutputDevice_activated(int) { EchoCancelOptionID echoCancelOptionId = firstUsableEchoCancellation(air, qcbOutput->currentText()); qcbEcho->setEnabled(echoCancelOptionId != EchoCancelOptionID::DISABLED); - g.ao = AudioOutputPtr(aor->create()); - g.ao->start(QThread::HighPriority); + Global::get().ao = AudioOutputPtr(aor->create()); + Global::get().ao->start(QThread::HighPriority); } void AudioWizard::on_qsOutputDelay_valueChanged(int v) { qlOutputDelay->setText(tr("%1 ms").arg(v * 10)); - g.s.iOutputDelay = v; + Global::get().s.iOutputDelay = v; restartAudio(); } void AudioWizard::on_qsMaxAmp_valueChanged(int v) { - g.s.iMinLoudness = qMin(v, 30000); + Global::get().s.iMinLoudness = qMin(v, 30000); } void AudioWizard::showPage(int pageid) { @@ -306,24 +303,24 @@ void AudioWizard::showPage(int pageid) { CompletablePage *cp = qobject_cast< CompletablePage * >(currentPage()); - AudioOutputPtr ao = g.ao; + AudioOutputPtr ao = Global::get().ao; if (ao) ao->wipe(); aosSource = nullptr; - g.bPosTest = false; + Global::get().bPosTest = false; if (cp == qwpIntro) { - g.s.bMute = true; + Global::get().s.bMute = true; } else if (cp == qwpDone) { - g.s.bMute = true; + Global::get().s.bMute = true; } else if (cp == qwpDeviceTuning) { - g.s.bMute = true; + Global::get().s.bMute = true; playChord(); } else if (cp == qwpPositional) { fX = fY = 0.0f; - g.s.bMute = true; - g.bPosTest = true; + Global::get().s.bMute = true; + Global::get().bPosTest = true; if (qgsScene) { delete qgsScene; qgiSource = nullptr; @@ -331,26 +328,26 @@ void AudioWizard::showPage(int pageid) { } playChord(); } else { - g.s.bMute = false; + Global::get().s.bMute = false; } if ((cp == qwpTrigger) || (cp == qwpSettings)) { if (!bTransmitChanged) - g.s.atTransmit = sOldSettings.atTransmit; + Global::get().s.atTransmit = sOldSettings.atTransmit; else if (qrPTT->isChecked()) - g.s.atTransmit = Settings::PushToTalk; + Global::get().s.atTransmit = Settings::PushToTalk; else - g.s.atTransmit = Settings::VAD; + Global::get().s.atTransmit = Settings::VAD; } else { - g.s.atTransmit = Settings::Continuous; + Global::get().s.atTransmit = Settings::Continuous; } } int AudioWizard::nextId() const { - AudioOutputPtr ao = g.ao; + AudioOutputPtr ao = Global::get().ao; int nextid = QWizard::nextId(); - if (currentPage() == qwpSettings && !g.s.bPositionalAudio) + if (currentPage() == qwpSettings && !Global::get().s.bPositionalAudio) nextid++; else if ((currentPage() == qwpDevice) && !bDelay) nextid++; @@ -358,7 +355,7 @@ int AudioWizard::nextId() const { } void AudioWizard::playChord() { - AudioOutputPtr ao = g.ao; + AudioOutputPtr ao = Global::get().ao; if (!ao || aosSource || bInit) return; aosSource = ao->playSample(QLatin1String(":/wb_male.oga"), true); @@ -369,8 +366,8 @@ void AudioWizard::restartAudio() { Audio::stop(); - g.s.qsAudioInput = qcbInput->currentText(); - g.s.qsAudioOutput = qcbOutput->currentText(); + Global::get().s.qsAudioInput = qcbInput->currentText(); + Global::get().s.qsAudioOutput = qcbOutput->currentText(); Audio::start(); @@ -385,51 +382,51 @@ void AudioWizard::restartAudio() { } void AudioWizard::reject() { - g.s = sOldSettings; + Global::get().s = sOldSettings; - g.s.lmLoopMode = Settings::None; + Global::get().s.lmLoopMode = Settings::None; restartAudio(); - AudioOutputPtr ao = g.ao; + AudioOutputPtr ao = Global::get().ao; if (ao) ao->wipe(); aosSource = nullptr; - g.bInAudioWizard = false; + Global::get().bInAudioWizard = false; QWizard::reject(); } void AudioWizard::accept() { if (!bTransmitChanged) - g.s.atTransmit = sOldSettings.atTransmit; + Global::get().s.atTransmit = sOldSettings.atTransmit; else if (qrPTT->isChecked()) - g.s.atTransmit = Settings::PushToTalk; + Global::get().s.atTransmit = Settings::PushToTalk; else - g.s.atTransmit = Settings::VAD; + Global::get().s.atTransmit = Settings::VAD; - g.s.bMute = sOldSettings.bMute; - g.s.bDeaf = sOldSettings.bDeaf; - g.s.lmLoopMode = Settings::None; + Global::get().s.bMute = sOldSettings.bMute; + Global::get().s.bDeaf = sOldSettings.bDeaf; + Global::get().s.lmLoopMode = Settings::None; // Switch TTS<->Sounds according to user selection if (!qrbNotificationCustom->isChecked()) { Settings::MessageLog mlReplace = qrbNotificationTTS->isChecked() ? Settings::LogSoundfile : Settings::LogTTS; for (int i = Log::firstMsgType; i <= Log::lastMsgType; ++i) { - if (g.s.qmMessages[i] & mlReplace) - g.s.qmMessages[i] ^= Settings::LogSoundfile | Settings::LogTTS; + if (Global::get().s.qmMessages[i] & mlReplace) + Global::get().s.qmMessages[i] ^= Settings::LogSoundfile | Settings::LogTTS; } if (qrbNotificationTTS->isChecked()) { - g.s.bTTS = true; - g.mw->qaAudioTTS->setChecked(true); + Global::get().s.bTTS = true; + Global::get().mw->qaAudioTTS->setChecked(true); } } - g.s.bUsage = qcbUsage->isChecked(); - g.bPosTest = false; + Global::get().s.bUsage = qcbUsage->isChecked(); + Global::get().bPosTest = false; restartAudio(); - g.bInAudioWizard = false; + Global::get().bInAudioWizard = false; QWizard::accept(); } @@ -442,8 +439,8 @@ bool AudioWizard::validateCurrentPage() { } void AudioWizard::on_Ticker_timeout() { - AudioInputPtr ai = g.ai; - AudioOutputPtr ao = g.ao; + AudioInputPtr ai = Global::get().ai; + AudioOutputPtr ao = Global::get().ao; if (!ai || !ao) return; @@ -461,10 +458,10 @@ void AudioWizard::on_Ticker_timeout() { abAmplify->iPeak = iMaxPeak; abAmplify->update(); - abVAD->iBelow = iroundf(g.s.fVADmin * 32767.0f + 0.5f); - abVAD->iAbove = iroundf(g.s.fVADmax * 32767.0f + 0.5f); + abVAD->iBelow = iroundf(Global::get().s.fVADmin * 32767.0f + 0.5f); + abVAD->iAbove = iroundf(Global::get().s.fVADmax * 32767.0f + 0.5f); - if (g.s.vsVAD == Settings::Amplitude) { + if (Global::get().s.vsVAD == Settings::Amplitude) { abVAD->iValue = iroundf((32767.f / 96.0f) * (96.0f + ai->dPeakCleanMic) + 0.5f); } else { abVAD->iValue = iroundf(ai->fSpeechProb * 32767.0f + 0.5f); @@ -573,15 +570,15 @@ void AudioWizard::on_Ticker_timeout() { void AudioWizard::on_qsVAD_valueChanged(int v) { if (!bInit) { - g.s.fVADmax = static_cast< float >(v) / 32767.0f; - g.s.fVADmin = g.s.fVADmax * 0.9f; + Global::get().s.fVADmax = static_cast< float >(v) / 32767.0f; + Global::get().s.fVADmin = Global::get().s.fVADmax * 0.9f; } } void AudioWizard::on_qrSNR_clicked(bool on) { if (on) { - g.s.vsVAD = Settings::SignalToNoise; - g.s.atTransmit = Settings::VAD; + Global::get().s.vsVAD = Settings::SignalToNoise; + Global::get().s.atTransmit = Settings::VAD; updateTriggerWidgets(false); bTransmitChanged = true; } @@ -589,8 +586,8 @@ void AudioWizard::on_qrSNR_clicked(bool on) { void AudioWizard::on_qrAmplitude_clicked(bool on) { if (on) { - g.s.vsVAD = Settings::Amplitude; - g.s.atTransmit = Settings::VAD; + Global::get().s.vsVAD = Settings::Amplitude; + Global::get().s.atTransmit = Settings::VAD; updateTriggerWidgets(false); bTransmitChanged = true; } @@ -598,7 +595,7 @@ void AudioWizard::on_qrAmplitude_clicked(bool on) { void AudioWizard::on_qrPTT_clicked(bool on) { if (on) { - g.s.atTransmit = Settings::PushToTalk; + Global::get().s.atTransmit = Settings::PushToTalk; updateTriggerWidgets(true); bTransmitChanged = true; } @@ -626,8 +623,8 @@ void AudioWizard::on_qpbPTT_clicked() { QList< Shortcut > shortcuts; bool found = false; - for (auto &shortcut : g.s.qlShortcuts) { - if (shortcut.iIndex == g.mw->gsPushTalk->idx) { + for (auto &shortcut : Global::get().s.qlShortcuts) { + if (shortcut.iIndex == Global::get().mw->gsPushTalk->idx) { if (pttButtons.isEmpty()) { continue; } @@ -643,13 +640,13 @@ void AudioWizard::on_qpbPTT_clicked() { if (!found && !pttButtons.isEmpty()) { Shortcut shortcut; - shortcut.iIndex = g.mw->gsPushTalk->idx; + shortcut.iIndex = Global::get().mw->gsPushTalk->idx; shortcut.qlButtons = pttButtons; shortcut.bSuppress = false; shortcuts << shortcut; } - g.s.qlShortcuts = shortcuts; + Global::get().s.qlShortcuts = shortcuts; GlobalShortcutEngine::engine->bNeedRemap = true; GlobalShortcutEngine::engine->needRemap(); } @@ -657,21 +654,21 @@ void AudioWizard::on_qpbPTT_clicked() { void AudioWizard::on_qcbEcho_clicked(bool on) { if (on) { AudioInputRegistrar *air = AudioInputRegistrar::qmNew->value(qcbInput->currentText()); - g.s.echoOption = firstUsableEchoCancellation(air, qcbOutput->currentText()); + Global::get().s.echoOption = firstUsableEchoCancellation(air, qcbOutput->currentText()); } else { - g.s.echoOption = EchoCancelOptionID::DISABLED; + Global::get().s.echoOption = EchoCancelOptionID::DISABLED; } restartAudio(); } void AudioWizard::on_qcbHeadphone_clicked(bool on) { - g.s.bPositionalHeadphone = on; + Global::get().s.bPositionalHeadphone = on; restartAudio(); } void AudioWizard::on_qcbPositional_clicked(bool on) { - g.s.bPositionalAudio = on; - g.s.bTransmitPosition = on; + Global::get().s.bPositionalAudio = on; + Global::get().s.bTransmitPosition = on; restartAudio(); } @@ -698,43 +695,43 @@ void AudioWizard::updateTriggerWidgets(bool ptt) { } void AudioWizard::on_qcbAttenuateOthers_clicked(bool checked) { - g.s.bAttenuateOthers = checked; + Global::get().s.bAttenuateOthers = checked; } void AudioWizard::on_qcbHighContrast_clicked(bool on) { - g.s.bHighContrast = on; + Global::get().s.bHighContrast = on; - qliAmpTuningText->setVisible(!g.s.bHighContrast); - qliAmpTuningTextHC->setVisible(g.s.bHighContrast); + qliAmpTuningText->setVisible(!Global::get().s.bHighContrast); + qliAmpTuningTextHC->setVisible(Global::get().s.bHighContrast); - qliVolumeTuningText->setVisible(!g.s.bHighContrast); - qliVolumeTuningTextHC->setVisible(g.s.bHighContrast); + qliVolumeTuningText->setVisible(!Global::get().s.bHighContrast); + qliVolumeTuningTextHC->setVisible(Global::get().s.bHighContrast); - qliVadTuningText->setVisible(!g.s.bHighContrast); - qliVadTuningTextHC->setVisible(g.s.bHighContrast); + qliVadTuningText->setVisible(!Global::get().s.bHighContrast); + qliVadTuningTextHC->setVisible(Global::get().s.bHighContrast); } void AudioWizard::on_qrbQualityLow_clicked() { - g.s.iQuality = 16000; - g.s.iFramesPerPacket = 6; + Global::get().s.iQuality = 16000; + Global::get().s.iFramesPerPacket = 6; restartAudio(); } void AudioWizard::on_qrbQualityBalanced_clicked() { - g.s.iQuality = 40000; - g.s.iFramesPerPacket = 2; + Global::get().s.iQuality = 40000; + Global::get().s.iFramesPerPacket = 2; restartAudio(); } void AudioWizard::on_qrbQualityUltra_clicked() { - g.s.iQuality = 72000; - g.s.iFramesPerPacket = 1; + Global::get().s.iQuality = 72000; + Global::get().s.iFramesPerPacket = 1; restartAudio(); } void AudioWizard::on_qrbQualityCustom_clicked() { - g.s.iQuality = sOldSettings.iQuality; - g.s.iFramesPerPacket = sOldSettings.iFramesPerPacket; + Global::get().s.iQuality = sOldSettings.iQuality; + Global::get().s.iFramesPerPacket = sOldSettings.iFramesPerPacket; restartAudio(); } diff --git a/src/mumble/BanEditor.cpp b/src/mumble/BanEditor.cpp index 98bbe1e74..5e3f7cc42 100644 --- a/src/mumble/BanEditor.cpp +++ b/src/mumble/BanEditor.cpp @@ -8,9 +8,6 @@ #include "Ban.h" #include "Channel.h" #include "ServerHandler.h" - -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. #include "Global.h" BanEditor::BanEditor(const MumbleProto::BanList &msg, QWidget *p) : QDialog(p), maskDefaultValue(32) { @@ -63,7 +60,7 @@ void BanEditor::accept() { be->set_duration(b.iDuration); } - g.sh->sendMessage(msg); + Global::get().sh->sendMessage(msg); QDialog::accept(); } diff --git a/src/mumble/Cert.cpp b/src/mumble/Cert.cpp index 76c96b0b9..929c2fc22 100644 --- a/src/mumble/Cert.cpp +++ b/src/mumble/Cert.cpp @@ -15,6 +15,7 @@ #include "SelfSignedCertificate.h" #include "Utils.h" +#include "Global.h" #include <QtCore/QUrl> #include <QtGui/QDesktopServices> @@ -25,10 +26,6 @@ #include <openssl/pkcs12.h> #include <openssl/x509.h> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - #define SSL_STRING(x) QString::fromLatin1(x).toUtf8().data() CertView::CertView(QWidget *p) : QGroupBox(p) { @@ -179,7 +176,7 @@ int CertWizard::nextId() const { void CertWizard::initializePage(int id) { if (id == 0) { - kpCurrent = kpNew = g.s.kpCertificate; + kpCurrent = kpNew = Global::get().s.kpCertificate; if (validateCert(kpCurrent)) { qrbQuick->setEnabled(false); @@ -278,7 +275,7 @@ bool CertWizard::validateCurrentPage() { kpNew = imp; } if (currentPage() == qwpFinish) { - g.s.kpCertificate = kpNew; + Global::get().s.kpCertificate = kpNew; } return QWizard::validateCurrentPage(); } diff --git a/src/mumble/ClientUser.cpp b/src/mumble/ClientUser.cpp index 724603335..a8cad0c5d 100644 --- a/src/mumble/ClientUser.cpp +++ b/src/mumble/ClientUser.cpp @@ -97,7 +97,7 @@ void ClientUser::remove(unsigned int uiSession) { } if (p) { - AudioOutputPtr ao = g.ao; + AudioOutputPtr ao = Global::get().ao; if (ao) { // It is safe to call this function and to give the ClientUser pointer // to it even though we don't hold the lock anymore as it will only take @@ -253,7 +253,7 @@ void ClientUser::setLocalNickname(const QString &nickname) { } bool ClientUser::lessThanOverlay(const ClientUser *first, const ClientUser *second) { - if (g.s.os.osSort == OverlaySettings::LastStateChange) { + if (Global::get().s.os.osSort == OverlaySettings::LastStateChange) { // Talkers above non-talkers if (first->tsState != Settings::Passive && second->tsState == Settings::Passive) return true; @@ -287,7 +287,7 @@ bool ClientUser::lessThanOverlay(const ClientUser *first, const ClientUser *seco // When sorting for the overlay always place the local users // channel above the others - ClientUser *self = c_qmUsers.value(g.uiSession); + ClientUser *self = c_qmUsers.value(Global::get().uiSession); if (self) { if (self->cChannel == first->cChannel) return true; @@ -311,7 +311,7 @@ bool ClientUser::isActive() { if (!tLastTalkStateChange.isStarted()) return false; - return tLastTalkStateChange.elapsed() < g.s.os.uiActiveTime * 1000000U; + return tLastTalkStateChange.elapsed() < Global::get().s.os.uiActiveTime * 1000000U; } /* From Channel.h diff --git a/src/mumble/ConfigDialog.cpp b/src/mumble/ConfigDialog.cpp index 5e7fa5ade..c4c342aef 100644 --- a/src/mumble/ConfigDialog.cpp +++ b/src/mumble/ConfigDialog.cpp @@ -32,7 +32,7 @@ ConfigDialog::ConfigDialog(QWidget *p) : QDialog(p) { } - s = g.s; + s = Global::get().s; unsigned int idx = 0; ConfigWidgetNew cwn; @@ -79,11 +79,11 @@ ConfigDialog::ConfigDialog(QWidget *p) : QDialog(p) { restoreAllButton->setToolTip(tr("Restore all defaults")); restoreAllButton->setWhatsThis(tr("This button will restore the defaults for all settings.")); - if (!g.s.qbaConfigGeometry.isEmpty()) { + if (!Global::get().s.qbaConfigGeometry.isEmpty()) { #ifdef USE_OVERLAY - if (!g.ocIntercept) + if (!Global::get().ocIntercept) #endif - restoreGeometry(g.s.qbaConfigGeometry); + restoreGeometry(Global::get().s.qbaConfigGeometry); } } @@ -117,7 +117,7 @@ void ConfigDialog::addPage(ConfigWidget *cw, unsigned int idx) { qswPages->addWidget(cw); } qmWidgets.insert(idx, cw); - cw->load(g.s); + cw->load(Global::get().s); } ConfigDialog::~ConfigDialog() { @@ -152,7 +152,7 @@ void ConfigDialog::on_pageButtonBox_clicked(QAbstractButton *b) { break; } case QDialogButtonBox::Reset: { - conf->load(g.s); + conf->load(Global::get().s); break; } // standardButton returns NoButton for any custom buttons. The only custom button @@ -246,16 +246,16 @@ void ConfigDialog::apply() { foreach (ConfigWidget *cw, qmWidgets) cw->save(); - g.s = s; + Global::get().s = s; foreach (ConfigWidget *cw, qmWidgets) cw->accept(); - if (!g.s.bAttenuateOthersOnTalk) - g.bAttenuateOthers = false; + if (!Global::get().s.bAttenuateOthersOnTalk) + Global::get().bAttenuateOthers = false; // They might have changed their keys. - g.iPushToTalk = 0; + Global::get().iPushToTalk = 0; Audio::start(); @@ -266,9 +266,9 @@ void ConfigDialog::accept() { apply(); #ifdef USE_OVERLAY - if (!g.ocIntercept) + if (!Global::get().ocIntercept) #endif - g.s.qbaConfigGeometry = saveGeometry(); + Global::get().s.qbaConfigGeometry = saveGeometry(); QDialog::accept(); } diff --git a/src/mumble/ConnectDialog.cpp b/src/mumble/ConnectDialog.cpp index 2f3968a68..63ef64bf6 100644 --- a/src/mumble/ConnectDialog.cpp +++ b/src/mumble/ConnectDialog.cpp @@ -15,6 +15,7 @@ #include "ServerResolver.h" #include "Utils.h" #include "WebFetch.h" +#include "Global.h" #include <QtCore/QMimeData> #include <QtCore/QUrlQuery> @@ -40,10 +41,6 @@ # include <QRandomGenerator> #endif -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - QMap< QString, QIcon > ServerItem::qmIcons; QList< PublicInfo > ConnectDialog::qlPublicServers; QString ConnectDialog::qsUserCountry, ConnectDialog::qsUserCountryCode, ConnectDialog::qsUserContinentCode; @@ -109,7 +106,7 @@ ServerView::ServerView(QWidget *p) : QTreeWidget(p) { siLAN = nullptr; #endif - if (!g.s.bDisablePublicList) { + if (!Global::get().s.bDisablePublicList) { siPublic = new ServerItem(tr("Public Internet"), ServerItem::PublicType); siPublic->setChildIndicatorPolicy(QTreeWidgetItem::ShowIndicator); addTopLevelItem(siPublic); @@ -407,19 +404,19 @@ ServerItem *ServerItem::fromUrl(QUrl url, QWidget *p) { QUrlQuery query(url); if (url.userName().isEmpty()) { - if (g.s.qsUsername.isEmpty()) { + if (Global::get().s.qsUsername.isEmpty()) { bool ok; QString defUserName = QInputDialog::getText(p, ConnectDialog::tr("Adding host %1").arg(url.host()), - ConnectDialog::tr("Enter username"), QLineEdit::Normal, g.s.qsUsername, &ok) + ConnectDialog::tr("Enter username"), QLineEdit::Normal, Global::get().s.qsUsername, &ok) .trimmed(); if (!ok) return nullptr; if (defUserName.isEmpty()) return nullptr; - g.s.qsUsername = defUserName; + Global::get().s.qsUsername = defUserName; } - url.setUserName(g.s.qsUsername); + url.setUserName(Global::get().s.qsUsername); } ServerItem *si = @@ -759,11 +756,11 @@ ConnectDialogEdit::ConnectDialogEdit(QWidget *parent) : QDialog(parent) { if (!updateFromClipboard()) { // If connected to a server assume the user wants to add it - if (g.sh && g.sh->isRunning()) { + if (Global::get().sh && Global::get().sh->isRunning()) { QString host, name, user, pw; unsigned short port = DEFAULT_MUMBLE_PORT; - g.sh->getConnectionInfo(host, port, user, pw); + Global::get().sh->getConnectionInfo(host, port, user, pw); Channel *c = Channel::get(0); if (c && c->qsName != QLatin1String("Root")) { name = c->qsName; @@ -776,7 +773,7 @@ ConnectDialogEdit::ConnectDialogEdit(QWidget *parent) : QDialog(parent) { m_si = new ServerItem(name, host, port, user, pw); } } - qleUsername->setText(g.s.qsUsername); + qleUsername->setText(Global::get().s.qsUsername); } void ConnectDialogEdit::init() { @@ -940,10 +937,10 @@ ConnectDialog::ConnectDialog(QWidget *p, bool autoconnect) : QDialog(p), bAutoCo siAutoConnect = nullptr; - bAllowPing = g.s.ptProxyType == Settings::NoProxy; - bAllowHostLookup = g.s.ptProxyType == Settings::NoProxy; - bAllowZeroconf = g.s.ptProxyType == Settings::NoProxy; - bAllowFilters = g.s.ptProxyType == Settings::NoProxy; + bAllowPing = Global::get().s.ptProxyType == Settings::NoProxy; + bAllowHostLookup = Global::get().s.ptProxyType == Settings::NoProxy; + bAllowZeroconf = Global::get().s.ptProxyType == Settings::NoProxy; + bAllowFilters = Global::get().s.ptProxyType == Settings::NoProxy; if (tPublicServers.elapsed() >= 60 * 24 * 1000000ULL) { qlPublicServers.clear(); @@ -966,12 +963,12 @@ ConnectDialog::ConnectDialog(QWidget *p, bool autoconnect) : QDialog(p), bAutoCo connect(qpbEdit, SIGNAL(clicked()), qaFavoriteEdit, SIGNAL(triggered())); qdbbButtonBox->addButton(qpbEdit, QDialogButtonBox::ActionRole); - qpbAdd->setHidden(g.s.disableConnectDialogEditing); - qpbEdit->setHidden(g.s.disableConnectDialogEditing); + qpbAdd->setHidden(Global::get().s.disableConnectDialogEditing); + qpbEdit->setHidden(Global::get().s.disableConnectDialogEditing); qtwServers->setItemDelegate(new ServerViewDelegate()); - if (!g.s.bDisablePublicList) { + if (!Global::get().s.bDisablePublicList) { const QIcon qiFlag = ServerItem::loadIcon(QLatin1String("skin:categories/applications-internet.svg")); // Add continents and 'Unknown' to the location combobox qcbSearchLocation->addItem(qiFlag, tr("All"), QLatin1String("all")); @@ -1005,7 +1002,7 @@ ConnectDialog::ConnectDialog(QWidget *p, bool autoconnect) : QDialog(p), bAutoCo SLOT(OnSortChanged(int, Qt::SortOrder))); if (bAllowFilters) { - switch (g.s.ssFilter) { + switch (Global::get().s.ssFilter) { case Settings::ShowPopulated: qcbFilter->setCurrentText(tr("Show Populated")); break; @@ -1023,7 +1020,7 @@ ConnectDialog::ConnectDialog(QWidget *p, bool autoconnect) : QDialog(p), bAutoCo qmPopup = new QMenu(this); QList< QTreeWidgetItem * > ql; - QList< FavoriteServer > favorites = g.db->getFavorites(); + QList< FavoriteServer > favorites = Global::get().db->getFavorites(); foreach (const FavoriteServer &fs, favorites) { ServerItem *si = new ServerItem(fs); @@ -1032,13 +1029,13 @@ ConnectDialog::ConnectDialog(QWidget *p, bool autoconnect) : QDialog(p), bAutoCo qtwServers->siFavorite->addServerItem(si); } #ifdef USE_ZEROCONF - if (bAllowZeroconf && g.zeroconf && g.zeroconf->isOk()) { - connect(g.zeroconf, &Zeroconf::recordsChanged, this, &ConnectDialog::onUpdateLanList); - connect(g.zeroconf, &Zeroconf::recordResolved, this, &ConnectDialog::onResolved); - connect(g.zeroconf, &Zeroconf::resolveError, this, &ConnectDialog::onLanResolveError); - onUpdateLanList(g.zeroconf->currentRecords()); + if (bAllowZeroconf && Global::get().zeroconf && Global::get().zeroconf->isOk()) { + connect(Global::get().zeroconf, &Zeroconf::recordsChanged, this, &ConnectDialog::onUpdateLanList); + connect(Global::get().zeroconf, &Zeroconf::recordResolved, this, &ConnectDialog::onResolved); + connect(Global::get().zeroconf, &Zeroconf::resolveError, this, &ConnectDialog::onLanResolveError); + onUpdateLanList(Global::get().zeroconf->currentRecords()); - g.zeroconf->startBrowser(QLatin1String("_mumble._tcp")); + Global::get().zeroconf->startBrowser(QLatin1String("_mumble._tcp")); } #endif qtPingTick = new QTimer(this); @@ -1065,19 +1062,19 @@ ConnectDialog::ConnectDialog(QWidget *p, bool autoconnect) : QDialog(p), bAutoCo qtwServers->setCurrentItem(nullptr); bLastFound = false; - qmPingCache = g.db->getPingCache(); + qmPingCache = Global::get().db->getPingCache(); - if (!g.s.qbaConnectDialogGeometry.isEmpty()) - restoreGeometry(g.s.qbaConnectDialogGeometry); - if (!g.s.qbaConnectDialogHeader.isEmpty()) - qtwServers->header()->restoreState(g.s.qbaConnectDialogHeader); + if (!Global::get().s.qbaConnectDialogGeometry.isEmpty()) + restoreGeometry(Global::get().s.qbaConnectDialogGeometry); + if (!Global::get().s.qbaConnectDialogHeader.isEmpty()) + qtwServers->header()->restoreState(Global::get().s.qbaConnectDialogHeader); } ConnectDialog::~ConnectDialog() { #ifdef USE_ZEROCONF - if (bAllowZeroconf && g.zeroconf && g.zeroconf->isOk()) { - g.zeroconf->stopBrowser(); - g.zeroconf->cleanupResolvers(); + if (bAllowZeroconf && Global::get().zeroconf && Global::get().zeroconf->isOk()) { + Global::get().zeroconf->stopBrowser(); + Global::get().zeroconf->cleanupResolvers(); } #endif ServerItem::qmIcons.clear(); @@ -1093,11 +1090,11 @@ ConnectDialog::~ConnectDialog() { continue; ql << si->toFavoriteServer(); } - g.db->setFavorites(ql); - g.db->setPingCache(qmPingCache); + Global::get().db->setFavorites(ql); + Global::get().db->setPingCache(qmPingCache); - g.s.qbaConnectDialogHeader = qtwServers->header()->saveState(); - g.s.qbaConnectDialogGeometry = saveGeometry(); + Global::get().s.qbaConnectDialogHeader = qtwServers->header()->saveState(); + Global::get().s.qbaConnectDialogGeometry = saveGeometry(); } void ConnectDialog::accept() { @@ -1114,16 +1111,16 @@ void ConnectDialog::accept() { if (si->qsUsername.isEmpty()) { bool ok; QString defUserName = QInputDialog::getText(this, tr("Connecting to %1").arg(si->qsName), tr("Enter username"), - QLineEdit::Normal, g.s.qsUsername, &ok) + QLineEdit::Normal, Global::get().s.qsUsername, &ok) .trimmed(); if (!ok) return; - g.s.qsUsername = si->qsUsername = defUserName; + Global::get().s.qsUsername = si->qsUsername = defUserName; } qsUsername = si->qsUsername; - g.s.qsLastServer = si->qsName; + Global::get().s.qsLastServer = si->qsName; QDialog::accept(); } @@ -1275,7 +1272,7 @@ void ConnectDialog::on_qtwServers_customContextMenuRequested(const QPoint &mpos) } if (si) { - if (!g.s.disableConnectDialogEditing) { + if (!Global::get().s.disableConnectDialogEditing) { if (si->itType == ServerItem::FavoriteType) { qmPopup->addAction(qaFavoriteEdit); qmPopup->addAction(qaFavoriteRemove); @@ -1317,7 +1314,7 @@ void ConnectDialog::on_qtwServers_currentItemChanged(QTreeWidgetItem *item, QTre void ConnectDialog::on_qtwServers_itemExpanded(QTreeWidgetItem *item) { if (qtwServers->siPublic && item == qtwServers->siPublic) { - if (!g.s.bPingServersDialogViewed) { + if (!Global::get().s.bPingServersDialogViewed) { // Ask the user for consent to ping the servers. If the user does // not give consent, disable the public server list and return. int result = QMessageBox::question( @@ -1327,9 +1324,9 @@ void ConnectDialog::on_qtwServers_itemExpanded(QTreeWidgetItem *item) { "<p>Do you consent to the transmission of your IP address? If you answer no, the public server " "list will be deactivated. However, you can reactivate it at any time in the network settings.</p>"), QMessageBox::Yes | QMessageBox::No); - g.s.bPingServersDialogViewed = true; + Global::get().s.bPingServersDialogViewed = true; if (result == QMessageBox::No) { - g.s.bDisablePublicList = true; + Global::get().s.bDisablePublicList = true; item->setExpanded(false); item->setHidden(true); return; @@ -1405,7 +1402,7 @@ void ConnectDialog::onUpdateLanList(const QList< BonjourRecord > &list) { if (!found) { ServerItem *si = new ServerItem(record); qlItems << si; - g.zeroconf->startResolver(record); + Global::get().zeroconf->startResolver(record); startDns(si); qtwServers->siLAN->addServerItem(si); } @@ -1466,13 +1463,13 @@ void ConnectDialog::fillList() { } void ConnectDialog::timeTick() { - if (!bLastFound && !g.s.qsLastServer.isEmpty()) { + if (!bLastFound && !Global::get().s.qsLastServer.isEmpty()) { QList< QTreeWidgetItem * > items = - qtwServers->findItems(g.s.qsLastServer, Qt::MatchExactly | Qt::MatchRecursive); + qtwServers->findItems(Global::get().s.qsLastServer, Qt::MatchExactly | Qt::MatchRecursive); if (!items.isEmpty()) { bLastFound = true; qtwServers->setCurrentItem(items.at(0)); - if (g.s.bAutoConnect && bAutoConnect) { + if (Global::get().s.bAutoConnect && bAutoConnect) { siAutoConnect = static_cast< ServerItem * >(items.at(0)); if (!siAutoConnect->qlAddresses.isEmpty()) { accept(); @@ -1562,7 +1559,7 @@ void ConnectDialog::timeTick() { } void ConnectDialog::filterPublicServerList() const { - if (!g.s.bDisablePublicList) { + if (!Global::get().s.bDisablePublicList) { foreach (ServerItem *const si, qtwServers->siPublic->qlChildren) { filterServer(si); } } } @@ -1578,10 +1575,10 @@ void ConnectDialog::filterServer(ServerItem *const si) const { return; } } - if (g.s.ssFilter == Settings::ShowReachable && si->dPing == 0.0) { + if (Global::get().s.ssFilter == Settings::ShowReachable && si->dPing == 0.0) { si->setHidden(true); return; - } else if (g.s.ssFilter == Settings::ShowPopulated && si->uiUsers == 0) { + } else if (Global::get().s.ssFilter == Settings::ShowPopulated && si->uiUsers == 0) { si->setHidden(true); return; } @@ -1637,7 +1634,7 @@ void ConnectDialog::startDns(ServerItem *si) { #ifdef USE_ZEROCONF if (bAllowZeroconf && si->qsHostname.isEmpty() && !si->zeroconfRecord.serviceName.isEmpty()) { if (!qlBonjourActive.contains(si->zeroconfRecord)) { - g.zeroconf->startResolver(si->zeroconfRecord); + Global::get().zeroconf->startResolver(si->zeroconfRecord); qlBonjourActive.append(si->zeroconfRecord); } return; @@ -1853,11 +1850,11 @@ void ConnectDialog::on_qcbSearchLocation_currentIndexChanged(int searchLocationI void ConnectDialog::on_qcbFilter_currentIndexChanged(int filterIndex) { const QString filter = qcbFilter->itemText(filterIndex); if (filter == tr("Show All")) { - g.s.ssFilter = Settings::ShowAll; + Global::get().s.ssFilter = Settings::ShowAll; } else if (filter == tr("Show Reachable")) { - g.s.ssFilter = Settings::ShowReachable; + Global::get().s.ssFilter = Settings::ShowReachable; } else if (filter == tr("Show Populated")) { - g.s.ssFilter = Settings::ShowPopulated; + Global::get().s.ssFilter = Settings::ShowPopulated; } filterPublicServerList(); diff --git a/src/mumble/CoreAudio.mm b/src/mumble/CoreAudio.mm index 09331c128..6eece9a99 100644 --- a/src/mumble/CoreAudio.mm +++ b/src/mumble/CoreAudio.mm @@ -7,15 +7,12 @@ #include <IOKit/audio/IOAudioTypes.h> #include <CoreAudio/AudioHardware.h> #include "MainWindow.h" +#include "Global.h" #include <exception> #include <sstream> #include "CoreAudio.h" -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - // Ignore deprecation warnings for the whole file, for now. #pragma GCC diagnostic ignored "-Wdeprecated-declarations" @@ -420,7 +417,7 @@ void CoreAudioInit::destroy() { } const QList< audioDevice > CoreAudioSystem::getDeviceChoices(bool input) { - bool doEcho = (g.s.echoOption == EchoCancelOptionID::APPLE_AEC); + bool doEcho = (Global::get().s.echoOption == EchoCancelOptionID::APPLE_AEC); QHash< QString, QString > qhDevices = CoreAudioSystem::getDevices(input, doEcho); QList< audioDevice > qlReturn; QStringList qlDevices; @@ -428,7 +425,7 @@ const QList< audioDevice > CoreAudioSystem::getDeviceChoices(bool input) { qhDevices.insert(QString(), QObject::tr("Default Device")); qlDevices = qhDevices.keys(); - const QString &qsDev = input ? g.s.qsCoreAudioInput : g.s.qsCoreAudioOutput; + const QString &qsDev = input ? Global::get().s.qsCoreAudioInput : Global::get().s.qsCoreAudioOutput; if (qlDevices.contains(qsDev)) { qlDevices.removeAll(qsDev); qlDevices.prepend(qsDev); @@ -529,7 +526,7 @@ bool CoreAudioInputRegistrar::isMicrophoneAccessDeniedByOS() { case AVAuthorizationStatusDenied: { // The user has previously denied access. qWarning("CoreAudioInput: Microphone access has been previously denied by user."); - g.mw->msgBox(QObject::tr("Access to the microphone was denied. Please allow Mumble to use the microphone " + Global::get().mw->msgBox(QObject::tr("Access to the microphone was denied. Please allow Mumble to use the microphone " "by changing the settings in System Preferences -> Security & Privacy -> Privacy -> " "Microphone.")); return true; @@ -537,7 +534,7 @@ bool CoreAudioInputRegistrar::isMicrophoneAccessDeniedByOS() { case AVAuthorizationStatusRestricted: { // The user can't grant access due to restrictions. qWarning("CoreAudioInput: Microphone access denied due to system restrictions."); - g.mw->msgBox(QObject::tr("Access to the microphone was denied due to system restrictions. You will not be able" + Global::get().mw->msgBox(QObject::tr("Access to the microphone was denied due to system restrictions. You will not be able" "to use the microphone in this session.")); return true; } @@ -736,7 +733,7 @@ void CoreAudioInput::run() { AudioStreamBasicDescription fmt; inputDevId = 0; echoOutputDevId = 0; - bool doEcho = (g.s.echoOption == EchoCancelOptionID::APPLE_AEC); + bool doEcho = (Global::get().s.echoOption == EchoCancelOptionID::APPLE_AEC); auHAL = nullptr; auVoip = nullptr; @@ -744,16 +741,16 @@ void CoreAudioInput::run() { memset(&buflist, 0, sizeof(AudioBufferList)); try { - if (!g.s.qsCoreAudioInput.isEmpty()) { - qWarning("CoreAudioInput: Set device to '%s'.", qPrintable(g.s.qsCoreAudioInput)); - inputDevId = core_audio_utils::GetDeviceID(g.s.qsCoreAudioInput, AUDirection::INPUT); + if (!Global::get().s.qsCoreAudioInput.isEmpty()) { + qWarning("CoreAudioInput: Set device to '%s'.", qPrintable(Global::get().s.qsCoreAudioInput)); + inputDevId = core_audio_utils::GetDeviceID(Global::get().s.qsCoreAudioInput, AUDirection::INPUT); } else { qWarning("CoreAudioInput: Set device to 'Default Device'."); inputDevId = core_audio_utils::GetDefaultDeviceID(AUDirection::INPUT); } if (doEcho) { - echoOutputDevId = core_audio_utils::GetDeviceID(g.s.qsCoreAudioOutput, AUDirection::OUTPUT); + echoOutputDevId = core_audio_utils::GetDeviceID(Global::get().s.qsCoreAudioOutput, AUDirection::OUTPUT); if (!openAUVoip(fmt)) { return; }; } else { if (!openAUHAL(fmt)) { return; }; @@ -932,10 +929,10 @@ void CoreAudioOutput::run() { kAudioObjectPropertyElementMaster }; try { - if (!g.s.qsCoreAudioOutput.isEmpty()) { - qWarning("CoreAudioOutput: Set device to '%s'.", qPrintable(g.s.qsCoreAudioOutput)); + if (!Global::get().s.qsCoreAudioOutput.isEmpty()) { + qWarning("CoreAudioOutput: Set device to '%s'.", qPrintable(Global::get().s.qsCoreAudioOutput)); - devId = core_audio_utils::GetDeviceID(g.s.qsCoreAudioOutput, AUDirection::OUTPUT); + devId = core_audio_utils::GetDeviceID(Global::get().s.qsCoreAudioOutput, AUDirection::OUTPUT); } else { qWarning("CoreAudioOutput: Set device to 'Default Device'."); diff --git a/src/mumble/CrashReporter.cpp b/src/mumble/CrashReporter.cpp index 3b62b8891..5ab600c49 100644 --- a/src/mumble/CrashReporter.cpp +++ b/src/mumble/CrashReporter.cpp @@ -32,7 +32,7 @@ CrashReporter::CrashReporter(QWidget *p) : QDialog(p) { QHBoxLayout *hbl = new QHBoxLayout(); - qleEmail = new QLineEdit(g.qs->value(QLatin1String("crashemail")).toString()); + qleEmail = new QLineEdit(Global::get().qs->value(QLatin1String("crashemail")).toString()); l = new QLabel(tr("Email address (optional)")); l->setBuddy(qleEmail); @@ -66,7 +66,7 @@ CrashReporter::CrashReporter(QWidget *p) : QDialog(p) { } CrashReporter::~CrashReporter() { - g.qs->setValue(QLatin1String("crashemail"), qleEmail->text()); + Global::get().qs->setValue(QLatin1String("crashemail"), qleEmail->text()); delete qnrReply; } @@ -98,7 +98,7 @@ void CrashReporter::uploadProgress(qint64 sent, qint64 total) { void CrashReporter::run() { QByteArray qbaDumpContents; - QFile qfCrashDump(g.qdBasePath.filePath(QLatin1String("mumble.dmp"))); + QFile qfCrashDump(Global::get().qdBasePath.filePath(QLatin1String("mumble.dmp"))); if (!qfCrashDump.exists()) return; @@ -224,7 +224,7 @@ void CrashReporter::run() { QString::fromLatin1("multipart/form-data; boundary=%1").arg(boundary)); req.setHeader(QNetworkRequest::ContentLengthHeader, QString::number(post.size())); Network::prepareRequest(req); - qnrReply = g.nam->post(req, post); + qnrReply = Global::get().nam->post(req, post); connect(qnrReply, SIGNAL(finished()), this, SLOT(uploadFinished())); connect(qnrReply, SIGNAL(uploadProgress(qint64, qint64)), this, SLOT(uploadProgress(qint64, qint64))); diff --git a/src/mumble/CustomElements.cpp b/src/mumble/CustomElements.cpp index adea56ae4..9e51ae37e 100644 --- a/src/mumble/CustomElements.cpp +++ b/src/mumble/CustomElements.cpp @@ -9,6 +9,7 @@ #include "Log.h" #include "MainWindow.h" #include "Utils.h" +#include "Global.h" #include <QMimeData> #include <QtCore/QTimer> @@ -18,10 +19,6 @@ #include <QtGui/QKeyEvent> #include <QtWidgets/QScrollBar> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - LogTextBrowser::LogTextBrowser(QWidget *p) : QTextBrowser(p) { } @@ -181,14 +178,14 @@ void ChatbarTextEdit::insertFromMimeData(const QMimeData *source) { bool ChatbarTextEdit::sendImagesFromMimeData(const QMimeData *source) { if ((source->hasImage() || source->hasUrls())) { - if (g.bAllowHTML) { + if (Global::get().bAllowHTML) { if (source->hasImage()) { // Process the image pasted onto the chatbar. QImage image = qvariant_cast<QImage>(source->imageData()); if (emitPastedImage(image)) { return true; } else { - g.l->log(Log::Information, tr("Unable to send image: too large.")); + Global::get().l->log(Log::Information, tr("Unable to send image: too large.")); return false; } @@ -206,21 +203,21 @@ bool ChatbarTextEdit::sendImagesFromMimeData(const QMimeData *source) { if (emitPastedImage(image)) { ++count; } else { - g.l->log(Log::Information, tr("Unable to send image %1: too large.").arg(path)); + Global::get().l->log(Log::Information, tr("Unable to send image %1: too large.").arg(path)); } } return (count > 0); } } else { - g.l->log(Log::Information, tr("This server does not allow sending images.")); + Global::get().l->log(Log::Information, tr("This server does not allow sending images.")); } } return false; } bool ChatbarTextEdit::emitPastedImage(QImage image) { - QString processedImage = Log::imageToImg(image, g.uiImageLength); + QString processedImage = Log::imageToImg(image, Global::get().uiImageLength); if (processedImage.length() > 0) { QString imgHtml = QLatin1String("<br />") + processedImage; emit pastedImage(imgHtml); diff --git a/src/mumble/DBus.cpp b/src/mumble/DBus.cpp index 5220de498..001c4242a 100644 --- a/src/mumble/DBus.cpp +++ b/src/mumble/DBus.cpp @@ -9,15 +9,12 @@ #include "ClientUser.h" #include "MainWindow.h" #include "ServerHandler.h" +#include "Global.h" #include <QtCore/QUrlQuery> #include <QtDBus/QDBusConnection> #include <QtDBus/QDBusMessage> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - MumbleDBus::MumbleDBus(QObject *mw) : QDBusAbstractAdaptor(mw) { } @@ -29,12 +26,12 @@ void MumbleDBus::openUrl(const QString &url, const QDBusMessage &msg) { QDBusConnection::sessionBus().send( msg.createErrorReply(QLatin1String("net.sourceforge.mumble.Error.url"), QLatin1String("Invalid URL"))); } else { - g.mw->openUrl(u); + Global::get().mw->openUrl(u); } } void MumbleDBus::getCurrentUrl(const QDBusMessage &msg) { - if (!g.sh || !g.sh->isRunning() || !g.uiSession) { + if (!Global::get().sh || !Global::get().sh->isRunning() || !Global::get().uiSession) { QDBusConnection::sessionBus().send(msg.createErrorReply( QLatin1String("net.sourceforge.mumble.Error.connection"), QLatin1String("Not connected"))); return; @@ -43,7 +40,7 @@ void MumbleDBus::getCurrentUrl(const QDBusMessage &msg) { unsigned short port; QUrl u; - g.sh->getConnectionInfo(host, port, user, pw); + Global::get().sh->getConnectionInfo(host, port, user, pw); u.setScheme(QLatin1String("mumble")); u.setHost(host); u.setPort(port); @@ -54,7 +51,7 @@ void MumbleDBus::getCurrentUrl(const QDBusMessage &msg) { u.setQuery(query); QStringList path; - Channel *c = ClientUser::get(g.uiSession)->cChannel; + Channel *c = ClientUser::get(Global::get().uiSession)->cChannel; while (c->cParent) { path.prepend(c->qsName); c = c->cParent; @@ -70,7 +67,7 @@ void MumbleDBus::getCurrentUrl(const QDBusMessage &msg) { } void MumbleDBus::getTalkingUsers(const QDBusMessage &msg) { - if (!g.sh || !g.sh->isRunning() || !g.uiSession) { + if (!Global::get().sh || !Global::get().sh->isRunning() || !Global::get().uiSession) { QDBusConnection::sessionBus().send(msg.createErrorReply( QLatin1String("net.sourceforge.mumble.Error.connection"), QLatin1String("Not connected"))); return; @@ -81,64 +78,64 @@ void MumbleDBus::getTalkingUsers(const QDBusMessage &msg) { } void MumbleDBus::focus() { - g.mw->show(); - g.mw->raise(); - g.mw->activateWindow(); + Global::get().mw->show(); + Global::get().mw->raise(); + Global::get().mw->activateWindow(); } void MumbleDBus::setTransmitMode(unsigned int mode, const QDBusMessage &msg) { switch (mode) { case 0: - g.s.atTransmit = Settings::Continuous; + Global::get().s.atTransmit = Settings::Continuous; break; case 1: - g.s.atTransmit = Settings::VAD; + Global::get().s.atTransmit = Settings::VAD; break; case 2: - g.s.atTransmit = Settings::PushToTalk; + Global::get().s.atTransmit = Settings::PushToTalk; break; default: QDBusConnection::sessionBus().send(msg.createErrorReply( QLatin1String("net.sourceforge.mumble.Error.transmitMode"), QLatin1String("Invalid transmit mode"))); return; } - QMetaObject::invokeMethod(g.mw, "updateTransmitModeComboBox", Qt::QueuedConnection); + QMetaObject::invokeMethod(Global::get().mw, "updateTransmitModeComboBox", Qt::QueuedConnection); } unsigned int MumbleDBus::getTransmitMode() { - return g.s.atTransmit; + return Global::get().s.atTransmit; } void MumbleDBus::toggleSelfMuted() { - g.mw->qaAudioMute->trigger(); + Global::get().mw->qaAudioMute->trigger(); } void MumbleDBus::toggleSelfDeaf() { - g.mw->qaAudioDeaf->trigger(); + Global::get().mw->qaAudioDeaf->trigger(); } void MumbleDBus::setSelfMuted(bool mute) { - g.mw->qaAudioMute->setChecked(!mute); - g.mw->qaAudioMute->trigger(); + Global::get().mw->qaAudioMute->setChecked(!mute); + Global::get().mw->qaAudioMute->trigger(); } void MumbleDBus::setSelfDeaf(bool deafen) { - g.mw->qaAudioDeaf->setChecked(!deafen); - g.mw->qaAudioDeaf->trigger(); + Global::get().mw->qaAudioDeaf->setChecked(!deafen); + Global::get().mw->qaAudioDeaf->trigger(); } bool MumbleDBus::isSelfMuted() { - return g.s.bMute; + return Global::get().s.bMute; } bool MumbleDBus::isSelfDeaf() { - return g.s.bDeaf; + return Global::get().s.bDeaf; } void MumbleDBus::startTalking() { - g.mw->on_PushToTalk_triggered(true, QVariant()); + Global::get().mw->on_PushToTalk_triggered(true, QVariant()); } void MumbleDBus::stopTalking() { - g.mw->on_PushToTalk_triggered(false, QVariant()); + Global::get().mw->on_PushToTalk_triggered(false, QVariant()); } diff --git a/src/mumble/Database.cpp b/src/mumble/Database.cpp index 89d7eadaf..62b30c8f5 100644 --- a/src/mumble/Database.cpp +++ b/src/mumble/Database.cpp @@ -44,7 +44,7 @@ bool Database::findOrCreateDatabase() { QSettings qs; QStringList datapaths; - datapaths << g.qdBasePath.absolutePath(); + datapaths << Global::get().qdBasePath.absolutePath(); datapaths << QStandardPaths::writableLocation(QStandardPaths::DataLocation); #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) datapaths << QDir::homePath() + QLatin1String("/.config/Mumble"); @@ -90,19 +90,19 @@ bool Database::findOrCreateDatabase() { Database::Database(const QString &dbname) { db = QSqlDatabase::addDatabase(QLatin1String("QSQLITE"), dbname); - if (!g.s.qsDatabaseLocation.isEmpty()) { - QFile configuredLocation(g.s.qsDatabaseLocation); + if (!Global::get().s.qsDatabaseLocation.isEmpty()) { + QFile configuredLocation(Global::get().s.qsDatabaseLocation); if (configuredLocation.exists()) { - db.setDatabaseName(g.s.qsDatabaseLocation); + db.setDatabaseName(Global::get().s.qsDatabaseLocation); db.open(); } else { int result = QMessageBox::critical(nullptr, QLatin1String("Mumble"), tr("The database file '%1' set in the configuration file does not " "exist. Do you want to create a new database file at this location?") - .arg(g.s.qsDatabaseLocation), + .arg(Global::get().s.qsDatabaseLocation), QMessageBox::Yes | QMessageBox::No); if (result == QMessageBox::Yes) { - db.setDatabaseName(g.s.qsDatabaseLocation); + db.setDatabaseName(Global::get().s.qsDatabaseLocation); db.open(); } else { qFatal("Database: File not found"); @@ -111,7 +111,7 @@ Database::Database(const QString &dbname) { } if (!db.isOpen()) { if (findOrCreateDatabase()) { - g.s.qsDatabaseLocation = db.databaseName(); + Global::get().s.qsDatabaseLocation = db.databaseName(); } else { QMessageBox::critical(nullptr, QLatin1String("Mumble"), tr("Mumble failed to initialize a database in any of the possible locations."), diff --git a/src/mumble/DeveloperConsole.cpp b/src/mumble/DeveloperConsole.cpp index 4a1ee9ed8..de8c04953 100644 --- a/src/mumble/DeveloperConsole.cpp +++ b/src/mumble/DeveloperConsole.cpp @@ -6,15 +6,12 @@ #include "DeveloperConsole.h" #include "LogEmitter.h" +#include "Global.h" #include <QtWidgets/QTextBrowser> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - DeveloperConsole::DeveloperConsole(QObject *parent) : QObject(parent) { - connect(g.le.data(), SIGNAL(newLogEntry(const QString &)), this, SLOT(addLogMessage(const QString &))); + connect(Global::get().le.data(), SIGNAL(newLogEntry(const QString &)), this, SLOT(addLogMessage(const QString &))); } DeveloperConsole::~DeveloperConsole() { @@ -31,7 +28,7 @@ void DeveloperConsole::show() { mw->setCentralWidget(tb); mw->setWindowTitle(tr("Developer Console")); - connect(g.le.data(), SIGNAL(newLogEntry(const QString &)), tb, SLOT(append(const QString &))); + connect(Global::get().le.data(), SIGNAL(newLogEntry(const QString &)), tb, SLOT(append(const QString &))); foreach (const QString &m, m_logEntries) tb->append(m); diff --git a/src/mumble/Global.cpp b/src/mumble/Global.cpp index a8977e746..dcc14b445 100644 --- a/src/mumble/Global.cpp +++ b/src/mumble/Global.cpp @@ -17,6 +17,10 @@ Global *Global::g_global_struct; +Global &Global::get() { + return *g_global_struct; +} + #ifndef Q_OS_WIN static void migrateDataDir() { # ifdef Q_OS_MAC diff --git a/src/mumble/Global.h b/src/mumble/Global.h index 1da6253f8..618c30962 100644 --- a/src/mumble/Global.h +++ b/src/mumble/Global.h @@ -41,6 +41,8 @@ private: Q_DISABLE_COPY(Global) public: static Global *g_global_struct; + static Global &get(); + MainWindow *mw; Settings s; boost::shared_ptr< ServerHandler > sh; @@ -137,10 +139,4 @@ public: /// Special exit code which causes mumble to restart itself. The outward facing return code with be 0 const int MUMBLE_EXIT_CODE_RESTART = 64738; -// -Wshadow is bugged. If an inline function of a class uses a variable or -// parameter named 'g', that will generate a warning even if the class header -// is included long before this definition. - -#define g (*Global::g_global_struct) - #endif diff --git a/src/mumble/GlobalShortcut.cpp b/src/mumble/GlobalShortcut.cpp index 5cfc88766..67dc1bf74 100644 --- a/src/mumble/GlobalShortcut.cpp +++ b/src/mumble/GlobalShortcut.cpp @@ -11,6 +11,7 @@ #include "Database.h" #include "MainWindow.h" #include "GlobalShortcutButtons.h" +#include "Global.h" #include <QtCore/QProcess> #include <QtCore/QSortFilterProxyModel> @@ -23,10 +24,6 @@ # include <QtCore/QOperatingSystemVersion> #endif -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - const QString GlobalShortcutConfig::name = QLatin1String("GlobalShortcutConfig"); /** @@ -140,7 +137,7 @@ ShortcutTargetDialog::ShortcutTargetDialog(const ShortcutTarget &st, QWidget *pw qcbShoutSubchans->setChecked(st.bChildren); // Insert all known friends into the possible targets list - const QMap< QString, QString > &friends = g.db->getFriends(); + const QMap< QString, QString > &friends = Global::get().db->getFriends(); if (!friends.isEmpty()) { QMap< QString, QString >::const_iterator i; for (i = friends.constBegin(); i != friends.constEnd(); ++i) { @@ -151,13 +148,13 @@ ShortcutTargetDialog::ShortcutTargetDialog(const ShortcutTarget &st, QWidget *pw } // If we are connected to a server also add all connected players with certificates to the list - if (g.uiSession) { + if (Global::get().uiSession) { QMap< QString, QString > others; QMap< QString, QString >::const_iterator i; QReadLocker lock(&ClientUser::c_qrwlUsers); foreach (ClientUser *p, ClientUser::c_qmUsers) { - if ((p->uiSession != g.uiSession) && p->qsFriendName.isEmpty() && !p->qsHash.isEmpty()) { + if ((p->uiSession != Global::get().uiSession) && p->qsFriendName.isEmpty() && !p->qsHash.isEmpty()) { others.insert(p->qsName, p->qsHash); qmHashNames.insert(p->qsHash, p->qsName); } @@ -217,7 +214,7 @@ ShortcutTargetDialog::ShortcutTargetDialog(const ShortcutTarget &st, QWidget *pw } // And if we are connected add the channels on the current server - if (g.uiSession) { + if (Global::get().uiSession) { Channel *c = Channel::get(0); QTreeWidgetItem *sroot = new QTreeWidgetItem(qtwChannels, QStringList(c->qsName)); qmTree.insert(0, sroot); @@ -227,8 +224,8 @@ ShortcutTargetDialog::ShortcutTargetDialog(const ShortcutTarget &st, QWidget *pw qtwChannels->sortByColumn(0, Qt::AscendingOrder); QTreeWidgetItem *qtwi; - if (g.uiSession) { - qtwi = qmTree.value(ClientUser::get(g.uiSession)->cChannel->iId); + if (Global::get().uiSession) { + qtwi = qmTree.value(ClientUser::get(Global::get().uiSession)->cChannel->iId); if (qtwi) qtwChannels->scrollToItem(qtwi); } @@ -355,7 +352,7 @@ QString ShortcutTargetWidget::targetString(const ShortcutTarget &st) { if (hashes.contains(hash)) { name = hashes.value(hash); } else { - name = g.db->getFriend(hash); + name = Global::get().db->getFriend(hash); if (name.isEmpty()) name = QString::fromLatin1("#%1").arg(hash); } @@ -559,7 +556,7 @@ GlobalShortcutConfig::GlobalShortcutConfig(Settings &st) : ConfigWidget(st) { bool GlobalShortcutConfig::eventFilter(QObject * /*object*/, QEvent *e) { #ifdef Q_OS_MAC if (e->type() == QEvent::WindowActivate) { - if (!g.s.bSuppressMacEventTapWarning) { + if (!Global::get().s.bSuppressMacEventTapWarning) { qwWarningContainer->setVisible(showWarning()); } } @@ -598,7 +595,7 @@ void GlobalShortcutConfig::on_qpbOpenAccessibilityPrefs_clicked() { void GlobalShortcutConfig::on_qpbSkipWarning_clicked() { // Store to both global and local settings. The 'Skip' is live, as in // we don't expect the user to click Apply for their choice to work. - g.s.bSuppressMacEventTapWarning = s.bSuppressMacEventTapWarning = true; + Global::get().s.bSuppressMacEventTapWarning = s.bSuppressMacEventTapWarning = true; qwWarningContainer->setVisible(false); } @@ -683,8 +680,8 @@ void GlobalShortcutConfig::load(const Settings &r) { // // To make this work well, we set the setting on load. This is to make 'Reset' and 'Restore Defaults' // work as expected. - g.s.bSuppressMacEventTapWarning = s.bSuppressMacEventTapWarning = r.bSuppressMacEventTapWarning; - if (!g.s.bSuppressMacEventTapWarning) { + Global::get().s.bSuppressMacEventTapWarning = s.bSuppressMacEventTapWarning = r.bSuppressMacEventTapWarning; + if (!Global::get().s.bSuppressMacEventTapWarning) { qwWarningContainer->setVisible(showWarning()); } @@ -763,7 +760,7 @@ void GlobalShortcutConfig::reload() { qtwShortcuts->addTopLevelItem(item); } #ifdef Q_OS_MAC - if (!g.s.bSuppressMacEventTapWarning) { + if (!Global::get().s.bSuppressMacEventTapWarning) { qwWarningContainer->setVisible(showWarning()); } else { qwWarningContainer->setVisible(false); @@ -774,7 +771,7 @@ void GlobalShortcutConfig::reload() { void GlobalShortcutConfig::accept() const { GlobalShortcutEngine::engine->bNeedRemap = true; GlobalShortcutEngine::engine->needRemap(); - GlobalShortcutEngine::engine->setEnabled(g.s.bShortcutEnable); + GlobalShortcutEngine::engine->setEnabled(Global::get().s.bShortcutEnable); } @@ -818,7 +815,7 @@ void GlobalShortcutEngine::remap() { qlShortcutList.clear(); qlDownButtons.clear(); - foreach (const Shortcut &sc, g.s.qlShortcuts) { + foreach (const Shortcut &sc, Global::get().s.qlShortcuts) { GlobalShortcut *gs = qmShortcuts.value(sc.iIndex); if (gs && !sc.qlButtons.isEmpty()) { ShortcutKey *sk = new ShortcutKey; @@ -889,7 +886,7 @@ bool GlobalShortcutEngine::handleButton(const QVariant &button, bool down) { } if (down) { - AudioInputPtr ai = g.ai; + AudioInputPtr ai = Global::get().ai; if (ai.get()) { // XXX: This is a data race: we write to ai->activityState // (accessed by the AudioInput thread) from the main thread. @@ -946,7 +943,7 @@ bool GlobalShortcutEngine::handleButton(const QVariant &button, bool down) { void GlobalShortcutEngine::add(GlobalShortcut *gs) { if (!GlobalShortcutEngine::engine) { GlobalShortcutEngine::engine = GlobalShortcutEngine::platformInit(); - GlobalShortcutEngine::engine->setEnabled(g.s.bShortcutEnable); + GlobalShortcutEngine::engine->setEnabled(Global::get().s.bShortcutEnable); } GlobalShortcutEngine::engine->qmShortcuts.insert(gs->idx, gs); diff --git a/src/mumble/GlobalShortcutButtons.cpp b/src/mumble/GlobalShortcutButtons.cpp index 214cc775c..8f480f75d 100644 --- a/src/mumble/GlobalShortcutButtons.cpp +++ b/src/mumble/GlobalShortcutButtons.cpp @@ -8,8 +8,6 @@ #include "GlobalShortcut.h" -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. #include "Global.h" GlobalShortcutButtons::GlobalShortcutButtons(QWidget *parent) : QDialog(parent), m_ui(new Ui::GlobalShortcutButtons) { diff --git a/src/mumble/GlobalShortcut_macx.mm b/src/mumble/GlobalShortcut_macx.mm index aaa73d9a4..c3aba27b3 100644 --- a/src/mumble/GlobalShortcut_macx.mm +++ b/src/mumble/GlobalShortcut_macx.mm @@ -51,12 +51,12 @@ CGEventRef GlobalShortcutMac::callback(CGEventTapProxy proxy, CGEventType type, case kCGEventRightMouseDragged: case kCGEventOtherMouseDragged: { #ifdef USE_OVERLAY - if (g.ocIntercept) { + if (Global::get().ocIntercept) { int64_t dx = CGEventGetIntegerValueField(event, kCGMouseEventDeltaX); int64_t dy = CGEventGetIntegerValueField(event, kCGMouseEventDeltaY); - g.ocIntercept->iMouseX = qBound<int>(0, g.ocIntercept->iMouseX + static_cast<int>(dx), g.ocIntercept->uiWidth - 1); - g.ocIntercept->iMouseY = qBound<int>(0, g.ocIntercept->iMouseY + static_cast<int>(dy), g.ocIntercept->uiHeight - 1); - QMetaObject::invokeMethod(g.ocIntercept, "updateMouse", Qt::QueuedConnection); + Global::get().ocIntercept->iMouseX = qBound<int>(0, Global::get().ocIntercept->iMouseX + static_cast<int>(dx), Global::get().ocIntercept->uiWidth - 1); + Global::get().ocIntercept->iMouseY = qBound<int>(0, Global::get().ocIntercept->iMouseY + static_cast<int>(dy), Global::get().ocIntercept->uiHeight - 1); + QMetaObject::invokeMethod(Global::get().ocIntercept, "updateMouse", Qt::QueuedConnection); forward = true; } #endif @@ -112,7 +112,7 @@ CGEventRef GlobalShortcutMac::callback(CGEventTapProxy proxy, CGEventType type, } #ifdef USE_OVERLAY - if (forward && g.ocIntercept) { + if (forward && Global::get().ocIntercept) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSEvent *evt = [[NSEvent eventWithCGEvent:event] retain]; QMetaObject::invokeMethod(gs, "forwardEvent", Qt::QueuedConnection, Q_ARG(void *, evt)); @@ -237,12 +237,12 @@ void GlobalShortcutMac::forwardEvent(void *evt) { #ifdef USE_OVERLAY SEL sel = nil; - if (! g.ocIntercept) { + if (! Global::get().ocIntercept) { [event release]; return; } - QWidget *vp = g.ocIntercept->qgv.viewport(); + QWidget *vp = Global::get().ocIntercept->qgv.viewport(); NSView *view = (NSView *) vp->winId(); switch ([event type]) { @@ -288,8 +288,8 @@ void GlobalShortcutMac::forwardEvent(void *evt) { } if (sel) { - NSPoint p; p.x = (CGFloat) g.ocIntercept->iMouseX; - p.y = (CGFloat) (g.ocIntercept->uiHeight - g.ocIntercept->iMouseY); + NSPoint p; p.x = (CGFloat) Global::get().ocIntercept->iMouseX; + p.y = (CGFloat) (Global::get().ocIntercept->uiHeight - Global::get().ocIntercept->iMouseY); NSEvent *mouseEvent = [NSEvent mouseEventWithType:[event type] location:p modifierFlags:[event modifierFlags] timestamp:[event timestamp] windowNumber:0 context:nil eventNumber:[event eventNumber] clickCount:[event clickCount] pressure:[event pressure]]; diff --git a/src/mumble/GlobalShortcut_unix.cpp b/src/mumble/GlobalShortcut_unix.cpp index 9ae8c79fc..d8c1c8a46 100644 --- a/src/mumble/GlobalShortcut_unix.cpp +++ b/src/mumble/GlobalShortcut_unix.cpp @@ -6,6 +6,7 @@ #include "GlobalShortcut_unix.h" #include "Settings.h" +#include "Global.h" #include <QtCore/QFileSystemWatcher> #include <QtCore/QSocketNotifier> @@ -23,10 +24,6 @@ # include <linux/input.h> #endif -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last incl -#include "Global.h" - // We have to use a global 'diagnostic ignored' pragmas because // we still support old versions of GCC. (FreeBSD 9.3 ships with GCC 4.2) #if defined(__GNUC__) @@ -65,7 +62,7 @@ GlobalShortcutX::GlobalShortcutX() { } #ifdef Q_OS_LINUX - if (g.s.bEnableEvdev) { + if (Global::get().s.bEnableEvdev) { QString dir = QLatin1String("/dev/input"); QFileSystemWatcher *fsw = new QFileSystemWatcher(QStringList(dir), this); connect(fsw, SIGNAL(directoryChanged(const QString &)), this, SLOT(directoryChanged(const QString &))); @@ -91,7 +88,7 @@ GlobalShortcutX::GlobalShortcutX() { #ifndef NO_XINPUT2 int evt, error; - if (g.s.bEnableXInput2 && XQueryExtension(display, "XInputExtension", &iXIopcode, &evt, &error)) { + if (Global::get().s.bEnableXInput2 && XQueryExtension(display, "XInputExtension", &iXIopcode, &evt, &error)) { int major = XI_2_Major; int minor = XI_2_Minor; int rc = XIQueryVersion(display, &major, &minor); @@ -251,7 +248,7 @@ void GlobalShortcutX::displayReadyRead(int) { // One of the raw /dev/input devices has ready input void GlobalShortcutX::inputReadyRead(int) { #ifdef Q_OS_LINUX - if (!g.s.bEnableEvdev) { + if (!Global::get().s.bEnableEvdev) { return; } @@ -303,7 +300,7 @@ void GlobalShortcutX::inputReadyRead(int) { // The /dev/input directory changed void GlobalShortcutX::directoryChanged(const QString &dir) { #ifdef Q_OS_LINUX - if (!g.s.bEnableEvdev) { + if (!Global::get().s.bEnableEvdev) { return; } diff --git a/src/mumble/GlobalShortcut_win.cpp b/src/mumble/GlobalShortcut_win.cpp index 7b949fa60..61c1834a5 100644 --- a/src/mumble/GlobalShortcut_win.cpp +++ b/src/mumble/GlobalShortcut_win.cpp @@ -7,6 +7,7 @@ #include "MainWindow.h" #include "Utils.h" +#include "Global.h" // MinGW does not support std::future/std::promise // at present. Use Boost's implementation for now. @@ -23,10 +24,6 @@ // Used to detect screen readers #include <tlhelp32.h> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - #undef FAILED #define FAILED(Status) (static_cast< HRESULT >(Status) < 0) @@ -122,7 +119,7 @@ GlobalShortcutWin::GlobalShortcutWin() { // Hidden setting to disable hooking // Also disable hooking if a screen reader is running - bHook = g.qs->value(QLatin1String("winhooks"), true).toBool() && !areScreenReadersActive(); + bHook = Global::get().qs->value(QLatin1String("winhooks"), true).toBool() && !areScreenReadersActive(); moveToThread(this); start(QThread::LowestPriority); @@ -166,18 +163,18 @@ void GlobalShortcutWin::run() { // Wait for MainWindow's constructor to finish before we enumerate DirectInput devices. // We need to do this because adding a new device requires a Window handle. (SetCooperativeLevel()) - while (!g.mw) + while (!Global::get().mw) this->yieldCurrentThread(); #ifdef USE_GKEY - if (g.s.bEnableGKey) { + if (Global::get().s.bEnableGKey) { gkey = new GKeyLibrary(); qWarning("GlobalShortcutWin: GKeys initialized, isValid: %d", gkey->isValid()); } #endif #ifdef USE_XBOXINPUT - if (g.s.bEnableXboxInput) { + if (Global::get().s.bEnableXboxInput) { xboxinput = new XboxInput(); ZeroMemory(&xboxinputLastPacket, sizeof(xboxinputLastPacket)); qWarning("GlobalShortcutWin: XboxInput initialized, isValid: %d", xboxinput->isValid()); @@ -319,7 +316,7 @@ bool GlobalShortcutWin::handleKeyboardMessage(DWORD scancode, DWORD vkcode, bool keyid |= 0x8000U; } - // NumLock and Pause need special handling. + // NumLock and Pause need special handlinGlobal::get(). // For those keys, the method above of setting // bit 15 high when the LLKHF_EXTENDED flag is // set on the low-level key event does not work. @@ -447,7 +444,7 @@ BOOL CALLBACK GlobalShortcutWin::EnumDeviceObjectsCallback(LPCDIDEVICEOBJECTINST QString name = QString::fromUtf16(reinterpret_cast< const ushort * >(lpddoi->tszName)); id->qhNames[lpddoi->dwType] = name; - if (g.s.bDirectInputVerboseLogging) { + if (Global::get().s.bDirectInputVerboseLogging) { qWarning("GlobalShortcutWin: EnumObjects: device %s %s object 0x%.8lx %s", qPrintable(QUuid(id->guid).toString()), qPrintable(id->name), static_cast< unsigned long >(lpddoi->dwType), qPrintable(name)); @@ -605,8 +602,8 @@ BOOL GlobalShortcutWin::EnumDevicesCB(LPCDIDEVICEINSTANCE pdidi, LPVOID pContext } void GlobalShortcutWin::timeTicked() { - if (g.mw->uiNewHardware != uiHardwareDevices) { - uiHardwareDevices = g.mw->uiNewHardware; + if (Global::get().mw->uiNewHardware != uiHardwareDevices) { + uiHardwareDevices = Global::get().mw->uiNewHardware; XInputCheck_ClearDeviceCache(); #ifdef USE_XBOXINPUT @@ -653,7 +650,7 @@ void GlobalShortcutWin::timeTicked() { // might have a misbehaving device. if (timer.elapsed() > 1000) { qWarning("GlobalShortcut_win: Poll() for device %s took %li msec. This is abnormal, the device is " - "possibly misbehaving...", + "possibly misbehavinGlobal::get()...", qPrintable(QUuid(id->guid).toString()), static_cast< long >(timer.elapsed())); } } @@ -676,7 +673,7 @@ void GlobalShortcutWin::timeTicked() { } #ifdef USE_GKEY - if (g.s.bEnableGKey && gkey && gkey->isValid()) { + if (Global::get().s.bEnableGKey && gkey && gkey->isValid()) { for (int button = GKEY_MIN_MOUSE_BUTTON; button <= GKEY_MAX_MOUSE_BUTTON; button++) { QList< QVariant > ql; ql << button; @@ -697,7 +694,7 @@ void GlobalShortcutWin::timeTicked() { #endif #ifdef USE_XBOXINPUT - if (g.s.bEnableXboxInput && xboxinput && xboxinput->isValid() && nxboxinput > 0) { + if (Global::get().s.bEnableXboxInput && xboxinput && xboxinput->isValid() && nxboxinput > 0) { XboxInputState state; for (uint32_t i = 0; i < XBOXINPUT_MAX_DEVICES; i++) { if (xboxinput->GetState(i, &state) == 0) { @@ -807,7 +804,7 @@ GlobalShortcutWin::ButtonInfo GlobalShortcutWin::buttonInfo(const QVariant &v) { info.device = guid.toString(); #ifdef USE_GKEY - if (g.s.bEnableGKey && gkey && gkey->isValid()) { + if (Global::get().s.bEnableGKey && gkey && gkey->isValid()) { bool isGKey = false; if (guid == GKeyLibrary::quMouse) { isGKey = true; @@ -828,7 +825,7 @@ GlobalShortcutWin::ButtonInfo GlobalShortcutWin::buttonInfo(const QVariant &v) { #endif #ifdef USE_XBOXINPUT - if (g.s.bEnableXboxInput && xboxinput && xboxinput->isValid() && guid == XboxInput::s_XboxInputGuid) { + if (Global::get().s.bEnableXboxInput && xboxinput && xboxinput->isValid() && guid == XboxInput::s_XboxInputGuid) { uint32_t idx = (type >> 24) & 0xff; uint32_t button = (type & 0x00ffffff); diff --git a/src/mumble/JackAudio.cpp b/src/mumble/JackAudio.cpp index d50b0a951..3ab7f7a57 100644 --- a/src/mumble/JackAudio.cpp +++ b/src/mumble/JackAudio.cpp @@ -6,9 +6,6 @@ #include "JackAudio.h" #include "Utils.h" - -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. #include "Global.h" #ifdef Q_CC_GNU @@ -148,9 +145,9 @@ const QList< audioDevice > JackAudioOutputRegistrar::getDeviceChoices() { QStringList qlOutputDevs = jas->qhOutput.keys(); std::sort(qlOutputDevs.begin(), qlOutputDevs.end()); - if (qlOutputDevs.contains(g.s.qsJackAudioOutput)) { - qlOutputDevs.removeAll(g.s.qsJackAudioOutput); - qlOutputDevs.prepend(g.s.qsJackAudioOutput); + if (qlOutputDevs.contains(Global::get().s.qsJackAudioOutput)) { + qlOutputDevs.removeAll(Global::get().s.qsJackAudioOutput); + qlOutputDevs.prepend(Global::get().s.qsJackAudioOutput); } foreach (const QString &dev, qlOutputDevs) { qlReturn << audioDevice(jas->qhOutput.value(dev), dev); } @@ -269,8 +266,8 @@ bool JackAudioSystem::initialize() { } jack_status_t status; - client = jack_client_open(g.s.qsJackClientName.toStdString().c_str(), - g.s.bJackStartServer ? JackNullOption : JackNoStartServer, &status); + client = jack_client_open(Global::get().s.qsJackClientName.toStdString().c_str(), + Global::get().s.bJackStartServer ? JackNullOption : JackNoStartServer, &status); if (!client) { const auto errors = jackStatusToStringList(status); qWarning("JackAudioSystem: unable to open client due to %i errors:", errors.count()); @@ -395,7 +392,7 @@ bool JackAudioSystem::isOk() { } uint8_t JackAudioSystem::outPorts() { - return static_cast< uint8_t >(qBound< unsigned >(1, g.s.qsJackAudioOutput.toUInt(), JACK_MAX_OUTPUT_PORTS)); + return static_cast< uint8_t >(qBound< unsigned >(1, Global::get().s.qsJackAudioOutput.toUInt(), JACK_MAX_OUTPUT_PORTS)); } jack_nframes_t JackAudioSystem::sampleRate() { @@ -599,8 +596,8 @@ void JackAudioSystem::ringbufferWriteAdvance(jack_ringbuffer_t *buffer, const si } int JackAudioSystem::processCallback(jack_nframes_t frames, void *) { - auto const jai = dynamic_cast< JackAudioInput * >(g.ai.get()); - auto const jao = dynamic_cast< JackAudioOutput * >(g.ao.get()); + auto const jai = dynamic_cast< JackAudioInput * >(Global::get().ai.get()); + auto const jao = dynamic_cast< JackAudioOutput * >(Global::get().ao.get()); const bool input = (jai && jai->isReady()); const bool output = (jao && jao->isReady()); @@ -617,8 +614,8 @@ int JackAudioSystem::processCallback(jack_nframes_t frames, void *) { } int JackAudioSystem::sampleRateCallback(jack_nframes_t, void *) { - auto const jai = dynamic_cast< JackAudioInput * >(g.ai.get()); - auto const jao = dynamic_cast< JackAudioOutput * >(g.ao.get()); + auto const jai = dynamic_cast< JackAudioInput * >(Global::get().ai.get()); + auto const jao = dynamic_cast< JackAudioOutput * >(Global::get().ao.get()); if (jai) { jai->activate(); @@ -632,8 +629,8 @@ int JackAudioSystem::sampleRateCallback(jack_nframes_t, void *) { } int JackAudioSystem::bufferSizeCallback(jack_nframes_t frames, void *) { - auto const jai = dynamic_cast< JackAudioInput * >(g.ai.get()); - auto const jao = dynamic_cast< JackAudioOutput * >(g.ao.get()); + auto const jai = dynamic_cast< JackAudioInput * >(Global::get().ai.get()); + auto const jao = dynamic_cast< JackAudioOutput * >(Global::get().ao.get()); if (jai && !jai->allocBuffer(frames)) { return 1; @@ -822,7 +819,7 @@ void JackAudioInput::run() { } // Initialization - if (g.s.bJackAutoConnect) { + if (Global::get().s.bJackAutoConnect) { connectPorts(); } @@ -1064,7 +1061,7 @@ void JackAudioOutput::run() { } // Initialization - if (g.s.bJackAutoConnect) { + if (Global::get().s.bJackAutoConnect) { connectPorts(); } diff --git a/src/mumble/LCD.cpp b/src/mumble/LCD.cpp index e5cde7bb8..a2248f0fe 100644 --- a/src/mumble/LCD.cpp +++ b/src/mumble/LCD.cpp @@ -10,13 +10,10 @@ #include "Message.h" #include "ServerHandler.h" #include "Utils.h" +#include "Global.h" #include <QtGui/QPainter> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - const QString LCDConfig::name = QLatin1String("LCDConfig"); QList< LCDEngineNew > *LCDEngineRegistrar::qlInitializers; @@ -144,7 +141,7 @@ void LCDConfig::accept() const { bool enabled = s.qmLCDDevices.value(d->name()); d->setEnabled(enabled); } - g.lcd->updateUserView(); + Global::get().lcd->updateUserView(); } void LCDConfig::on_qsMinColWidth_valueChanged(int v) { @@ -189,7 +186,7 @@ LCD::LCD() : QObject() { connect(qtTimer, SIGNAL(timeout()), this, SLOT(tick())); foreach (LCDDevice *d, devmgr.qlDevices) { - bool enabled = g.s.qmLCDDevices.contains(d->name()) ? g.s.qmLCDDevices.value(d->name()) : true; + bool enabled = Global::get().s.qmLCDDevices.contains(d->name()) ? Global::get().s.qmLCDDevices.value(d->name()) : true; d->setEnabled(enabled); } qiLogo = QIcon(QLatin1String("skin:mumble.svg")).pixmap(48, 48).toImage().convertToFormat(QImage::Format_MonoLSB); @@ -246,7 +243,7 @@ void LCD::updateUserView() { return; QStringList qslTalking; - User *me = g.uiSession ? ClientUser::get(g.uiSession) : nullptr; + User *me = Global::get().uiSession ? ClientUser::get(Global::get().uiSession) : nullptr; Channel *home = me ? me->cChannel : nullptr; bool alert = false; @@ -356,7 +353,7 @@ void LCD::updateUserView() { const int iWidth = size.width(); const int iHeight = size.height(); const int iUsersPerColumn = iHeight / iFontHeight; - const int iSplitterWidth = g.s.iLCDUserViewSplitterWidth; + const int iSplitterWidth = Global::get().s.iLCDUserViewSplitterWidth; const int iUserColumns = (entries.count() + iUsersPerColumn - 1) / iUsersPerColumn; int iColumns = iUserColumns; @@ -364,7 +361,7 @@ void LCD::updateUserView() { while (iColumns >= 1) { iColumnWidth = (iWidth - (iColumns - 1) * iSplitterWidth) / iColumns; - if (iColumnWidth >= g.s.iLCDUserViewMinColWidth) + if (iColumnWidth >= Global::get().s.iLCDUserViewMinColWidth) break; --iColumns; } diff --git a/src/mumble/ListenerLocalVolumeDialog.cpp b/src/mumble/ListenerLocalVolumeDialog.cpp index 1607715bb..50ee97c24 100644 --- a/src/mumble/ListenerLocalVolumeDialog.cpp +++ b/src/mumble/ListenerLocalVolumeDialog.cpp @@ -12,10 +12,6 @@ #include <cmath> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - ListenerLocalVolumeDialog::ListenerLocalVolumeDialog(ClientUser *user, Channel *channel, QWidget *parent) : QDialog(parent), m_user(user), m_channel(channel) { setupUi(this); diff --git a/src/mumble/Log.cpp b/src/mumble/Log.cpp index f4f44135f..5ddf4a23d 100644 --- a/src/mumble/Log.cpp +++ b/src/mumble/Log.cpp @@ -17,6 +17,7 @@ # include "TextToSpeech.h" #endif #include "Utils.h" +#include "Global.h" #include <QSignalBlocker> #include <QtCore/QMutexLocker> @@ -27,10 +28,6 @@ #include <QtNetwork/QNetworkReply> #include <QtWidgets/QDesktopWidget> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - const QString LogConfig::name = QLatin1String("LogConfig"); static ConfigWidget *LogConfigDialogNew(Settings &st) { @@ -77,7 +74,7 @@ LogConfig::LogConfig(Settings &st) : ConfigWidget(st) { QTreeWidgetItem *twi; for (int i = Log::firstMsgType; i <= Log::lastMsgType; ++i) { Log::MsgType t = Log::msgOrder[i]; - const QString messageName = g.l->msgName(t); + const QString messageName = Global::get().l->msgName(t); twi = new QTreeWidgetItem(qtwMessages); twi->setData(ColMessage, Qt::UserRole, static_cast< int >(t)); @@ -268,9 +265,9 @@ void LogConfig::save() const { void LogConfig::accept() const { #ifndef USE_NO_TTS - g.l->tts->setVolume(s.iTTSVolume); + Global::get().l->tts->setVolume(s.iTTSVolume); #endif - g.mw->qteLog->document()->setMaximumBlockCount(s.iMaxLogBlocks); + Global::get().mw->qteLog->document()->setMaximumBlockCount(s.iMaxLogBlocks); } void LogConfig::on_qtwMessages_itemChanged(QTreeWidgetItem *i, int column) { @@ -309,7 +306,7 @@ void LogConfig::on_qtwMessages_itemChanged(QTreeWidgetItem *i, int column) { void LogConfig::on_qtwMessages_itemClicked(QTreeWidgetItem *item, int column) { if (item && item != allMessagesItem && column == ColStaticSoundPath) { - AudioOutputPtr ao = g.ao; + AudioOutputPtr ao = Global::get().ao; if (ao) { if (!ao->playSample(item->text(ColStaticSoundPath), false)) browseForAudioFile(); @@ -339,7 +336,7 @@ QVector< LogMessage > Log::qvDeferredLogs; Log::Log(QObject *p) : QObject(p) { #ifndef USE_NO_TTS tts = new TextToSpeech(this); - tts->setVolume(g.s.iTTSVolume); + tts->setVolume(Global::get().s.iTTSVolume); #endif uiLastId = 0; qdDate = QDate::currentDate(); @@ -447,14 +444,14 @@ QString Log::formatChannel(::Channel *c) { return QString::fromLatin1("<a href='channelid://%1/%3' class='log-channel'>%2</a>") .arg(c->iId) .arg(c->qsName.toHtmlEscaped()) - .arg(QString::fromLatin1(g.sh->qbaDigest.toBase64())); + .arg(QString::fromLatin1(Global::get().sh->qbaDigest.toBase64())); } void Log::logOrDefer(Log::MsgType mt, const QString &console, const QString &terse, bool ownMessage, const QString &overrideTTS, bool ignoreTTS) { - if (g.l) { + if (Global::get().l) { // log directly as it seems the log-UI has been set-up already - g.l->log(mt, console, terse, ownMessage, overrideTTS, ignoreTTS); + Global::get().l->log(mt, console, terse, ownMessage, overrideTTS, ignoreTTS); } else { // defer the log QMutexLocker mLock(&Log::qmDeferredLogs); @@ -478,7 +475,7 @@ QString Log::formatClientUser(ClientUser *cu, LogColorType t, const QString &dis .arg(className) .arg(cu->uiSession) .arg(name) - .arg(QString::fromLatin1(g.sh->qbaDigest.toBase64())); + .arg(QString::fromLatin1(Global::get().sh->qbaDigest.toBase64())); } else { return QString::fromLatin1("<a href='clientid://%2' class='log-user log-%1'>%3</a>") .arg(className) @@ -552,7 +549,7 @@ QString Log::imageToImg(QImage img, int maxSize) { QString Log::validHtml(const QString &html, QTextCursor *tc) { LogDocument qtd; - QRectF qr = Screen::screenFromWidget(*g.mw)->availableGeometry(); + QRectF qr = Screen::screenFromWidget(*Global::get().mw)->availableGeometry(); qtd.setTextWidth(qr.width() / 2); qtd.setDefaultStyleSheet(qApp->styleSheet()); @@ -633,23 +630,23 @@ void Log::log(MsgType mt, const QString &console, const QString &terse, bool own QString plain = QTextDocumentFragment::fromHtml(console).toPlainText(); - quint32 flags = g.s.qmMessages.value(mt); + quint32 flags = Global::get().s.qmMessages.value(mt); // Message output on console if ((flags & Settings::LogConsole)) { - QTextCursor tc = g.mw->qteLog->textCursor(); + QTextCursor tc = Global::get().mw->qteLog->textCursor(); // We copy the value from the settings in order to make sure that // we use the same margin everywhere while in this method (even if // the setting might change in that time). - const int msgMargin = g.s.iChatMessageMargins; + const int msgMargin = Global::get().s.iChatMessageMargins; QTextBlockFormat format = tc.blockFormat(); format.setTopMargin(msgMargin); format.setBottomMargin(msgMargin); tc.setBlockFormat(format); - LogTextBrowser *tlog = g.mw->qteLog; + LogTextBrowser *tlog = Global::get().mw->qteLog; const int oldscrollvalue = tlog->getLogScroll(); const bool scroll = (oldscrollvalue == tlog->getLogScrollMaximum()); @@ -685,12 +682,12 @@ void Log::log(MsgType mt, const QString &console, const QString &terse, bool own tc.insertBlock(); } - const QString timeString = dt.time().toString(QLatin1String(g.s.bLog24HourClock ? "HH:mm:ss" : "hh:mm:ss AP")); + const QString timeString = dt.time().toString(QLatin1String(Global::get().s.bLog24HourClock ? "HH:mm:ss" : "hh:mm:ss AP")); tc.insertHtml(Log::msgColor(QString::fromLatin1("[%1] ").arg(timeString.toHtmlEscaped()), Log::Time)); validHtml(console, &tc); tc.movePosition(QTextCursor::End); - g.mw->qteLog->setTextCursor(tc); + Global::get().mw->qteLog->setTextCursor(tc); if (scroll || ownMessage) tlog->scrollLogToBottom(); @@ -699,10 +696,10 @@ void Log::log(MsgType mt, const QString &console, const QString &terse, bool own } if (!ownMessage) { - if (!(g.mw->isActiveWindow() && g.mw->qdwLog->isVisible())) { + if (!(Global::get().mw->isActiveWindow() && Global::get().mw->qdwLog->isVisible())) { // Message notification with window highlight if (flags & Settings::LogHighlight) { - QApplication::alert(g.mw); + QApplication::alert(Global::get().mw); } // Message notification with balloon tooltips @@ -712,25 +709,25 @@ void Log::log(MsgType mt, const QString &console, const QString &terse, bool own } // Don't make any noise if we are self deafened (Unless it is the sound for activating self deaf) - if (g.s.bDeaf && mt != Log::SelfDeaf) { + if (Global::get().s.bDeaf && mt != Log::SelfDeaf) { return; } // Message notification with static sounds if ((flags & Settings::LogSoundfile)) { - QString sSound = g.s.qmMessageSounds.value(mt); - AudioOutputPtr ao = g.ao; + QString sSound = Global::get().s.qmMessageSounds.value(mt); + AudioOutputPtr ao = Global::get().ao; if (!ao || !ao->playSample(sSound, false)) { qWarning() << "Sound file" << sSound << "is not a valid audio file, fallback to TTS."; flags ^= Settings::LogSoundfile | Settings::LogTTS; // Fallback to TTS } } - } else if (!g.s.bTTSMessageReadBack) { + } else if (!Global::get().s.bTTSMessageReadBack) { return; } // Message notification with Text-To-Speech - if (g.s.bDeaf || !g.s.bTTS || !(flags & Settings::LogTTS) || ignoreTTS) { + if (Global::get().s.bDeaf || !Global::get().s.bTTS || !(flags & Settings::LogTTS) || ignoreTTS) { return; } @@ -772,9 +769,9 @@ void Log::log(MsgType mt, const QString &console, const QString &terse, bool own #ifndef USE_NO_TTS // TTS threshold limiter. - if (plain.length() <= g.s.iTTSThreshold) + if (plain.length() <= Global::get().s.iTTSThreshold) tts->say(plain); - else if ((!terse.isEmpty()) && (terse.length() <= g.s.iTTSThreshold)) + else if ((!terse.isEmpty()) && (terse.length() <= Global::get().s.iTTSThreshold)) tts->say(terse); #else // Mark as unused @@ -794,7 +791,7 @@ void Log::processDeferredLogs() { // Post a notification using the MainWindow's QSystemTrayIcon. void Log::postQtNotification(MsgType mt, const QString &plain) { - if (g.mw->qstiIcon->isSystemTrayAvailable() && g.mw->qstiIcon->supportsMessages()) { + if (Global::get().mw->qstiIcon->isSystemTrayAvailable() && Global::get().mw->qstiIcon->supportsMessages()) { QSystemTrayIcon::MessageIcon msgIcon; switch (mt) { case DebugInfo: @@ -808,7 +805,7 @@ void Log::postQtNotification(MsgType mt, const QString &plain) { msgIcon = QSystemTrayIcon::Information; break; } - g.mw->qstiIcon->showMessage(msgName(mt), plain, msgIcon); + Global::get().mw->qstiIcon->showMessage(msgName(mt), plain, msgIcon); } } diff --git a/src/mumble/Log_macx.mm b/src/mumble/Log_macx.mm index 42c6864cc..627af9d0a 100644 --- a/src/mumble/Log_macx.mm +++ b/src/mumble/Log_macx.mm @@ -9,7 +9,6 @@ #include <Foundation/Foundation.h> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name (like protobuf 3.7 does). As such, for now, we have to make this our last include. #include "Global.h" #if MAC_OS_X_VERSION_MAX_ALLOWED >= 1080 @@ -54,7 +53,7 @@ static bool growl_available() { QStringList qslAllEvents; for (int i = Log::firstMsgType; i <= Log::lastMsgType; ++i) { Log::MsgType t = static_cast<Log::MsgType>(i); - qslAllEvents << QString::fromLatin1("\"%1\"").arg(g.l->msgName(t)); + qslAllEvents << QString::fromLatin1("\"%1\"").arg(Global::get().l->msgName(t)); } QString qsScript = QString::fromLatin1( "tell application \"GrowlHelperApp\"\n" diff --git a/src/mumble/Log_unix.cpp b/src/mumble/Log_unix.cpp index 0d9e4b043..371980937 100644 --- a/src/mumble/Log_unix.cpp +++ b/src/mumble/Log_unix.cpp @@ -11,10 +11,6 @@ # include <QtDBus/QDBusInterface> #endif -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - void Log::postNotification(MsgType mt, const QString &plain) { // Message notification with balloon tooltips QString qsIcon; diff --git a/src/mumble/LookConfig.cpp b/src/mumble/LookConfig.cpp index c0d51a681..6c97d4b9c 100644 --- a/src/mumble/LookConfig.cpp +++ b/src/mumble/LookConfig.cpp @@ -9,15 +9,12 @@ #include "AudioInput.h" #include "AudioOutput.h" #include "MainWindow.h" +#include "Global.h" #include <QtCore/QFileSystemWatcher> #include <QtCore/QStack> #include <QtCore/QTimer> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - const QString LookConfig::name = QLatin1String("LookConfig"); static ConfigWidget *LookConfigNew(Settings &st) { @@ -274,7 +271,7 @@ void LookConfig::save() const { } void LookConfig::accept() const { - g.mw->setShowDockTitleBars((g.s.wlWindowLayout == Settings::LayoutCustom) && !g.s.bLockLayout); + Global::get().mw->setShowDockTitleBars((Global::get().s.wlWindowLayout == Settings::LayoutCustom) && !Global::get().s.bLockLayout); } void LookConfig::themeDirectoryChanged() { diff --git a/src/mumble/MainWindow.cpp b/src/mumble/MainWindow.cpp index 14f487df8..1b7723ed4 100644 --- a/src/mumble/MainWindow.cpp +++ b/src/mumble/MainWindow.cpp @@ -55,6 +55,7 @@ #include "VersionCheck.h" #include "ViewCert.h" #include "VoiceRecorderDialog.h" +#include "Global.h" #ifdef Q_OS_WIN # include "TaskList.h" @@ -82,10 +83,6 @@ # include <dbt.h> #endif -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - MessageBoxEvent::MessageBoxEvent(QString m) : QEvent(static_cast< QEvent::Type >(MB_QEVENT)) { msg = m; } @@ -174,7 +171,7 @@ MainWindow::MainWindow(QWidget *p) : QMainWindow(p) { connect(qaShow, SIGNAL(triggered()), this, SLOT(showRaiseWindow())); // Explicitely add actions to mainwindow so their shortcuts are available - // if only the main window is visible (e.g. minimal mode) + // if only the main window is visible (e.Global::get(). minimal mode) addActions(findChildren< QAction * >()); on_qmServer_aboutToShow(); @@ -184,9 +181,9 @@ MainWindow::MainWindow(QWidget *p) : QMainWindow(p) { on_qmConfig_aboutToShow(); qmDeveloper->addAction(qaDeveloperConsole); - setOnTop(g.s.aotbAlwaysOnTop == Settings::OnTopAlways - || (g.s.bMinimalView && g.s.aotbAlwaysOnTop == Settings::OnTopInMinimal) - || (!g.s.bMinimalView && g.s.aotbAlwaysOnTop == Settings::OnTopInNormal)); + setOnTop(Global::get().s.aotbAlwaysOnTop == Settings::OnTopAlways + || (Global::get().s.bMinimalView && Global::get().s.aotbAlwaysOnTop == Settings::OnTopInMinimal) + || (!Global::get().s.bMinimalView && Global::get().s.aotbAlwaysOnTop == Settings::OnTopInNormal)); } void MainWindow::createActions() { @@ -232,7 +229,7 @@ void MainWindow::createActions() { gsToggleOverlay->qsToolTip = tr("Toggle state of in-game overlay.", "Global Shortcut"); gsToggleOverlay->qsWhatsThis = tr("This will switch the states of the in-game overlay.", "Global Shortcut"); - connect(gsToggleOverlay, SIGNAL(down(QVariant)), g.o, SLOT(toggleShow())); + connect(gsToggleOverlay, SIGNAL(down(QVariant)), Global::get().o, SLOT(toggleShow())); #endif gsMinimal = new GlobalShortcut(this, idx++, tr("Toggle Minimal", "Global Shortcut")); @@ -305,7 +302,7 @@ void MainWindow::setupGui() { LogDocument *ld = new LogDocument(qteLog); qteLog->setDocument(ld); - qteLog->document()->setMaximumBlockCount(g.s.iMaxLogBlocks); + qteLog->document()->setMaximumBlockCount(Global::get().s.iMaxLogBlocks); qteLog->document()->setDefaultStyleSheet(qApp->styleSheet()); pmModel = new UserModel(qtvUsers); @@ -320,20 +317,20 @@ void MainWindow::setupGui() { QObject::connect(&ChannelListener::get(), &ChannelListener::localVolumeAdjustmentsChanged, pmModel, &UserModel::on_channelListenerLocalVolumeAdjustmentChanged); - qaAudioMute->setChecked(g.s.bMute); - qaAudioDeaf->setChecked(g.s.bDeaf); + qaAudioMute->setChecked(Global::get().s.bMute); + qaAudioDeaf->setChecked(Global::get().s.bDeaf); #ifdef USE_NO_TTS qaAudioTTS->setChecked(false); qaAudioTTS->setDisabled(true); #else - qaAudioTTS->setChecked(g.s.bTTS); + qaAudioTTS->setChecked(Global::get().s.bTTS); #endif - qaFilterToggle->setChecked(g.s.bFilterActive); + qaFilterToggle->setChecked(Global::get().s.bFilterActive); qaHelpWhatsThis->setShortcuts(QKeySequence::WhatsThis); - qaConfigMinimal->setChecked(g.s.bMinimalView); - qaConfigHideFrame->setChecked(g.s.bHideFrame); + qaConfigMinimal->setChecked(Global::get().s.bMinimalView); + qaConfigHideFrame->setChecked(Global::get().s.bHideFrame); connect(gsResetAudio, SIGNAL(down(QVariant)), qaAudioReset, SLOT(trigger())); connect(gsUnlink, SIGNAL(down(QVariant)), qaAudioUnlink, SLOT(trigger())); @@ -353,7 +350,7 @@ void MainWindow::setupGui() { qteChat->setDefaultText(tr("<center>Not connected</center>"), true); qteChat->setEnabled(false); - setShowDockTitleBars((g.s.wlWindowLayout == Settings::LayoutCustom) && !g.s.bLockLayout); + setShowDockTitleBars((Global::get().s.wlWindowLayout == Settings::LayoutCustom) && !Global::get().s.bLockLayout); #ifdef Q_OS_MAC // Workaround for QTBUG-3116 -- using a unified toolbar on Mac OS X @@ -388,15 +385,15 @@ void MainWindow::setupGui() { setupView(false); #endif - if (g.s.bMinimalView && !g.s.qbaMinimalViewGeometry.isNull()) - restoreGeometry(g.s.qbaMinimalViewGeometry); - else if (!g.s.bMinimalView && !g.s.qbaMainWindowGeometry.isNull()) - restoreGeometry(g.s.qbaMainWindowGeometry); + if (Global::get().s.bMinimalView && !Global::get().s.qbaMinimalViewGeometry.isNull()) + restoreGeometry(Global::get().s.qbaMinimalViewGeometry); + else if (!Global::get().s.bMinimalView && !Global::get().s.qbaMainWindowGeometry.isNull()) + restoreGeometry(Global::get().s.qbaMainWindowGeometry); - if (g.s.bMinimalView && !g.s.qbaMinimalViewState.isNull()) - restoreState(g.s.qbaMinimalViewState); - else if (!g.s.bMinimalView && !g.s.qbaMainWindowState.isNull()) - restoreState(g.s.qbaMainWindowState); + if (Global::get().s.bMinimalView && !Global::get().s.qbaMinimalViewState.isNull()) + restoreState(Global::get().s.qbaMinimalViewState); + else if (!Global::get().s.bMinimalView && !Global::get().s.qbaMainWindowState.isNull()) + restoreState(Global::get().s.qbaMainWindowState); setupView(false); @@ -414,22 +411,22 @@ void MainWindow::setupGui() { void MainWindow::updateWindowTitle() { QString title; - if (g.s.bMinimalView) { + if (Global::get().s.bMinimalView) { title = tr("Mumble - Minimal View -- %1"); } else { title = tr("Mumble -- %1"); } - if (!g.windowTitlePostfix.isEmpty()) { - title += QString::fromLatin1(" | %1").arg(g.windowTitlePostfix); + if (!Global::get().windowTitlePostfix.isEmpty()) { + title += QString::fromLatin1(" | %1").arg(Global::get().windowTitlePostfix); } setWindowTitle(title.arg(QLatin1String(MUMBLE_RELEASE))); } void MainWindow::updateToolbar() { - bool layoutIsCustom = g.s.wlWindowLayout == Settings::LayoutCustom; - qtIconToolbar->setMovable(layoutIsCustom && !g.s.bLockLayout); + bool layoutIsCustom = Global::get().s.wlWindowLayout == Settings::LayoutCustom; + qtIconToolbar->setMovable(layoutIsCustom && !Global::get().s.bLockLayout); // Update the toolbar so the movable flag takes effect. if (layoutIsCustom) { @@ -473,8 +470,8 @@ bool MainWindow::nativeEvent(const QByteArray &, void *message, long *) { void MainWindow::closeEvent(QCloseEvent *e) { #ifndef Q_OS_MAC - ServerHandlerPtr sh = g.sh; - if (sh && sh->isRunning() && g.s.bAskOnQuit && !bSuppressAskOnQuit) { + ServerHandlerPtr sh = Global::get().sh; + if (sh && sh->isRunning() && Global::get().s.bAskOnQuit && !bSuppressAskOnQuit) { QMessageBox mb(QMessageBox::Warning, QLatin1String("Mumble"), tr("Mumble is currently connected to a server. Do you want to Close or Minimize it?"), QMessageBox::NoButton, this); @@ -496,20 +493,20 @@ void MainWindow::closeEvent(QCloseEvent *e) { sh.reset(); #endif - if (g.s.bMinimalView) { - g.s.qbaMinimalViewGeometry = saveGeometry(); - g.s.qbaMinimalViewState = saveState(); + if (Global::get().s.bMinimalView) { + Global::get().s.qbaMinimalViewGeometry = saveGeometry(); + Global::get().s.qbaMinimalViewState = saveState(); } else { - g.s.qbaMainWindowGeometry = saveGeometry(); - g.s.qbaMainWindowState = saveState(); - g.s.qbaHeaderState = qtvUsers->header()->saveState(); + Global::get().s.qbaMainWindowGeometry = saveGeometry(); + Global::get().s.qbaMainWindowState = saveState(); + Global::get().s.qbaHeaderState = qtvUsers->header()->saveState(); } - if (g.talkingUI && g.talkingUI->isVisible()) { + if (Global::get().talkingUI && Global::get().talkingUI->isVisible()) { // Save the TalkingUI's position if it is visible // Note that we explicitly don't save the whole geometry as the TalkingUI's size // is a flexible thing that'll adjust automatically anyways. - g.s.qpTalkingUI_Position = g.talkingUI->pos(); + Global::get().s.qpTalkingUI_Position = Global::get().talkingUI->pos(); } if (qwPTTButtonWidget) { @@ -517,7 +514,7 @@ void MainWindow::closeEvent(QCloseEvent *e) { qwPTTButtonWidget->deleteLater(); qwPTTButtonWidget = nullptr; } - g.bQuit = true; + Global::get().bQuit = true; QMainWindow::closeEvent(e); @@ -526,8 +523,8 @@ void MainWindow::closeEvent(QCloseEvent *e) { void MainWindow::hideEvent(QHideEvent *e) { #ifdef USE_OVERLAY - if (g.ocIntercept) { - QMetaObject::invokeMethod(g.ocIntercept, "hideGui", Qt::QueuedConnection); + if (Global::get().ocIntercept) { + QMetaObject::invokeMethod(Global::get().ocIntercept, "hideGui", Qt::QueuedConnection); e->ignore(); return; } @@ -536,7 +533,7 @@ void MainWindow::hideEvent(QHideEvent *e) { # ifdef Q_OS_UNIX if (!qApp->activeModalWidget() && !qApp->activePopupWidget()) # endif - if (g.s.bHideInTray && qstiIcon->isSystemTrayAvailable() && e->spontaneous()) + if (Global::get().s.bHideInTray && qstiIcon->isSystemTrayAvailable() && e->spontaneous()) QMetaObject::invokeMethod(this, "hide", Qt::QueuedConnection); #endif QMainWindow::hideEvent(e); @@ -547,7 +544,7 @@ void MainWindow::showEvent(QShowEvent *e) { # ifdef Q_OS_UNIX if (!qApp->activeModalWidget() && !qApp->activePopupWidget()) # endif - if (g.s.bHideInTray && qstiIcon->isSystemTrayAvailable() && e->spontaneous()) + if (Global::get().s.bHideInTray && qstiIcon->isSystemTrayAvailable() && e->spontaneous()) QMetaObject::invokeMethod(this, "show", Qt::QueuedConnection); #endif QMainWindow::showEvent(e); @@ -563,7 +560,7 @@ void MainWindow::changeEvent(QEvent *e) { // So, let's not do it on macOS. #else - if (isMinimized() && qstiIcon->isSystemTrayAvailable() && g.s.bHideInTray) { + if (isMinimized() && qstiIcon->isSystemTrayAvailable() && Global::get().s.bHideInTray) { // Workaround http://qt-project.org/forums/viewthread/4423/P15/#50676 QTimer::singleShot(0, this, SLOT(hide())); } @@ -618,21 +615,21 @@ void MainWindow::focusNextMainWidget() { } void MainWindow::updateTrayIcon() { - ClientUser *p = ClientUser::get(g.uiSession); + ClientUser *p = ClientUser::get(Global::get().uiSession); - if (g.s.bDeaf) { + if (Global::get().s.bDeaf) { qstiIcon->setIcon(qiIconDeafSelf); } else if (p && p->bDeaf) { qstiIcon->setIcon(qiIconDeafServer); - } else if (g.s.bMute) { + } else if (Global::get().s.bMute) { qstiIcon->setIcon(qiIconMuteSelf); } else if (p && p->bMute) { qstiIcon->setIcon(qiIconMuteServer); } else if (p && p->bSuppress) { qstiIcon->setIcon(qiIconMuteSuppressed); - } else if (g.s.bStateInTray && g.bPushToMute) { + } else if (Global::get().s.bStateInTray && Global::get().bPushToMute) { qstiIcon->setIcon(qiIconMutePushToMute); - } else if (p && g.s.bStateInTray) { + } else if (p && Global::get().s.bStateInTray) { switch (p->tsState) { case Settings::Talking: case Settings::MutedTalking: @@ -660,7 +657,7 @@ void MainWindow::updateUserModel() { } void MainWindow::updateTransmitModeComboBox() { - switch (g.s.atTransmit) { + switch (Global::get().s.atTransmit) { case Settings::Continuous: qcbTransmitMode->setCurrentIndex(0); return; @@ -674,7 +671,7 @@ void MainWindow::updateTransmitModeComboBox() { } QMenu *MainWindow::createPopupMenu() { - if ((g.s.wlWindowLayout == Settings::LayoutCustom) && !g.s.bLockLayout) { + if ((Global::get().s.wlWindowLayout == Settings::LayoutCustom) && !Global::get().s.bLockLayout) { return QMainWindow::createPopupMenu(); } @@ -708,7 +705,7 @@ bool MainWindow::handleSpecialContextMenu(const QUrl &url, const QPoint &pos_, b } else { QByteArray qbaServerDigest = QByteArray::fromBase64(url.path().remove(0, 1).toLatin1()); cuContextUser = ClientUser::get(url.host().toInt(&ok, 10)); - ServerHandlerPtr sh = g.sh; + ServerHandlerPtr sh = Global::get().sh; ok = ok && sh && (qbaServerDigest == sh->qbaDigest); } if (ok && cuContextUser) { @@ -725,7 +722,7 @@ bool MainWindow::handleSpecialContextMenu(const QUrl &url, const QPoint &pos_, b bool ok; QByteArray qbaServerDigest = QByteArray::fromBase64(url.path().remove(0, 1).toLatin1()); cContextChannel = Channel::get(url.host().toInt(&ok, 10)); - ServerHandlerPtr sh = g.sh; + ServerHandlerPtr sh = Global::get().sh; ok = ok && sh && (qbaServerDigest == sh->qbaDigest); if (ok) { if (focus) { @@ -858,60 +855,60 @@ void MainWindow::saveImageAs() { updateImagePath(fname); if (!ok) { - g.l->log(Log::Warning, tr("Could not save image: %1").arg(fname.toHtmlEscaped())); + Global::get().l->log(Log::Warning, tr("Could not save image: %1").arg(fname.toHtmlEscaped())); } } QString MainWindow::getImagePath(QString filename) const { - if (g.s.qsImagePath.isEmpty() || !QDir(g.s.qsImagePath).exists()) { - g.s.qsImagePath = QStandardPaths::writableLocation(QStandardPaths::PicturesLocation); + if (Global::get().s.qsImagePath.isEmpty() || !QDir(Global::get().s.qsImagePath).exists()) { + Global::get().s.qsImagePath = QStandardPaths::writableLocation(QStandardPaths::PicturesLocation); } if (filename.isEmpty()) { - return g.s.qsImagePath; + return Global::get().s.qsImagePath; } - return g.s.qsImagePath + QDir::separator() + filename; + return Global::get().s.qsImagePath + QDir::separator() + filename; } void MainWindow::updateImagePath(QString filepath) const { QFileInfo fi(filepath); - g.s.qsImagePath = fi.absolutePath(); + Global::get().s.qsImagePath = fi.absolutePath(); } static void recreateServerHandler() { // New server connection, so the sync has not happened yet ChannelListener::setInitialServerSyncDone(false); - ServerHandlerPtr sh = g.sh; + ServerHandlerPtr sh = Global::get().sh; if (sh && sh->isRunning()) { - g.mw->on_qaServerDisconnect_triggered(); + Global::get().mw->on_qaServerDisconnect_triggered(); sh->disconnect(); sh->wait(); QCoreApplication::instance()->processEvents(); } - g.sh.reset(); + Global::get().sh.reset(); while (sh && !sh.unique()) QThread::yieldCurrentThread(); sh.reset(); sh = ServerHandlerPtr(new ServerHandler()); sh->moveToThread(sh.get()); - g.sh = sh; - g.mw->connect(sh.get(), SIGNAL(connected()), g.mw, SLOT(serverConnected())); - g.mw->connect(sh.get(), SIGNAL(disconnected(QAbstractSocket::SocketError, QString)), g.mw, + Global::get().sh = sh; + Global::get().mw->connect(sh.get(), SIGNAL(connected()), Global::get().mw, SLOT(serverConnected())); + Global::get().mw->connect(sh.get(), SIGNAL(disconnected(QAbstractSocket::SocketError, QString)), Global::get().mw, SLOT(serverDisconnected(QAbstractSocket::SocketError, QString))); - g.mw->connect(sh.get(), SIGNAL(error(QAbstractSocket::SocketError, QString)), g.mw, + Global::get().mw->connect(sh.get(), SIGNAL(error(QAbstractSocket::SocketError, QString)), Global::get().mw, SLOT(resolverError(QAbstractSocket::SocketError, QString))); - QObject::connect(sh.get(), &ServerHandler::disconnected, g.talkingUI, &TalkingUI::on_serverDisconnected); + QObject::connect(sh.get(), &ServerHandler::disconnected, Global::get().talkingUI, &TalkingUI::on_serverDisconnected); } void MainWindow::openUrl(const QUrl &url) { - g.l->log(Log::Information, tr("Opening URL %1").arg(url.toString(QUrl::RemovePassword).toHtmlEscaped())); + Global::get().l->log(Log::Information, tr("Opening URL %1").arg(url.toString(QUrl::RemovePassword).toHtmlEscaped())); if (url.scheme() == QLatin1String("file")) { QFile f(url.toLocalFile()); if (!f.exists() || !f.open(QIODevice::ReadOnly)) { - g.l->log(Log::Warning, tr("File does not exist")); + Global::get().l->log(Log::Warning, tr("File does not exist")); return; } f.close(); @@ -919,19 +916,19 @@ void MainWindow::openUrl(const QUrl &url) { QSettings *qs = new QSettings(f.fileName(), QSettings::IniFormat); qs->setIniCodec("UTF-8"); if (qs->status() != QSettings::NoError) { - g.l->log(Log::Warning, tr("File is not a configuration file.")); + Global::get().l->log(Log::Warning, tr("File is not a configuration file.")); } else { - qSwap(qs, g.qs); - g.s.load(); - qSwap(qs, g.qs); + qSwap(qs, Global::get().qs); + Global::get().s.load(); + qSwap(qs, Global::get().qs); - g.l->log(Log::Warning, tr("Settings merged from file.")); + Global::get().l->log(Log::Warning, tr("Settings merged from file.")); } delete qs; return; } if (url.scheme() != QLatin1String("mumble")) { - g.l->log(Log::Warning, tr("URL scheme is not 'mumble'")); + Global::get().l->log(Log::Warning, tr("URL scheme is not 'mumble'")); return; } @@ -949,7 +946,7 @@ void MainWindow::openUrl(const QUrl &url) { if (version.size() > 0) { if (!MumbleVersion::get(&major, &minor, &patch, version)) { // The version format is invalid - g.l->log(Log::Warning, QObject::tr("The provided URL uses an invalid version format: \"%1\"").arg(version)); + Global::get().l->log(Log::Warning, QObject::tr("The provided URL uses an invalid version format: \"%1\"").arg(version)); return; } } @@ -965,7 +962,7 @@ void MainWindow::openUrl(const QUrl &url) { || (major == thismajor && minor == thisminor && patch > thispatch); if (isPre_120 || isFuture) { - g.l->log(Log::Warning, tr("This version of Mumble can't handle URLs for Mumble version %1.%2.%3") + Global::get().l->log(Log::Warning, tr("This version of Mumble can't handle URLs for Mumble version %1.%2.%3") .arg(major) .arg(minor) .arg(patch)); @@ -982,11 +979,11 @@ void MainWindow::openUrl(const QUrl &url) { if (query.hasQueryItem(QLatin1String("title"))) name = query.queryItemValue(QLatin1String("title")); - if (g.sh && g.sh->isRunning()) { + if (Global::get().sh && Global::get().sh->isRunning()) { QString oHost, oUser, oPw; unsigned short oport; - g.sh->getConnectionInfo(oHost, oport, oUser, oPw); - ClientUser *p = ClientUser::get(g.uiSession); + Global::get().sh->getConnectionInfo(oHost, oport, oUser, oPw); + ClientUser *p = ClientUser::get(Global::get().uiSession); if ((user.isEmpty() || (p && p->iId >= 0) || (user == oUser)) && (host.isEmpty() || ((host == oHost) && (port == oport)))) { @@ -995,15 +992,15 @@ void MainWindow::openUrl(const QUrl &url) { } } - g.db->fuzzyMatch(name, user, pw, host, port); + Global::get().db->fuzzyMatch(name, user, pw, host, port); if (user.isEmpty()) { bool ok; user = QInputDialog::getText(this, tr("Connecting to %1").arg(url.toString()), tr("Enter username"), - QLineEdit::Normal, g.s.qsUsername, &ok); + QLineEdit::Normal, Global::get().s.qsUsername, &ok); if (!ok || user.isEmpty()) return; - g.s.qsUsername = user; + Global::get().s.qsUsername = user; } if (name.isEmpty()) @@ -1011,13 +1008,13 @@ void MainWindow::openUrl(const QUrl &url) { recreateServerHandler(); - g.s.qsLastServer = name; + Global::get().s.qsLastServer = name; rtLast = MumbleProto::Reject_RejectType_None; bRetryServer = true; qaServerDisconnect->setEnabled(true); - g.l->log(Log::Information, tr("Connecting to server %1.").arg(Log::msgColor(host.toHtmlEscaped(), Log::Server))); - g.sh->setConnectionInfo(host, port, user, pw); - g.sh->start(QThread::TimeCriticalPriority); + Global::get().l->log(Log::Information, tr("Connecting to server %1.").arg(Log::msgColor(host.toHtmlEscaped(), Log::Server))); + Global::get().sh->setConnectionInfo(host, port, user, pw); + Global::get().sh->start(QThread::TimeCriticalPriority); } /** @@ -1048,12 +1045,12 @@ void MainWindow::findDesiredChannel() { } } if (found) { - if (chan != ClientUser::get(g.uiSession)->cChannel) { - g.sh->joinChannel(g.uiSession, chan->iId); + if (chan != ClientUser::get(Global::get().uiSession)->cChannel) { + Global::get().sh->joinChannel(Global::get().uiSession, chan->iId); } qtvUsers->setCurrentIndex(pmModel->index(chan)); - } else if (g.uiSession) { - qtvUsers->setCurrentIndex(pmModel->index(ClientUser::get(g.uiSession)->cChannel)); + } else if (Global::get().uiSession) { + qtvUsers->setCurrentIndex(pmModel->index(ClientUser::get(Global::get().uiSession)->cChannel)); } updateMenuPermissions(); } @@ -1071,9 +1068,9 @@ void MainWindow::setOnTop(bool top) { } void MainWindow::setupView(bool toggle_minimize) { - bool showit = !g.s.bMinimalView; + bool showit = !Global::get().s.bMinimalView; - switch (g.s.wlWindowLayout) { + switch (Global::get().s.wlWindowLayout) { case Settings::LayoutClassic: removeDockWidget(qdwLog); addDockWidget(Qt::LeftDockWidgetArea, qdwLog); @@ -1108,32 +1105,32 @@ void MainWindow::setupView(bool toggle_minimize) { if (toggle_minimize) { if (!showit) { - g.s.qbaMainWindowGeometry = saveGeometry(); - g.s.qbaMainWindowState = saveState(); - g.s.qbaHeaderState = qtvUsers->header()->saveState(); + Global::get().s.qbaMainWindowGeometry = saveGeometry(); + Global::get().s.qbaMainWindowState = saveState(); + Global::get().s.qbaHeaderState = qtvUsers->header()->saveState(); } else { - g.s.qbaMinimalViewGeometry = saveGeometry(); - g.s.qbaMinimalViewState = saveState(); + Global::get().s.qbaMinimalViewGeometry = saveGeometry(); + Global::get().s.qbaMinimalViewState = saveState(); } } Qt::WindowFlags f = Qt::Window; if (!showit) { - if (g.s.bHideFrame) { + if (Global::get().s.bHideFrame) { f |= Qt::FramelessWindowHint; } } - if (g.s.aotbAlwaysOnTop == Settings::OnTopAlways - || (g.s.bMinimalView && g.s.aotbAlwaysOnTop == Settings::OnTopInMinimal) - || (!g.s.bMinimalView && g.s.aotbAlwaysOnTop == Settings::OnTopInNormal)) { + if (Global::get().s.aotbAlwaysOnTop == Settings::OnTopAlways + || (Global::get().s.bMinimalView && Global::get().s.aotbAlwaysOnTop == Settings::OnTopInMinimal) + || (!Global::get().s.bMinimalView && Global::get().s.aotbAlwaysOnTop == Settings::OnTopInNormal)) { f |= Qt::WindowStaysOnTopHint; } if (!graphicsProxyWidget()) setWindowFlags(f); - if (g.s.bShowContextMenuInMenuBar) { + if (Global::get().s.bShowContextMenuInMenuBar) { bool found = false; foreach (QAction *a, menuBar()->actions()) { if (a == qmUser->menuAction()) { @@ -1151,7 +1148,7 @@ void MainWindow::setupView(bool toggle_minimize) { menuBar()->removeAction(qmChannel->menuAction()); } - if (g.s.bEnableDeveloperMenu) { + if (Global::get().s.bEnableDeveloperMenu) { bool found = false; foreach (QAction *a, menuBar()->actions()) { if (a == qmDeveloper->menuAction()) { @@ -1176,15 +1173,15 @@ void MainWindow::setupView(bool toggle_minimize) { if (toggle_minimize) { if (!showit) { - if (!g.s.qbaMinimalViewGeometry.isNull()) - restoreGeometry(g.s.qbaMinimalViewGeometry); - if (!g.s.qbaMinimalViewState.isNull()) - restoreState(g.s.qbaMinimalViewState); + if (!Global::get().s.qbaMinimalViewGeometry.isNull()) + restoreGeometry(Global::get().s.qbaMinimalViewGeometry); + if (!Global::get().s.qbaMinimalViewState.isNull()) + restoreState(Global::get().s.qbaMinimalViewState); } else { - if (!g.s.qbaMainWindowGeometry.isNull()) - restoreGeometry(g.s.qbaMainWindowGeometry); - if (!g.s.qbaMainWindowState.isNull()) - restoreState(g.s.qbaMainWindowState); + if (!Global::get().s.qbaMainWindowGeometry.isNull()) + restoreGeometry(Global::get().s.qbaMainWindowGeometry); + if (!Global::get().s.qbaMainWindowState.isNull()) + restoreState(Global::get().s.qbaMainWindowState); } } else { QRect newgeom = frameGeometry(); @@ -1195,7 +1192,7 @@ void MainWindow::setupView(bool toggle_minimize) { // Display the Transmit Mode Dropdown, if configured to do so, otherwise // hide it. - if (g.s.bShowTransmitModeComboBox) { + if (Global::get().s.bShowTransmitModeComboBox) { qaTransmitMode->setVisible(true); qaTransmitModeSeparator->setVisible(true); } else { @@ -1207,7 +1204,7 @@ void MainWindow::setupView(bool toggle_minimize) { activateWindow(); // If activated show the PTT window - if (g.s.bShowPTTButtonWindow && g.s.atTransmit == Settings::PushToTalk) { + if (Global::get().s.bShowPTTButtonWindow && Global::get().s.atTransmit == Settings::PushToTalk) { if (qwPTTButtonWidget) { qwPTTButtonWidget->show(); } else { @@ -1237,23 +1234,23 @@ void MainWindow::on_qaServerConnect_triggered(bool autoconnect) { rtLast = MumbleProto::Reject_RejectType_None; bRetryServer = true; qaServerDisconnect->setEnabled(true); - g.l->log(Log::Information, + Global::get().l->log(Log::Information, tr("Connecting to server %1.").arg(Log::msgColor(cd->qsServer.toHtmlEscaped(), Log::Server))); - g.sh->setConnectionInfo(cd->qsServer, cd->usPort, cd->qsUsername, cd->qsPassword); - g.sh->start(QThread::TimeCriticalPriority); + Global::get().sh->setConnectionInfo(cd->qsServer, cd->usPort, cd->qsUsername, cd->qsPassword); + Global::get().sh->start(QThread::TimeCriticalPriority); } delete cd; } void MainWindow::on_Reconnect_timeout() { - if (g.sh->isRunning()) + if (Global::get().sh->isRunning()) return; - g.l->log(Log::Information, tr("Reconnecting.")); - g.sh->start(QThread::TimeCriticalPriority); + Global::get().l->log(Log::Information, tr("Reconnecting.")); + Global::get().sh->start(QThread::TimeCriticalPriority); } void MainWindow::on_qmSelf_aboutToShow() { - ClientUser *user = ClientUser::get(g.uiSession); + ClientUser *user = ClientUser::get(Global::get().uiSession); qaServerTexture->setEnabled(user != nullptr); qaSelfComment->setEnabled(user != nullptr); @@ -1261,9 +1258,9 @@ void MainWindow::on_qmSelf_aboutToShow() { qaServerTextureRemove->setEnabled(user && !user->qbaTextureHash.isEmpty()); qaSelfRegister->setEnabled(user && (user->iId < 0) && !user->qsHash.isEmpty() - && (g.pPermissions & (ChanACL::SelfRegister | ChanACL::Write))); - if (g.sh && g.sh->uiVersion >= 0x010203) { - qaSelfPrioritySpeaker->setEnabled(user && g.pPermissions & (ChanACL::Write | ChanACL::MuteDeafen)); + && (Global::get().pPermissions & (ChanACL::SelfRegister | ChanACL::Write))); + if (Global::get().sh && Global::get().sh->uiVersion >= 0x010203) { + qaSelfPrioritySpeaker->setEnabled(user && Global::get().pPermissions & (ChanACL::Write | ChanACL::MuteDeafen)); qaSelfPrioritySpeaker->setChecked(user && user->bPrioritySpeaker); } else { qaSelfPrioritySpeaker->setEnabled(false); @@ -1272,17 +1269,17 @@ void MainWindow::on_qmSelf_aboutToShow() { } void MainWindow::on_qaSelfComment_triggered() { - ClientUser *p = ClientUser::get(g.uiSession); + ClientUser *p = ClientUser::get(Global::get().uiSession); if (!p) return; if (!p->qbaCommentHash.isEmpty() && p->qsComment.isEmpty()) { - p->qsComment = QString::fromUtf8(g.db->blob(p->qbaCommentHash)); + p->qsComment = QString::fromUtf8(Global::get().db->blob(p->qbaCommentHash)); if (p->qsComment.isEmpty()) { pmModel->uiSessionComment = ~(p->uiSession); MumbleProto::RequestBlob mprb; mprb.add_session_comment(p->uiSession); - g.sh->sendMessage(mprb); + Global::get().sh->sendMessage(mprb); return; } } @@ -1301,16 +1298,16 @@ void MainWindow::on_qaSelfComment_triggered() { MumbleProto::UserState mpus; mpus.set_session(session); mpus.set_comment(u8(msg)); - g.sh->sendMessage(mpus); + Global::get().sh->sendMessage(mpus); if (!msg.isEmpty()) - g.db->setBlob(sha1(msg), msg.toUtf8()); + Global::get().db->setBlob(sha1(msg), msg.toUtf8()); } delete texm; } void MainWindow::on_qaSelfRegister_triggered() { - ClientUser *p = ClientUser::get(g.uiSession); + ClientUser *p = ClientUser::get(Global::get().uiSession); if (!p) return; @@ -1324,24 +1321,24 @@ void MainWindow::on_qaSelfRegister_triggered() { QMessageBox::Yes | QMessageBox::No); if (result == QMessageBox::Yes) - g.sh->registerUser(p->uiSession); + Global::get().sh->registerUser(p->uiSession); } void MainWindow::qcbTransmitMode_activated(int index) { switch (index) { case 0: // Continuous - g.s.atTransmit = Settings::Continuous; - g.l->log(Log::Information, tr("Transmit Mode set to Continuous")); + Global::get().s.atTransmit = Settings::Continuous; + Global::get().l->log(Log::Information, tr("Transmit Mode set to Continuous")); return; case 1: // Voice Activity - g.s.atTransmit = Settings::VAD; - g.l->log(Log::Information, tr("Transmit Mode set to Voice Activity")); + Global::get().s.atTransmit = Settings::VAD; + Global::get().l->log(Log::Information, tr("Transmit Mode set to Voice Activity")); return; case 2: // Push-to-Talk - g.s.atTransmit = Settings::PushToTalk; - g.l->log(Log::Information, tr("Transmit Mode set to Push-to-Talk")); + Global::get().s.atTransmit = Settings::PushToTalk; + Global::get().l->log(Log::Information, tr("Transmit Mode set to Push-to-Talk")); return; } } @@ -1365,10 +1362,10 @@ void MainWindow::on_qmServer_aboutToShow() { #endif qmServer->addAction(qaQuit); - qaServerBanList->setEnabled(g.pPermissions & (ChanACL::Ban | ChanACL::Write)); - qaServerUserList->setEnabled(g.pPermissions & (ChanACL::Register | ChanACL::Write)); - qaServerInformation->setEnabled(g.uiSession != 0); - qaServerTokens->setEnabled(g.uiSession != 0); + qaServerBanList->setEnabled(Global::get().pPermissions & (ChanACL::Ban | ChanACL::Write)); + qaServerUserList->setEnabled(Global::get().pPermissions & (ChanACL::Register | ChanACL::Write)); + qaServerInformation->setEnabled(Global::get().uiSession != 0); + qaServerTokens->setEnabled(Global::get().uiSession != 0); if (!qlServerActions.isEmpty()) { qmServer->addSeparator(); @@ -1382,12 +1379,12 @@ void MainWindow::on_qaServerDisconnect_triggered() { qtReconnect->stop(); qaServerDisconnect->setEnabled(false); } - if (g.sh && g.sh->isRunning()) - g.sh->disconnect(); + if (Global::get().sh && Global::get().sh->isRunning()) + Global::get().sh->disconnect(); } void MainWindow::on_qaServerBanList_triggered() { - g.sh->requestBanList(); + Global::get().sh->requestBanList(); if (banEdit) { banEdit->reject(); @@ -1397,7 +1394,7 @@ void MainWindow::on_qaServerBanList_triggered() { } void MainWindow::on_qaServerUserList_triggered() { - g.sh->requestUserList(); + Global::get().sh->requestUserList(); if (userEdit) { userEdit->reject(); @@ -1407,11 +1404,11 @@ void MainWindow::on_qaServerUserList_triggered() { } static const QString currentCodec() { - if (g.bOpus) + if (Global::get().bOpus) return QLatin1String("Opus"); - int v = g.bPreferAlpha ? g.iCodecAlpha : g.iCodecBeta; - CELTCodec *cc = g.qmCodecs.value(v); + int v = Global::get().bPreferAlpha ? Global::get().iCodecAlpha : Global::get().iCodecBeta; + CELTCodec *cc = Global::get().qmCodecs.value(v); if (cc) return QString::fromLatin1("CELT %1").arg(cc->version()); else @@ -1419,27 +1416,27 @@ static const QString currentCodec() { } void MainWindow::on_qaServerInformation_triggered() { - ConnectionPtr c = g.sh->cConnection; + ConnectionPtr c = Global::get().sh->cConnection; if (!c) return; - QSslCipher qsc = g.sh->qscCipher; + QSslCipher qsc = Global::get().sh->qscCipher; - QString qsVersion = tr("<h2>Version</h2><p>Protocol %1</p>").arg(MumbleVersion::toString(g.sh->uiVersion)); + QString qsVersion = tr("<h2>Version</h2><p>Protocol %1</p>").arg(MumbleVersion::toString(Global::get().sh->uiVersion)); - if (g.sh->qsRelease.isEmpty() || g.sh->qsOS.isEmpty() || g.sh->qsOSVersion.isEmpty()) { + if (Global::get().sh->qsRelease.isEmpty() || Global::get().sh->qsOS.isEmpty() || Global::get().sh->qsOSVersion.isEmpty()) { qsVersion.append(tr("<p>No build information or OS version available</p>")); } else { qsVersion.append( tr("<p>%1 (%2)<br />%3</p>") - .arg(g.sh->qsRelease.toHtmlEscaped(), g.sh->qsOS.toHtmlEscaped(), g.sh->qsOSVersion.toHtmlEscaped())); + .arg(Global::get().sh->qsRelease.toHtmlEscaped(), Global::get().sh->qsOS.toHtmlEscaped(), Global::get().sh->qsOSVersion.toHtmlEscaped())); } QString host, uname, pw; unsigned short port; - g.sh->getConnectionInfo(host, port, uname, pw); + Global::get().sh->getConnectionInfo(host, port, uname, pw); const SSLCipherInfo *ci = SSLCipherInfoLookupByOpenSSLName(qsc.name().toLatin1().constData()); @@ -1484,11 +1481,11 @@ void MainWindow::on_qaServerInformation_triggered() { "<p>%4 ms average latency (%5 deviation)</p>" "<p>Remote host %6 (port %7)</p>") .arg(c->sessionProtocolString().toHtmlEscaped(), cipherDescription, cipherPFSInfo, - QString::fromLatin1("%1").arg(boost::accumulators::mean(g.sh->accTCP), 0, 'f', 2), - QString::fromLatin1("%1").arg(sqrt(boost::accumulators::variance(g.sh->accTCP)), 0, 'f', 2), + QString::fromLatin1("%1").arg(boost::accumulators::mean(Global::get().sh->accTCP), 0, 'f', 2), + QString::fromLatin1("%1").arg(sqrt(boost::accumulators::variance(Global::get().sh->accTCP)), 0, 'f', 2), host.toHtmlEscaped(), QString::number(port)); - if (g.uiMaxUsers) { - qsControl += tr("<p>Connected users: %1/%2</p>").arg(ModelItem::c_qhUsers.count()).arg(g.uiMaxUsers); + if (Global::get().uiMaxUsers) { + qsControl += tr("<p>Connected users: %1/%2</p>").arg(ModelItem::c_qhUsers.count()).arg(Global::get().uiMaxUsers); } QString qsVoice, qsCrypt, qsAudio; @@ -1498,8 +1495,8 @@ void MainWindow::on_qaServerInformation_triggered() { } else { qsVoice = tr("<h2>Voice channel</h2><p>Encrypted with 128 bit OCB-AES128<br />%1 ms average latency (%4 " "deviation)</p>") - .arg(boost::accumulators::mean(g.sh->accUDP), 0, 'f', 2) - .arg(sqrt(boost::accumulators::variance(g.sh->accUDP)), 0, 'f', 2); + .arg(boost::accumulators::mean(Global::get().sh->accUDP), 0, 'f', 2) + .arg(sqrt(boost::accumulators::variance(Global::get().sh->accUDP)), 0, 'f', 2); qsCrypt = QString::fromLatin1("<h2>%1</h2><table><tr><th></th><th>%2</th><th>%3</th></tr>" "<tr><th>%4</th><td>%8</td><td>%12</td></tr>" "<tr><th>%5</th><td>%9</td><td>%13</td></tr>" @@ -1523,8 +1520,8 @@ void MainWindow::on_qaServerInformation_triggered() { .arg(c->csCrypt->uiResync); } qsAudio = tr("<h2>Audio bandwidth</h2><p>Maximum %1 kbit/s<br />Current %2 kbit/s<br />Codec: %3</p>") - .arg(g.iMaxBandwidth / 1000.0, 0, 'f', 1) - .arg(g.iAudioBandwidth / 1000.0, 0, 'f', 1) + .arg(Global::get().iMaxBandwidth / 1000.0, 0, 'f', 1) + .arg(Global::get().iAudioBandwidth / 1000.0, 0, 'f', 1) .arg(currentCodec()); QMessageBox qmb(QMessageBox::Information, tr("Mumble Server Information"), @@ -1535,7 +1532,7 @@ void MainWindow::on_qaServerInformation_triggered() { QPushButton *qp = qmb.addButton(tr("&View Certificate"), QMessageBox::ActionRole); int res = qmb.exec(); if ((res == 0) && (qmb.clickedButton() == qp)) { - ViewCert vc(g.sh->qscCert, this); + ViewCert vc(Global::get().sh->qscCert, this); vc.exec(); } } @@ -1548,11 +1545,11 @@ void MainWindow::on_qaServerTexture_triggered() { const QImage &img = choice.second; if ((img.height() <= 1024) && (img.width() <= 1024)) - g.sh->setUserTexture(g.uiSession, choice.first); + Global::get().sh->setUserTexture(Global::get().uiSession, choice.first); } void MainWindow::on_qaServerTextureRemove_triggered() { - g.sh->setUserTexture(g.uiSession, QByteArray()); + Global::get().sh->setUserTexture(Global::get().uiSession, QByteArray()); } void MainWindow::on_qaServerTokens_triggered() { @@ -1573,7 +1570,7 @@ void MainWindow::voiceRecorderDialog_finished(int) { void MainWindow::qmUser_aboutToShow() { ClientUser *p = nullptr; - if (g.uiSession != 0) { + if (Global::get().uiSession != 0) { QModelIndex idx; if (!qpContextPosition.isNull()) idx = qtvUsers->indexAt(qpContextPosition); @@ -1590,7 +1587,7 @@ void MainWindow::qmUser_aboutToShow() { cuContextUser = p; qpContextPosition = QPoint(); - const ClientUser *self = ClientUser::get(g.uiSession); + const ClientUser *self = ClientUser::get(Global::get().uiSession); bool isSelf = p == self; qmUser->clear(); @@ -1602,17 +1599,17 @@ void MainWindow::qmUser_aboutToShow() { qmUser->addSeparator(); } - if (g.pPermissions & (ChanACL::Kick | ChanACL::Ban | ChanACL::Write)) + if (Global::get().pPermissions & (ChanACL::Kick | ChanACL::Ban | ChanACL::Write)) qmUser->addAction(qaUserKick); - if (g.pPermissions & (ChanACL::Ban | ChanACL::Write)) + if (Global::get().pPermissions & (ChanACL::Ban | ChanACL::Write)) qmUser->addAction(qaUserBan); qmUser->addAction(qaUserMute); qmUser->addAction(qaUserDeaf); - if (g.sh && g.sh->uiVersion >= 0x010203) + if (Global::get().sh && Global::get().sh->uiVersion >= 0x010203) qmUser->addAction(qaUserPrioritySpeaker); qmUser->addAction(qaUserLocalMute); qmUser->addAction(qaUserLocalIgnore); - if (g.s.bTTS) + if (Global::get().s.bTTS) qmUser->addAction(qaUserLocalIgnoreTTS); qmUser->addAction(qaUserLocalVolume); qmUser->addAction(qaUserLocalNickname); @@ -1626,16 +1623,16 @@ void MainWindow::qmUser_aboutToShow() { } qmUser->addAction(qaUserTextMessage); - if (g.sh && g.sh->uiVersion >= 0x010202) + if (Global::get().sh && Global::get().sh->uiVersion >= 0x010202) qmUser->addAction(qaUserInformation); if (p && (p->iId < 0) && !p->qsHash.isEmpty() - && (g.pPermissions & ((isSelf ? ChanACL::SelfRegister : ChanACL::Register) | ChanACL::Write))) { + && (Global::get().pPermissions & ((isSelf ? ChanACL::SelfRegister : ChanACL::Register) | ChanACL::Write))) { qmUser->addSeparator(); qmUser->addAction(qaUserRegister); } - if (p && !p->qsHash.isEmpty() && (!p->qsFriendName.isEmpty() || (p->uiSession != g.uiSession))) { + if (p && !p->qsHash.isEmpty() && (!p->qsFriendName.isEmpty() || (p->uiSession != Global::get().uiSession))) { qmUser->addSeparator(); if (p->qsFriendName.isEmpty()) qmUser->addAction(qaUserFriendAdd); @@ -1653,7 +1650,7 @@ void MainWindow::qmUser_aboutToShow() { } #ifndef Q_OS_MAC - if (g.s.bMinimalView) { + if (Global::get().s.bMinimalView) { qmUser->addSeparator(); qmUser->addMenu(qmServer); qmUser->addMenu(qmSelf); @@ -1691,16 +1688,16 @@ void MainWindow::qmUser_aboutToShow() { qaUserLocalIgnoreTTS->setEnabled(!isSelf); // If the server's version is less than 1.4.0 it won't support the new permission to reset a comment/avatar, so // fall back to the old method - if (g.sh->uiVersion < 0x010400) { + if (Global::get().sh->uiVersion < 0x010400) { qaUserCommentReset->setEnabled(!p->qbaCommentHash.isEmpty() - && (g.pPermissions & (ChanACL::Move | ChanACL::Write))); + && (Global::get().pPermissions & (ChanACL::Move | ChanACL::Write))); qaUserTextureReset->setEnabled(!p->qbaTextureHash.isEmpty() - && (g.pPermissions & (ChanACL::Move | ChanACL::Write))); + && (Global::get().pPermissions & (ChanACL::Move | ChanACL::Write))); } else { qaUserCommentReset->setEnabled(!p->qbaCommentHash.isEmpty() - && (g.pPermissions & (ChanACL::ResetUserContent | ChanACL::Write))); + && (Global::get().pPermissions & (ChanACL::ResetUserContent | ChanACL::Write))); qaUserTextureReset->setEnabled(!p->qbaTextureHash.isEmpty() - && (g.pPermissions & (ChanACL::ResetUserContent | ChanACL::Write))); + && (Global::get().pPermissions & (ChanACL::ResetUserContent | ChanACL::Write))); } qaUserCommentView->setEnabled(!p->qbaCommentHash.isEmpty()); @@ -1716,7 +1713,7 @@ void MainWindow::qmUser_aboutToShow() { void MainWindow::qmListener_aboutToShow() { ClientUser *p = nullptr; - if (g.uiSession != 0) { + if (Global::get().uiSession != 0) { QModelIndex idx; if (!qpContextPosition.isNull()) idx = qtvUsers->indexAt(qpContextPosition); @@ -1733,7 +1730,7 @@ void MainWindow::qmListener_aboutToShow() { cuContextUser = p; qpContextPosition = QPoint(); - bool self = p && (p->uiSession == g.uiSession); + bool self = p && (p->uiSession == Global::get().uiSession); qmListener->clear(); @@ -1741,7 +1738,7 @@ void MainWindow::qmListener_aboutToShow() { qmListener->addAction(qaListenerLocalVolume); if (cContextChannel) { qmListener->addAction(qaChannelListen); - qaChannelListen->setChecked(ChannelListener::isListening(g.uiSession, cContextChannel->iId)); + qaChannelListen->setChecked(ChannelListener::isListening(Global::get().uiSession, cContextChannel->iId)); } } else { qmListener->addAction(qaEmpty); @@ -1763,7 +1760,7 @@ void MainWindow::on_qaUserMute_triggered() { } else { mpus.set_mute(true); } - g.sh->sendMessage(mpus); + Global::get().sh->sendMessage(mpus); } void MainWindow::on_qaUserLocalMute_triggered() { @@ -1776,7 +1773,7 @@ void MainWindow::on_qaUserLocalMute_triggered() { p->setLocalMute(muted); if (!p->qsHash.isEmpty()) { - g.db->setLocalMuted(p->qsHash, muted); + Global::get().db->setLocalMuted(p->qsHash, muted); } else { logChangeNotPermanent(QObject::tr("Local Mute"), p); } @@ -1792,7 +1789,7 @@ void MainWindow::on_qaUserLocalIgnore_triggered() { p->setLocalIgnore(ignored); if (!p->qsHash.isEmpty()) { - g.db->setLocalIgnored(p->qsHash, ignored); + Global::get().db->setLocalIgnored(p->qsHash, ignored); } else { logChangeNotPermanent(QObject::tr("Ignore Messages"), p); } @@ -1808,7 +1805,7 @@ void MainWindow::on_qaUserLocalIgnoreTTS_triggered() { p->setLocalIgnoreTTS(ignoredTTS); if (!p->qsHash.isEmpty()) { - g.db->setLocalIgnoredTTS(p->qsHash, ignoredTTS); + Global::get().db->setLocalIgnoredTTS(p->qsHash, ignoredTTS); } else { logChangeNotPermanent(QObject::tr("Disable Text-To-Speech"), p); } @@ -1835,18 +1832,18 @@ void MainWindow::on_qaUserDeaf_triggered() { MumbleProto::UserState mpus; mpus.set_session(p->uiSession); mpus.set_deaf(!p->bDeaf); - g.sh->sendMessage(mpus); + Global::get().sh->sendMessage(mpus); } void MainWindow::on_qaSelfPrioritySpeaker_triggered() { - ClientUser *p = ClientUser::get(g.uiSession); + ClientUser *p = ClientUser::get(Global::get().uiSession); if (!p) return; MumbleProto::UserState mpus; mpus.set_session(p->uiSession); mpus.set_priority_speaker(!p->bPrioritySpeaker); - g.sh->sendMessage(mpus); + Global::get().sh->sendMessage(mpus); } void MainWindow::on_qaUserPrioritySpeaker_triggered() { @@ -1857,7 +1854,7 @@ void MainWindow::on_qaUserPrioritySpeaker_triggered() { MumbleProto::UserState mpus; mpus.set_session(p->uiSession); mpus.set_priority_speaker(!p->bPrioritySpeaker); - g.sh->sendMessage(mpus); + Global::get().sh->sendMessage(mpus); } void MainWindow::on_qaUserRegister_triggered() { @@ -1869,7 +1866,7 @@ void MainWindow::on_qaUserRegister_triggered() { QMessageBox::StandardButton result; - if (session == g.uiSession) + if (session == Global::get().uiSession) result = QMessageBox::question( this, tr("Register yourself as %1").arg(p->qsName), tr("<p>You are about to register yourself on this server. This action cannot be undone, and your username " @@ -1891,7 +1888,7 @@ void MainWindow::on_qaUserRegister_triggered() { p = ClientUser::get(session); if (!p) return; - g.sh->registerUser(p->uiSession); + Global::get().sh->registerUser(p->uiSession); } } @@ -1900,7 +1897,7 @@ void MainWindow::on_qaUserFriendAdd_triggered() { if (!p) return; - g.db->addFriend(p->qsName, p->qsHash); + Global::get().db->addFriend(p->qsName, p->qsHash); pmModel->setFriendName(p, p->qsName); } @@ -1913,7 +1910,7 @@ void MainWindow::on_qaUserFriendRemove_triggered() { if (!p) return; - g.db->removeFriend(p->qsHash); + Global::get().db->removeFriend(p->qsHash); pmModel->setFriendName(p, QString()); } @@ -1933,7 +1930,7 @@ void MainWindow::on_qaUserKick_triggered() { return; if (ok) { - g.sh->kickBanUser(p->uiSession, reason, false); + Global::get().sh->kickBanUser(p->uiSession, reason, false); } } @@ -1952,7 +1949,7 @@ void MainWindow::on_qaUserBan_triggered() { return; if (ok) { - g.sh->kickBanUser(p->uiSession, reason, true); + Global::get().sh->kickBanUser(p->uiSession, reason, true); } } @@ -1979,8 +1976,8 @@ void MainWindow::openTextMessageDialog(ClientUser *p) { QString msg = texm->message(); if (!msg.isEmpty()) { - g.sh->sendUserTextMessage(p->uiSession, msg); - g.l->log(Log::TextMessage, tr("To %1: %2").arg(Log::formatClientUser(p, Log::Target), texm->message()), + Global::get().sh->sendUserTextMessage(p->uiSession, msg); + Global::get().l->log(Log::TextMessage, tr("To %1: %2").arg(Log::formatClientUser(p, Log::Target), texm->message()), tr("Message to %1").arg(p->qsName), true); } } @@ -2010,12 +2007,12 @@ void MainWindow::on_qaUserCommentView_triggered() { return; if (!p->qbaCommentHash.isEmpty() && p->qsComment.isEmpty()) { - p->qsComment = QString::fromUtf8(g.db->blob(p->qbaCommentHash)); + p->qsComment = QString::fromUtf8(Global::get().db->blob(p->qbaCommentHash)); if (p->qsComment.isEmpty()) { pmModel->uiSessionComment = ~(p->uiSession); MumbleProto::RequestBlob mprb; mprb.add_session_comment(p->uiSession); - g.sh->sendMessage(mprb); + Global::get().sh->sendMessage(mprb); return; } } @@ -2042,7 +2039,7 @@ void MainWindow::on_qaUserCommentReset_triggered() { tr("Are you sure you want to reset the comment of user %1?").arg(p->qsName.toHtmlEscaped()), QMessageBox::Yes, QMessageBox::No); if (ret == QMessageBox::Yes) { - g.sh->setUserComment(session, QString()); + Global::get().sh->setUserComment(session, QString()); } } @@ -2059,7 +2056,7 @@ void MainWindow::on_qaUserTextureReset_triggered() { tr("Are you sure you want to reset the avatar of user %1?").arg(p->qsName.toHtmlEscaped()), QMessageBox::Yes, QMessageBox::No); if (ret == QMessageBox::Yes) { - g.sh->setUserTexture(session, QByteArray()); + Global::get().sh->setUserTexture(session, QByteArray()); } } @@ -2069,7 +2066,7 @@ void MainWindow::on_qaUserInformation_triggered() { if (!p) return; - g.sh->requestUserStats(p->uiSession, false); + Global::get().sh->requestUserStats(p->uiSession, false); } void MainWindow::on_qaHide_triggered() { @@ -2090,24 +2087,24 @@ void MainWindow::sendChatbarText(QString qsText) { } void MainWindow::sendChatbarMessage(QString qsMessage) { - if (g.uiSession == 0) + if (Global::get().uiSession == 0) return; // Check if text & connection is available ClientUser *p = pmModel->getUser(qtvUsers->currentIndex()); Channel *c = pmModel->getChannel(qtvUsers->currentIndex()); - if (!g.s.bChatBarUseSelection || !p || p->uiSession == g.uiSession) { + if (!Global::get().s.bChatBarUseSelection || !p || p->uiSession == Global::get().uiSession) { // Channel message - if (!g.s.bChatBarUseSelection || !c) // If no channel selected fallback to current one - c = ClientUser::get(g.uiSession)->cChannel; + if (!Global::get().s.bChatBarUseSelection || !c) // If no channel selected fallback to current one + c = ClientUser::get(Global::get().uiSession)->cChannel; - g.sh->sendChannelTextMessage(c->iId, qsMessage, false); - g.l->log(Log::TextMessage, tr("To %1: %2").arg(Log::formatChannel(c), qsMessage), + Global::get().sh->sendChannelTextMessage(c->iId, qsMessage, false); + Global::get().l->log(Log::TextMessage, tr("To %1: %2").arg(Log::formatChannel(c), qsMessage), tr("Message to channel %1").arg(c->qsName), true); } else { // User message - g.sh->sendUserTextMessage(p->uiSession, qsMessage); - g.l->log(Log::TextMessage, tr("To %1: %2").arg(Log::formatClientUser(p, Log::Target), qsMessage), + Global::get().sh->sendUserTextMessage(p->uiSession, qsMessage); + Global::get().l->log(Log::TextMessage, tr("To %1: %2").arg(Log::formatClientUser(p, Log::Target), qsMessage), tr("Message to %1").arg(p->qsName), true); } } @@ -2150,10 +2147,10 @@ void MainWindow::on_qmConfig_aboutToShow() { qmConfig->addSeparator(); qmConfig->addAction(qaConfigMinimal); - qaTalkingUIToggle->setChecked(g.talkingUI && g.talkingUI->isVisible()); + qaTalkingUIToggle->setChecked(Global::get().talkingUI && Global::get().talkingUI->isVisible()); qmConfig->addAction(qaTalkingUIToggle); - if (g.s.bMinimalView) + if (Global::get().s.bMinimalView) qmConfig->addAction(qaConfigHideFrame); } @@ -2161,7 +2158,7 @@ void MainWindow::qmChannel_aboutToShow() { qmChannel->clear(); Channel *c = nullptr; - if (g.uiSession != 0) { + if (Global::get().uiSession != 0) { QModelIndex idx; if (!qpContextPosition.isNull()) idx = qtvUsers->indexAt(qpContextPosition); @@ -2178,17 +2175,17 @@ void MainWindow::qmChannel_aboutToShow() { cContextChannel = c; qpContextPosition = QPoint(); - if (c && c->iId != ClientUser::get(g.uiSession)->cChannel->iId) { + if (c && c->iId != ClientUser::get(Global::get().uiSession)->cChannel->iId) { qmChannel->addAction(qaChannelJoin); qmChannel->addSeparator(); } - if (c && g.sh && g.sh->uiVersion >= 0x010400) { + if (c && Global::get().sh && Global::get().sh->uiVersion >= 0x010400) { // If the server's version is less than 1.4, the listening feature is not supported yet // and thus it doesn't make sense to show the action for it qmChannel->addAction(qaChannelListen); - qaChannelListen->setChecked(ChannelListener::isListening(g.uiSession, c->iId)); + qaChannelListen->setChecked(ChannelListener::isListening(Global::get().uiSession, c->iId)); } qmChannel->addSeparator(); @@ -2211,7 +2208,7 @@ void MainWindow::qmChannel_aboutToShow() { } #ifndef Q_OS_MAC - if (g.s.bMinimalView) { + if (Global::get().s.bMinimalView) { qmChannel->addSeparator(); qmChannel->addMenu(qmServer); qmChannel->addMenu(qmSelf); @@ -2229,12 +2226,12 @@ void MainWindow::qmChannel_aboutToShow() { bool add, remove, acl, link, unlink, unlinkall, msg; add = remove = acl = link = unlink = unlinkall = msg = false; - if (g.uiSession != 0) { + if (Global::get().uiSession != 0) { add = true; acl = true; msg = true; - Channel *home = ClientUser::get(g.uiSession)->cChannel; + Channel *home = ClientUser::get(Global::get().uiSession)->cChannel; if (c && c->iId != 0) { remove = true; @@ -2267,7 +2264,7 @@ void MainWindow::on_qaChannelJoin_triggered() { Channel *c = getContextMenuChannel(); if (c) { - g.sh->joinChannel(g.uiSession, c->iId); + Global::get().sh->joinChannel(Global::get().uiSession, c->iId); } } @@ -2278,7 +2275,7 @@ void MainWindow::on_qaUserJoin_triggered() { const Channel *channel = user->cChannel; if (channel) { - g.sh->joinChannel(g.uiSession, channel->iId); + Global::get().sh->joinChannel(Global::get().uiSession, channel->iId); } } } @@ -2288,9 +2285,9 @@ void MainWindow::on_qaChannelListen_triggered() { if (c) { if (qaChannelListen->isChecked()) { - g.sh->startListeningToChannel(c->iId); + Global::get().sh->startListeningToChannel(c->iId); } else { - g.sh->stopListeningToChannel(c->iId); + Global::get().sh->stopListeningToChannel(c->iId); } } } @@ -2339,7 +2336,7 @@ void MainWindow::on_qaChannelRemove_triggered() { return; if (ret == QMessageBox::Yes) { - g.sh->removeChannel(c->iId); + Global::get().sh->removeChannel(c->iId); } } @@ -2350,15 +2347,15 @@ void MainWindow::on_qaChannelACL_triggered() { int id = c->iId; if (!c->qbaDescHash.isEmpty() && c->qsDesc.isEmpty()) { - c->qsDesc = QString::fromUtf8(g.db->blob(c->qbaDescHash)); + c->qsDesc = QString::fromUtf8(Global::get().db->blob(c->qbaDescHash)); if (c->qsDesc.isEmpty()) { MumbleProto::RequestBlob mprb; mprb.add_channel_description(id); - g.sh->sendMessage(mprb); + Global::get().sh->sendMessage(mprb); } } - g.sh->requestACL(id); + Global::get().sh->requestACL(id); if (aclEdit) { aclEdit->reject(); @@ -2368,31 +2365,31 @@ void MainWindow::on_qaChannelACL_triggered() { } void MainWindow::on_qaChannelLink_triggered() { - Channel *c = ClientUser::get(g.uiSession)->cChannel; + Channel *c = ClientUser::get(Global::get().uiSession)->cChannel; Channel *l = getContextMenuChannel(); if (!l) l = Channel::get(0); - g.sh->addChannelLink(c->iId, l->iId); + Global::get().sh->addChannelLink(c->iId, l->iId); } void MainWindow::on_qaChannelUnlink_triggered() { - Channel *c = ClientUser::get(g.uiSession)->cChannel; + Channel *c = ClientUser::get(Global::get().uiSession)->cChannel; Channel *l = getContextMenuChannel(); if (!l) l = Channel::get(0); - g.sh->removeChannelLink(c->iId, l->iId); + Global::get().sh->removeChannelLink(c->iId, l->iId); } void MainWindow::on_qaChannelUnlinkAll_triggered() { - Channel *c = ClientUser::get(g.uiSession)->cChannel; + Channel *c = ClientUser::get(Global::get().uiSession)->cChannel; MumbleProto::ChannelState mpcs; mpcs.set_channel_id(c->iId); foreach (Channel *l, c->qsPermLinks) mpcs.add_links_remove(l->iId); - g.sh->sendMessage(mpcs); + Global::get().sh->sendMessage(mpcs); } void MainWindow::on_qaChannelSendMessage_triggered() { @@ -2409,13 +2406,13 @@ void MainWindow::on_qaChannelSendMessage_triggered() { c = Channel::get(id); if (c && (res == QDialog::Accepted)) { - g.sh->sendChannelTextMessage(id, texm->message(), texm->bTreeMessage); + Global::get().sh->sendChannelTextMessage(id, texm->message(), texm->bTreeMessage); if (texm->bTreeMessage) - g.l->log(Log::TextMessage, tr("To %1 (Tree): %2").arg(Log::formatChannel(c), texm->message()), + Global::get().l->log(Log::TextMessage, tr("To %1 (Tree): %2").arg(Log::formatChannel(c), texm->message()), tr("Message to tree %1").arg(c->qsName), true); else - g.l->log(Log::TextMessage, tr("To %1: %2").arg(Log::formatChannel(c), texm->message()), + Global::get().l->log(Log::TextMessage, tr("To %1: %2").arg(Log::formatChannel(c), texm->message()), tr("Message to channel %1").arg(c->qsName), true); } delete texm; @@ -2429,7 +2426,7 @@ void MainWindow::on_qaChannelCopyURL_triggered() { if (!c) return; - g.sh->getConnectionInfo(host, port, uname, pw); + Global::get().sh->getConnectionInfo(host, port, uname, pw); // walk back up the channel list to build the URL. while (c->cParent) { channel.prepend(c->qsName); @@ -2463,7 +2460,7 @@ void MainWindow::updateMenuPermissions() { ClientUser *cu = nullptr; Channel *c = nullptr; - if (g.uiSession) { + if (Global::get().uiSession) { cu = getContextMenuUser(); if (!cu) cu = pmModel->getUser(qtvUsers->currentIndex()); @@ -2476,9 +2473,9 @@ void MainWindow::updateMenuPermissions() { ChanACL::Permissions p = c ? static_cast< ChanACL::Permissions >(c->uiPermissions) : ChanACL::None; if (c && !p) { - g.sh->requestChannelPermissions(c->iId); + Global::get().sh->requestChannelPermissions(c->iId); if (c->iId == 0) - p = g.pPermissions; + p = Global::get().pPermissions; else p = ChanACL::All; @@ -2490,23 +2487,23 @@ void MainWindow::updateMenuPermissions() { cparent ? static_cast< ChanACL::Permissions >(cparent->uiPermissions) : ChanACL::None; if (cparent && !pparent) { - g.sh->requestChannelPermissions(cparent->iId); + Global::get().sh->requestChannelPermissions(cparent->iId); if (cparent->iId == 0) - pparent = g.pPermissions; + pparent = Global::get().pPermissions; else pparent = ChanACL::All; cparent->uiPermissions = pparent; } - ClientUser *user = g.uiSession ? ClientUser::get(g.uiSession) : nullptr; + ClientUser *user = Global::get().uiSession ? ClientUser::get(Global::get().uiSession) : nullptr; Channel *homec = user ? user->cChannel : nullptr; ChanACL::Permissions homep = homec ? static_cast< ChanACL::Permissions >(homec->uiPermissions) : ChanACL::None; if (homec && !homep) { - g.sh->requestChannelPermissions(homec->iId); + Global::get().sh->requestChannelPermissions(homec->iId); if (homec->iId == 0) - homep = g.pPermissions; + homep = Global::get().pPermissions; else homep = ChanACL::All; @@ -2519,7 +2516,7 @@ void MainWindow::updateMenuPermissions() { qaUserDeaf->setEnabled(p & (ChanACL::Write | ChanACL::MuteDeafen) && ((cu != user) || cu->bDeaf)); qaUserPrioritySpeaker->setEnabled(p & (ChanACL::Write | ChanACL::MuteDeafen)); qaUserTextMessage->setEnabled(p & (ChanACL::Write | ChanACL::TextMessage)); - qaUserInformation->setEnabled((g.pPermissions & (ChanACL::Write | ChanACL::Register)) + qaUserInformation->setEnabled((Global::get().pPermissions & (ChanACL::Write | ChanACL::Register)) || (p & (ChanACL::Write | ChanACL::Enter)) || (cu == user)); } else { qaUserMute->setEnabled(false); @@ -2548,14 +2545,14 @@ void MainWindow::updateMenuPermissions() { } void MainWindow::userStateChanged() { - if (g.s.bStateInTray) { + if (Global::get().s.bStateInTray) { updateTrayIcon(); } - ClientUser *user = ClientUser::get(g.uiSession); + ClientUser *user = ClientUser::get(Global::get().uiSession); if (!user) { - g.bAttenuateOthers = false; - g.prioritySpeakerActiveOverride = false; + Global::get().bAttenuateOthers = false; + Global::get().prioritySpeakerActiveOverride = false; return; } @@ -2564,62 +2561,62 @@ void MainWindow::userStateChanged() { case Settings::Talking: case Settings::Whispering: case Settings::Shouting: - g.bAttenuateOthers = g.s.bAttenuateOthersOnTalk; + Global::get().bAttenuateOthers = Global::get().s.bAttenuateOthersOnTalk; - g.prioritySpeakerActiveOverride = g.s.bAttenuateUsersOnPrioritySpeak && user->bPrioritySpeaker; + Global::get().prioritySpeakerActiveOverride = Global::get().s.bAttenuateUsersOnPrioritySpeak && user->bPrioritySpeaker; break; case Settings::Passive: case Settings::MutedTalking: default: - g.bAttenuateOthers = false; - g.prioritySpeakerActiveOverride = false; + Global::get().bAttenuateOthers = false; + Global::get().prioritySpeakerActiveOverride = false; break; } } void MainWindow::on_qaAudioReset_triggered() { - AudioInputPtr ai = g.ai; + AudioInputPtr ai = Global::get().ai; if (ai) ai->bResetProcessor = true; } void MainWindow::on_qaFilterToggle_triggered() { - g.s.bFilterActive = qaFilterToggle->isChecked(); + Global::get().s.bFilterActive = qaFilterToggle->isChecked(); updateUserModel(); } void MainWindow::on_qaAudioMute_triggered() { - if (g.bInAudioWizard) { + if (Global::get().bInAudioWizard) { qaAudioMute->setChecked(!qaAudioMute->isChecked()); return; } - AudioInputPtr ai = g.ai; + AudioInputPtr ai = Global::get().ai; if (ai) ai->tIdle.restart(); - g.s.bMute = qaAudioMute->isChecked(); + Global::get().s.bMute = qaAudioMute->isChecked(); - if (!g.s.bMute && g.s.bDeaf) { - g.s.bDeaf = false; + if (!Global::get().s.bMute && Global::get().s.bDeaf) { + Global::get().s.bDeaf = false; qaAudioDeaf->setChecked(false); - g.l->log(Log::SelfUndeaf, tr("Unmuted and undeafened.")); - } else if (!g.s.bMute) { - g.l->log(Log::SelfUnmute, tr("Unmuted.")); + Global::get().l->log(Log::SelfUndeaf, tr("Unmuted and undeafened.")); + } else if (!Global::get().s.bMute) { + Global::get().l->log(Log::SelfUnmute, tr("Unmuted.")); } else { - g.l->log(Log::SelfMute, tr("Muted.")); + Global::get().l->log(Log::SelfMute, tr("Muted.")); } - if (g.sh) { - g.sh->setSelfMuteDeafState(g.s.bMute, g.s.bDeaf); + if (Global::get().sh) { + Global::get().sh->setSelfMuteDeafState(Global::get().s.bMute, Global::get().s.bDeaf); } updateTrayIcon(); } void MainWindow::on_qaAudioDeaf_triggered() { - if (g.bInAudioWizard) { + if (Global::get().bInAudioWizard) { qaAudioDeaf->setChecked(!qaAudioDeaf->isChecked()); return; } @@ -2630,25 +2627,25 @@ void MainWindow::on_qaAudioDeaf_triggered() { on_qaAudioMute_triggered(); return; } - AudioInputPtr ai = g.ai; + AudioInputPtr ai = Global::get().ai; if (ai) ai->tIdle.restart(); - g.s.bDeaf = qaAudioDeaf->isChecked(); - if (g.s.bDeaf && !g.s.bMute) { + Global::get().s.bDeaf = qaAudioDeaf->isChecked(); + if (Global::get().s.bDeaf && !Global::get().s.bMute) { bAutoUnmute = true; - g.s.bMute = true; + Global::get().s.bMute = true; qaAudioMute->setChecked(true); - g.l->log(Log::SelfDeaf, tr("Muted and deafened.")); - } else if (g.s.bDeaf) { - g.l->log(Log::SelfDeaf, tr("Deafened.")); + Global::get().l->log(Log::SelfDeaf, tr("Muted and deafened.")); + } else if (Global::get().s.bDeaf) { + Global::get().l->log(Log::SelfDeaf, tr("Deafened.")); bAutoUnmute = false; } else { - g.l->log(Log::SelfUndeaf, tr("Undeafened.")); + Global::get().l->log(Log::SelfUndeaf, tr("Undeafened.")); } - if (g.sh) { - g.sh->setSelfMuteDeafState(g.s.bMute, g.s.bDeaf); + if (Global::get().sh) { + Global::get().sh->setSelfMuteDeafState(Global::get().s.bMute, Global::get().s.bDeaf); } updateTrayIcon(); @@ -2667,7 +2664,7 @@ void MainWindow::on_qaRecording_triggered() { } void MainWindow::on_qaAudioTTS_triggered() { - g.s.bTTS = qaAudioTTS->isChecked(); + Global::get().s.bTTS = qaAudioTTS->isChecked(); } void MainWindow::on_qaAudioStats_triggered() { @@ -2676,13 +2673,13 @@ void MainWindow::on_qaAudioStats_triggered() { } void MainWindow::on_qaAudioUnlink_triggered() { - g.p->bUnlink = true; + Global::get().p->bUnlink = true; } void MainWindow::on_qaConfigDialog_triggered() { ConfigDialog *dlg = new ConfigDialog(this); - QObject::connect(dlg, &ConfigDialog::settingsAccepted, g.talkingUI, &TalkingUI::on_settingsChanged); + QObject::connect(dlg, &ConfigDialog::settingsAccepted, Global::get().talkingUI, &TalkingUI::on_settingsChanged); if (dlg->exec() == QDialog::Accepted) { setupView(false); @@ -2690,8 +2687,8 @@ void MainWindow::on_qaConfigDialog_triggered() { updateTrayIcon(); updateUserModel(); - if (g.s.requireRestartToApply) { - if (g.s.requireRestartToApply + if (Global::get().s.requireRestartToApply) { + if (Global::get().s.requireRestartToApply && QMessageBox::question( this, tr("Restart Mumble?"), tr("Some settings will only apply after a restart of Mumble. Restart Mumble now?"), @@ -2709,13 +2706,13 @@ void MainWindow::on_qaConfigDialog_triggered() { } void MainWindow::on_qaConfigMinimal_triggered() { - g.s.bMinimalView = qaConfigMinimal->isChecked(); + Global::get().s.bMinimalView = qaConfigMinimal->isChecked(); updateWindowTitle(); setupView(); } void MainWindow::on_qaConfigHideFrame_triggered() { - g.s.bHideFrame = qaConfigHideFrame->isChecked(); + Global::get().s.bHideFrame = qaConfigHideFrame->isChecked(); setupView(false); } @@ -2732,7 +2729,7 @@ void MainWindow::on_qaAudioWizard_triggered() { } void MainWindow::on_qaDeveloperConsole_triggered() { - g.c->show(); + Global::get().c->show(); } void MainWindow::on_qaHelpWhatsThis_triggered() { @@ -2754,7 +2751,7 @@ void MainWindow::on_qaHelpVersionCheck_triggered() { void MainWindow::on_gsMuteSelf_down(QVariant v) { int val = v.toInt(); - if (((val > 0) && !g.s.bMute) || ((val < 0) && g.s.bMute) || (val == 0)) { + if (((val > 0) && !Global::get().s.bMute) || ((val < 0) && Global::get().s.bMute) || (val == 0)) { qaAudioMute->setChecked(!qaAudioMute->isChecked()); on_qaAudioMute_triggered(); } @@ -2762,56 +2759,56 @@ void MainWindow::on_gsMuteSelf_down(QVariant v) { void MainWindow::on_gsDeafSelf_down(QVariant v) { int val = v.toInt(); - if (((val > 0) && !g.s.bDeaf) || ((val < 0) && g.s.bDeaf) || (val == 0)) { + if (((val > 0) && !Global::get().s.bDeaf) || ((val < 0) && Global::get().s.bDeaf) || (val == 0)) { qaAudioDeaf->setChecked(!qaAudioDeaf->isChecked()); on_qaAudioDeaf_triggered(); } } void MainWindow::on_PushToTalk_triggered(bool down, QVariant) { - g.iPrevTarget = 0; + Global::get().iPrevTarget = 0; if (down) { - g.uiDoublePush = g.tDoublePush.restart(); - g.iPushToTalk++; - } else if (g.iPushToTalk > 0) { - QTimer::singleShot(static_cast< int >(g.s.pttHold), this, SLOT(pttReleased())); + Global::get().uiDoublePush = Global::get().tDoublePush.restart(); + Global::get().iPushToTalk++; + } else if (Global::get().iPushToTalk > 0) { + QTimer::singleShot(static_cast< int >(Global::get().s.pttHold), this, SLOT(pttReleased())); } } void MainWindow::pttReleased() { - if (g.iPushToTalk > 0) { - g.iPushToTalk--; + if (Global::get().iPushToTalk > 0) { + Global::get().iPushToTalk--; } } void MainWindow::on_PushToMute_triggered(bool down, QVariant) { - g.bPushToMute = down; + Global::get().bPushToMute = down; updateTrayIcon(); updateUserModel(); } void MainWindow::on_VolumeUp_triggered(bool down, QVariant) { if (down) { - float vol = g.s.fVolume + 0.1f; + float vol = Global::get().s.fVolume + 0.1f; if (vol > 2.0f) { vol = 2.0f; } - g.s.fVolume = vol; + Global::get().s.fVolume = vol; } } void MainWindow::on_VolumeDown_triggered(bool down, QVariant) { if (down) { - float vol = g.s.fVolume - 0.1f; + float vol = Global::get().s.fVolume - 0.1f; if (vol < 0.0f) { vol = 0.0f; } - g.s.fVolume = vol; + Global::get().s.fVolume = vol; } } Channel *MainWindow::mapChannel(int idx) const { - if (!g.uiSession) + if (!Global::get().uiSession) return nullptr; Channel *c = nullptr; @@ -2823,16 +2820,16 @@ Channel *MainWindow::mapChannel(int idx) const { break; case SHORTCUT_TARGET_PARENT: case SHORTCUT_TARGET_CURRENT: - c = ClientUser::get(g.uiSession)->cChannel; + c = ClientUser::get(Global::get().uiSession)->cChannel; if (idx == SHORTCUT_TARGET_PARENT) c = c->cParent; break; default: if (idx <= SHORTCUT_TARGET_PARENT_SUBCHANNEL) - c = pmModel->getSubChannel(ClientUser::get(g.uiSession)->cChannel->cParent, + c = pmModel->getSubChannel(ClientUser::get(Global::get().uiSession)->cChannel->cParent, SHORTCUT_TARGET_PARENT_SUBCHANNEL - idx); else - c = pmModel->getSubChannel(ClientUser::get(g.uiSession)->cChannel, + c = pmModel->getSubChannel(ClientUser::get(Global::get().uiSession)->cChannel, SHORTCUT_TARGET_SUBCHANNEL - idx); break; } @@ -2843,11 +2840,11 @@ Channel *MainWindow::mapChannel(int idx) const { } void MainWindow::updateTarget() { - g.iPrevTarget = g.iTarget; + Global::get().iPrevTarget = Global::get().iTarget; if (qmCurrentTargets.isEmpty()) { - g.bCenterPosition = false; - g.iTarget = 0; + Global::get().bCenterPosition = false; + Global::get().iTarget = 0; } else { bool center = false; QList< ShortcutTarget > ql; @@ -2896,7 +2893,7 @@ void MainWindow::updateTarget() { } } if (ql.isEmpty()) { - g.iTarget = -1; + Global::get().iTarget = -1; } else { ++iTargetCounter; @@ -2941,7 +2938,7 @@ void MainWindow::updateTarget() { t->set_group(u8(st.qsGroup)); } } - g.sh->sendMessage(mpvt); + Global::get().sh->sendMessage(mpvt); // Store a mapping of the list of ShortcutTargets and the used targetID qmTargets.insert(ql, idx); @@ -2966,7 +2963,7 @@ void MainWindow::updateTarget() { mpvt.Clear(); mpvt.set_id(oldidx); - g.sh->sendMessage(mpvt); + Global::get().sh->sendMessage(mpvt); break; } @@ -2982,8 +2979,8 @@ void MainWindow::updateTarget() { // be the one that has been assigned most recently. This trick turns qmTargetUse (or rather qm) into // something similar to a RingBuffer inside this method. qmTargetUse.insert(idx, iTargetCounter); - g.bCenterPosition = center; - g.iTarget = idx; + Global::get().bCenterPosition = center; + Global::get().iTarget = idx; } } } @@ -2996,7 +2993,7 @@ void MainWindow::on_gsWhisper_triggered(bool down, QVariant scdata) { if (!st.bUsers) { Channel *c = mapChannel(st.iChannel); if (c) { - g.sh->joinChannel(g.uiSession, c->iId); + Global::get().sh->joinChannel(Global::get().uiSession, c->iId); } return; } @@ -3004,13 +3001,13 @@ void MainWindow::on_gsWhisper_triggered(bool down, QVariant scdata) { if (gsLinkChannel->active()) { if (!st.bUsers) { - Channel *c = ClientUser::get(g.uiSession)->cChannel; + Channel *c = ClientUser::get(Global::get().uiSession)->cChannel; Channel *l = mapChannel(st.iChannel); if (l) { if (c->qsPermLinks.contains(l)) { - g.sh->removeChannelLink(c->iId, l->iId); + Global::get().sh->removeChannelLink(c->iId, l->iId); } else { - g.sh->addChannelLink(c->iId, l->iId); + Global::get().sh->addChannelLink(c->iId, l->iId); } } return; @@ -3020,11 +3017,11 @@ void MainWindow::on_gsWhisper_triggered(bool down, QVariant scdata) { addTarget(&st); updateTarget(); - g.iPushToTalk++; - } else if (g.iPushToTalk > 0) { + Global::get().iPushToTalk++; + } else if (Global::get().iPushToTalk > 0) { SignalCurry *fwd = new SignalCurry(scdata, true, this); connect(fwd, SIGNAL(called(QVariant)), SLOT(whisperReleased(QVariant))); - QTimer::singleShot(static_cast< int >(g.s.pttHold), fwd, SLOT(call())); + QTimer::singleShot(static_cast< int >(Global::get().s.pttHold), fwd, SLOT(call())); } } @@ -3053,18 +3050,18 @@ void MainWindow::on_gsCycleTransmitMode_triggered(bool down, QVariant) { if (down) { QString qsNewMode; - switch (g.s.atTransmit) { + switch (Global::get().s.atTransmit) { case Settings::Continuous: - g.s.atTransmit = Settings::VAD; - g.l->log(Log::Information, tr("Transmit Mode set to Voice Activity")); + Global::get().s.atTransmit = Settings::VAD; + Global::get().l->log(Log::Information, tr("Transmit Mode set to Voice Activity")); break; case Settings::VAD: - g.s.atTransmit = Settings::PushToTalk; - g.l->log(Log::Information, tr("Transmit Mode set to Push-to-Talk")); + Global::get().s.atTransmit = Settings::PushToTalk; + Global::get().l->log(Log::Information, tr("Transmit Mode set to Push-to-Talk")); break; case Settings::PushToTalk: - g.s.atTransmit = Settings::Continuous; - g.l->log(Log::Information, tr("Transmit Mode set to Continuous")); + Global::get().s.atTransmit = Settings::Continuous; + Global::get().l->log(Log::Information, tr("Transmit Mode set to Continuous")); break; } } @@ -3074,18 +3071,18 @@ void MainWindow::on_gsCycleTransmitMode_triggered(bool down, QVariant) { void MainWindow::on_gsToggleMainWindowVisibility_triggered(bool down, QVariant) { if (down) { - if (g.mw->isVisible()) { - g.mw->hide(); + if (Global::get().mw->isVisible()) { + Global::get().mw->hide(); } else { - g.mw->show(); + Global::get().mw->show(); } } } void MainWindow::on_gsTransmitModePushToTalk_triggered(bool down, QVariant) { if (down) { - g.s.atTransmit = Settings::PushToTalk; - g.l->log(Log::Information, tr("Transmit Mode set to Push-to-Talk")); + Global::get().s.atTransmit = Settings::PushToTalk; + Global::get().l->log(Log::Information, tr("Transmit Mode set to Push-to-Talk")); } updateTransmitModeComboBox(); @@ -3093,8 +3090,8 @@ void MainWindow::on_gsTransmitModePushToTalk_triggered(bool down, QVariant) { void MainWindow::on_gsTransmitModeContinuous_triggered(bool down, QVariant) { if (down) { - g.s.atTransmit = Settings::Continuous; - g.l->log(Log::Information, tr("Transmit Mode set to Continuous")); + Global::get().s.atTransmit = Settings::Continuous; + Global::get().l->log(Log::Information, tr("Transmit Mode set to Continuous")); } updateTransmitModeComboBox(); @@ -3102,15 +3099,15 @@ void MainWindow::on_gsTransmitModeContinuous_triggered(bool down, QVariant) { void MainWindow::on_gsTransmitModeVAD_triggered(bool down, QVariant) { if (down) { - g.s.atTransmit = Settings::VAD; - g.l->log(Log::Information, tr("Transmit Mode set to Voice Activity")); + Global::get().s.atTransmit = Settings::VAD; + Global::get().l->log(Log::Information, tr("Transmit Mode set to Voice Activity")); } updateTransmitModeComboBox(); } void MainWindow::on_gsSendTextMessage_triggered(bool down, QVariant scdata) { - if (!down || !g.sh || !g.sh->isRunning() || g.uiSession == 0) { + if (!down || !Global::get().sh || !Global::get().sh->isRunning() || Global::get().uiSession == 0) { return; } @@ -3119,9 +3116,9 @@ void MainWindow::on_gsSendTextMessage_triggered(bool down, QVariant scdata) { return; } - Channel *c = ClientUser::get(g.uiSession)->cChannel; - g.sh->sendChannelTextMessage(c->iId, qsText, false); - g.l->log(Log::TextMessage, tr("To %1: %2").arg(Log::formatChannel(c), qsText), + Channel *c = ClientUser::get(Global::get().uiSession)->cChannel; + Global::get().sh->sendChannelTextMessage(c->iId, qsText, false); + Global::get().l->log(Log::TextMessage, tr("To %1: %2").arg(Log::formatChannel(c), qsText), tr("Message to channel %1").arg(c->qsName), true); } @@ -3136,12 +3133,12 @@ void MainWindow::on_gsSendClipboardTextMessage_triggered(bool down, QVariant) { } void MainWindow::whisperReleased(QVariant scdata) { - if (g.iPushToTalk <= 0) + if (Global::get().iPushToTalk <= 0) return; ShortcutTarget st = scdata.value< ShortcutTarget >(); - g.iPushToTalk--; + Global::get().iPushToTalk--; removeTarget(&st); updateTarget(); @@ -3156,7 +3153,7 @@ void MainWindow::onResetAudio() } void MainWindow::viewCertificate(bool) { - ViewCert vc(g.sh->qscCert, this); + ViewCert vc(Global::get().sh->qscCert, this); vc.exec(); } @@ -3165,29 +3162,29 @@ void MainWindow::viewCertificate(bool) { * connection to the server is established but before the server Sync is complete. */ void MainWindow::serverConnected() { - g.uiSession = 0; - g.pPermissions = ChanACL::None; - g.iCodecAlpha = 0x8000000b; - g.bPreferAlpha = true; + Global::get().uiSession = 0; + Global::get().pPermissions = ChanACL::None; + Global::get().iCodecAlpha = 0x8000000b; + Global::get().bPreferAlpha = true; #ifdef USE_OPUS - g.bOpus = true; + Global::get().bOpus = true; #else - g.bOpus = false; + Global::get().bOpus = false; #endif - g.iCodecBeta = 0; + Global::get().iCodecBeta = 0; #ifdef Q_OS_MAC // Suppress AppNap while we're connected to a server. MUSuppressAppNap(true); #endif - g.l->clearIgnore(); - g.l->setIgnore(Log::UserJoin); - g.l->setIgnore(Log::OtherSelfMute); + Global::get().l->clearIgnore(); + Global::get().l->setIgnore(Log::UserJoin); + Global::get().l->setIgnore(Log::OtherSelfMute); QString host, uname, pw; unsigned short port; - g.sh->getConnectionInfo(host, port, uname, pw); - g.l->log(Log::ServerConnected, tr("Connected.")); + Global::get().sh->getConnectionInfo(host, port, uname, pw); + Global::get().l->log(Log::ServerConnected, tr("Connected.")); qaServerDisconnect->setEnabled(true); qaServerInformation->setEnabled(true); qaServerBanList->setEnabled(true); @@ -3199,13 +3196,13 @@ void MainWindow::serverConnected() { qtvUsers->setRowHidden(0, QModelIndex(), false); - g.bAllowHTML = true; - g.uiMessageLength = 5000; - g.uiImageLength = 131072; - g.uiMaxUsers = 0; + Global::get().bAllowHTML = true; + Global::get().uiMessageLength = 5000; + Global::get().uiImageLength = 131072; + Global::get().uiMaxUsers = 0; - if (g.s.bMute || g.s.bDeaf) { - g.sh->setSelfMuteDeafState(g.s.bMute, g.s.bDeaf); + if (Global::get().s.bMute || Global::get().s.bDeaf) { + Global::get().sh->setSelfMuteDeafState(Global::get().s.bMute, Global::get().s.bDeaf); } // Update QActions and menues @@ -3216,13 +3213,13 @@ void MainWindow::serverConnected() { on_qmConfig_aboutToShow(); #ifdef Q_OS_WIN - TaskList::addToRecentList(g.s.qsLastServer, uname, host, port); + TaskList::addToRecentList(Global::get().s.qsLastServer, uname, host, port); #endif } void MainWindow::serverDisconnected(QAbstractSocket::SocketError err, QString reason) { - if (g.sh->hasSynchronized()) { - // Note that the saving of the ChannelListeners has to be done, before resetting g.uiSession + if (Global::get().sh->hasSynchronized()) { + // Note that the saving of the ChannelListeners has to be done, before resetting Global::get().uiSession // Save ChannelListeners ChannelListener::saveToDB(); } @@ -3230,9 +3227,9 @@ void MainWindow::serverDisconnected(QAbstractSocket::SocketError err, QString re // clear ChannelListener ChannelListener::clear(); - g.uiSession = 0; - g.pPermissions = ChanACL::None; - g.bAttenuateOthers = false; + Global::get().uiSession = 0; + Global::get().pPermissions = ChanACL::None; + Global::get().bAttenuateOthers = false; qaServerDisconnect->setEnabled(false); qaServerInformation->setEnabled(false); qaServerBanList->setEnabled(false); @@ -3247,13 +3244,13 @@ void MainWindow::serverDisconnected(QAbstractSocket::SocketError err, QString re QString uname, pw, host; unsigned short port; - g.sh->getConnectionInfo(host, port, uname, pw); + Global::get().sh->getConnectionInfo(host, port, uname, pw); - if (g.sh->hasSynchronized()) { + if (Global::get().sh->hasSynchronized()) { // Only save server-specific shortcuts if the client and server have been synchronized before as only then // did the client actually load them from the DB. If we store them without having loaded them, we will // effectively clear the server-specific shortcuts for this server. - if (g.db->setShortcuts(g.sh->qbaDigest, g.s.qlShortcuts)) { + if (Global::get().db->setShortcuts(Global::get().sh->qbaDigest, Global::get().s.qlShortcuts)) { GlobalShortcutEngine::engine->bNeedRemap = true; } } @@ -3311,16 +3308,16 @@ void MainWindow::serverDisconnected(QAbstractSocket::SocketError err, QString re qmUser_aboutToShow(); on_qmConfig_aboutToShow(); - if (!g.sh->qlErrors.isEmpty()) { - foreach (QSslError e, g.sh->qlErrors) - g.l->log(Log::Warning, tr("SSL Verification failed: %1").arg(e.errorString().toHtmlEscaped())); - if (!g.sh->qscCert.isEmpty()) { - QSslCertificate c = g.sh->qscCert.at(0); + if (!Global::get().sh->qlErrors.isEmpty()) { + foreach (QSslError e, Global::get().sh->qlErrors) + Global::get().l->log(Log::Warning, tr("SSL Verification failed: %1").arg(e.errorString().toHtmlEscaped())); + if (!Global::get().sh->qscCert.isEmpty()) { + QSslCertificate c = Global::get().sh->qscCert.at(0); QString basereason; QString actual_digest = QString::fromLatin1(c.digest(QCryptographicHash::Sha1).toHex()); QString digests_section = tr("<li>Server certificate digest (SHA-1):\t%1</li>").arg(ViewCert::prettifyDigest(actual_digest)); - QString expected_digest = g.db->getDigest(host, port); + QString expected_digest = Global::get().db->getDigest(host, port); if (!expected_digest.isNull()) { basereason = tr("<b>WARNING:</b> The server presented a certificate that was different from the stored one."); @@ -3330,7 +3327,7 @@ void MainWindow::serverDisconnected(QAbstractSocket::SocketError err, QString re basereason = tr("Server presented a certificate which failed verification."); } QStringList qsl; - foreach (QSslError e, g.sh->qlErrors) + foreach (QSslError e, Global::get().sh->qlErrors) qsl << QString::fromLatin1("<li>%1</li>").arg(e.errorString().toHtmlEscaped()); QMessageBox qmb(QMessageBox::Warning, QLatin1String("Mumble"), @@ -3350,11 +3347,11 @@ void MainWindow::serverDisconnected(QAbstractSocket::SocketError err, QString re int res = qmb.exec(); if ((res == 0) && (qmb.clickedButton() == qp)) { - ViewCert vc(g.sh->qscCert, this); + ViewCert vc(Global::get().sh->qscCert, this); vc.exec(); continue; } else if (res == QMessageBox::Yes) { - g.db->setDigest(host, port, QString::fromLatin1(c.digest(QCryptographicHash::Sha1).toHex())); + Global::get().db->setDigest(host, port, QString::fromLatin1(c.digest(QCryptographicHash::Sha1).toHex())); qaServerDisconnect->setEnabled(true); on_Reconnect_timeout(); } @@ -3371,9 +3368,9 @@ void MainWindow::serverDisconnected(QAbstractSocket::SocketError err, QString re if (!reason.isEmpty()) { - g.l->log(Log::ServerDisconnected, tr("Server connection failed: %1.").arg(reason.toHtmlEscaped())); + Global::get().l->log(Log::ServerDisconnected, tr("Server connection failed: %1.").arg(reason.toHtmlEscaped())); } else { - g.l->log(Log::ServerDisconnected, tr("Disconnected from server.")); + Global::get().l->log(Log::ServerDisconnected, tr("Disconnected from server.")); } #if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) @@ -3415,12 +3412,12 @@ void MainWindow::serverDisconnected(QAbstractSocket::SocketError err, QString re break; } if (ok && matched) { - if (!g.s.bSuppressIdentity) - g.db->setPassword(host, port, uname, pw); + if (!Global::get().s.bSuppressIdentity) + Global::get().db->setPassword(host, port, uname, pw); qaServerDisconnect->setEnabled(true); - g.sh->setConnectionInfo(host, port, uname, pw); + Global::get().sh->setConnectionInfo(host, port, uname, pw); on_Reconnect_timeout(); - } else if (!matched && g.s.bReconnect && !reason.isEmpty()) { + } else if (!matched && Global::get().s.bReconnect && !reason.isEmpty()) { qaServerDisconnect->setEnabled(true); if (bRetryServer) { qtReconnect->start(); @@ -3433,12 +3430,12 @@ void MainWindow::serverDisconnected(QAbstractSocket::SocketError err, QString re void MainWindow::resolverError(QAbstractSocket::SocketError, QString reason) { if (!reason.isEmpty()) { - g.l->log(Log::ServerDisconnected, tr("Server connection failed: %1.").arg(reason.toHtmlEscaped())); + Global::get().l->log(Log::ServerDisconnected, tr("Server connection failed: %1.").arg(reason.toHtmlEscaped())); } else { - g.l->log(Log::ServerDisconnected, tr("Server connection failed.")); + Global::get().l->log(Log::ServerDisconnected, tr("Server connection failed.")); } - if (g.s.bReconnect) { + if (Global::get().s.bReconnect) { qaServerDisconnect->setEnabled(true); if (bRetryServer) { qtReconnect->start(); @@ -3504,14 +3501,14 @@ void MainWindow::on_Icon_activated(QSystemTrayIcon::ActivationReason reason) { } void MainWindow::on_qaTalkingUIToggle_triggered() { - if (!g.talkingUI) { + if (!Global::get().talkingUI) { qCritical("MainWindow: Attempting to show Talking UI before it has been created!"); return; } - g.talkingUI->setVisible(!g.talkingUI->isVisible()); + Global::get().talkingUI->setVisible(!Global::get().talkingUI->isVisible()); - g.s.bShowTalkingUI = g.talkingUI->isVisible(); + Global::get().s.bShowTalkingUI = Global::get().talkingUI->isVisible(); } /** @@ -3526,12 +3523,12 @@ void MainWindow::updateChatBar() { User *p = pmModel->getUser(qtvUsers->currentIndex()); Channel *c = pmModel->getChannel(qtvUsers->currentIndex()); - if (g.uiSession == 0) { + if (Global::get().uiSession == 0) { qteChat->setDefaultText(tr("<center>Not connected</center>"), true); - } else if (!g.s.bChatBarUseSelection || !p || p->uiSession == g.uiSession) { + } else if (!Global::get().s.bChatBarUseSelection || !p || p->uiSession == Global::get().uiSession) { // Channel tree target - if (!g.s.bChatBarUseSelection || !c) // If no channel selected fallback to current one - c = ClientUser::get(g.uiSession)->cChannel; + if (!Global::get().s.bChatBarUseSelection || !c) // If no channel selected fallback to current one + c = ClientUser::get(Global::get().uiSession)->cChannel; qteChat->setDefaultText( tr("<center>Type message to channel '%1' here</center>").arg(c->qsName.toHtmlEscaped())); @@ -3546,7 +3543,7 @@ void MainWindow::updateChatBar() { void MainWindow::customEvent(QEvent *evt) { if (evt->type() == MB_QEVENT) { MessageBoxEvent *mbe = static_cast< MessageBoxEvent * >(evt); - g.l->log(Log::Information, mbe->msg); + Global::get().l->log(Log::Information, mbe->msg); return; } else if (evt->type() == OU_QEVENT) { OpenURLEvent *oue = static_cast< OpenURLEvent * >(evt); @@ -3593,7 +3590,7 @@ void MainWindow::on_qteLog_anchorClicked(const QUrl &url) { // the user can't click on anything before they dismiss the overlay // by hitting their toggle hotkey), so let's disallow clicking links // when embedded into the overlay for now. - if (g.ocIntercept) + if (Global::get().ocIntercept) return; #endif if (url.scheme() != QLatin1String("file") && url.scheme() != QLatin1String("qrc") && !url.isRelative()) @@ -3626,7 +3623,7 @@ void MainWindow::context_triggered() { mpca.set_session(p->uiSession); if (c) mpca.set_channel_id(c->iId); - g.sh->sendMessage(mpca); + Global::get().sh->sendMessage(mpca); } /** @@ -3681,7 +3678,7 @@ QPair< QByteArray, QImage > MainWindow::openImageFile() { } void MainWindow::logChangeNotPermanent(const QString &actionName, ClientUser *const p) const { - g.l->log(Log::Warning, + Global::get().l->log(Log::Warning, QObject::tr( "\"%1\" could not be saved permanently and is lost on restart because %2 does not have a certificate.") .arg(actionName) diff --git a/src/mumble/ManualPlugin.cpp b/src/mumble/ManualPlugin.cpp index 4b90d05e1..ef1a4746d 100644 --- a/src/mumble/ManualPlugin.cpp +++ b/src/mumble/ManualPlugin.cpp @@ -16,9 +16,6 @@ #include <float.h> #include "../../plugins/mumble_plugin.h" - -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. #include "Global.h" static QPointer< Manual > mDlg = nullptr; @@ -85,7 +82,7 @@ Manual::Manual(QWidget *p) : QDialog(p) { my.context = defaultContext.toStdString(); my.identity = defaultIdentity.toStdWString(); - qsbSilentUserDisplaytime->setValue(g.s.manualPlugin_silentUserDisplaytime); + qsbSilentUserDisplaytime->setValue(Global::get().s.manualPlugin_silentUserDisplaytime); updateLoopRunning.store(false); } @@ -210,7 +207,7 @@ void Manual::on_buttonBox_clicked(QAbstractButton *button) { } void Manual::on_qsbSilentUserDisplaytime_valueChanged(int value) { - g.s.manualPlugin_silentUserDisplaytime = value; + Global::get().s.manualPlugin_silentUserDisplaytime = value; } void Manual::on_speakerPositionUpdate(QHash< unsigned int, Position2D > positions) { @@ -251,7 +248,7 @@ void Manual::on_speakerPositionUpdate(QHash< unsigned int, Position2D > position } else { // Remove the stale item speakerIt.remove(); - if (g.s.manualPlugin_silentUserDisplaytime == 0) { + if (Global::get().s.manualPlugin_silentUserDisplaytime == 0) { // Delete it immediately delete speakerItem; } else { @@ -296,14 +293,14 @@ void Manual::on_updateStaleSpeakers() { double elapsedTime = static_cast< std::chrono::duration< double > >(std::chrono::steady_clock::now() - entry.staleSince).count(); - if (elapsedTime >= g.s.manualPlugin_silentUserDisplaytime) { + if (elapsedTime >= Global::get().s.manualPlugin_silentUserDisplaytime) { // The item has been around long enough - remove it now staleIt.remove(); delete entry.staleItem; } else { // Let the item fade out - double opacity = (g.s.manualPlugin_silentUserDisplaytime - elapsedTime) - / static_cast< double >(g.s.manualPlugin_silentUserDisplaytime); + double opacity = (Global::get().s.manualPlugin_silentUserDisplaytime - elapsedTime) + / static_cast< double >(Global::get().s.manualPlugin_silentUserDisplaytime); entry.staleItem->setOpacity(opacity); } } diff --git a/src/mumble/Messages.cpp b/src/mumble/Messages.cpp index 49575849a..72fea881e 100644 --- a/src/mumble/Messages.cpp +++ b/src/mumble/Messages.cpp @@ -35,12 +35,10 @@ #include "VersionCheck.h" #include "ViewCert.h" #include "crypto/CryptState.h" -#include <QTextDocumentFragment> - -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. #include "Global.h" +#include <QTextDocumentFragment> + #define ACTOR_INIT \ ClientUser *pSrc = nullptr; \ if (msg.has_actor()) \ @@ -55,9 +53,9 @@ } #define SELF_INIT \ - ClientUser *pSelf = ClientUser::get(g.uiSession); \ + ClientUser *pSelf = ClientUser::get(Global::get().uiSession); \ if (!pSelf) { \ - qWarning("MainWindow: Received message outside of session (sid %d).", g.uiSession); \ + qWarning("MainWindow: Received message outside of session (sid %d).", Global::get().uiSession); \ return; \ } @@ -108,8 +106,8 @@ void MainWindow::msgReject(const MumbleProto::Reject &msg) { break; } - g.l->log(Log::ServerDisconnected, tr("Server connection rejected: %1.").arg(reason)); - g.l->setIgnore(Log::ServerDisconnected, 1); + Global::get().l->log(Log::ServerDisconnected, tr("Server connection rejected: %1.").arg(reason)); + Global::get().l->setIgnore(Log::ServerDisconnected, 1); } /// This message is being received when the server has authenticated the user and finished synchronizing the server @@ -121,20 +119,20 @@ void MainWindow::msgReject(const MumbleProto::Reject &msg) { void MainWindow::msgServerSync(const MumbleProto::ServerSync &msg) { const ClientUser *user = ClientUser::get(msg.session()); if (!user) { - g.l->log(Log::CriticalError, tr("Server sync protocol violation. No user profile received.")); - g.sh->disconnect(); + Global::get().l->log(Log::CriticalError, tr("Server sync protocol violation. No user profile received.")); + Global::get().sh->disconnect(); return; } - g.uiSession = msg.session(); + Global::get().uiSession = msg.session(); - g.sh->sendPing(); // Send initial ping to establish UDP connection + Global::get().sh->sendPing(); // Send initial ping to establish UDP connection - g.pPermissions = ChanACL::Permissions(static_cast< unsigned int >(msg.permissions())); - g.l->clearIgnore(); + Global::get().pPermissions = ChanACL::Permissions(static_cast< unsigned int >(msg.permissions())); + Global::get().l->clearIgnore(); if (msg.has_welcome_text()) { QString str = u8(msg.welcome_text()); if (!str.isEmpty()) { - g.l->log(Log::Information, tr("Welcome message: %1").arg(str)); + Global::get().l->log(Log::Information, tr("Welcome message: %1").arg(str)); } } pmModel->ensureSelfVisible(); @@ -157,15 +155,15 @@ void MainWindow::msgServerSync(const MumbleProto::ServerSync &msg) { QString host, uname, pw; unsigned short port; - g.sh->getConnectionInfo(host, port, uname, pw); + Global::get().sh->getConnectionInfo(host, port, uname, pw); - QList< Shortcut > sc = g.db->getShortcuts(g.sh->qbaDigest); + QList< Shortcut > sc = Global::get().db->getShortcuts(Global::get().sh->qbaDigest); if (!sc.isEmpty()) { for (int i = 0; i < sc.count(); ++i) { Shortcut &s = sc[i]; - s.iIndex = g.mw->gsWhisper->idx; + s.iIndex = Global::get().mw->gsWhisper->idx; } - g.s.qlShortcuts << sc; + Global::get().s.qlShortcuts << sc; GlobalShortcutEngine::engine->bNeedRemap = true; } @@ -187,11 +185,11 @@ void MainWindow::msgServerSync(const MumbleProto::ServerSync &msg) { updateTrayIcon(); // Set-up all ChannelListeners and their volume adjustments as before for this server - QList< int > localListeners = g.db->getChannelListeners(g.sh->qbaDigest); + QList< int > localListeners = Global::get().db->getChannelListeners(Global::get().sh->qbaDigest); if (!localListeners.isEmpty()) { ChannelListener::setInitialServerSyncDone(false); - g.sh->startListeningToChannels(localListeners); + Global::get().sh->startListeningToChannels(localListeners); } else { // If there are no listeners, then no synchronization is needed in the first place ChannelListener::setInitialServerSyncDone(true); @@ -205,7 +203,7 @@ void MainWindow::msgServerSync(const MumbleProto::ServerSync &msg) { // Therefore we block all signals while setting the volume adjustments. const QSignalBlocker blocker(ChannelListener::get()); - QHash< int, float > volumeMap = g.db->getChannelListenerLocalVolumeAdjustments(g.sh->qbaDigest); + QHash< int, float > volumeMap = Global::get().db->getChannelListenerLocalVolumeAdjustments(Global::get().sh->qbaDigest); QHashIterator< int, float > it(volumeMap); while (it.hasNext()) { it.next(); @@ -214,7 +212,7 @@ void MainWindow::msgServerSync(const MumbleProto::ServerSync &msg) { } - g.sh->setServerSynchronized(true); + Global::get().sh->setServerSynchronized(true); emit serverSynchronized(); } @@ -228,19 +226,19 @@ void MainWindow::msgServerConfig(const MumbleProto::ServerConfig &msg) { if (msg.has_welcome_text()) { QString str = u8(msg.welcome_text()); if (!str.isEmpty()) { - g.l->log(Log::Information, tr("Welcome message: %1").arg(str)); + Global::get().l->log(Log::Information, tr("Welcome message: %1").arg(str)); } } if (msg.has_max_bandwidth()) AudioInput::setMaxBandwidth(msg.max_bandwidth()); if (msg.has_allow_html()) - g.bAllowHTML = msg.allow_html(); + Global::get().bAllowHTML = msg.allow_html(); if (msg.has_message_length()) - g.uiMessageLength = msg.message_length(); + Global::get().uiMessageLength = msg.message_length(); if (msg.has_image_message_length()) - g.uiImageLength = msg.image_message_length(); + Global::get().uiImageLength = msg.image_message_length(); if (msg.has_max_users()) - g.uiMaxUsers = msg.max_users(); + Global::get().uiMaxUsers = msg.max_users(); } /// This message is being received when the server denied the permission to perform a requested action. This function @@ -259,90 +257,90 @@ void MainWindow::msgPermissionDenied(const MumbleProto::PermissionDenied &msg) { QString pname = ChanACL::permName(permission); if ((permission == ChanACL::Perm::Enter) && c->hasEnterRestrictions.load()) { - g.l->log( + Global::get().l->log( Log::PermissionDenied, tr("Unable to %1 into %2 - Adding the respective access (password) token might grant you access.") .arg(Log::msgColor(pname, Log::Privilege)) .arg(Log::formatChannel(c))); } else { if (pDst == pSelf) - g.l->log(Log::PermissionDenied, tr("You were denied %1 privileges in %2.") + Global::get().l->log(Log::PermissionDenied, tr("You were denied %1 privileges in %2.") .arg(Log::msgColor(pname, Log::Privilege)) .arg(Log::formatChannel(c))); else - g.l->log(Log::PermissionDenied, tr("%3 was denied %1 privileges in %2.") + Global::get().l->log(Log::PermissionDenied, tr("%3 was denied %1 privileges in %2.") .arg(Log::msgColor(pname, Log::Privilege)) .arg(Log::formatChannel(c)) .arg(Log::formatClientUser(pDst, Log::Target))); } } break; case MumbleProto::PermissionDenied_DenyType_SuperUser: { - g.l->log(Log::PermissionDenied, tr("Denied: Cannot modify SuperUser.")); + Global::get().l->log(Log::PermissionDenied, tr("Denied: Cannot modify SuperUser.")); } break; case MumbleProto::PermissionDenied_DenyType_ChannelName: { - g.l->log(Log::PermissionDenied, tr("Denied: Invalid channel name.")); + Global::get().l->log(Log::PermissionDenied, tr("Denied: Invalid channel name.")); } break; case MumbleProto::PermissionDenied_DenyType_TextTooLong: { - g.l->log(Log::PermissionDenied, tr("Denied: Text message too long.")); + Global::get().l->log(Log::PermissionDenied, tr("Denied: Text message too long.")); } break; case MumbleProto::PermissionDenied_DenyType_H9K: { - if (g.bHappyEaster) { - bool bold = g.s.bDeaf; - bool bold2 = g.s.bTTS; - g.s.bDeaf = false; - g.s.bTTS = true; - quint32 oflags = g.s.qmMessages.value(Log::PermissionDenied); - g.s.qmMessages[Log::PermissionDenied] = (oflags | Settings::LogTTS) & (~Settings::LogSoundfile); - g.l->log(Log::PermissionDenied, - QString::fromUtf8(g.ccHappyEaster + 39).arg(g.s.qsUsername.toHtmlEscaped())); - g.s.qmMessages[Log::PermissionDenied] = oflags; - g.s.bDeaf = bold; - g.s.bTTS = bold2; - g.mw->setWindowIcon(QIcon(QString::fromUtf8(g.ccHappyEaster))); - g.mw->setStyleSheet(QString::fromUtf8(g.ccHappyEaster + 82)); + if (Global::get().bHappyEaster) { + bool bold = Global::get().s.bDeaf; + bool bold2 = Global::get().s.bTTS; + Global::get().s.bDeaf = false; + Global::get().s.bTTS = true; + quint32 oflags = Global::get().s.qmMessages.value(Log::PermissionDenied); + Global::get().s.qmMessages[Log::PermissionDenied] = (oflags | Settings::LogTTS) & (~Settings::LogSoundfile); + Global::get().l->log(Log::PermissionDenied, + QString::fromUtf8(Global::get().ccHappyEaster + 39).arg(Global::get().s.qsUsername.toHtmlEscaped())); + Global::get().s.qmMessages[Log::PermissionDenied] = oflags; + Global::get().s.bDeaf = bold; + Global::get().s.bTTS = bold2; + Global::get().mw->setWindowIcon(QIcon(QString::fromUtf8(Global::get().ccHappyEaster))); + Global::get().mw->setStyleSheet(QString::fromUtf8(Global::get().ccHappyEaster + 82)); qWarning() << "Happy Easter"; } } break; case MumbleProto::PermissionDenied_DenyType_TemporaryChannel: { - g.l->log(Log::PermissionDenied, tr("Denied: Operation not permitted in temporary channel.")); + Global::get().l->log(Log::PermissionDenied, tr("Denied: Operation not permitted in temporary channel.")); } break; case MumbleProto::PermissionDenied_DenyType_MissingCertificate: { VICTIM_INIT; SELF_INIT; if (pDst == pSelf) - g.l->log(Log::PermissionDenied, tr("You need a certificate to perform this operation.")); + Global::get().l->log(Log::PermissionDenied, tr("You need a certificate to perform this operation.")); else - g.l->log(Log::PermissionDenied, + Global::get().l->log(Log::PermissionDenied, tr("%1 does not have a certificate.").arg(Log::formatClientUser(pDst, Log::Target))); } break; case MumbleProto::PermissionDenied_DenyType_UserName: { if (msg.has_name()) - g.l->log(Log::PermissionDenied, tr("Invalid username: %1.").arg(u8(msg.name()).toHtmlEscaped())); + Global::get().l->log(Log::PermissionDenied, tr("Invalid username: %1.").arg(u8(msg.name()).toHtmlEscaped())); else - g.l->log(Log::PermissionDenied, tr("Invalid username.")); + Global::get().l->log(Log::PermissionDenied, tr("Invalid username.")); } break; case MumbleProto::PermissionDenied_DenyType_ChannelFull: { - g.l->log(Log::PermissionDenied, tr("Channel is full.")); + Global::get().l->log(Log::PermissionDenied, tr("Channel is full.")); } break; case MumbleProto::PermissionDenied_DenyType_NestingLimit: { - g.l->log(Log::PermissionDenied, tr("Channel nesting limit reached.")); + Global::get().l->log(Log::PermissionDenied, tr("Channel nesting limit reached.")); } break; case MumbleProto::PermissionDenied_DenyType_ChannelCountLimit: { - g.l->log(Log::PermissionDenied, + Global::get().l->log(Log::PermissionDenied, tr("Channel count limit reached. Need to delete channels before creating new ones.")); } break; case MumbleProto::PermissionDenied_DenyType_ChannelListenerLimit: { - g.l->log(Log::PermissionDenied, tr("No more listeners allowed in this channel.")); + Global::get().l->log(Log::PermissionDenied, tr("No more listeners allowed in this channel.")); } break; case MumbleProto::PermissionDenied_DenyType_UserListenerLimit: { - g.l->log(Log::PermissionDenied, + Global::get().l->log(Log::PermissionDenied, tr("You are not allowed to listen to more channels than you currently are.")); } break; default: { if (msg.has_reason()) - g.l->log(Log::PermissionDenied, tr("Denied: %1.").arg(u8(msg.reason()).toHtmlEscaped())); + Global::get().l->log(Log::PermissionDenied, tr("Denied: %1.").arg(u8(msg.reason()).toHtmlEscaped())); else - g.l->log(Log::PermissionDenied, tr("Permission denied.")); + Global::get().l->log(Log::PermissionDenied, tr("Permission denied.")); } break; } } @@ -359,7 +357,7 @@ void MainWindow::msgUDPTunnel(const MumbleProto::UDPTunnel &) { /// @param msg The message object containing the respective information void MainWindow::msgUserState(const MumbleProto::UserState &msg) { ACTOR_INIT; - ClientUser *pSelf = ClientUser::get(g.uiSession); + ClientUser *pSelf = ClientUser::get(Global::get().uiSession); ClientUser *pDst = ClientUser::get(msg.session()); Channel *channel = nullptr; @@ -379,8 +377,8 @@ void MainWindow::msgUserState(const MumbleProto::UserState &msg) { pDst = pmModel->addUser(msg.session(), u8(msg.name())); - connect(pDst, &ClientUser::talkingStateChanged, g.talkingUI, &TalkingUI::on_talkingStateChanged); - connect(pDst, &ClientUser::muteDeafStateChanged, g.talkingUI, &TalkingUI::on_muteDeafStateChanged); + connect(pDst, &ClientUser::talkingStateChanged, Global::get().talkingUI, &TalkingUI::on_talkingStateChanged); + connect(pDst, &ClientUser::muteDeafStateChanged, Global::get().talkingUI, &TalkingUI::on_muteDeafStateChanged); if (channel) { pmModel->moveUser(pDst, channel); @@ -392,10 +390,10 @@ void MainWindow::msgUserState(const MumbleProto::UserState &msg) { if (pSelf) { if (pDst->cChannel == pSelf->cChannel) { - g.l->log(Log::ChannelJoinConnect, + Global::get().l->log(Log::ChannelJoinConnect, tr("%1 connected and entered channel.").arg(Log::formatClientUser(pDst, Log::Source))); } else { - g.l->log(Log::UserJoin, tr("%1 connected.").arg(Log::formatClientUser(pDst, Log::Source))); + Global::get().l->log(Log::UserJoin, tr("%1 connected.").arg(Log::formatClientUser(pDst, Log::Source))); } } } @@ -409,54 +407,54 @@ void MainWindow::msgUserState(const MumbleProto::UserState &msg) { if (channel != oldChannel) { pmModel->moveUser(pDst, channel); - if (g.talkingUI) { + if (Global::get().talkingUI) { // Pass the pointer as QObject in order to avoid having to register ClientUser as a QMetaType - QMetaObject::invokeMethod(g.talkingUI, "on_channelChanged", Qt::QueuedConnection, + QMetaObject::invokeMethod(Global::get().talkingUI, "on_channelChanged", Qt::QueuedConnection, Q_ARG(QObject *, pDst)); } if (pSelf) { if (pDst == pSelf) { - g.mw->updateChatBar(); + Global::get().mw->updateChatBar(); qsDesiredChannel = channel->getPath(); } if (pDst == pSelf) { if (pSrc == pSelf) { - g.l->log(Log::SelfChannelJoin, tr("You joined %1.").arg(Log::formatChannel(channel))); + Global::get().l->log(Log::SelfChannelJoin, tr("You joined %1.").arg(Log::formatChannel(channel))); } else { - g.l->log(Log::SelfChannelJoinOther, tr("You were moved to %1 by %2.") + Global::get().l->log(Log::SelfChannelJoinOther, tr("You were moved to %1 by %2.") .arg(Log::formatChannel(channel)) .arg(Log::formatClientUser(pSrc, Log::Source))); } } else if (pSrc == pSelf) { if (channel == pSelf->cChannel) { - g.l->log(Log::ChannelJoin, tr("You moved %1 to %2.") + Global::get().l->log(Log::ChannelJoin, tr("You moved %1 to %2.") .arg(Log::formatClientUser(pDst, Log::Target)) .arg(Log::formatChannel(channel))); } else { - g.l->log(Log::ChannelLeave, tr("You moved %1 to %2.") + Global::get().l->log(Log::ChannelLeave, tr("You moved %1 to %2.") .arg(Log::formatClientUser(pDst, Log::Target)) .arg(Log::formatChannel(channel))); } } else if ((channel == pSelf->cChannel) || (oldChannel == pSelf->cChannel)) { if (pDst == pSrc) { if (channel == pSelf->cChannel) { - g.l->log(Log::ChannelJoin, + Global::get().l->log(Log::ChannelJoin, tr("%1 entered channel.").arg(Log::formatClientUser(pDst, Log::Target))); } else { - g.l->log(Log::ChannelLeave, tr("%1 moved to %2.") + Global::get().l->log(Log::ChannelLeave, tr("%1 moved to %2.") .arg(Log::formatClientUser(pDst, Log::Target)) .arg(Log::formatChannel(channel))); } } else { if (channel == pSelf->cChannel) { - g.l->log(Log::ChannelJoin, tr("%1 moved in from %2 by %3.") + Global::get().l->log(Log::ChannelJoin, tr("%1 moved in from %2 by %3.") .arg(Log::formatClientUser(pDst, Log::Target)) .arg(Log::formatChannel(oldChannel)) .arg(Log::formatClientUser(pSrc, Log::Source))); } else { - g.l->log(Log::ChannelLeave, tr("%1 moved to %2 by %3.") + Global::get().l->log(Log::ChannelLeave, tr("%1 moved to %2 by %3.") .arg(Log::formatClientUser(pDst, Log::Target)) .arg(Log::formatChannel(channel)) .arg(Log::formatClientUser(pSrc, Log::Source))); @@ -465,7 +463,7 @@ void MainWindow::msgUserState(const MumbleProto::UserState &msg) { } if ((channel == pSelf->cChannel) && pDst->bRecording) { - g.l->log(Log::Recording, tr("%1 is recording").arg(Log::formatClientUser(pDst, Log::Target))); + Global::get().l->log(Log::Recording, tr("%1 is recording").arg(Log::formatClientUser(pDst, Log::Target))); } } } @@ -498,7 +496,7 @@ void MainWindow::msgUserState(const MumbleProto::UserState &msg) { } if (!logMsg.isEmpty()) { - g.l->log(Log::ChannelListeningAdd, logMsg); + Global::get().l->log(Log::ChannelListeningAdd, logMsg); } } for (int i = 0; i < msg.listening_channel_remove_size(); i++) { @@ -520,7 +518,7 @@ void MainWindow::msgUserState(const MumbleProto::UserState &msg) { } if (!logMsg.isEmpty()) { - g.l->log(Log::ChannelListeningRemove, logMsg); + Global::get().l->log(Log::ChannelListeningRemove, logMsg); } } @@ -530,12 +528,12 @@ void MainWindow::msgUserState(const MumbleProto::UserState &msg) { pmModel->renameUser(pDst, newName); if (!oldName.isNull() && oldName != newName) { if (pSrc != pDst) { - g.l->log(Log::UserRenamed, tr("%1 renamed to %2 by %3.") + Global::get().l->log(Log::UserRenamed, tr("%1 renamed to %2 by %3.") .arg(Log::formatClientUser(pDst, Log::Target, oldName)) .arg(Log::formatClientUser(pDst, Log::Target)) .arg(Log::formatClientUser(pSrc, Log::Source))); } else { - g.l->log(Log::UserRenamed, tr("%1 renamed to %2.") + Global::get().l->log(Log::UserRenamed, tr("%1 renamed to %2.") .arg(Log::formatClientUser(pDst, Log::Target, oldName), Log::formatClientUser(pDst, Log::Target))); } @@ -543,17 +541,17 @@ void MainWindow::msgUserState(const MumbleProto::UserState &msg) { } if (!pDst->qsHash.isEmpty()) { - const QString &name = g.db->getFriend(pDst->qsHash); + const QString &name = Global::get().db->getFriend(pDst->qsHash); if (!name.isEmpty()) pmModel->setFriendName(pDst, name); - if (g.db->isLocalMuted(pDst->qsHash)) + if (Global::get().db->isLocalMuted(pDst->qsHash)) pDst->setLocalMute(true); - if (g.db->isLocalIgnored(pDst->qsHash)) + if (Global::get().db->isLocalIgnored(pDst->qsHash)) pDst->setLocalIgnore(true); - if (g.db->isLocalIgnoredTTS(pDst->qsHash)) + if (Global::get().db->isLocalIgnoredTTS(pDst->qsHash)) pDst->setLocalIgnoreTTS(true); - pDst->setLocalVolumeAdjustment(g.db->getUserLocalVolume(pDst->qsHash)); - pDst->setLocalNickname(g.db->getUserLocalNickname(pDst->qsHash)); + pDst->setLocalVolumeAdjustment(Global::get().db->getUserLocalVolume(pDst->qsHash)); + pDst->setLocalNickname(Global::get().db->getUserLocalNickname(pDst->qsHash)); } if (msg.has_self_deaf() || msg.has_self_mute()) { @@ -565,12 +563,12 @@ void MainWindow::msgUserState(const MumbleProto::UserState &msg) { if (pSelf && pDst != pSelf && ((pDst->cChannel == pSelf->cChannel) || pDst->cChannel->allLinks().contains(pSelf->cChannel))) { if (pDst->bSelfMute && pDst->bSelfDeaf) - g.l->log(Log::OtherSelfMute, + Global::get().l->log(Log::OtherSelfMute, tr("%1 is now muted and deafened.").arg(Log::formatClientUser(pDst, Log::Target))); else if (pDst->bSelfMute) - g.l->log(Log::OtherSelfMute, tr("%1 is now muted.").arg(Log::formatClientUser(pDst, Log::Target))); + Global::get().l->log(Log::OtherSelfMute, tr("%1 is now muted.").arg(Log::formatClientUser(pDst, Log::Target))); else - g.l->log(Log::OtherSelfMute, tr("%1 is now unmuted.").arg(Log::formatClientUser(pDst, Log::Target))); + Global::get().l->log(Log::OtherSelfMute, tr("%1 is now unmuted.").arg(Log::formatClientUser(pDst, Log::Target))); } } @@ -581,15 +579,15 @@ void MainWindow::msgUserState(const MumbleProto::UserState &msg) { if (pSelf) { if (pDst == pSelf) { if (pDst->bRecording) { - g.l->log(Log::Recording, tr("Recording started")); + Global::get().l->log(Log::Recording, tr("Recording started")); } else { - g.l->log(Log::Recording, tr("Recording stopped")); + Global::get().l->log(Log::Recording, tr("Recording stopped")); } } else if (pDst->cChannel->allLinks().contains(pSelf->cChannel)) { if (pDst->bRecording) { - g.l->log(Log::Recording, tr("%1 started recording.").arg(Log::formatClientUser(pDst, Log::Source))); + Global::get().l->log(Log::Recording, tr("%1 started recording.").arg(Log::formatClientUser(pDst, Log::Source))); } else { - g.l->log(Log::Recording, tr("%1 stopped recording.").arg(Log::formatClientUser(pDst, Log::Source))); + Global::get().l->log(Log::Recording, tr("%1 stopped recording.").arg(Log::formatClientUser(pDst, Log::Source))); } } } @@ -601,44 +599,44 @@ void MainWindow::msgUserState(const MumbleProto::UserState &msg) { || (pSrc == pSelf))) { if ((pSrc == pDst) && (pSrc == pSelf)) { if (pDst->bPrioritySpeaker) { - g.l->log(Log::YouMuted, tr("You revoked your priority speaker status.")); + Global::get().l->log(Log::YouMuted, tr("You revoked your priority speaker status.")); } else { - g.l->log(Log::YouMuted, tr("You assumed priority speaker status.")); + Global::get().l->log(Log::YouMuted, tr("You assumed priority speaker status.")); } } else if ((pSrc != pSelf) && (pDst == pSelf)) { if (pDst->bPrioritySpeaker) { - g.l->log( + Global::get().l->log( Log::YouMutedOther, tr("%1 revoked your priority speaker status.").arg(Log::formatClientUser(pSrc, Log::Source))); } else { - g.l->log(Log::YouMutedOther, + Global::get().l->log(Log::YouMutedOther, tr("%1 gave you priority speaker status.").arg(Log::formatClientUser(pSrc, Log::Source))); } } else if ((pSrc == pSelf) && (pSrc != pDst)) { if (pDst->bPrioritySpeaker) { - g.l->log(Log::YouMutedOther, tr("You revoked priority speaker status for %1.") + Global::get().l->log(Log::YouMutedOther, tr("You revoked priority speaker status for %1.") .arg(Log::formatClientUser(pDst, Log::Target))); } else { - g.l->log( + Global::get().l->log( Log::YouMutedOther, tr("You gave priority speaker status to %1.").arg(Log::formatClientUser(pDst, Log::Target))); } } else if ((pSrc == pDst) && (pSrc != pSelf)) { if (pDst->bPrioritySpeaker) { - g.l->log( + Global::get().l->log( Log::OtherMutedOther, tr("%1 revoked own priority speaker status.").arg(Log::formatClientUser(pSrc, Log::Source))); } else { - g.l->log(Log::OtherMutedOther, + Global::get().l->log(Log::OtherMutedOther, tr("%1 assumed priority speaker status.").arg(Log::formatClientUser(pSrc, Log::Source))); } } else if ((pSrc != pSelf) && (pDst != pSelf)) { if (pDst->bPrioritySpeaker) { - g.l->log(Log::OtherMutedOther, tr("%1 revoked priority speaker status for %2.") + Global::get().l->log(Log::OtherMutedOther, tr("%1 revoked priority speaker status for %2.") .arg(Log::formatClientUser(pSrc, Log::Source), Log::formatClientUser(pDst, Log::Target))); } else if (!pDst->bPrioritySpeaker) { - g.l->log(Log::OtherMutedOther, tr("%1 gave priority speaker status to %2.") + Global::get().l->log(Log::OtherMutedOther, tr("%1 gave priority speaker status to %2.") .arg(Log::formatClientUser(pSrc, Log::Source), Log::formatClientUser(pDst, Log::Target))); } @@ -661,37 +659,37 @@ void MainWindow::msgUserState(const MumbleProto::UserState &msg) { || (pSrc == pSelf))) { if (pDst == pSelf) { if (msg.has_mute() && msg.has_deaf() && pDst->bMute && pDst->bDeaf) { - g.l->log(Log::YouMuted, + Global::get().l->log(Log::YouMuted, tr("You were muted and deafened by %1.").arg(Log::formatClientUser(pSrc, Log::Source))); } else if (msg.has_mute() && msg.has_deaf() && !pDst->bMute && !pDst->bDeaf) { - g.l->log( + Global::get().l->log( Log::YouMuted, tr("You were unmuted and undeafened by %1.").arg(Log::formatClientUser(pSrc, Log::Source))); } else { if (msg.has_mute()) { if (pDst->bMute) - g.l->log(Log::YouMuted, + Global::get().l->log(Log::YouMuted, tr("You were muted by %1.").arg(Log::formatClientUser(pSrc, Log::Source))); else - g.l->log(Log::YouMuted, + Global::get().l->log(Log::YouMuted, tr("You were unmuted by %1.").arg(Log::formatClientUser(pSrc, Log::Source))); } if (msg.has_deaf()) { if (!pDst->bDeaf) - g.l->log(Log::YouMuted, + Global::get().l->log(Log::YouMuted, tr("You were undeafened by %1.").arg(Log::formatClientUser(pSrc, Log::Source))); } } if (msg.has_suppress()) { if (pDst->bSuppress) - g.l->log(Log::YouMuted, tr("You were suppressed.")); + Global::get().l->log(Log::YouMuted, tr("You were suppressed.")); else { if (msg.has_channel_id()) - g.l->log(Log::YouMuted, tr("You were unsuppressed.")); + Global::get().l->log(Log::YouMuted, tr("You were unsuppressed.")); else - g.l->log(Log::YouMuted, + Global::get().l->log(Log::YouMuted, tr("You were unsuppressed by %1.").arg(Log::formatClientUser(pSrc, Log::Source))); } } @@ -699,24 +697,24 @@ void MainWindow::msgUserState(const MumbleProto::UserState &msg) { updateTrayIcon(); } else if (pSrc == pSelf) { if (msg.has_mute() && msg.has_deaf() && pDst->bMute && pDst->bDeaf) { - g.l->log(Log::YouMutedOther, + Global::get().l->log(Log::YouMutedOther, tr("You muted and deafened %1.").arg(Log::formatClientUser(pDst, Log::Target))); } else if (msg.has_mute() && msg.has_deaf() && !pDst->bMute && !pDst->bDeaf) { - g.l->log(Log::YouMutedOther, + Global::get().l->log(Log::YouMutedOther, tr("You unmuted and undeafened %1.").arg(Log::formatClientUser(pDst, Log::Target))); } else { if (msg.has_mute()) { if (pDst->bMute) - g.l->log(Log::YouMutedOther, + Global::get().l->log(Log::YouMutedOther, tr("You muted %1.").arg(Log::formatClientUser(pDst, Log::Target))); else - g.l->log(Log::YouMutedOther, + Global::get().l->log(Log::YouMutedOther, tr("You unmuted %1.").arg(Log::formatClientUser(pDst, Log::Target))); } if (msg.has_deaf()) { if (!pDst->bDeaf) - g.l->log(Log::YouMutedOther, + Global::get().l->log(Log::YouMutedOther, tr("You undeafened %1.").arg(Log::formatClientUser(pDst, Log::Target))); } } @@ -724,37 +722,37 @@ void MainWindow::msgUserState(const MumbleProto::UserState &msg) { if (msg.has_suppress()) { if (!msg.has_channel_id()) { if (pDst->bSuppress) - g.l->log(Log::YouMutedOther, + Global::get().l->log(Log::YouMutedOther, tr("You suppressed %1.").arg(Log::formatClientUser(pDst, Log::Target))); else - g.l->log(Log::YouMutedOther, + Global::get().l->log(Log::YouMutedOther, tr("You unsuppressed %1.").arg(Log::formatClientUser(pDst, Log::Target))); } } } else { if (msg.has_mute() && msg.has_deaf() && pDst->bMute && pDst->bDeaf) { - g.l->log(Log::OtherMutedOther, tr("%1 muted and deafened by %2.") + Global::get().l->log(Log::OtherMutedOther, tr("%1 muted and deafened by %2.") .arg(Log::formatClientUser(pDst, Log::Target), Log::formatClientUser(pSrc, Log::Source))); } else if (msg.has_mute() && msg.has_deaf() && !pDst->bMute && !pDst->bDeaf) { - g.l->log(Log::OtherMutedOther, tr("%1 unmuted and undeafened by %2.") + Global::get().l->log(Log::OtherMutedOther, tr("%1 unmuted and undeafened by %2.") .arg(Log::formatClientUser(pDst, Log::Target), Log::formatClientUser(pSrc, Log::Source))); } else { if (msg.has_mute()) { if (pDst->bMute) - g.l->log(Log::OtherMutedOther, tr("%1 muted by %2.") + Global::get().l->log(Log::OtherMutedOther, tr("%1 muted by %2.") .arg(Log::formatClientUser(pDst, Log::Target), Log::formatClientUser(pSrc, Log::Source))); else - g.l->log(Log::OtherMutedOther, tr("%1 unmuted by %2.") + Global::get().l->log(Log::OtherMutedOther, tr("%1 unmuted by %2.") .arg(Log::formatClientUser(pDst, Log::Target), Log::formatClientUser(pSrc, Log::Source))); } if (msg.has_deaf()) { if (!pDst->bDeaf) - g.l->log(Log::OtherMutedOther, tr("%1 undeafened by %2.") + Global::get().l->log(Log::OtherMutedOther, tr("%1 undeafened by %2.") .arg(Log::formatClientUser(pDst, Log::Target), Log::formatClientUser(pSrc, Log::Source))); } @@ -763,11 +761,11 @@ void MainWindow::msgUserState(const MumbleProto::UserState &msg) { if (msg.has_suppress()) { if (!msg.has_channel_id()) { if (pDst->bSuppress) - g.l->log(Log::OtherMutedOther, tr("%1 suppressed by %2.") + Global::get().l->log(Log::OtherMutedOther, tr("%1 suppressed by %2.") .arg(Log::formatClientUser(pDst, Log::Target), Log::formatClientUser(pSrc, Log::Source))); else - g.l->log(Log::OtherMutedOther, tr("%1 unsuppressed by %2.") + Global::get().l->log(Log::OtherMutedOther, tr("%1 unsuppressed by %2.") .arg(Log::formatClientUser(pDst, Log::Target), Log::formatClientUser(pSrc, Log::Source))); } @@ -780,7 +778,7 @@ void MainWindow::msgUserState(const MumbleProto::UserState &msg) { pDst->qbaTextureHash = blob(msg.texture_hash()); pDst->qbaTexture = QByteArray(); #ifdef USE_OVERLAY - g.o->verifyTexture(pDst); + Global::get().o->verifyTexture(pDst); #endif } if (msg.has_texture()) { @@ -789,10 +787,10 @@ void MainWindow::msgUserState(const MumbleProto::UserState &msg) { pDst->qbaTextureHash = QByteArray(); } else { pDst->qbaTextureHash = sha1(pDst->qbaTexture); - g.db->setBlob(pDst->qbaTextureHash, pDst->qbaTexture); + Global::get().db->setBlob(pDst->qbaTextureHash, pDst->qbaTexture); } #ifdef USE_OVERLAY - g.o->verifyTexture(pDst); + Global::get().o->verifyTexture(pDst); #endif } if (msg.has_comment_hash()) @@ -817,38 +815,38 @@ void MainWindow::msgUserRemove(const MumbleProto::UserRemove &msg) { if (pDst == pSelf) { bRetryServer = false; if (msg.ban()) - g.l->log(Log::YouKicked, tr("You were kicked and banned from the server by %1: %2.") + Global::get().l->log(Log::YouKicked, tr("You were kicked and banned from the server by %1: %2.") .arg(Log::formatClientUser(pSrc, Log::Source)) .arg(reason)); else - g.l->log(Log::YouKicked, tr("You were kicked from the server by %1: %2.") + Global::get().l->log(Log::YouKicked, tr("You were kicked from the server by %1: %2.") .arg(Log::formatClientUser(pSrc, Log::Source)) .arg(reason)); } else if (pSrc) { if (msg.ban()) - g.l->log((pSrc == pSelf) ? Log::YouKicked : Log::UserKicked, + Global::get().l->log((pSrc == pSelf) ? Log::YouKicked : Log::UserKicked, tr("%3 was kicked and banned from the server by %1: %2.") .arg(Log::formatClientUser(pSrc, Log::Source)) .arg(reason) .arg(Log::formatClientUser(pDst, Log::Target))); else - g.l->log((pSrc == pSelf) ? Log::YouKicked : Log::UserKicked, + Global::get().l->log((pSrc == pSelf) ? Log::YouKicked : Log::UserKicked, tr("%3 was kicked from the server by %1: %2.") .arg(Log::formatClientUser(pSrc, Log::Source)) .arg(reason) .arg(Log::formatClientUser(pDst, Log::Target))); } else { if (pDst->cChannel == pSelf->cChannel || pDst->cChannel->allLinks().contains(pSelf->cChannel)) { - g.l->log(Log::ChannelLeaveDisconnect, + Global::get().l->log(Log::ChannelLeaveDisconnect, tr("%1 left channel and disconnected.").arg(Log::formatClientUser(pDst, Log::Source))); } else { - g.l->log(Log::UserLeave, tr("%1 disconnected.").arg(Log::formatClientUser(pDst, Log::Source))); + Global::get().l->log(Log::UserLeave, tr("%1 disconnected.").arg(Log::formatClientUser(pDst, Log::Source))); } } if (pDst != pSelf) pmModel->removeUser(pDst); - QMetaObject::invokeMethod(g.talkingUI, "on_clientDisconnected", Qt::QueuedConnection, + QMetaObject::invokeMethod(Global::get().talkingUI, "on_clientDisconnected", Qt::QueuedConnection, Q_ARG(unsigned int, pDst->uiSession)); } @@ -870,9 +868,9 @@ void MainWindow::msgChannelState(const MumbleProto::ChannelState &msg) { c->bTemporary = msg.temporary(); p = nullptr; // No need to move it later - ServerHandlerPtr sh = g.sh; + ServerHandlerPtr sh = Global::get().sh; if (sh) - c->bFiltered = g.db->isChannelFiltered(sh->qbaDigest, c->iId); + c->bFiltered = Global::get().db->isChannelFiltered(sh->qbaDigest, c->iId); } else { qWarning("Server attempted state change on nonexistent channel"); @@ -965,14 +963,14 @@ void MainWindow::msgChannelRemove(const MumbleProto::ChannelRemove &msg) { Channel *c = Channel::get(msg.channel_id()); if (c && (c->iId != 0)) { if (c->bFiltered) { - ServerHandlerPtr sh = g.sh; + ServerHandlerPtr sh = Global::get().sh; if (sh) - g.db->setChannelFiltered(sh->qbaDigest, c->iId, false); + Global::get().db->setChannelFiltered(sh->qbaDigest, c->iId, false); c->bFiltered = false; } if (!pmModel->removeChannel(c, true)) { - g.l->log(Log::CriticalError, tr("Protocol violation. Server sent remove for occupied channel.")); - g.sh->disconnect(); + Global::get().l->log(Log::CriticalError, tr("Protocol violation. Server sent remove for occupied channel.")); + Global::get().sh->disconnect(); return; } } @@ -1005,20 +1003,20 @@ void MainWindow::msgTextMessage(const MumbleProto::TextMessage &msg) { // If NoScope or NoAuthor is selected generate a new string to pass to TTS const QString overrideTTS = [&]() { - if (!g.s.bTTSNoScope && !g.s.bTTSNoAuthor) { + if (!Global::get().s.bTTSNoScope && !Global::get().s.bTTSNoAuthor) { return QString(); } const QString plainMessage = QTextDocumentFragment::fromHtml(u8(msg.message())).toPlainText(); - if (g.s.bTTSNoScope && g.s.bTTSNoAuthor) { + if (Global::get().s.bTTSNoScope && Global::get().s.bTTSNoAuthor) { return plainMessage; } - const QString prefixTTS = g.s.bTTSNoScope ? plainName : target; + const QString prefixTTS = Global::get().s.bTTSNoScope ? plainName : target; return tr("%1: %2").arg(prefixTTS).arg(plainMessage); }(); const QString prefixMessage = target.isEmpty() ? name : tr("(%1) %2").arg(target).arg(name); - g.l->log(privateMessage ? Log::PrivateTextMessage : Log::TextMessage, + Global::get().l->log(privateMessage ? Log::PrivateTextMessage : Log::TextMessage, tr("%1: %2").arg(prefixMessage).arg(u8(msg.message())), tr("Message from %1").arg(plainName), false, overrideTTS, pSrc ? pSrc->bLocalIgnoreTTS : false); } @@ -1053,7 +1051,7 @@ void MainWindow::msgPing(const MumbleProto::Ping &) { } void MainWindow::msgCryptSetup(const MumbleProto::CryptSetup &msg) { - ConnectionPtr c = g.sh->cConnection; + ConnectionPtr c = Global::get().sh->cConnection; if (!c) return; if (msg.has_key() && msg.has_client_nonce() && msg.has_server_nonce()) { @@ -1074,7 +1072,7 @@ void MainWindow::msgCryptSetup(const MumbleProto::CryptSetup &msg) { } else { MumbleProto::CryptSetup mpcs; mpcs.set_client_nonce(c->csCrypt->getEncryptIV()); - g.sh->sendMessage(mpcs); + Global::get().sh->sendMessage(mpcs); } } @@ -1097,7 +1095,7 @@ void MainWindow::msgContextActionModify(const MumbleProto::ContextActionModify & if (msg.has_operation() && msg.operation() != MumbleProto::ContextActionModify_Operation_Add) return; - QAction *a = new QAction(u8(msg.text()), g.mw); + QAction *a = new QAction(u8(msg.text()), Global::get().mw); a->setData(u8(msg.action())); connect(a, SIGNAL(triggered()), this, SLOT(context_triggered())); unsigned int ctx = msg.context(); @@ -1144,13 +1142,13 @@ void MainWindow::removeContextAction(const MumbleProto::ContextActionModify &msg /// @param msg The message object with the respective information void MainWindow::msgVersion(const MumbleProto::Version &msg) { if (msg.has_version()) - g.sh->uiVersion = msg.version(); + Global::get().sh->uiVersion = msg.version(); if (msg.has_release()) - g.sh->qsRelease = u8(msg.release()); + Global::get().sh->qsRelease = u8(msg.release()); if (msg.has_os()) { - g.sh->qsOS = u8(msg.os()); + Global::get().sh->qsOS = u8(msg.os()); if (msg.has_os_version()) - g.sh->qsOSVersion = u8(msg.os_version()); + Global::get().sh->qsOSVersion = u8(msg.os_version()); } } @@ -1185,7 +1183,7 @@ void MainWindow::msgPermissionQuery(const MumbleProto::PermissionQuery &msg) { // We always need the permissions of the current focus channel if (current && current->iId != static_cast< int >(msg.channel_id())) { - g.sh->requestChannelPermissions(current->iId); + Global::get().sh->requestChannelPermissions(current->iId); current->uiPermissions = ChanACL::All; } @@ -1194,7 +1192,7 @@ void MainWindow::msgPermissionQuery(const MumbleProto::PermissionQuery &msg) { if (c) { c->uiPermissions = msg.permissions(); if (c->iId == 0) - g.pPermissions = static_cast< ChanACL::Permissions >(c->uiPermissions); + Global::get().pPermissions = static_cast< ChanACL::Permissions >(c->uiPermissions); if (c == current) { updateMenuPermissions(); } @@ -1212,41 +1210,41 @@ void MainWindow::msgCodecVersion(const MumbleProto::CodecVersion &msg) { #ifdef USE_OPUS static bool warnedOpus = false; - g.bOpus = msg.opus(); + Global::get().bOpus = msg.opus(); - if (!g.oCodec && !warnedOpus) { - g.l->log(Log::CriticalError, tr("Failed to load Opus, it will not be available for audio encoding/decoding.")); + if (!Global::get().oCodec && !warnedOpus) { + Global::get().l->log(Log::CriticalError, tr("Failed to load Opus, it will not be available for audio encoding/decoding.")); warnedOpus = true; } #endif // Workaround for broken 1.2.2 servers - if (g.sh && g.sh->uiVersion == 0x010202 && alpha != -1 && alpha == beta) { + if (Global::get().sh && Global::get().sh->uiVersion == 0x010202 && alpha != -1 && alpha == beta) { if (pref) - beta = g.iCodecBeta; + beta = Global::get().iCodecBeta; else - alpha = g.iCodecAlpha; + alpha = Global::get().iCodecAlpha; } - if ((alpha != -1) && (alpha != g.iCodecAlpha)) { - g.iCodecAlpha = alpha; - if (pref && !g.qmCodecs.contains(alpha)) + if ((alpha != -1) && (alpha != Global::get().iCodecAlpha)) { + Global::get().iCodecAlpha = alpha; + if (pref && !Global::get().qmCodecs.contains(alpha)) pref = !pref; } - if ((beta != -1) && (beta != g.iCodecBeta)) { - g.iCodecBeta = beta; - if (!pref && !g.qmCodecs.contains(beta)) + if ((beta != -1) && (beta != Global::get().iCodecBeta)) { + Global::get().iCodecBeta = beta; + if (!pref && !Global::get().qmCodecs.contains(beta)) pref = !pref; } - g.bPreferAlpha = pref; + Global::get().bPreferAlpha = pref; - int willuse = pref ? g.iCodecAlpha : g.iCodecBeta; + int willuse = pref ? Global::get().iCodecAlpha : Global::get().iCodecBeta; static bool warnedCELT = false; - if (!g.qmCodecs.contains(willuse)) { + if (!Global::get().qmCodecs.contains(willuse)) { if (!warnedCELT) { - g.l->log(Log::CriticalError, tr("Unable to find matching CELT codecs with other clients. You will not be " + Global::get().l->log(Log::CriticalError, tr("Unable to find matching CELT codecs with other clients. You will not be " "able to talk to all users.")); warnedCELT = true; } @@ -1264,7 +1262,7 @@ void MainWindow::msgUserStats(const MumbleProto::UserStats &msg) { ui->update(msg); } else { #ifdef USE_OVERLAY - ui = new UserInformation(msg, g.ocIntercept ? g.mw : nullptr); + ui = new UserInformation(msg, Global::get().ocIntercept ? Global::get().mw : nullptr); #else ui = new UserInformation(msg, nullptr); #endif @@ -1277,7 +1275,7 @@ void MainWindow::msgUserStats(const MumbleProto::UserStats &msg) { } /// This message is only ever sent by the client in order to request binary data that otherwise -/// wouldn't be included in the normal messages (e.g. big images). Thus this implementation does +/// wouldn't be included in the normal messages (e.Global::get(). big images). Thus this implementation does /// nothing. void MainWindow::msgRequestBlob(const MumbleProto::RequestBlob &) { } @@ -1288,19 +1286,19 @@ void MainWindow::msgRequestBlob(const MumbleProto::RequestBlob &) { /// @param msg The message object containing the suggestions void MainWindow::msgSuggestConfig(const MumbleProto::SuggestConfig &msg) { if (msg.has_version() && (msg.version() > MumbleVersion::getRaw())) { - g.l->log(Log::Warning, + Global::get().l->log(Log::Warning, tr("The server requests minimum client version %1").arg(MumbleVersion::toString(msg.version()))); } - if (msg.has_positional() && (msg.positional() != g.s.doPositionalAudio())) { + if (msg.has_positional() && (msg.positional() != Global::get().s.doPositionalAudio())) { if (msg.positional()) - g.l->log(Log::Warning, tr("The server requests positional audio be enabled.")); + Global::get().l->log(Log::Warning, tr("The server requests positional audio be enabled.")); else - g.l->log(Log::Warning, tr("The server requests positional audio be disabled.")); + Global::get().l->log(Log::Warning, tr("The server requests positional audio be disabled.")); } - if (msg.has_push_to_talk() && (msg.push_to_talk() != (g.s.atTransmit == Settings::PushToTalk))) { + if (msg.has_push_to_talk() && (msg.push_to_talk() != (Global::get().s.atTransmit == Settings::PushToTalk))) { if (msg.push_to_talk()) - g.l->log(Log::Warning, tr("The server requests Push-to-Talk be enabled.")); + Global::get().l->log(Log::Warning, tr("The server requests Push-to-Talk be enabled.")); else - g.l->log(Log::Warning, tr("The server requests Push-to-Talk be disabled.")); + Global::get().l->log(Log::Warning, tr("The server requests Push-to-Talk be disabled.")); } } diff --git a/src/mumble/MumbleApplication.cpp b/src/mumble/MumbleApplication.cpp index 005f2c124..eb78b40b3 100644 --- a/src/mumble/MumbleApplication.cpp +++ b/src/mumble/MumbleApplication.cpp @@ -8,6 +8,7 @@ #include "EnvUtils.h" #include "MainWindow.h" #include "GlobalShortcut.h" +#include "Global.h" #if defined(Q_OS_WIN) # include "GlobalShortcut_win.h" @@ -15,10 +16,6 @@ #include <QtGui/QFileOpenEvent> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - MumbleApplication *MumbleApplication::instance() { return static_cast< MumbleApplication * >(QCoreApplication::instance()); } @@ -38,9 +35,9 @@ QString MumbleApplication::applicationVersionRootPath() { void MumbleApplication::onCommitDataRequest(QSessionManager &) { // Make sure the config is saved and supress the ask on quit message - if (g.mw) { - g.s.save(); - g.mw->bSuppressAskOnQuit = true; + if (Global::get().mw) { + Global::get().s.save(); + Global::get().mw->bSuppressAskOnQuit = true; qWarning() << "Session likely ending. Suppressing ask on quit"; } } @@ -48,10 +45,10 @@ void MumbleApplication::onCommitDataRequest(QSessionManager &) { bool MumbleApplication::event(QEvent *e) { if (e->type() == QEvent::FileOpen) { QFileOpenEvent *foe = static_cast< QFileOpenEvent * >(e); - if (!g.mw) { + if (!Global::get().mw) { this->quLaunchURL = foe->url(); } else { - g.mw->openUrl(foe->url()); + Global::get().mw->openUrl(foe->url()); } return true; } diff --git a/src/mumble/NetworkConfig.cpp b/src/mumble/NetworkConfig.cpp index d5bc0feb3..59b8fbf9a 100644 --- a/src/mumble/NetworkConfig.cpp +++ b/src/mumble/NetworkConfig.cpp @@ -7,6 +7,7 @@ #include "MainWindow.h" #include "OSInfo.h" +#include "Global.h" #include <QSignalBlocker> #include <QtNetwork/QHostAddress> @@ -17,10 +18,6 @@ # include <QMessageBox> #endif -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - const QString NetworkConfig::name = QLatin1String("NetworkConfig"); static ConfigWidget *NetworkConfigNew(Settings &st) { @@ -114,11 +111,11 @@ static QNetworkProxy::ProxyType local_to_qt_proxy(Settings::ProxyType pt) { void NetworkConfig::SetupProxy() { QNetworkProxy proxy; - proxy.setType(local_to_qt_proxy(g.s.ptProxyType)); - proxy.setHostName(g.s.qsProxyHost); - proxy.setPort(g.s.usProxyPort); - proxy.setUser(g.s.qsProxyUsername); - proxy.setPassword(g.s.qsProxyPassword); + proxy.setType(local_to_qt_proxy(Global::get().s.ptProxyType)); + proxy.setHostName(Global::get().s.qsProxyHost); + proxy.setPort(Global::get().s.usProxyPort); + proxy.setUser(Global::get().s.qsProxyUsername); + proxy.setPassword(Global::get().s.qsProxyPassword); QNetworkProxy::setApplicationProxy(proxy); } @@ -138,7 +135,7 @@ bool NetworkConfig::TcpModeEnabled() { * itself already is a potential latency killer. */ - return g.s.ptProxyType != Settings::NoProxy || g.s.bTCPCompat; + return Global::get().s.ptProxyType != Settings::NoProxy || Global::get().s.bTCPCompat; } void NetworkConfig::accept() const { @@ -181,14 +178,14 @@ void NetworkConfig::on_qcbAutoUpdate_stateChanged(int state) { QNetworkReply *Network::get(const QUrl &url) { QNetworkRequest req(url); prepareRequest(req); - return g.nam->get(req); + return Global::get().nam->get(req); } void Network::prepareRequest(QNetworkRequest &req) { req.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true); // Do not send OS information if the corresponding privacy setting is enabled - if (g.s.bHideOS) { + if (Global::get().s.bHideOS) { req.setRawHeader(QString::fromLatin1("User-Agent").toUtf8(), QString::fromLatin1("Mozilla/5.0 Mumble/%1 %2") .arg(QLatin1String(MUMTEXT(MUMBLE_VERSION)), QLatin1String(MUMBLE_RELEASE)) diff --git a/src/mumble/OSS.cpp b/src/mumble/OSS.cpp index ac86950ff..ac37a3d33 100644 --- a/src/mumble/OSS.cpp +++ b/src/mumble/OSS.cpp @@ -12,9 +12,6 @@ #include "MainWindow.h" #include "User.h" - -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. #include "Global.h" #define NBLOCKS 8 @@ -74,9 +71,9 @@ const QList< audioDevice > OSSInputRegistrar::getDeviceChoices() { QStringList qlInputDevs = cards->qhInput.keys(); std::sort(qlInputDevs.begin(), qlInputDevs.end()); - if (qlInputDevs.contains(g.s.qsOSSInput)) { - qlInputDevs.removeAll(g.s.qsOSSInput); - qlInputDevs.prepend(g.s.qsOSSInput); + if (qlInputDevs.contains(Global::get().s.qsOSSInput)) { + qlInputDevs.removeAll(Global::get().s.qsOSSInput); + qlInputDevs.prepend(Global::get().s.qsOSSInput); } foreach (const QString &dev, qlInputDevs) { qlReturn << audioDevice(cards->qhInput.value(dev), dev); } @@ -105,9 +102,9 @@ const QList< audioDevice > OSSOutputRegistrar::getDeviceChoices() { QStringList qlOutputDevs = cards->qhOutput.keys(); std::sort(qlOutputDevs.begin(), qlOutputDevs.end()); - if (qlOutputDevs.contains(g.s.qsOSSOutput)) { - qlOutputDevs.removeAll(g.s.qsOSSOutput); - qlOutputDevs.prepend(g.s.qsOSSOutput); + if (qlOutputDevs.contains(Global::get().s.qsOSSOutput)) { + qlOutputDevs.removeAll(Global::get().s.qsOSSOutput); + qlOutputDevs.prepend(Global::get().s.qsOSSOutput); } foreach (const QString &dev, qlOutputDevs) { qlReturn << audioDevice(cards->qhOutput.value(dev), dev); } @@ -175,7 +172,7 @@ OSSInput::~OSSInput() { } void OSSInput::run() { - QByteArray device = cards->qhDevices.value(g.s.qsOSSInput).toLatin1(); + QByteArray device = cards->qhDevices.value(Global::get().s.qsOSSInput).toLatin1(); if (device.isEmpty()) { qWarning("OSSInput: Stored device not found, falling back to default"); device = cards->qhDevices.value(QString()).toLatin1(); @@ -249,7 +246,7 @@ OSSOutput::~OSSOutput() { } void OSSOutput::run() { - QByteArray device = cards->qhDevices.value(g.s.qsOSSOutput).toLatin1(); + QByteArray device = cards->qhDevices.value(Global::get().s.qsOSSOutput).toLatin1(); if (device.isEmpty()) { qWarning("OSSOutput: Stored device not found, falling back to default"); device = cards->qhDevices.value(QString()).toLatin1(); @@ -263,7 +260,7 @@ void OSSOutput::run() { int ival; - ival = (g.s.iOutputDelay + 1) << 16 | 11; + ival = (Global::get().s.iOutputDelay + 1) << 16 | 11; if (ioctl(fd, SNDCTL_DSP_SETFRAGMENT, &ival) == -1) { qWarning("OSSOutput: Failed to set fragment"); diff --git a/src/mumble/Overlay.cpp b/src/mumble/Overlay.cpp index 6782ba949..30e928c08 100644 --- a/src/mumble/Overlay.cpp +++ b/src/mumble/Overlay.cpp @@ -18,6 +18,7 @@ #include "Utils.h" #include "WebFetch.h" #include "GlobalShortcut.h" +#include "Global.h" #include <QtCore/QProcessEnvironment> #include <QtCore/QtEndian> @@ -36,10 +37,6 @@ # include <CoreFoundation/CoreFoundation.h> #endif -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - QString OverlayAppInfo::applicationIdentifierForPath(const QString &path) { #ifdef Q_OS_MAC QString qsIdentifier; @@ -312,8 +309,8 @@ bool Overlay::isActive() const { } void Overlay::toggleShow() { - if (g.ocIntercept) { - g.ocIntercept->hideGui(); + if (Global::get().ocIntercept) { + Global::get().ocIntercept->hideGui(); } else { foreach (OverlayClient *oc, qlClients) { if (oc->uiPid) { @@ -348,11 +345,11 @@ void Overlay::forceSettings() { void Overlay::verifyTexture(ClientUser *cp, bool allowupdate) { qsQueried.remove(cp->uiSession); - ClientUser *self = ClientUser::get(g.uiSession); + ClientUser *self = ClientUser::get(Global::get().uiSession); allowupdate = allowupdate && self && self->cChannel->isLinked(cp->cChannel); if (allowupdate && !cp->qbaTextureHash.isEmpty() && cp->qbaTexture.isEmpty()) - cp->qbaTexture = g.db->blob(cp->qbaTextureHash); + cp->qbaTexture = Global::get().db->blob(cp->qbaTextureHash); if (!cp->qbaTexture.isEmpty()) { bool valid = true; @@ -458,7 +455,7 @@ void Overlay::verifyTexture(ClientUser *cp, bool allowupdate) { typedef QPair< QString, quint32 > qpChanCol; void Overlay::updateOverlay() { - if (!g.uiSession) + if (!Global::get().uiSession) qsQueried.clear(); if (qlClients.isEmpty()) @@ -481,13 +478,13 @@ void Overlay::updateOverlay() { qsQueried.insert(session); mprb.add_session_texture(session); } - g.sh->sendMessage(mprb); + Global::get().sh->sendMessage(mprb); } } void Overlay::requestTexture(ClientUser *cu) { if (cu->qbaTexture.isEmpty() && !qsQueried.contains(cu->uiSession)) { - cu->qbaTexture = g.db->blob(cu->qbaTextureHash); + cu->qbaTexture = Global::get().db->blob(cu->qbaTextureHash); if (cu->qbaTexture.isEmpty()) qsQuery.insert(cu->uiSession); else diff --git a/src/mumble/OverlayClient.cpp b/src/mumble/OverlayClient.cpp index 7e3cdfc78..24b229b95 100644 --- a/src/mumble/OverlayClient.cpp +++ b/src/mumble/OverlayClient.cpp @@ -17,6 +17,7 @@ #include "User.h" #include "Utils.h" #include "GlobalShortcut.h" +#include "Global.h" #ifdef Q_OS_WIN # include <QtGui/QBitmap> @@ -29,12 +30,8 @@ # include <psapi.h> #endif -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - OverlayClient::OverlayClient(QLocalSocket *socket, QObject *p) - : QObject(p), framesPerSecond(0), ougUsers(&g.s.os), iMouseX(0), iMouseY(0) { + : QObject(p), framesPerSecond(0), ougUsers(&Global::get().s.os), iMouseX(0), iMouseY(0) { qlsSocket = socket; qlsSocket->setParent(nullptr); connect(qlsSocket, SIGNAL(readyRead()), this, SLOT(readyRead())); @@ -63,15 +60,15 @@ OverlayClient::OverlayClient(QLocalSocket *socket, QObject *p) qgs.addItem(&ougUsers); ougUsers.show(); - qgpiFPS.reset(new OverlayPositionableItem(&g.s.os.qrfFps)); + qgpiFPS.reset(new OverlayPositionableItem(&Global::get().s.os.qrfFps)); qgs.addItem(qgpiFPS.data()); - qgpiFPS->setPos(g.s.os.qrfFps.x(), g.s.os.qrfFps.y()); + qgpiFPS->setPos(Global::get().s.os.qrfFps.x(), Global::get().s.os.qrfFps.y()); qgpiFPS->show(); // Time - qgpiTime.reset(new OverlayPositionableItem(&g.s.os.qrfTime)); + qgpiTime.reset(new OverlayPositionableItem(&Global::get().s.os.qrfTime)); qgs.addItem(qgpiTime.data()); - qgpiTime->setPos(g.s.os.qrfTime.x(), g.s.os.qrfTime.y()); + qgpiTime->setPos(Global::get().s.os.qrfTime.x(), Global::get().s.os.qrfTime.y()); qgpiTime->show(); iOffsetX = iOffsetY = 0; @@ -100,10 +97,10 @@ bool OverlayClient::eventFilter(QObject *o, QEvent *e) { } void OverlayClient::updateFPS() { - if (g.s.os.bFps) { + if (Global::get().s.os.bFps) { const BasepointPixmap &pm = - OverlayTextLine(QString(QLatin1String("%1")).arg(iroundf(framesPerSecond + 0.5f)), g.s.os.qfFps) - .createPixmap(g.s.os.qcFps); + OverlayTextLine(QString(QLatin1String("%1")).arg(iroundf(framesPerSecond + 0.5f)), Global::get().s.os.qfFps) + .createPixmap(Global::get().s.os.qcFps); qgpiFPS->setVisible(true); qgpiFPS->setPixmap(pm); // offset to use basepoint @@ -116,10 +113,10 @@ void OverlayClient::updateFPS() { } void OverlayClient::updateTime() { - if (g.s.os.bTime) { + if (Global::get().s.os.bTime) { const BasepointPixmap &pm = - OverlayTextLine(QString(QLatin1String("%1")).arg(QTime::currentTime().toString()), g.s.os.qfFps) - .createPixmap(g.s.os.qcFps); + OverlayTextLine(QString(QLatin1String("%1")).arg(QTime::currentTime().toString()), Global::get().s.os.qfFps) + .createPixmap(Global::get().s.os.qcFps); qgpiTime->setVisible(true); qgpiTime->setPixmap(pm); qgpiTime->setOffset(-pm.qpBasePoint + QPoint(0, pm.iAscent)); @@ -195,7 +192,7 @@ void OverlayClient::showGui() { { QWidgetList widgets = qApp->topLevelWidgets(); foreach (QWidget *w, widgets) { - if (w->isHidden() && (w != g.mw)) + if (w->isHidden() && (w != Global::get().mw)) continue; count++; } @@ -204,34 +201,34 @@ void OverlayClient::showGui() { if (count > 1) return; - g.ocIntercept = this; + Global::get().ocIntercept = this; - bWasVisible = !g.mw->isHidden(); + bWasVisible = !Global::get().mw->isHidden(); if (bWasVisible) { - if (g.s.bMinimalView) { - g.s.qbaMinimalViewGeometry = g.mw->saveGeometry(); - g.s.qbaMinimalViewState = g.mw->saveState(); + if (Global::get().s.bMinimalView) { + Global::get().s.qbaMinimalViewGeometry = Global::get().mw->saveGeometry(); + Global::get().s.qbaMinimalViewState = Global::get().mw->saveState(); } else { - g.s.qbaMainWindowGeometry = g.mw->saveGeometry(); - g.s.qbaMainWindowState = g.mw->saveState(); - g.s.qbaHeaderState = g.mw->qtvUsers->header()->saveState(); + Global::get().s.qbaMainWindowGeometry = Global::get().mw->saveGeometry(); + Global::get().s.qbaMainWindowState = Global::get().mw->saveState(); + Global::get().s.qbaHeaderState = Global::get().mw->qtvUsers->header()->saveState(); } } { outer: QWidgetList widgets = qApp->topLevelWidgets(); - widgets.removeAll(g.mw); - widgets.prepend(g.mw); + widgets.removeAll(Global::get().mw); + widgets.prepend(Global::get().mw); foreach (QWidget *w, widgets) { if (!w->graphicsProxyWidget()) { - if ((w == g.mw) || (!w->isHidden())) { + if ((w == Global::get().mw) || (!w->isHidden())) { QGraphicsProxyWidget *qgpw = new QGraphicsProxyWidget(nullptr, Qt::Window); qgpw->setOpacity(0.90f); qgpw->setWidget(w); - if (w == g.mw) { + if (w == Global::get().mw) { qgpw->setPos(uiWidth / 10, uiHeight / 10); qgpw->resize((uiWidth * 8) / 10, (uiHeight * 8) / 10); } @@ -256,9 +253,9 @@ void OverlayClient::showGui() { qgs.setFocus(); #ifndef Q_OS_MAC - g.mw->qteChat->activateWindow(); + Global::get().mw->qteChat->activateWindow(); #endif - g.mw->qteChat->setFocus(); + Global::get().mw->qteChat->setFocus(); qgv.setAttribute(Qt::WA_WState_Hidden, false); qApp->setActiveWindow(&qgv); @@ -268,9 +265,9 @@ void OverlayClient::showGui() { #ifdef Q_OS_MAC qApp->setAttribute(Qt::AA_DontUseNativeMenuBar); - g.mw->setUnifiedTitleAndToolBarOnMac(false); - if (!g.s.os.qsStyle.isEmpty()) - qApp->setStyle(g.s.os.qsStyle); + Global::get().mw->setUnifiedTitleAndToolBarOnMac(false); + if (!Global::get().s.os.qsStyle.isEmpty()) + qApp->setStyle(Global::get().s.os.qsStyle); #endif setupScene(true); @@ -282,7 +279,7 @@ void OverlayClient::showGui() { om.omin.state = true; qlsSocket->write(om.headerbuffer, sizeof(OverlayMsgHeader) + om.omh.iLength); - g.o->updateOverlay(); + Global::get().o->updateOverlay(); } void OverlayClient::hideGui() { @@ -309,8 +306,8 @@ void OverlayClient::hideGui() { } } - if (g.ocIntercept == this) - g.ocIntercept = nullptr; + if (Global::get().ocIntercept == this) + Global::get().ocIntercept = nullptr; foreach (QWidget *w, widgetlist) { if (bWasVisible) @@ -318,18 +315,18 @@ void OverlayClient::hideGui() { } if (bWasVisible) { - if (g.s.bMinimalView && !g.s.qbaMinimalViewGeometry.isNull()) { - g.mw->restoreGeometry(g.s.qbaMinimalViewGeometry); - g.mw->restoreState(g.s.qbaMinimalViewState); - } else if (!g.s.bMinimalView && !g.s.qbaMainWindowGeometry.isNull()) { - g.mw->restoreGeometry(g.s.qbaMainWindowGeometry); - g.mw->restoreState(g.s.qbaMainWindowState); + if (Global::get().s.bMinimalView && !Global::get().s.qbaMinimalViewGeometry.isNull()) { + Global::get().mw->restoreGeometry(Global::get().s.qbaMinimalViewGeometry); + Global::get().mw->restoreState(Global::get().s.qbaMinimalViewState); + } else if (!Global::get().s.bMinimalView && !Global::get().s.qbaMainWindowGeometry.isNull()) { + Global::get().mw->restoreGeometry(Global::get().s.qbaMainWindowGeometry); + Global::get().mw->restoreState(Global::get().s.qbaMainWindowState); } } #ifdef Q_OS_MAC qApp->setAttribute(Qt::AA_DontUseNativeMenuBar, false); - g.mw->setUnifiedTitleAndToolBarOnMac(true); + Global::get().mw->setUnifiedTitleAndToolBarOnMac(true); Themes::apply(); #endif @@ -344,7 +341,7 @@ void OverlayClient::hideGui() { om.omin.state = false; qlsSocket->write(om.headerbuffer, sizeof(OverlayMsgHeader) + om.omh.iLength); - g.o->updateOverlay(); + Global::get().o->updateOverlay(); if (bDelete) deleteLater(); @@ -474,7 +471,7 @@ void OverlayClient::reset() { ougUsers.reset(); - setupScene(g.ocIntercept == this); + setupScene(Global::get().ocIntercept == this); } void OverlayClient::setupScene(bool show) { @@ -651,7 +648,7 @@ void OverlayClient::render() { } void OverlayClient::openEditor() { - OverlayEditor oe(g.mw, &ougUsers); + OverlayEditor oe(Global::get().mw, &ougUsers); connect(&oe, SIGNAL(applySettings()), this, SLOT(updateLayout())); oe.exec(); diff --git a/src/mumble/OverlayConfig.cpp b/src/mumble/OverlayConfig.cpp index 8b16f0aa0..13f9b1dab 100644 --- a/src/mumble/OverlayConfig.cpp +++ b/src/mumble/OverlayConfig.cpp @@ -19,6 +19,7 @@ #include "ServerHandler.h" #include "User.h" #include "GlobalShortcut.h" +#include "Global.h" #ifdef Q_OS_WIN # include "../../overlay/overlay_blacklist.h" @@ -33,10 +34,6 @@ #include <QtWidgets/QFileDialog> #include <QtWidgets/QFontDialog> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - const QString OverlayConfig::name = QLatin1String("OverlayConfig"); static const int OVERLAYCONFIG_PATH_ROLE = Qt::UserRole; @@ -533,18 +530,18 @@ void OverlayConfig::save() const { } } - g.qs->beginGroup(QLatin1String("overlay")); + Global::get().qs->beginGroup(QLatin1String("overlay")); s.os.save(); - g.qs->endGroup(); + Global::get().qs->endGroup(); #ifdef Q_OS_WIN // On MS windows force sync so the registry is updated. - g.qs->sync(); + Global::get().qs->sync(); #endif } void OverlayConfig::accept() const { - g.o->forceSettings(); - g.o->setActive(s.os.bEnable); + Global::get().o->forceSettings(); + Global::get().o->setActive(s.os.bEnable); } bool OverlayConfig::eventFilter(QObject *obj, QEvent *evt) { diff --git a/src/mumble/OverlayEditor.cpp b/src/mumble/OverlayEditor.cpp index a37cddd52..e35ad417a 100644 --- a/src/mumble/OverlayEditor.cpp +++ b/src/mumble/OverlayEditor.cpp @@ -16,18 +16,15 @@ #include "User.h" #include "Utils.h" #include "GlobalShortcut.h" +#include "Global.h" #include <QtWidgets/QGraphicsProxyWidget> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - OverlayEditor::OverlayEditor(QWidget *p, QGraphicsItem *qgi, OverlaySettings *osptr) - : QDialog(p), qgiPromote(qgi), oes(g.s.os) { + : QDialog(p), qgiPromote(qgi), oes(Global::get().s.os) { setupUi(this); qsZoom->setAccessibleName(tr("Zoom level")); - os = osptr ? osptr : &g.s.os; + os = osptr ? osptr : &Global::get().s.os; connect(qdbbBox->button(QDialogButtonBox::Apply), SIGNAL(clicked()), this, SLOT(apply())); connect(qdbbBox->button(QDialogButtonBox::Reset), SIGNAL(clicked()), this, SLOT(reset())); @@ -35,11 +32,11 @@ OverlayEditor::OverlayEditor(QWidget *p, QGraphicsItem *qgi, OverlaySettings *os QGraphicsProxyWidget *qgpw = graphicsProxyWidget(); if (qgpw) { qgpw->setFlag(QGraphicsItem::ItemIgnoresParentOpacity); - if (g.ocIntercept) { - qgpw->setPos(iroundf(static_cast< float >(g.ocIntercept->uiWidth) / 16.0f + 0.5f), - iroundf(static_cast< float >(g.ocIntercept->uiHeight) / 16.0f + 0.5f)); - qgpw->resize(iroundf(static_cast< float >(g.ocIntercept->uiWidth) * 14.0f / 16.0f + 0.5f), - iroundf(static_cast< float >(g.ocIntercept->uiHeight) * 14.0f / 16.0f + 0.5f)); + if (Global::get().ocIntercept) { + qgpw->setPos(iroundf(static_cast< float >(Global::get().ocIntercept->uiWidth) / 16.0f + 0.5f), + iroundf(static_cast< float >(Global::get().ocIntercept->uiHeight) / 16.0f + 0.5f)); + qgpw->resize(iroundf(static_cast< float >(Global::get().ocIntercept->uiWidth) * 14.0f / 16.0f + 0.5f), + iroundf(static_cast< float >(Global::get().ocIntercept->uiHeight) * 14.0f / 16.0f + 0.5f)); } } @@ -49,7 +46,7 @@ OverlayEditor::OverlayEditor(QWidget *p, QGraphicsItem *qgi, OverlaySettings *os } OverlayEditor::~OverlayEditor() { - QGraphicsProxyWidget *qgpw = g.mw->graphicsProxyWidget(); + QGraphicsProxyWidget *qgpw = Global::get().mw->graphicsProxyWidget(); if (qgpw) qgpw->setOpacity(0.9f); if (qgiPromote) @@ -57,7 +54,7 @@ OverlayEditor::~OverlayEditor() { } void OverlayEditor::enterEvent(QEvent *e) { - QGraphicsProxyWidget *qgpw = g.mw->graphicsProxyWidget(); + QGraphicsProxyWidget *qgpw = Global::get().mw->graphicsProxyWidget(); if (qgpw) qgpw->setOpacity(0.9f); @@ -72,7 +69,7 @@ void OverlayEditor::enterEvent(QEvent *e) { } void OverlayEditor::leaveEvent(QEvent *e) { - QGraphicsProxyWidget *qgpw = g.mw->graphicsProxyWidget(); + QGraphicsProxyWidget *qgpw = Global::get().mw->graphicsProxyWidget(); if (qgpw) qgpw->setOpacity(0.3f); diff --git a/src/mumble/OverlayEditorScene.cpp b/src/mumble/OverlayEditorScene.cpp index a2bae4b63..2d4cb6f7b 100644 --- a/src/mumble/OverlayEditorScene.cpp +++ b/src/mumble/OverlayEditorScene.cpp @@ -17,6 +17,7 @@ #include "User.h" #include "Utils.h" #include "GlobalShortcut.h" +#include "Global.h" #include <QtGui/QImageReader> #include <QtWidgets/QColorDialog> @@ -24,16 +25,12 @@ #include <QtWidgets/QGraphicsProxyWidget> #include <QtWidgets/QGraphicsSceneMouseEvent> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - OverlayEditorScene::OverlayEditorScene(const OverlaySettings &srcos, QObject *p) : QGraphicsScene(p), os(srcos) { tsColor = Settings::Talking; uiZoom = 2; - if (g.ocIntercept) - uiSize = g.ocIntercept->uiHeight; + if (Global::get().ocIntercept) + uiSize = Global::get().ocIntercept->uiHeight; else uiSize = 1080.f; @@ -518,8 +515,8 @@ void OverlayEditorScene::updateCursorShape(const QPointF &point) { QGraphicsProxyWidget *qgpw = p->graphicsProxyWidget(); if (qgpw) { qgpw->setCursor(cs); - if (g.ocIntercept) - g.ocIntercept->updateMouse(); + if (Global::get().ocIntercept) + Global::get().ocIntercept->updateMouse(); } } } @@ -778,7 +775,7 @@ void OverlayEditorScene::contextMenuEvent(QGraphicsSceneContextMenuEvent *e) { qfd.setWindowTitle(tr("Pick font")); int ret; - if (g.ocIntercept) { + if (Global::get().ocIntercept) { QGraphicsProxyWidget *qgpw = new QGraphicsProxyWidget(nullptr, Qt::Window); qgpw->setWidget(&qfd); @@ -795,7 +792,7 @@ void OverlayEditorScene::contextMenuEvent(QGraphicsSceneContextMenuEvent *e) { qgpw->setWidget(nullptr); delete qgpw; } else { - Qt::WindowFlags wf = g.mw->windowFlags(); + Qt::WindowFlags wf = Global::get().mw->windowFlags(); if (wf.testFlag(Qt::WindowStaysOnTopHint)) qfd.setWindowFlags(qfd.windowFlags() | Qt::WindowStaysOnTopHint); ret = qfd.exec(); diff --git a/src/mumble/OverlayText.cpp b/src/mumble/OverlayText.cpp index 50b5cbc72..4ba0bcf1e 100644 --- a/src/mumble/OverlayText.cpp +++ b/src/mumble/OverlayText.cpp @@ -12,10 +12,6 @@ #include <QtGui/QPainter> #include <QtGui/QPen> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - BasepointPixmap::BasepointPixmap() : qpBasePoint(0, 0), iAscent(-1), iDescent(-1) { } diff --git a/src/mumble/OverlayUser.cpp b/src/mumble/OverlayUser.cpp index 01660405f..59f210f14 100644 --- a/src/mumble/OverlayUser.cpp +++ b/src/mumble/OverlayUser.cpp @@ -16,13 +16,10 @@ #include "User.h" #include "Utils.h" #include "GlobalShortcut.h" +#include "Global.h" #include <QtGui/QImageReader> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - OverlayUser::OverlayUser(ClientUser *cu, unsigned int height, OverlaySettings *osptr) : OverlayGroup(), os(osptr), uiSize(height), cuUser(cu), tsColor(Settings::Passive) { setup(); @@ -194,7 +191,7 @@ void OverlayUser::updateUser() { QImage img; if (!qbaAvatar.isNull() && cuUser->qbaTexture.isEmpty()) { - g.o->requestTexture(cuUser); + Global::get().o->requestTexture(cuUser); } else if (qbaAvatar.isNull()) { QImageReader qir(QLatin1String("skin:default_avatar.svg")); QSize sz = qir.size(); @@ -220,7 +217,7 @@ void OverlayUser::updateUser() { qgpiAvatar->setVisible(os->bAvatar); if (cuUser) { - ClientUser *self = ClientUser::get(g.uiSession); + ClientUser *self = ClientUser::get(Global::get().uiSession); if (os->bMutedDeafened) { if (cuUser->bDeaf || cuUser->bSelfDeaf) { diff --git a/src/mumble/OverlayUserGroup.cpp b/src/mumble/OverlayUserGroup.cpp index 005cbcab9..d8dff48fa 100644 --- a/src/mumble/OverlayUserGroup.cpp +++ b/src/mumble/OverlayUserGroup.cpp @@ -19,16 +19,13 @@ #include "User.h" #include "Utils.h" #include "GlobalShortcut.h" +#include "Global.h" #include <QtGui/QImageReader> #include <QtWidgets/QGraphicsSceneContextMenuEvent> #include <QtWidgets/QGraphicsSceneWheelEvent> #include <QtWidgets/QInputDialog> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - template< typename T > QRectF OverlayGroup::boundingRect() const { QRectF qr; foreach (const QGraphicsItem *item, childItems()) @@ -67,14 +64,14 @@ void OverlayUserGroup::contextMenuEvent(QGraphicsSceneContextMenuEvent *e) { e->accept(); #ifdef Q_OS_MAC - bool embed = g.ocIntercept; + bool embed = Global::get().ocIntercept; QMenu qm(embed ? nullptr : e->widget()); if (embed) { - QGraphicsScene *scene = g.ocIntercept->qgv.scene(); + QGraphicsScene *scene = Global::get().ocIntercept->qgv.scene(); scene->addWidget(&qm); } #else - QMenu qm(g.ocIntercept ? g.mw : e->widget()); + QMenu qm(Global::get().ocIntercept ? Global::get().mw : e->widget()); #endif QMenu *qmShow = qm.addMenu(OverlayClient::tr("Filter")); @@ -142,8 +139,8 @@ void OverlayUserGroup::contextMenuEvent(QGraphicsSceneContextMenuEvent *e) { return; if (act == qaEdit) { - if (g.ocIntercept) { - QMetaObject::invokeMethod(g.ocIntercept, "openEditor", Qt::QueuedConnection); + if (Global::get().ocIntercept) { + QMetaObject::invokeMethod(Global::get().ocIntercept, "openEditor", Qt::QueuedConnection); } else { OverlayEditor oe(qApp->activeModalWidget(), nullptr, os); connect(&oe, SIGNAL(applySettings()), this, SLOT(updateLayout())); @@ -286,10 +283,10 @@ void OverlayUserGroup::updateUsers() { qgeiHandle = nullptr; } - ClientUser *self = ClientUser::get(g.uiSession); + ClientUser *self = ClientUser::get(Global::get().uiSession); if (self) { QList< ClientUser * > showusers; - Channel *home = ClientUser::get(g.uiSession)->cChannel; + Channel *home = ClientUser::get(Global::get().uiSession)->cChannel; switch (os->osShow) { case OverlaySettings::LinkedChannels: diff --git a/src/mumble/Overlay_macx.mm b/src/mumble/Overlay_macx.mm index 5aa01f51e..ae884dc98 100644 --- a/src/mumble/Overlay_macx.mm +++ b/src/mumble/Overlay_macx.mm @@ -6,6 +6,7 @@ #include "OverlayConfig.h" #include "OverlayClient.h" #include "MainWindow.h" +#include "Global.h" #include <QtCore/QProcess> #include <QtCore/QXmlStreamReader> @@ -14,9 +15,6 @@ #import <Cocoa/Cocoa.h> #include <Carbon/Carbon.h> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - extern "C" { #include <xar/xar.h> } @@ -90,20 +88,20 @@ pid_t getForegroundProcessId() { QString qsBundleIdentifier = QString::fromUtf8([bundleId UTF8String]); - switch (g.s.os.oemOverlayExcludeMode) { + switch (Global::get().s.os.oemOverlayExcludeMode) { case OverlaySettings::LauncherFilterExclusionMode: { qWarning("Overlay_macx: launcher filter mode not implemented on macOS, allowing everything"); overlayEnabled = YES; break; } case OverlaySettings::WhitelistExclusionMode: { - if (g.s.os.qslWhitelist.contains(qsBundleIdentifier)) { + if (Global::get().s.os.qslWhitelist.contains(qsBundleIdentifier)) { overlayEnabled = YES; } break; } case OverlaySettings::BlacklistExclusionMode: { - if (! g.s.os.qslBlacklist.contains(qsBundleIdentifier)) { + if (! Global::get().s.os.qslBlacklist.contains(qsBundleIdentifier)) { overlayEnabled = YES; } break; diff --git a/src/mumble/Overlay_win.cpp b/src/mumble/Overlay_win.cpp index 6520137e2..873242df5 100644 --- a/src/mumble/Overlay_win.cpp +++ b/src/mumble/Overlay_win.cpp @@ -10,15 +10,12 @@ #include "MumbleApplication.h" #include "OverlayConfig.h" #include "User.h" +#include "Global.h" #include "Overlay_win.h" #include "../../overlay/overlay_exe/overlay_exe.h" -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - // Used by the overlay to detect whether we injected into ourselves. // // A similar declaration can be found in mumble_exe's Overlay.cpp, @@ -90,7 +87,7 @@ OverlayPrivateWin::OverlayPrivateWin(QObject *p) m_helper_restart_timer->setSingleShot(true); connect(m_helper_restart_timer, SIGNAL(timeout()), this, SLOT(onDelayedRestartTimerTriggered())); - if (!g.s.bOverlayWinHelperX86Enable) { + if (!Global::get().s.bOverlayWinHelperX86Enable) { qWarning("OverlayPrivateWin: mumble_ol_helper.exe (32-bit overlay helper) disabled via " "'overlay_win/enable_x86_helper' config option."); m_helper_enabled = false; @@ -117,7 +114,7 @@ OverlayPrivateWin::OverlayPrivateWin(QObject *p) qWarning("OverlayPrivateWin: mumble_ol_helper_x64.exe (64-bit overlay helper) disabled because the host is not " "x64 capable."); m_helper64_enabled = false; - } else if (!g.s.bOverlayWinHelperX64Enable) { + } else if (!Global::get().s.bOverlayWinHelperX64Enable) { qWarning("OverlayPrivateWin: mumble_ol_helper_x64.exe (64-bit overlay helper) disabled via " "'overlay_win/enable_x64_helper' config option."); m_helper64_enabled = false; @@ -274,7 +271,7 @@ void OverlayPrivateWin::onHelperProcessExited(int exitCode, QProcess::ExitStatus // We could be hitting a crash bug in the helper, // and we don't want to do too much harm in that // case by spawning thousands of processes. - qint64 cooldownMsec = (qint64) g.s.iOverlayWinHelperRestartCooldownMsec; + qint64 cooldownMsec = (qint64) Global::get().s.iOverlayWinHelperRestartCooldownMsec; if (elapsedMsec < cooldownMsec) { qint64 delayMsec = cooldownMsec - elapsedMsec; qWarning("OverlayPrivateWin: waiting %llu seconds until restarting helper process '%s'. last restart was " diff --git a/src/mumble/PAAudio.cpp b/src/mumble/PAAudio.cpp index 03b9f5da7..a97fabd5b 100644 --- a/src/mumble/PAAudio.cpp +++ b/src/mumble/PAAudio.cpp @@ -4,9 +4,6 @@ // Mumble source tree or at <https://www.mumble.info/LICENSE>. #include "PAAudio.h" - -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. #include "Global.h" #ifdef Q_CC_GNU @@ -65,7 +62,7 @@ AudioInput *PortAudioInputRegistrar::create() { } const QList< audioDevice > PortAudioInputRegistrar::getDeviceChoices() { - return pas->enumerateDevices(true, g.s.iPortAudioInput); + return pas->enumerateDevices(true, Global::get().s.iPortAudioInput); } void PortAudioInputRegistrar::setDeviceChoice(const QVariant &choice, Settings &s) { @@ -84,7 +81,7 @@ AudioOutput *PortAudioOutputRegistrar::create() { } const QList< audioDevice > PortAudioOutputRegistrar::getDeviceChoices() { - return pas->enumerateDevices(false, g.s.iPortAudioOutput); + return pas->enumerateDevices(false, Global::get().s.iPortAudioOutput); } void PortAudioOutputRegistrar::setDeviceChoice(const QVariant &choice, Settings &s) { @@ -341,14 +338,14 @@ bool PortAudioSystem::stopStream(PaStream *stream) { int PortAudioSystem::streamCallback(const void *input, void *output, unsigned long frames, const PaStreamCallbackTimeInfo *, PaStreamCallbackFlags, void *isInput) { if (isInput) { - auto const pai = dynamic_cast< PortAudioInput * >(g.ai.get()); + auto const pai = dynamic_cast< PortAudioInput * >(Global::get().ai.get()); if (!pai) { return paAbort; } pai->process(frames, input); } else { - auto const pao = dynamic_cast< PortAudioOutput * >(g.ao.get()); + auto const pao = dynamic_cast< PortAudioOutput * >(Global::get().ao.get()); if (!pao) { return paAbort; } @@ -360,7 +357,7 @@ int PortAudioSystem::streamCallback(const void *input, void *output, unsigned lo } PortAudioInput::PortAudioInput() : stream(nullptr) { - iMicChannels = pas->openStream(&stream, g.s.iPortAudioInput, iFrameSize, true); + iMicChannels = pas->openStream(&stream, Global::get().s.iPortAudioInput, iFrameSize, true); if (!iMicChannels) { qWarning("PortAudioInput: failed to open stream"); return; @@ -411,7 +408,7 @@ void PortAudioInput::run() { } PortAudioOutput::PortAudioOutput() : stream(nullptr) { - iChannels = pas->openStream(&stream, g.s.iPortAudioOutput, iFrameSize, false); + iChannels = pas->openStream(&stream, Global::get().s.iPortAudioOutput, iFrameSize, false); if (!iChannels) { qWarning("PortAudioOutput: failed to open stream"); return; diff --git a/src/mumble/PTTButtonWidget.cpp b/src/mumble/PTTButtonWidget.cpp index c5584dd20..7acdcf28a 100644 --- a/src/mumble/PTTButtonWidget.cpp +++ b/src/mumble/PTTButtonWidget.cpp @@ -4,7 +4,6 @@ // Mumble source tree or at <https://www.mumble.info/LICENSE>. #include "PTTButtonWidget.h" - #include "Global.h" PTTButtonWidget::PTTButtonWidget(QWidget *p) : QWidget(p) { @@ -12,13 +11,13 @@ PTTButtonWidget::PTTButtonWidget(QWidget *p) : QWidget(p) { setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint); - if (!g.s.qbaPTTButtonWindowGeometry.isEmpty()) { - restoreGeometry(g.s.qbaPTTButtonWindowGeometry); + if (!Global::get().s.qbaPTTButtonWindowGeometry.isEmpty()) { + restoreGeometry(Global::get().s.qbaPTTButtonWindowGeometry); } } void PTTButtonWidget::closeEvent(QCloseEvent *e) { - g.s.qbaPTTButtonWindowGeometry = saveGeometry(); + Global::get().s.qbaPTTButtonWindowGeometry = saveGeometry(); QWidget::closeEvent(e); } diff --git a/src/mumble/Plugins.cpp b/src/mumble/Plugins.cpp index 057912b25..43e848734 100644 --- a/src/mumble/Plugins.cpp +++ b/src/mumble/Plugins.cpp @@ -16,6 +16,7 @@ #ifdef USE_MANUAL_PLUGIN # include "ManualPlugin.h" #endif +#include "Global.h" #include <QtCore/QLibrary> #include <QtCore/QUrlQuery> @@ -32,10 +33,6 @@ # include <tlhelp32.h> #endif -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - const QString PluginConfig::name = QLatin1String("PluginConfig"); static ConfigWidget *PluginConfigDialogNew(Settings &st) { @@ -101,7 +98,7 @@ void PluginConfig::load(const Settings &r) { } void PluginConfig::save() const { - QReadLocker lock(&g.p->qrwlPlugins); + QReadLocker lock(&Global::get().p->qrwlPlugins); s.bTransmitPosition = qcbTransmit->isChecked(); s.qmPositionalAudioPlugins.clear(); @@ -120,7 +117,7 @@ void PluginConfig::save() const { PluginInfo *PluginConfig::pluginForItem(QTreeWidgetItem *i) const { if (i) { - foreach (PluginInfo *pi, g.p->qlPlugins) { + foreach (PluginInfo *pi, Global::get().p->qlPlugins) { if (pi->filename == i->data(0, Qt::UserRole).toString()) return pi; } @@ -131,7 +128,7 @@ PluginInfo *PluginConfig::pluginForItem(QTreeWidgetItem *i) const { void PluginConfig::on_qpbConfig_clicked() { PluginInfo *pi; { - QReadLocker lock(&g.p->qrwlPlugins); + QReadLocker lock(&Global::get().p->qrwlPlugins); pi = pluginForItem(qtwPlugins->currentItem()); } @@ -151,7 +148,7 @@ void PluginConfig::on_qpbConfig_clicked() { void PluginConfig::on_qpbAbout_clicked() { PluginInfo *pi; { - QReadLocker lock(&g.p->qrwlPlugins); + QReadLocker lock(&Global::get().p->qrwlPlugins); pi = pluginForItem(qtwPlugins->currentItem()); } @@ -169,15 +166,15 @@ void PluginConfig::on_qpbAbout_clicked() { } void PluginConfig::on_qpbReload_clicked() { - g.p->rescanPlugins(); + Global::get().p->rescanPlugins(); refillPluginList(); } void PluginConfig::refillPluginList() { - QReadLocker lock(&g.p->qrwlPlugins); + QReadLocker lock(&Global::get().p->qrwlPlugins); qtwPlugins->clear(); - foreach (PluginInfo *pi, g.p->qlPlugins) { + foreach (PluginInfo *pi, Global::get().p->qlPlugins) { QTreeWidgetItem *i = new QTreeWidgetItem(qtwPlugins); i->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable); i->setCheckState(1, pi->enabled ? Qt::Checked : Qt::Unchecked); @@ -191,7 +188,7 @@ void PluginConfig::refillPluginList() { } void PluginConfig::on_qtwPlugins_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *) { - QReadLocker lock(&g.p->qrwlPlugins); + QReadLocker lock(&Global::get().p->qrwlPlugins); PluginInfo *pi = pluginForItem(current); if (pi) { @@ -240,7 +237,7 @@ Plugins::Plugins(QObject *p) : QObject(p) { qsSystemPlugins = QLatin1String(MUMTEXT(MUMBLE_PLUGIN_PATH)); # endif - qsUserPlugins = g.qdBasePath.absolutePath() + QLatin1String("/Plugins"); + qsUserPlugins = Global::get().qdBasePath.absolutePath() + QLatin1String("/Plugins"); #else # ifdef MUMBLE_PLUGIN_PATH qsSystemPlugins = QLatin1String(MUMTEXT(MUMBLE_PLUGIN_PATH)); @@ -287,7 +284,7 @@ Plugins::~Plugins() { } void Plugins::clearPlugins() { - QWriteLocker lock(&g.p->qrwlPlugins); + QWriteLocker lock(&Global::get().p->qrwlPlugins); foreach (PluginInfo *pi, qlPlugins) { if (pi->locked) pi->p->unlock(); @@ -300,7 +297,7 @@ void Plugins::clearPlugins() { void Plugins::rescanPlugins() { clearPlugins(); - QWriteLocker lock(&g.p->qrwlPlugins); + QWriteLocker lock(&Global::get().p->qrwlPlugins); prevlocked = locked = nullptr; bValid = false; @@ -329,7 +326,7 @@ void Plugins::rescanPlugins() { if (pi->p && pi->p->magic == MUMBLE_PLUGIN_MAGIC && pi->p->shortname != L"Retracted") { pi->description = QString::fromStdWString(pi->p->description); pi->shortname = QString::fromStdWString(pi->p->shortname); - pi->enabled = g.s.qmPositionalAudioPlugins.value(pi->filename, true); + pi->enabled = Global::get().s.qmPositionalAudioPlugins.value(pi->filename, true); mumblePlugin2Func mpf2 = reinterpret_cast< mumblePlugin2Func >(pi->lib.resolve("getMumblePlugin2")); @@ -371,14 +368,14 @@ void Plugins::rescanPlugins() { pi->pqt = ManualPlugin_getMumblePluginQt(); pi->description = QString::fromStdWString(pi->p->description); pi->shortname = QString::fromStdWString(pi->p->shortname); - pi->enabled = g.s.qmPositionalAudioPlugins.value(pi->filename, true); + pi->enabled = Global::get().s.qmPositionalAudioPlugins.value(pi->filename, true); qlPlugins << pi; #endif } } bool Plugins::fetch() { - if (g.bPosTest) { + if (Global::get().bPosTest) { fPosition[0] = fPosition[1] = fPosition[2] = 0.0f; fFront[0] = 0.0f; fFront[1] = 0.0f; @@ -440,7 +437,7 @@ void Plugins::on_Timer_timeout() { QReadLocker lock(&qrwlPlugins); if (prevlocked) { - g.l->log(Log::Information, tr("%1 lost link.").arg(prevlocked->shortname.toHtmlEscaped())); + Global::get().l->log(Log::Information, tr("%1 lost link.").arg(prevlocked->shortname.toHtmlEscaped())); prevlocked = nullptr; } @@ -457,12 +454,12 @@ void Plugins::on_Timer_timeout() { if (locked) context.assign(u8(QString::fromStdWString(locked->p->shortname)) + static_cast< char >(0) + ssContext); - if (!g.uiSession) { + if (!Global::get().uiSession) { ssContextSent.clear(); swsIdentitySent.clear(); } else if ((context != ssContextSent) || (swsIdentity != swsIdentitySent)) { MumbleProto::UserState mpus; - mpus.set_session(g.uiSession); + mpus.set_session(Global::get().uiSession); if (context != ssContextSent) { ssContextSent.assign(context); mpus.set_plugin_context(context); @@ -471,8 +468,8 @@ void Plugins::on_Timer_timeout() { swsIdentitySent.assign(swsIdentity); mpus.set_plugin_identity(u8(QString::fromStdWString(swsIdentitySent))); } - if (g.sh) - g.sh->sendMessage(mpus); + if (Global::get().sh) + Global::get().sh->sendMessage(mpus); } } @@ -480,7 +477,7 @@ void Plugins::on_Timer_timeout() { return; } - if (!g.s.bTransmitPosition) + if (!Global::get().s.bTransmitPosition) return; lock.unlock(); @@ -564,7 +561,7 @@ void Plugins::on_Timer_timeout() { if (pi->enabled) { if (pi->p2 ? pi->p2->trylock(pids) : pi->p->trylock()) { pi->shortname = QString::fromStdWString(pi->p->shortname); - g.l->log(Log::Information, tr("%1 linked.").arg(pi->shortname.toHtmlEscaped())); + Global::get().l->log(Log::Information, tr("%1 linked.").arg(pi->shortname.toHtmlEscaped())); pi->locked = true; bUnlink = false; locked = pi; @@ -604,7 +601,7 @@ void Plugins::checkUpdates() { WebFetch::fetch(QLatin1String("update"), url, this, SLOT(fetchedUpdatePAPlugins(QByteArray, QUrl))); #else - g.mw->msgBox(tr("Skipping plugin update in debug mode.")); + Global::get().mw->msgBox(tr("Skipping plugin update in debug mode.")); #endif } @@ -773,15 +770,15 @@ void Plugins::fetchedPAPluginDL(QByteArray data, QUrl url) { if (f.open(QIODevice::WriteOnly)) { f.write(data); f.close(); - g.mw->msgBox(tr("Downloaded new or updated plugin to %1.").arg(f.fileName().toHtmlEscaped())); + Global::get().mw->msgBox(tr("Downloaded new or updated plugin to %1.").arg(f.fileName().toHtmlEscaped())); } else { f.setFileName(qsUserPlugins + QLatin1String("/") + fname); if (f.open(QIODevice::WriteOnly)) { f.write(data); f.close(); - g.mw->msgBox(tr("Downloaded new or updated plugin to %1.").arg(f.fileName().toHtmlEscaped())); + Global::get().mw->msgBox(tr("Downloaded new or updated plugin to %1.").arg(f.fileName().toHtmlEscaped())); } else { - g.mw->msgBox(tr("Failed to install new plugin to %1.").arg(f.fileName().toHtmlEscaped())); + Global::get().mw->msgBox(tr("Failed to install new plugin to %1.").arg(f.fileName().toHtmlEscaped())); } } diff --git a/src/mumble/PulseAudio.cpp b/src/mumble/PulseAudio.cpp index 1527ca444..5bb0baf79 100644 --- a/src/mumble/PulseAudio.cpp +++ b/src/mumble/PulseAudio.cpp @@ -8,9 +8,6 @@ #include "MainWindow.h" #include "Timer.h" #include "User.h" - -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. #include "Global.h" #ifdef Q_CC_GNU @@ -148,7 +145,7 @@ PulseAudioSystem::~PulseAudioSystem() { } QString PulseAudioSystem::outputDevice() const { - QString odev = g.s.qsPulseAudioOutput; + QString odev = Global::get().s.qsPulseAudioOutput; if (odev.isEmpty()) { odev = qsDefaultOutput; } @@ -159,7 +156,7 @@ QString PulseAudioSystem::outputDevice() const { } QString PulseAudioSystem::inputDevice() const { - QString idev = g.s.qsPulseAudioInput; + QString idev = Global::get().s.qsPulseAudioInput; if (idev.isEmpty()) { idev = qsDefaultInput; } @@ -192,8 +189,8 @@ void PulseAudioSystem::eventCallback(pa_mainloop_api *api, pa_defer_event *) { if (!bSourceDone || !bSinkDone || !bServerDone) return; - AudioInputPtr ai = g.ai; - AudioOutputPtr ao = g.ao; + AudioInputPtr ai = Global::get().ai; + AudioOutputPtr ao = Global::get().ao; AudioInput *raw_ai = ai.get(); AudioOutput *raw_ao = ao.get(); PulseAudioInput *pai = dynamic_cast< PulseAudioInput * >(raw_ai); @@ -231,7 +228,7 @@ void PulseAudioSystem::eventCallback(pa_mainloop_api *api, pa_defer_event *) { do_start = true; break; case PA_STREAM_READY: { - if (g.s.iOutputDelay != iDelayCache) { + if (Global::get().s.iOutputDelay != iDelayCache) { do_stop = true; } else if (odev != qsOutputCache) { do_stop = true; @@ -252,13 +249,13 @@ void PulseAudioSystem::eventCallback(pa_mainloop_api *api, pa_defer_event *) { const pa_sample_spec *pss = m_pulseAudio.stream_get_sample_spec(pasOutput); const size_t sampleSize = (pss->format == PA_SAMPLE_FLOAT32NE) ? sizeof(float) : sizeof(short); const unsigned int iBlockLen = pao->iFrameSize * pss->channels * static_cast< unsigned int >(sampleSize); - buff.tlength = iBlockLen * (g.s.iOutputDelay + 1); + buff.tlength = iBlockLen * (Global::get().s.iOutputDelay + 1); buff.minreq = iBlockLen; buff.maxlength = -1; buff.prebuf = -1; buff.fragsize = iBlockLen; - iDelayCache = g.s.iOutputDelay; + iDelayCache = Global::get().s.iOutputDelay; qsOutputCache = odev; m_pulseAudio.stream_connect_playback(pasOutput, qPrintable(odev), &buff, PA_STREAM_ADJUST_LATENCY, nullptr, @@ -334,9 +331,9 @@ void PulseAudioSystem::eventCallback(pa_mainloop_api *api, pa_defer_event *) { bool do_stop = false; bool do_start = false; - if ((!pai || g.s.echoOption == EchoCancelOptionID::DISABLED) && (est == PA_STREAM_READY)) { + if ((!pai || Global::get().s.echoOption == EchoCancelOptionID::DISABLED) && (est == PA_STREAM_READY)) { do_stop = true; - } else if (pai && g.s.echoOption != EchoCancelOptionID::DISABLED) { + } else if (pai && Global::get().s.echoOption != EchoCancelOptionID::DISABLED) { switch (est) { case PA_STREAM_TERMINATED: { if (pasSpeaker) @@ -347,7 +344,7 @@ void PulseAudioSystem::eventCallback(pa_mainloop_api *api, pa_defer_event *) { if ((pss.format != PA_SAMPLE_FLOAT32NE) && (pss.format != PA_SAMPLE_S16NE)) pss.format = PA_SAMPLE_FLOAT32NE; pss.rate = SAMPLE_RATE; - if ((pss.channels == 0) || (g.s.echoOption != EchoCancelOptionID::SPEEX_MULTICHANNEL)) + if ((pss.channels == 0) || (Global::get().s.echoOption != EchoCancelOptionID::SPEEX_MULTICHANNEL)) pss.channels = 1; pasSpeaker = @@ -360,7 +357,7 @@ void PulseAudioSystem::eventCallback(pa_mainloop_api *api, pa_defer_event *) { do_start = true; break; case PA_STREAM_READY: { - if ((g.s.echoOption == EchoCancelOptionID::SPEEX_MULTICHANNEL) != bEchoMultiCache) { + if ((Global::get().s.echoOption == EchoCancelOptionID::SPEEX_MULTICHANNEL) != bEchoMultiCache) { do_stop = true; } else if (edev != qsEchoCache) { do_stop = true; @@ -386,7 +383,7 @@ void PulseAudioSystem::eventCallback(pa_mainloop_api *api, pa_defer_event *) { buff.prebuf = -1; buff.fragsize = iBlockLen; - bEchoMultiCache = (g.s.echoOption == EchoCancelOptionID::SPEEX_MULTICHANNEL); + bEchoMultiCache = (Global::get().s.echoOption == EchoCancelOptionID::SPEEX_MULTICHANNEL); qsEchoCache = edev; m_pulseAudio.stream_connect_record(pasSpeaker, qPrintable(edev), &buff, PA_STREAM_ADJUST_LATENCY); @@ -483,7 +480,7 @@ void PulseAudioSystem::write_stream_callback(pa_stream *s, void *userdata) { } const pa_buffer_attr *bufferAttr; if ((bufferAttr = pa.stream_get_buffer_attr(s))) { - g.ao->setBufferSize(bufferAttr->maxlength); + Global::get().ao->setBufferSize(bufferAttr->maxlength); } pas->wakeup(); } @@ -518,7 +515,7 @@ void PulseAudioSystem::read_callback(pa_stream *s, size_t bytes, void *userdata) return; } - AudioInputPtr ai = g.ai; + AudioInputPtr ai = Global::get().ai; PulseAudioInput *pai = dynamic_cast< PulseAudioInput * >(ai.get()); if (!pai) { if (length > 0) { @@ -569,7 +566,7 @@ void PulseAudioSystem::write_callback(pa_stream *s, size_t bytes, void *userdata PulseAudioSystem *pas = reinterpret_cast< PulseAudioSystem * >(userdata); Q_ASSERT(s == pas->pasOutput); - AudioOutputPtr ao = g.ao; + AudioOutputPtr ao = Global::get().ao; PulseAudioOutput *pao = dynamic_cast< PulseAudioOutput * >(ao.get()); if (!pao) { @@ -643,13 +640,13 @@ void PulseAudioSystem::write_callback(pa_stream *s, size_t bytes, void *userdata // do we have some mixed output? if (pao->mix(buffer, samples)) { // attenuate if instructed to or it's in settings - pas->bAttenuating = (g.bAttenuateOthers || g.s.bAttenuateOthers); + pas->bAttenuating = (Global::get().bAttenuateOthers || Global::get().s.bAttenuateOthers); } else { memset(buffer, 0, bytes); // attenuate if intructed to (self-activated) - pas->bAttenuating = g.bAttenuateOthers; + pas->bAttenuating = Global::get().bAttenuateOthers; } // if the attenuation state has changed @@ -668,16 +665,16 @@ void PulseAudioSystem::volume_sink_input_list_callback(pa_context *c, const pa_s if (eol == 0) { // If we're using the default of "enable attenuation on all ouputs" and output from an application is // loopbacked, both the loopback and the application will be attenuated leading to double attenuation. - if (!g.s.bOnlyAttenuateSameOutput && pas->iSinkId > -1 && !strcmp(i->driver, "module-loopback.c")) { + if (!Global::get().s.bOnlyAttenuateSameOutput && pas->iSinkId > -1 && !strcmp(i->driver, "module-loopback.c")) { return; } // If we're not attenuating different sinks and the input is not on this sink, don't attenuate. Or, // if the input is a loopback module and connected to Mumble's sink, also ignore it (loopbacks are used to // connect sinks). An attenuated loopback means an indirect application attenuation. - if (g.s.bOnlyAttenuateSameOutput && pas->iSinkId > -1) { + if (Global::get().s.bOnlyAttenuateSameOutput && pas->iSinkId > -1) { if (int(i->sink) != pas->iSinkId || (int(i->sink) == pas->iSinkId && !strcmp(i->driver, "module-loopback.c") - && !g.s.bAttenuateLoopbacks)) { + && !Global::get().s.bAttenuateLoopbacks)) { return; } } @@ -691,7 +688,7 @@ void PulseAudioSystem::volume_sink_input_list_callback(pa_context *c, const pa_s patt.normal_volume = i->volume; // calculate the attenuated volume - pa_volume_t adj = static_cast< pa_volume_t >(PA_VOLUME_NORM * g.s.fOtherVolume); + pa_volume_t adj = static_cast< pa_volume_t >(PA_VOLUME_NORM * Global::get().s.fOtherVolume); pa.sw_cvolume_multiply_scalar(&patt.attenuated_volume, &i->volume, adj); // set it on the sink input @@ -908,9 +905,9 @@ const QList< audioDevice > PulseAudioInputRegistrar::getDeviceChoices() { QStringList qlInputDevs = pasys->qhInput.keys(); std::sort(qlInputDevs.begin(), qlInputDevs.end()); - if (qlInputDevs.contains(g.s.qsPulseAudioInput)) { - qlInputDevs.removeAll(g.s.qsPulseAudioInput); - qlInputDevs.prepend(g.s.qsPulseAudioInput); + if (qlInputDevs.contains(Global::get().s.qsPulseAudioInput)) { + qlInputDevs.removeAll(Global::get().s.qsPulseAudioInput); + qlInputDevs.prepend(Global::get().s.qsPulseAudioInput); } foreach (const QString &dev, qlInputDevs) { qlReturn << audioDevice(pasys->qhInput.value(dev), dev); } @@ -940,9 +937,9 @@ const QList< audioDevice > PulseAudioOutputRegistrar::getDeviceChoices() { QStringList qlOutputDevs = pasys->qhOutput.keys(); std::sort(qlOutputDevs.begin(), qlOutputDevs.end()); - if (qlOutputDevs.contains(g.s.qsPulseAudioOutput)) { - qlOutputDevs.removeAll(g.s.qsPulseAudioOutput); - qlOutputDevs.prepend(g.s.qsPulseAudioOutput); + if (qlOutputDevs.contains(Global::get().s.qsPulseAudioOutput)) { + qlOutputDevs.removeAll(Global::get().s.qsPulseAudioOutput); + qlOutputDevs.prepend(Global::get().s.qsPulseAudioOutput); } foreach (const QString &dev, qlOutputDevs) { qlReturn << audioDevice(pasys->qhOutput.value(dev), dev); } diff --git a/src/mumble/RichTextEditor.cpp b/src/mumble/RichTextEditor.cpp index c18eb1b87..5d361059d 100644 --- a/src/mumble/RichTextEditor.cpp +++ b/src/mumble/RichTextEditor.cpp @@ -8,6 +8,7 @@ #include "Log.h" #include "MainWindow.h" #include "XMLTools.h" +#include "Global.h" #include <QtCore/QMimeData> #include <QtGui/QImageReader> @@ -20,10 +21,6 @@ # include <shlobj.h> #endif -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - RichTextHtmlEdit::RichTextHtmlEdit(QWidget *p) : QTextEdit(p) { m_document = new LogDocument(this); m_document->setDefaultStyleSheet(qApp->styleSheet()); @@ -231,17 +228,17 @@ void RichTextEditor::on_qaLink_triggered() { } void RichTextEditor::on_qaImage_triggered() { - QPair< QByteArray, QImage > choice = g.mw->openImageFile(); + QPair< QByteArray, QImage > choice = Global::get().mw->openImageFile(); QByteArray &qba = choice.first; if (qba.isEmpty()) return; - if ((g.uiImageLength > 0) && (static_cast< unsigned int >(qba.length()) > g.uiImageLength)) { + if ((Global::get().uiImageLength > 0) && (static_cast< unsigned int >(qba.length()) > Global::get().uiImageLength)) { QMessageBox::warning(this, tr("Failed to load image"), tr("Image file too large to embed in document. Please use images smaller than %1 kB.") - .arg(g.uiImageLength / 1024)); + .arg(Global::get().uiImageLength / 1024)); return; } @@ -276,7 +273,7 @@ void RichTextEditor::on_qteRichText_textChanged() { bChanged = true; updateActions(); - if (!g.uiMessageLength) + if (!Global::get().uiMessageLength) return; richToPlain(); @@ -288,9 +285,9 @@ void RichTextEditor::on_qteRichText_textChanged() { unsigned int imagelength = plainText.length(); - if (g.uiMessageLength && imagelength <= g.uiMessageLength) { + if (Global::get().uiMessageLength && imagelength <= Global::get().uiMessageLength) { over = false; - } else if (g.uiImageLength && imagelength > g.uiImageLength) { + } else if (Global::get().uiImageLength && imagelength > Global::get().uiImageLength) { over = true; } else { QString qsOut; @@ -317,7 +314,7 @@ void RichTextEditor::on_qteRichText_textChanged() { break; } } - over = (static_cast< unsigned int >(qsOut.length()) > g.uiMessageLength); + over = (static_cast< unsigned int >(qsOut.length()) > Global::get().uiMessageLength); } @@ -404,9 +401,9 @@ void RichTextEditor::richToPlain() { } void RichTextEditor::setText(const QString &txt, bool readonly) { - qtbToolBar->setEnabled(!readonly && g.bAllowHTML); - qtbToolBar->setVisible(!readonly && g.bAllowHTML); - qptePlainText->setReadOnly(readonly || !g.bAllowHTML); + qtbToolBar->setEnabled(!readonly && Global::get().bAllowHTML); + qtbToolBar->setVisible(!readonly && Global::get().bAllowHTML); + qptePlainText->setReadOnly(readonly || !Global::get().bAllowHTML); qteRichText->setReadOnly(readonly); qteRichText->setHtml(txt); diff --git a/src/mumble/ServerHandler.cpp b/src/mumble/ServerHandler.cpp index 59e8a1436..5f40ba59c 100644 --- a/src/mumble/ServerHandler.cpp +++ b/src/mumble/ServerHandler.cpp @@ -29,6 +29,7 @@ #include "ServerResolverRecord.h" #include "User.h" #include "Utils.h" +#include "Global.h" #include <QtCore/QtEndian> #include <QtGui/QImageReader> @@ -56,10 +57,6 @@ # include <sys/socket.h> #endif -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - ServerHandlerMessageEvent::ServerHandlerMessageEvent(const QByteArray &msg, unsigned int mtype, bool flush) : QEvent(static_cast< QEvent::Type >(SERVERSEND_EVENT)) { qbaMsg = msg; @@ -126,11 +123,11 @@ ServerHandler::ServerHandler() : database(new Database(QLatin1String("ServerHand MumbleSSL::addSystemCA(); { - QList< QSslCipher > ciphers = MumbleSSL::ciphersFromOpenSSLCipherString(g.s.qsSslCiphers); + QList< QSslCipher > ciphers = MumbleSSL::ciphersFromOpenSSLCipherString(Global::get().s.qsSslCiphers); if (ciphers.isEmpty()) { qFatal("Invalid 'net/sslciphers' config option. Either the cipher string is invalid or none of the ciphers " "are available:: \"%s\"", - qPrintable(g.s.qsSslCiphers)); + qPrintable(Global::get().s.qsSslCiphers)); } QSslConfiguration config = QSslConfiguration::defaultConfiguration(); @@ -253,8 +250,8 @@ void ServerHandler::handleVoicePacket(unsigned int msgFlags, PacketDataStream &p unsigned int uiSession; pds >> uiSession; ClientUser *p = ClientUser::get(uiSession); - AudioOutputPtr ao = g.ao; - if (ao && p && !(((msgFlags & 0x1f) == 2) && g.s.bWhisperFriends && p->qsFriendName.isEmpty())) { + AudioOutputPtr ao = Global::get().ao; + if (ao && p && !(((msgFlags & 0x1f) == 2) && Global::get().s.bWhisperFriends && p->qsFriendName.isEmpty())) { unsigned int iSeq; pds >> iSeq; QByteArray qba; @@ -374,12 +371,12 @@ void ServerHandler::run() { qtsSock = new QSslSocket(this); qtsSock->setPeerVerifyName(qsHostName); - if (!g.s.bSuppressIdentity && CertWizard::validateCert(g.s.kpCertificate)) { - qtsSock->setPrivateKey(g.s.kpCertificate.second); - qtsSock->setLocalCertificate(g.s.kpCertificate.first.at(0)); + if (!Global::get().s.bSuppressIdentity && CertWizard::validateCert(Global::get().s.kpCertificate)) { + qtsSock->setPrivateKey(Global::get().s.kpCertificate.second); + qtsSock->setLocalCertificate(Global::get().s.kpCertificate.first.at(0)); QSslConfiguration config = qtsSock->sslConfiguration(); QList< QSslCertificate > certs = config.caCertificates(); - certs << g.s.kpCertificate.first; + certs << Global::get().s.kpCertificate.first; config.setCaCertificates(certs); qtsSock->setSslConfiguration(config); } @@ -426,9 +423,9 @@ void ServerHandler::run() { // Setup ping timer; QTimer *ticker = new QTimer(this); connect(ticker, SIGNAL(timeout()), this, SLOT(sendPing())); - ticker->start(g.s.iPingIntervalMsec); + ticker->start(Global::get().s.iPingIntervalMsec); - g.mw->rtLast = MumbleProto::Reject_RejectType_None; + Global::get().mw->rtLast = MumbleProto::Reject_RejectType_None; accUDP = accTCP = accClean; @@ -545,7 +542,7 @@ void ServerHandler::sendPingInternal() { return; } - if (g.s.iMaxInFlightTCPPings > 0 && iInFlightTCPPings >= g.s.iMaxInFlightTCPPings) { + if (Global::get().s.iMaxInFlightTCPPings > 0 && iInFlightTCPPings >= Global::get().s.iMaxInFlightTCPPings) { serverConnectionClosed(QAbstractSocket::UnknownSocketError, tr("Server is not responding to TCP pings")); return; } @@ -629,19 +626,19 @@ void ServerHandler::message(unsigned int msgType, const QByteArray &qbaMsg) { bUdp = false; if (!NetworkConfig::TcpModeEnabled()) { if ((connection->csCrypt->uiRemoteGood == 0) && (connection->csCrypt->uiGood == 0)) - g.mw->msgBox( + Global::get().mw->msgBox( tr("UDP packets cannot be sent to or received from the server. Switching to TCP mode.")); else if (connection->csCrypt->uiRemoteGood == 0) - g.mw->msgBox(tr("UDP packets cannot be sent to the server. Switching to TCP mode.")); + Global::get().mw->msgBox(tr("UDP packets cannot be sent to the server. Switching to TCP mode.")); else - g.mw->msgBox(tr("UDP packets cannot be received from the server. Switching to TCP mode.")); + Global::get().mw->msgBox(tr("UDP packets cannot be received from the server. Switching to TCP mode.")); database->setUdp(qbaDigest, false); } } else if (!bUdp && (connection->csCrypt->uiRemoteGood > 3) && (connection->csCrypt->uiGood > 3)) { bUdp = true; if (!NetworkConfig::TcpModeEnabled()) { - g.mw->msgBox( + Global::get().mw->msgBox( tr("UDP packets can be sent to and received from the server. Switching back to UDP mode.")); database->setUdp(qbaDigest, true); @@ -650,7 +647,7 @@ void ServerHandler::message(unsigned int msgType, const QByteArray &qbaMsg) { } } else { ServerHandlerMessageEvent *shme = new ServerHandlerMessageEvent(qbaMsg, msgType, false); - QApplication::postEvent(g.mw, shme); + QApplication::postEvent(Global::get().mw, shme); } } @@ -669,7 +666,7 @@ void ServerHandler::serverConnectionClosed(QAbstractSocket::SocketError err, con return; c->bDisconnectedEmitted = true; - AudioOutputPtr ao = g.ao; + AudioOutputPtr ao = Global::get().ao; if (ao) ao->wipe(); @@ -705,7 +702,7 @@ void ServerHandler::serverConnectionStateChanged(QAbstractSocket::SocketState st tConnectionTimeoutTimer = new QTimer(); connect(tConnectionTimeoutTimer, SIGNAL(timeout()), this, SLOT(serverConnectionTimeoutOnConnect())); tConnectionTimeoutTimer->setSingleShot(true); - tConnectionTimeoutTimer->start(g.s.iConnectionTimeoutDurationMsec); + tConnectionTimeoutTimer->start(Global::get().s.iConnectionTimeoutDurationMsec); } else if (state == QAbstractSocket::ConnectedState) { // Start TLS handshake qtsSock->startClientEncryption(); @@ -721,7 +718,7 @@ void ServerHandler::serverConnectionConnected() { tConnectionTimeoutTimer->stop(); - if (g.s.bQoS) + if (Global::get().s.bQoS) connection->setToS(); qscCert = connection->peerCertificateChain(); @@ -746,7 +743,7 @@ void ServerHandler::serverConnectionConnected() { mpv.set_version(version); } - if (!g.s.bHideOS) { + if (!Global::get().s.bHideOS) { mpv.set_os(u8(OSInfo::getOS())); mpv.set_os_version(u8(OSInfo::getOSDisplayableVersion())); } @@ -762,7 +759,7 @@ void ServerHandler::serverConnectionConnected() { mpa.add_tokens(u8(qs)); QMap< int, CELTCodec * >::const_iterator i; - for (i = g.qmCodecs.constBegin(); i != g.qmCodecs.constEnd(); ++i) + for (i = Global::get().qmCodecs.constBegin(); i != Global::get().qmCodecs.constEnd(); ++i) mpa.add_celt_versions(i.key()); #ifdef USE_OPUS mpa.set_opus(true); @@ -785,7 +782,7 @@ void ServerHandler::serverConnectionConnected() { if (!qusUdp) { qFatal("ServerHandler: qusUdp is unexpectedly a null addr"); } - if (g.s.bUdpForceTcpAddr) { + if (Global::get().s.bUdpForceTcpAddr) { qusUdp->bind(qhaLocal, 0); } else { if (qhaRemote.protocol() == QAbstractSocket::IPv6Protocol) { @@ -797,7 +794,7 @@ void ServerHandler::serverConnectionConnected() { connect(qusUdp, SIGNAL(readyRead()), this, SLOT(udpReady())); - if (g.s.bQoS) { + if (Global::get().s.bQoS) { #if defined(Q_OS_UNIX) int val = 0xe0; if (setsockopt(static_cast< int >(qusUdp->socketDescriptor()), IPPROTO_IP, IP_TOS, &val, sizeof(val))) { @@ -892,7 +889,7 @@ void ServerHandler::startListeningToChannels(const QList< int > &channelIDs) { } MumbleProto::UserState mpus; - mpus.set_session(g.uiSession); + mpus.set_session(Global::get().uiSession); foreach (int currentChannel, channelIDs) { // The naming of the function is a bit unfortunate but what this does is to add @@ -913,7 +910,7 @@ void ServerHandler::stopListeningToChannels(const QList< int > &channelIDs) { } MumbleProto::UserState mpus; - mpus.set_session(g.uiSession); + mpus.set_session(Global::get().uiSession); foreach (int currentChannel, channelIDs) { // The naming of the function is a bit unfortunate but what this does is to add @@ -983,8 +980,8 @@ void ServerHandler::sendChannelTextMessage(unsigned int channel, const QString & } else { mptm.add_channel_id(channel); - if (message_ == QString::fromUtf8(g.ccHappyEaster + 10)) - g.bHappyEaster = true; + if (message_ == QString::fromUtf8(Global::get().ccHappyEaster + 10)) + Global::get().bHappyEaster = true; } mptm.set_message(u8(message_)); sendMessage(mptm); diff --git a/src/mumble/Settings.cpp b/src/mumble/Settings.cpp index 6ff90c752..797dbc169 100644 --- a/src/mumble/Settings.cpp +++ b/src/mumble/Settings.cpp @@ -9,6 +9,7 @@ #include "Cert.h" #include "Log.h" #include "SSL.h" +#include "Global.h" #include "../../overlay/overlay.h" @@ -24,10 +25,6 @@ #include <limits> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - const QPoint Settings::UNSPECIFIED_POSITION = @@ -557,8 +554,8 @@ bool Settings::doEcho() const { if (AudioInputRegistrar::qmNew) { AudioInputRegistrar *air = AudioInputRegistrar::qmNew->value(qsAudioInput); if (air) { - if ((g.s.echoOption != EchoCancelOptionID::DISABLED) - && air->canEcho(g.s.echoOption, qsAudioOutput)) + if ((Global::get().s.echoOption != EchoCancelOptionID::DISABLED) + && air->canEcho(Global::get().s.echoOption, qsAudioOutput)) return true; } } @@ -626,7 +623,7 @@ BOOST_TYPEOF_REGISTER_TEMPLATE(QList, 1) #endif void OverlaySettings::load() { - load(g.qs); + load(Global::get().qs); } void OverlaySettings::load(QSettings *settings_ptr) { @@ -699,7 +696,7 @@ void OverlaySettings::load(QSettings *settings_ptr) { } void Settings::load() { - load(g.qs); + load(Global::get().qs); } void Settings::load(QSettings *settings_ptr) { @@ -1032,7 +1029,7 @@ void Settings::load(QSettings *settings_ptr) { #define DEPRECATED(name) settings_ptr->remove(QLatin1String(name)) void OverlaySettings::save() { - save(g.qs); + save(Global::get().qs); } void OverlaySettings::save(QSettings *settings_ptr) { @@ -1119,7 +1116,7 @@ void OverlaySettings::save(QSettings *settings_ptr) { } void Settings::save() { - QSettings *settings_ptr = g.qs; + QSettings *settings_ptr = Global::get().qs; Settings def; // Config updates diff --git a/src/mumble/SocketRPC.cpp b/src/mumble/SocketRPC.cpp index 25121c7a3..7c950ab57 100644 --- a/src/mumble/SocketRPC.cpp +++ b/src/mumble/SocketRPC.cpp @@ -9,16 +9,13 @@ #include "ClientUser.h" #include "MainWindow.h" #include "ServerHandler.h" +#include "Global.h" #include <QtCore/QProcessEnvironment> #include <QtCore/QUrlQuery> #include <QtNetwork/QLocalServer> #include <QtXml/QDomDocument> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - SocketRPCClient::SocketRPCClient(QLocalSocket *s, QObject *p) : QObject(p), qlsSocket(s), qbBuffer(nullptr) { qlsSocket->setParent(this); @@ -103,82 +100,82 @@ void SocketRPCClient::processXml() { qmReply.insert(iter.key(), iter.value()); if (request.nodeName() == QLatin1String("focus")) { - g.mw->show(); - g.mw->raise(); - g.mw->activateWindow(); + Global::get().mw->show(); + Global::get().mw->raise(); + Global::get().mw->activateWindow(); ack = true; } else if (request.nodeName() == QLatin1String("self")) { iter = qmRequest.find(QLatin1String("mute")); if (iter != qmRequest.constEnd()) { bool set = iter.value().toBool(); - if (set != g.s.bMute) { - g.mw->qaAudioMute->setChecked(!set); - g.mw->qaAudioMute->trigger(); + if (set != Global::get().s.bMute) { + Global::get().mw->qaAudioMute->setChecked(!set); + Global::get().mw->qaAudioMute->trigger(); } } iter = qmRequest.find(QLatin1String("unmute")); if (iter != qmRequest.constEnd()) { bool set = iter.value().toBool(); - if (set == g.s.bMute) { - g.mw->qaAudioMute->setChecked(set); - g.mw->qaAudioMute->trigger(); + if (set == Global::get().s.bMute) { + Global::get().mw->qaAudioMute->setChecked(set); + Global::get().mw->qaAudioMute->trigger(); } } iter = qmRequest.find(QLatin1String("togglemute")); if (iter != qmRequest.constEnd()) { bool set = iter.value().toBool(); - if (set == g.s.bMute) { - g.mw->qaAudioMute->setChecked(set); - g.mw->qaAudioMute->trigger(); + if (set == Global::get().s.bMute) { + Global::get().mw->qaAudioMute->setChecked(set); + Global::get().mw->qaAudioMute->trigger(); } else { - g.mw->qaAudioMute->setChecked(!set); - g.mw->qaAudioMute->trigger(); + Global::get().mw->qaAudioMute->setChecked(!set); + Global::get().mw->qaAudioMute->trigger(); } } iter = qmRequest.find(QLatin1String("deaf")); if (iter != qmRequest.constEnd()) { bool set = iter.value().toBool(); - if (set != g.s.bDeaf) { - g.mw->qaAudioDeaf->setChecked(!set); - g.mw->qaAudioDeaf->trigger(); + if (set != Global::get().s.bDeaf) { + Global::get().mw->qaAudioDeaf->setChecked(!set); + Global::get().mw->qaAudioDeaf->trigger(); } } iter = qmRequest.find(QLatin1String("undeaf")); if (iter != qmRequest.constEnd()) { bool set = iter.value().toBool(); - if (set == g.s.bDeaf) { - g.mw->qaAudioDeaf->setChecked(set); - g.mw->qaAudioDeaf->trigger(); + if (set == Global::get().s.bDeaf) { + Global::get().mw->qaAudioDeaf->setChecked(set); + Global::get().mw->qaAudioDeaf->trigger(); } } iter = qmRequest.find(QLatin1String("toggledeaf")); if (iter != qmRequest.constEnd()) { bool set = iter.value().toBool(); - if (set == g.s.bDeaf) { - g.mw->qaAudioDeaf->setChecked(set); - g.mw->qaAudioDeaf->trigger(); + if (set == Global::get().s.bDeaf) { + Global::get().mw->qaAudioDeaf->setChecked(set); + Global::get().mw->qaAudioDeaf->trigger(); } else { - g.mw->qaAudioDeaf->setChecked(!set); - g.mw->qaAudioDeaf->trigger(); + Global::get().mw->qaAudioDeaf->setChecked(!set); + Global::get().mw->qaAudioDeaf->trigger(); } } iter = qmRequest.find(QLatin1String("starttalking")); if (iter != qmRequest.constEnd()) { - g.mw->on_PushToTalk_triggered(true, QVariant()); + Global::get().mw->on_PushToTalk_triggered(true, QVariant()); } iter = qmRequest.find(QLatin1String("stoptalking")); if (iter != qmRequest.constEnd()) { - g.mw->on_PushToTalk_triggered(false, QVariant()); + Global::get().mw->on_PushToTalk_triggered(false, QVariant()); } ack = true; } else if (request.nodeName() == QLatin1String("url")) { - if (g.sh && g.sh->isRunning() && g.uiSession) { + if (Global::get().sh && Global::get().sh->isRunning() && Global::get().uiSession) { QString host, user, pw; unsigned short port; QUrl u; - g.sh->getConnectionInfo(host, port, user, pw); + Global::get().sh->getConnectionInfo(host, port, user, pw); u.setScheme(QLatin1String("mumble")); u.setHost(host); u.setPort(port); @@ -189,7 +186,7 @@ void SocketRPCClient::processXml() { u.setQuery(query); QStringList path; - Channel *c = ClientUser::get(g.uiSession)->cChannel; + Channel *c = ClientUser::get(Global::get().uiSession)->cChannel; while (c->cParent) { path.prepend(c->qsName); c = c->cParent; @@ -203,7 +200,7 @@ void SocketRPCClient::processXml() { QUrl u = iter.value().toUrl(); if (u.isValid() && u.scheme() == QLatin1String("mumble")) { OpenURLEvent *oue = new OpenURLEvent(u); - qApp->postEvent(g.mw, oue); + qApp->postEvent(Global::get().mw, oue); ack = true; } } else { diff --git a/src/mumble/TalkingUI.cpp b/src/mumble/TalkingUI.cpp index 9417ccc68..0aec811b6 100644 --- a/src/mumble/TalkingUI.cpp +++ b/src/mumble/TalkingUI.cpp @@ -11,6 +11,7 @@ #include "TalkingUIComponent.h" #include "UserModel.h" #include "widgets/MultiStyleWidgetWrapper.h" +#include "Global.h" #include <QGroupBox> #include <QGuiApplication> @@ -31,10 +32,6 @@ #include <algorithm> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - TalkingUI::TalkingUI(QWidget *parent) : QWidget(parent), m_containers(), m_currentSelection(nullptr) { setupUI(); } @@ -233,12 +230,12 @@ void TalkingUI::setupUI() { // properly and as the TalkingUI doesn't provide context help anyways, this is not a big loss. setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); - connect(g.mw->qtvUsers->selectionModel(), &QItemSelectionModel::currentChanged, this, + connect(Global::get().mw->qtvUsers->selectionModel(), &QItemSelectionModel::currentChanged, this, &TalkingUI::on_mainWindowSelectionChanged); } void TalkingUI::setFontSize(MultiStyleWidgetWrapper &widgetWrapper) { - const double fontFactor = g.s.iTalkingUI_RelativeFontSize / 100.0; + const double fontFactor = Global::get().s.iTalkingUI_RelativeFontSize / 100.0; const int origLineHeight = QFontMetrics(font()).height(); if (font().pixelSize() >= 0) { @@ -333,10 +330,10 @@ void TalkingUI::addChannel(const Channel *channel) { if (findContainer(channel->iId, ContainerType::CHANNEL) < 0) { // Create a QGroupBox for this channel const QString channelName = - createChannelName(channel, g.s.bTalkingUI_AbbreviateChannelNames, g.s.iTalkingUI_PrefixCharCount, - g.s.iTalkingUI_PostfixCharCount, g.s.iTalkingUI_MaxChannelNameLength, - g.s.iTalkingUI_ChannelHierarchyDepth, g.s.qsTalkingUI_ChannelSeparator, - g.s.qsTalkingUI_AbbreviationReplacement, g.s.bTalkingUI_AbbreviateCurrentChannel); + createChannelName(channel, Global::get().s.bTalkingUI_AbbreviateChannelNames, Global::get().s.iTalkingUI_PrefixCharCount, + Global::get().s.iTalkingUI_PostfixCharCount, Global::get().s.iTalkingUI_MaxChannelNameLength, + Global::get().s.iTalkingUI_ChannelHierarchyDepth, Global::get().s.qsTalkingUI_ChannelSeparator, + Global::get().s.qsTalkingUI_AbbreviationReplacement, Global::get().s.bTalkingUI_AbbreviateCurrentChannel); std::unique_ptr< TalkingUIChannel > channelContainer = std::make_unique< TalkingUIChannel >(channel->iId, channelName, *this); @@ -380,7 +377,7 @@ TalkingUIUser *TalkingUI::findOrAddUser(const ClientUser *user) { if (!oldUserEntry || !nameMatches) { // Create an entry for this user - bool isSelf = g.uiSession == user->uiSession; + bool isSelf = Global::get().uiSession == user->uiSession; int channelIndex = findContainer(user->cChannel->iId, ContainerType::CHANNEL); if (channelIndex) { @@ -397,9 +394,9 @@ TalkingUIUser *TalkingUI::findOrAddUser(const ClientUser *user) { TalkingUIUser *newUserEntry = userEntry.get(); // * 1000 as the setting is in seconds whereas the timer expects milliseconds - userEntry->setLifeTime(g.s.iTalkingUI_SilentUserLifeTime * 1000); + userEntry->setLifeTime(Global::get().s.iTalkingUI_SilentUserLifeTime * 1000); - userEntry->restrictLifetime(!isSelf || !g.s.bTalkingUI_LocalUserStaysVisible); + userEntry->restrictLifetime(!isSelf || !Global::get().s.bTalkingUI_LocalUserStaysVisible); userEntry->setPriority(isSelf ? EntryPriority::HIGH : EntryPriority::DEFAULT); @@ -407,7 +404,7 @@ TalkingUIUser *TalkingUI::findOrAddUser(const ClientUser *user) { &TalkingUI::on_userLocalVolumeAdjustmentsChanged); // If this user is currently selected, mark him/her as such - if (g.mw && g.mw->pmModel && g.mw->pmModel->getSelectedUser() == user) { + if (Global::get().mw && Global::get().mw->pmModel && Global::get().mw->pmModel->getSelectedUser() == user) { setSelection(UserSelection(userEntry->getWidget(), userEntry->getAssociatedUserSession())); } @@ -546,7 +543,7 @@ void TalkingUI::mousePressEvent(QMouseEvent *event) { } if (foundTarget) { - if (event->button() == Qt::RightButton && g.mw) { + if (event->button() == Qt::RightButton && Global::get().mw) { // If an entry is selected and the right mouse button was clicked, we pretend as if the user had clicked on // the client in the MainWindow. For this to work we map the global mouse position to the local coordinate // system of the UserView in the MainWindow. The function will use some internal logic to determine the user @@ -554,8 +551,8 @@ void TalkingUI::mousePressEvent(QMouseEvent *event) { // currently selected item. This item we have updated to the correct one with the setSelection() call above // resulting in the proper context menu being shown at the position of the mouse which in this case is in // the TalkingUI. - QMetaObject::invokeMethod(g.mw, "on_qtvUsers_customContextMenuRequested", Qt::QueuedConnection, - Q_ARG(QPoint, g.mw->qtvUsers->mapFromGlobal(event->globalPos())), Q_ARG(bool, false)); + QMetaObject::invokeMethod(Global::get().mw, "on_qtvUsers_customContextMenuRequested", Qt::QueuedConnection, + Q_ARG(QPoint, Global::get().mw->qtvUsers->mapFromGlobal(event->globalPos())), Q_ARG(bool, false)); } } else { // Clear selection @@ -619,13 +616,13 @@ void TalkingUI::on_mainWindowSelectionChanged(const QModelIndex ¤t, const Q_UNUSED(previous); // Sync the selection in the MainWindow to the TalkingUI - if (g.mw && g.mw->pmModel) { + if (Global::get().mw && Global::get().mw->pmModel) { bool clearSelection = true; - const ClientUser *user = g.mw->pmModel->getUser(current); - const Channel *channel = g.mw->pmModel->getChannel(current); + const ClientUser *user = Global::get().mw->pmModel->getUser(current); + const Channel *channel = Global::get().mw->pmModel->getChannel(current); - if (g.mw->pmModel->isChannelListener(current)) { + if (Global::get().mw->pmModel->isChannelListener(current)) { TalkingUIChannelListener *listenerEntry = findListener(user->uiSession, channel->iId); if (listenerEntry) { @@ -668,11 +665,11 @@ void TalkingUI::on_mainWindowSelectionChanged(const QModelIndex ¤t, const } void TalkingUI::on_serverSynchronized() { - if (g.s.bTalkingUI_LocalUserStaysVisible) { + if (Global::get().s.bTalkingUI_LocalUserStaysVisible) { // According to the settings the local user should always be visible and as we // can't count on it to change its talking state right after it has connected to // a server, we have to add it manually. - ClientUser *self = ClientUser::get(g.uiSession); + ClientUser *self = ClientUser::get(Global::get().uiSession); findOrAddUser(self); } } @@ -729,10 +726,10 @@ void TalkingUI::on_settingsChanged() { if (channel) { // Update channelContainer->setName( - createChannelName(channel, g.s.bTalkingUI_AbbreviateChannelNames, g.s.iTalkingUI_PrefixCharCount, - g.s.iTalkingUI_PostfixCharCount, g.s.iTalkingUI_MaxChannelNameLength, - g.s.iTalkingUI_ChannelHierarchyDepth, g.s.qsTalkingUI_ChannelSeparator, - g.s.qsTalkingUI_AbbreviationReplacement, g.s.bTalkingUI_AbbreviateCurrentChannel)); + createChannelName(channel, Global::get().s.bTalkingUI_AbbreviateChannelNames, Global::get().s.iTalkingUI_PrefixCharCount, + Global::get().s.iTalkingUI_PostfixCharCount, Global::get().s.iTalkingUI_MaxChannelNameLength, + Global::get().s.iTalkingUI_ChannelHierarchyDepth, Global::get().s.qsTalkingUI_ChannelSeparator, + Global::get().s.qsTalkingUI_AbbreviationReplacement, Global::get().s.bTalkingUI_AbbreviateCurrentChannel)); } else { qCritical("TalkingUI: Can't find channel for stored ID"); } @@ -748,20 +745,20 @@ void TalkingUI::on_settingsChanged() { // The time that a silent user may stick around might have changed as well // * 1000 as the setting is in seconds whereas the timer expects milliseconds - userEntry->setLifeTime(g.s.iTalkingUI_SilentUserLifeTime * 1000); + userEntry->setLifeTime(Global::get().s.iTalkingUI_SilentUserLifeTime * 1000); } } } - const ClientUser *self = ClientUser::get(g.uiSession); + const ClientUser *self = ClientUser::get(Global::get().uiSession); // Whether or not the current user should always be displayed might also have changed, // so we'll have to update that as well. - TalkingUIUser *localUserEntry = findUser(g.uiSession); + TalkingUIUser *localUserEntry = findUser(Global::get().uiSession); if (localUserEntry) { - localUserEntry->restrictLifetime(!g.s.bTalkingUI_LocalUserStaysVisible); + localUserEntry->restrictLifetime(!Global::get().s.bTalkingUI_LocalUserStaysVisible); } else { - if (self && g.s.bTalkingUI_LocalUserStaysVisible) { + if (self && Global::get().s.bTalkingUI_LocalUserStaysVisible) { // Add the local user as it is requested to be displayed findOrAddUser(self); } @@ -771,7 +768,7 @@ void TalkingUI::on_settingsChanged() { // Furthermore whether or not to display the local user's listeners might have changed -> clear all // listeners from the TalkingUI and add them again if appropriate removeAllListeners(); - if (g.s.bTalkingUI_ShowLocalListeners) { + if (Global::get().s.bTalkingUI_ShowLocalListeners) { if (self) { const QSet< int > channels = ChannelListener::getListenedChannelsForUser(self->uiSession); @@ -811,7 +808,7 @@ void TalkingUI::on_userLocalVolumeAdjustmentsChanged(float, float) { } void TalkingUI::on_channelListenerAdded(const ClientUser *user, const Channel *channel) { - if (user->uiSession == g.uiSession && g.s.bTalkingUI_ShowLocalListeners) { + if (user->uiSession == Global::get().uiSession && Global::get().s.bTalkingUI_ShowLocalListeners) { addListener(user, channel); } } @@ -821,10 +818,10 @@ void TalkingUI::on_channelListenerRemoved(const ClientUser *user, const Channel } void TalkingUI::on_channelListenerLocalVolumeAdjustmentChanged(int channelID, float, float) { - TalkingUIChannelListener *listenerEntry = findListener(g.uiSession, channelID); + TalkingUIChannelListener *listenerEntry = findListener(Global::get().uiSession, channelID); const Channel *channel = Channel::get(channelID); - const ClientUser *self = ClientUser::get(g.uiSession); + const ClientUser *self = ClientUser::get(Global::get().uiSession); if (listenerEntry && channel && self) { listenerEntry->setDisplayString(UserModel::createDisplayString(*self, true, channel)); diff --git a/src/mumble/TalkingUIEntry.cpp b/src/mumble/TalkingUIEntry.cpp index 7d9966cb0..0a95b4923 100644 --- a/src/mumble/TalkingUIEntry.cpp +++ b/src/mumble/TalkingUIEntry.cpp @@ -9,6 +9,7 @@ #include "TalkingUI.h" #include "TalkingUIContainer.h" #include "UserModel.h" +#include "Global.h" #include <QHBoxLayout> #include <QLabel> @@ -18,10 +19,6 @@ #include <QVariant> #include <QWidget> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - TalkingUIEntry::TalkingUIEntry(unsigned int associatedUserSession) : m_associatedUserSession(associatedUserSession) { } @@ -136,7 +133,7 @@ TalkingUIUser::TalkingUIUser(const ClientUser &user) QObject::connect(&m_timer, &QTimer::timeout, [this]() { if (getContainer()) { // We let the TalkingUI handle the removing in order for it to do the necessary - // housekeeping (e.g. making sure there is no active selection for this user). + // housekeeping (e.Global::get(). making sure there is no active selection for this user). getContainer()->m_talkingUI.removeUser(getAssociatedUserSession()); } }); @@ -257,7 +254,7 @@ void TalkingUIUser::setIconSize(int size) { } void TalkingUIUser::setDisplayString(const QString &displayString) { - if (g.uiSession == getAssociatedUserSession()) { + if (Global::get().uiSession == getAssociatedUserSession()) { // Display own name in bold m_nameLabel->setText(QString::fromLatin1("<b>%1</b>").arg(displayString)); } else { diff --git a/src/mumble/TalkingUISelection.cpp b/src/mumble/TalkingUISelection.cpp index bcdecd8b4..12f1f25ff 100644 --- a/src/mumble/TalkingUISelection.cpp +++ b/src/mumble/TalkingUISelection.cpp @@ -6,14 +6,11 @@ #include "TalkingUISelection.h" #include "MainWindow.h" #include "UserModel.h" +#include "Global.h" #include <QVariant> #include <QWidget> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - TalkingUISelection::TalkingUISelection(QWidget *widget) : m_widget(widget) { } @@ -56,8 +53,8 @@ UserSelection::UserSelection(QWidget *widget, unsigned int userSession) } void UserSelection::syncToMainWindow() const { - if (g.mw && g.mw->pmModel) { - g.mw->pmModel->setSelectedUser(m_userSession); + if (Global::get().mw && Global::get().mw->pmModel) { + Global::get().mw->pmModel->setSelectedUser(m_userSession); } } @@ -72,8 +69,8 @@ ChannelSelection::ChannelSelection(QWidget *widget, int channelID) } void ChannelSelection::syncToMainWindow() const { - if (g.mw && g.mw->pmModel) { - g.mw->pmModel->setSelectedChannel(m_channelID); + if (Global::get().mw && Global::get().mw->pmModel) { + Global::get().mw->pmModel->setSelectedChannel(m_channelID); } } @@ -88,8 +85,8 @@ ListenerSelection::ListenerSelection(QWidget *widget, unsigned int userSession, } void ListenerSelection::syncToMainWindow() const { - if (g.mw && g.mw->pmModel) { - g.mw->pmModel->setSelectedChannelListener(m_userSession, m_channelID); + if (Global::get().mw && Global::get().mw->pmModel) { + Global::get().mw->pmModel->setSelectedChannelListener(m_userSession, m_channelID); } } diff --git a/src/mumble/TextToSpeech_macx.mm b/src/mumble/TextToSpeech_macx.mm index 83533540c..35d033445 100644 --- a/src/mumble/TextToSpeech_macx.mm +++ b/src/mumble/TextToSpeech_macx.mm @@ -38,7 +38,6 @@ #import <AppKit/AppKit.h> -#include "Global.h" #include "TextToSpeech.h" @interface MUSpeechSynthesizerPrivateHelper : NSObject { diff --git a/src/mumble/TextToSpeech_unix.cpp b/src/mumble/TextToSpeech_unix.cpp index 30d8db377..8c4b5fe7c 100644 --- a/src/mumble/TextToSpeech_unix.cpp +++ b/src/mumble/TextToSpeech_unix.cpp @@ -4,6 +4,7 @@ // Mumble source tree or at <https://www.mumble.info/LICENSE>. #include "TextToSpeech.h" +#include "Global.h" #ifdef USE_SPEECHD # ifdef USE_SPEECHD_PKGCONFIG @@ -15,10 +16,6 @@ #include <QtCore/QLocale> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - class TextToSpeechPrivate { #ifdef USE_SPEECHD protected: @@ -60,10 +57,10 @@ void TextToSpeechPrivate::ensureInitialized() { qWarning("TextToSpeech: Failed to contact speech dispatcher."); } else { QString lang; - if (!g.s.qsTTSLanguage.isEmpty()) { - lang = g.s.qsTTSLanguage; - } else if (!g.s.qsLanguage.isEmpty()) { - QLocale locale(g.s.qsLanguage); + if (!Global::get().s.qsTTSLanguage.isEmpty()) { + lang = Global::get().s.qsTTSLanguage; + } else if (!Global::get().s.qsLanguage.isEmpty()) { + QLocale locale(Global::get().s.qsLanguage); lang = locale.bcp47Name(); } else { QLocale systemLocale; diff --git a/src/mumble/Themes.cpp b/src/mumble/Themes.cpp index 34d350ce9..aba833d0b 100644 --- a/src/mumble/Themes.cpp +++ b/src/mumble/Themes.cpp @@ -6,9 +6,6 @@ #include "Themes.h" #include "MainWindow.h" #include "MumbleApplication.h" - -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. #include "Global.h" boost::optional< ThemeInfo::StyleInfo > Themes::getConfiguredStyle(const Settings &settings) { @@ -58,7 +55,7 @@ void Themes::applyFallback() { } bool Themes::applyConfigured() { - boost::optional< ThemeInfo::StyleInfo > style = Themes::getConfiguredStyle(g.s); + boost::optional< ThemeInfo::StyleInfo > style = Themes::getConfiguredStyle(Global::get().s); if (!style) { return false; } @@ -102,8 +99,8 @@ bool Themes::apply() { applyFallback(); } - if (g.mw) { - g.mw->qteLog->document()->setDefaultStyleSheet(qApp->styleSheet()); + if (Global::get().mw) { + Global::get().mw->qteLog->document()->setDefaultStyleSheet(qApp->styleSheet()); } return result; } @@ -113,7 +110,7 @@ ThemeMap Themes::getThemes() { } QDir Themes::getUserThemesDirectory() { - return QDir(g.qdBasePath.absolutePath() + QLatin1String("/Themes")); + return QDir(Global::get().qdBasePath.absolutePath() + QLatin1String("/Themes")); } QVector< QDir > Themes::getSearchDirectories() { @@ -131,7 +128,7 @@ QVector< QDir > Themes::getSearchDirectories() { } QString Themes::userStylesheetPath() { - return g.qdBasePath.absolutePath() + QLatin1String("/user.qss"); + return Global::get().qdBasePath.absolutePath() + QLatin1String("/user.qss"); } bool Themes::readStylesheet(const QString &stylesheetFn, QString &stylesheetContent) { diff --git a/src/mumble/Tokens.cpp b/src/mumble/Tokens.cpp index 514b2d6d9..38ba16fac 100644 --- a/src/mumble/Tokens.cpp +++ b/src/mumble/Tokens.cpp @@ -7,17 +7,14 @@ #include "Database.h" #include "ServerHandler.h" - -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. #include "Global.h" Tokens::Tokens(QWidget *p) : QDialog(p) { setupUi(this); qlwTokens->setAccessibleName(tr("Tokens")); - qbaDigest = g.sh->qbaDigest; - QStringList tokens = g.db->getTokens(qbaDigest); + qbaDigest = Global::get().sh->qbaDigest; + QStringList tokens = Global::get().db->getTokens(qbaDigest); tokens.sort(); foreach (const QString &qs, tokens) { QListWidgetItem *qlwi = new QListWidgetItem(qs); @@ -35,8 +32,8 @@ void Tokens::accept() { if (!text.isEmpty()) qsl << text; } - g.db->setTokens(qbaDigest, qsl); - g.sh->setTokens(qsl); + Global::get().db->setTokens(qbaDigest, qsl); + Global::get().sh->setTokens(qsl); QDialog::accept(); } diff --git a/src/mumble/Usage.cpp b/src/mumble/Usage.cpp index 95b7c2a68..7a7ef83ca 100644 --- a/src/mumble/Usage.cpp +++ b/src/mumble/Usage.cpp @@ -29,8 +29,8 @@ Usage::Usage(QObject *p) : QObject(p) { } void Usage::registerUsage() { - if (!g.s.bUsage - || g.s.uiUpdateCounter == 0) // Only register usage if allowed by the user and first wizard run has finished + if (!Global::get().s.bUsage + || Global::get().s.uiUpdateCounter == 0) // Only register usage if allowed by the user and first wizard run has finished return; QDomDocument doc; @@ -44,17 +44,17 @@ void Usage::registerUsage() { tag = doc.createElement(QLatin1String("in")); root.appendChild(tag); - t = doc.createTextNode(g.s.qsAudioInput); + t = doc.createTextNode(Global::get().s.qsAudioInput); tag.appendChild(t); tag = doc.createElement(QLatin1String("out")); root.appendChild(tag); - t = doc.createTextNode(g.s.qsAudioOutput); + t = doc.createTextNode(Global::get().s.qsAudioOutput); tag.appendChild(t); tag = doc.createElement(QLatin1String("lcd")); root.appendChild(tag); - t = doc.createTextNode(QString::number(g.lcd->hasDevices() ? 1 : 0)); + t = doc.createTextNode(QString::number(Global::get().lcd->hasDevices() ? 1 : 0)); tag.appendChild(t); QBuffer *qb = new QBuffer(); @@ -65,7 +65,7 @@ void Usage::registerUsage() { Network::prepareRequest(req); req.setHeader(QNetworkRequest::ContentTypeHeader, QLatin1String("text/xml")); - QNetworkReply *rep = g.nam->post(req, qb); + QNetworkReply *rep = Global::get().nam->post(req, qb); qb->setParent(rep); connect(rep, SIGNAL(finished()), rep, SLOT(deleteLater())); diff --git a/src/mumble/UserEdit.cpp b/src/mumble/UserEdit.cpp index c23fd746b..e0da4a1ff 100644 --- a/src/mumble/UserEdit.cpp +++ b/src/mumble/UserEdit.cpp @@ -9,14 +9,11 @@ #include "ServerHandler.h" #include "User.h" #include "UserListModel.h" +#include "Global.h" #include <QtCore/QItemSelectionModel> #include <QtWidgets/QMenu> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - UserEdit::UserEdit(const MumbleProto::UserList &userList, QWidget *p) : QDialog(p), m_model(new UserListModel(userList, this)), m_filter(new UserListFilterProxyModel(this)) { setupUi(this); @@ -58,7 +55,7 @@ UserEdit::UserEdit(const MumbleProto::UserList &userList, QWidget *p) void UserEdit::accept() { if (m_model->isUserListDirty()) { MumbleProto::UserList userList = m_model->getUserListUpdate(); - g.sh->sendMessage(userList); + Global::get().sh->sendMessage(userList); } QDialog::accept(); diff --git a/src/mumble/UserInformation.cpp b/src/mumble/UserInformation.cpp index a5780a81b..f234169c7 100644 --- a/src/mumble/UserInformation.cpp +++ b/src/mumble/UserInformation.cpp @@ -10,13 +10,10 @@ #include "HostAddress.h" #include "ServerHandler.h" #include "ViewCert.h" +#include "Global.h" #include <QtCore/QUrl> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - static QString decode_utf8_qssl_string(const QString &input) { QString i = input; return QUrl::fromPercentEncoding(i.replace(QLatin1String("\\x"), QLatin1String("%")).toLatin1()); @@ -58,7 +55,7 @@ void UserInformation::tick() { bRequested = true; - g.sh->requestUserStats(uiSession, true); + Global::get().sh->requestUserStats(uiSession, true); } void UserInformation::on_qpbCertificate_clicked() { @@ -150,7 +147,7 @@ void UserInformation::update(const MumbleProto::UserStats &msg) { QStringList qsl; for (int i = 0; i < msg.celt_versions_size(); ++i) { int v = msg.celt_versions(i); - CELTCodec *cc = g.qmCodecs.value(v); + CELTCodec *cc = Global::get().qmCodecs.value(v); if (cc) qsl << cc->version(); else diff --git a/src/mumble/UserLocalNicknameDialog.cpp b/src/mumble/UserLocalNicknameDialog.cpp index 6c31a9cbb..14a9489ad 100644 --- a/src/mumble/UserLocalNicknameDialog.cpp +++ b/src/mumble/UserLocalNicknameDialog.cpp @@ -7,14 +7,11 @@ #include "ClientUser.h" #include "Database.h" #include "MainWindow.h" +#include "Global.h" #include <QtGui/QCloseEvent> #include <QtWidgets/QPushButton> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - UserLocalNicknameDialog::UserLocalNicknameDialog( unsigned int sessionId, std::unordered_map< unsigned int, NicknameDialogPtr > &qmUserNicknameTracker) @@ -35,7 +32,7 @@ UserLocalNicknameDialog::UserLocalNicknameDialog( m_originalNickname = qleUserLocalNickname->text(); } - if (g.mw && g.mw->windowFlags() & Qt::WindowStaysOnTopHint) { + if (Global::get().mw && Global::get().mw->windowFlags() & Qt::WindowStaysOnTopHint) { // If the main window is set to always be on top of other windows, we should make the // nickname dialog behave the same in order for it to not get hidden behind the main window. setWindowFlags(Qt::WindowStaysOnTopHint); @@ -76,9 +73,9 @@ void UserLocalNicknameDialog::on_qbbUserLocalNickname_clicked(QAbstractButton *b ClientUser *user = ClientUser::get(m_clientSession); if (user) { if (!user->qsHash.isEmpty()) { - g.db->setUserLocalNickname(user->qsHash, user->getLocalNickname()); + Global::get().db->setUserLocalNickname(user->qsHash, user->getLocalNickname()); } else { - g.mw->logChangeNotPermanent(QObject::tr("Local Nickname Adjustment..."), user); + Global::get().mw->logChangeNotPermanent(QObject::tr("Local Nickname Adjustment..."), user); } } UserLocalNicknameDialog::close(); diff --git a/src/mumble/UserLocalVolumeDialog.cpp b/src/mumble/UserLocalVolumeDialog.cpp index 20ddea688..a4f5981a1 100644 --- a/src/mumble/UserLocalVolumeDialog.cpp +++ b/src/mumble/UserLocalVolumeDialog.cpp @@ -38,16 +38,13 @@ #include "ClientUser.h" #include "Database.h" #include "MainWindow.h" +#include "Global.h" #include <QtGui/QCloseEvent> #include <QtWidgets/QPushButton> #include <cmath> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - UserLocalVolumeDialog::UserLocalVolumeDialog(unsigned int sessionId, QMap< unsigned int, UserLocalVolumeDialog * > *qmUserVolTracker) : QDialog(nullptr), m_clientSession(sessionId), m_qmUserVolTracker(qmUserVolTracker) { @@ -63,7 +60,7 @@ UserLocalVolumeDialog::UserLocalVolumeDialog(unsigned int sessionId, m_originalVolumeAdjustmentDecibel = qsUserLocalVolume->value(); } - if (g.mw && g.mw->windowFlags() & Qt::WindowStaysOnTopHint) { + if (Global::get().mw && Global::get().mw->windowFlags() & Qt::WindowStaysOnTopHint) { // If the main window is set to always be on top of other windows, we should make the // volume dialog behave the same in order for it to not get hidden behind the main window. setWindowFlags(Qt::WindowStaysOnTopHint); @@ -107,9 +104,9 @@ void UserLocalVolumeDialog::on_qbbUserLocalVolume_clicked(QAbstractButton *butto ClientUser *user = ClientUser::get(m_clientSession); if (user) { if (!user->qsHash.isEmpty()) { - g.db->setUserLocalVolume(user->qsHash, user->getLocalVolumeAdjustments()); + Global::get().db->setUserLocalVolume(user->qsHash, user->getLocalVolumeAdjustments()); } else { - g.mw->logChangeNotPermanent(QObject::tr("Local Volume Adjustment..."), user); + Global::get().mw->logChangeNotPermanent(QObject::tr("Local Volume Adjustment..."), user); } } UserLocalVolumeDialog::close(); diff --git a/src/mumble/UserModel.cpp b/src/mumble/UserModel.cpp index b1253f48d..14b681b71 100644 --- a/src/mumble/UserModel.cpp +++ b/src/mumble/UserModel.cpp @@ -19,6 +19,7 @@ #include "ServerHandler.h" #include "Usage.h" #include "User.h" +#include "Global.h" #include <QtCore/QMimeData> #include <QtCore/QStack> @@ -27,10 +28,6 @@ #include <QtWidgets/QToolTip> #include <QtWidgets/QWhatsThis> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - QHash< const Channel *, ModelItem * > ModelItem::c_qhChannels; QHash< const ClientUser *, ModelItem * > ModelItem::c_qhUsers; QHash< const ClientUser *, QList< ModelItem * > > ModelItem::s_userProxies; @@ -223,10 +220,10 @@ QString ModelItem::hash() const { chash.addData(cChan->qsName.toUtf8()); chash.addData(QString::number(cChan->iId).toUtf8()); - if (g.sh && g.sh->isRunning()) { + if (Global::get().sh && Global::get().sh->isRunning()) { QString host, user, pw; unsigned short port; - g.sh->getConnectionInfo(host, port, user, pw); + Global::get().sh->getConnectionInfo(host, port, user, pw); chash.addData(host.toUtf8()); chash.addData(QString::number(port).toUtf8()); } @@ -262,7 +259,7 @@ UserModel::UserModel(QObject *p) : QAbstractItemModel(p) { qiLock_unlocked = QIcon(QLatin1String("skin:lock_unlocked.svg")); qiEar = QIcon(QLatin1String("skin:ear.svg")); - ModelItem::bUsersTop = g.s.bUserTop; + ModelItem::bUsersTop = Global::get().s.bUserTop; uiSessionComment = 0; iChannelDescription = -1; @@ -401,7 +398,7 @@ QString UserModel::stringIndex(const QModelIndex &idx) const { } QModelIndex UserModel::getSelectedIndex() const { - QTreeView *v = g.mw->qtvUsers; + QTreeView *v = Global::get().mw->qtvUsers; if (v) { QItemSelectionModel *sel = v->selectionModel(); @@ -419,7 +416,7 @@ QVariant UserModel::data(const QModelIndex &idx, int role) const { Channel *c = item->cChan; ClientUser *p = item->pUser; - ClientUser *pSelf = ClientUser::get(g.uiSession); + ClientUser *pSelf = ClientUser::get(Global::get().uiSession); if (!c && !p) { return QVariant(); @@ -464,14 +461,14 @@ QVariant UserModel::data(const QModelIndex &idx, int role) const { } break; case Qt::FontRole: - if ((idx.column() == 0) && (p->uiSession == g.uiSession)) { - QFont f = g.mw->font(); + if ((idx.column() == 0) && (p->uiSession == Global::get().uiSession)) { + QFont f = Global::get().mw->font(); f.setBold(!f.bold()); f.setItalic(item->isListener); return f; } if (item->isListener) { - QFont f = g.mw->font(); + QFont f = Global::get().mw->font(); f.setItalic(true); return f; } @@ -496,7 +493,7 @@ QVariant UserModel::data(const QModelIndex &idx, int role) const { // ClientUser doesn't contain a push-to-mute // state because it isn't sent to the server. // We can show the icon only for the local user. - if (p == pSelf && g.bPushToMute && !item->isListener) + if (p == pSelf && Global::get().bPushToMute && !item->isListener) l << qiMutedPushToMute; if (p->bMute || item->isListener) l << qiMutedServer; @@ -524,8 +521,8 @@ QVariant UserModel::data(const QModelIndex &idx, int role) const { switch (role) { case Qt::DecorationRole: if (idx.column() == 0) { - if (g.uiSession && qsLinked.contains(c)) { - if (ClientUser::get(g.uiSession)->cChannel == c) + if (Global::get().uiSession && qsLinked.contains(c)) { + if (ClientUser::get(Global::get().uiSession)->cChannel == c) return qiActiveChannel; else return qiLinkedChannel; @@ -535,7 +532,7 @@ QVariant UserModel::data(const QModelIndex &idx, int role) const { break; case Qt::DisplayRole: if (idx.column() == 0) { - if (!g.s.bShowUserCount || item->iUsers == 0) + if (!Global::get().s.bShowUserCount || item->iUsers == 0) return c->qsName; return QString::fromLatin1("%1 (%2)").arg(c->qsName).arg(item->iUsers); @@ -556,11 +553,11 @@ QVariant UserModel::data(const QModelIndex &idx, int role) const { } return l; case Qt::FontRole: - if (g.uiSession) { - Channel *home = ClientUser::get(g.uiSession)->cChannel; + if (Global::get().uiSession) { + Channel *home = ClientUser::get(Global::get().uiSession)->cChannel; if ((c == home) || qsLinked.contains(c)) { - QFont f = g.mw->font(); + QFont f = Global::get().mw->font(); if (qsLinked.count() > 1) f.setItalic(!f.italic()); if (c == home) @@ -570,7 +567,7 @@ QVariant UserModel::data(const QModelIndex &idx, int role) const { } break; case Qt::BackgroundRole: - if ((c->iId == 0) && g.sh && g.sh->isStrong()) { + if ((c->iId == 0) && Global::get().sh && Global::get().sh->isStrong()) { QColor qc(Qt::green); qc.setAlpha(32); return qc; @@ -611,14 +608,14 @@ QVariant UserModel::otherRoles(const QModelIndex &idx, int role) const { QString qsImage; if (!p->qbaTextureHash.isEmpty()) { if (p->qbaTexture.isEmpty()) { - p->qbaTexture = g.db->blob(p->qbaTextureHash); + p->qbaTexture = Global::get().db->blob(p->qbaTextureHash); if (p->qbaTexture.isEmpty()) { MumbleProto::RequestBlob mprb; mprb.add_session_texture(p->uiSession); - g.sh->sendMessage(mprb); + Global::get().sh->sendMessage(mprb); } else { #ifdef USE_OVERLAY - g.o->verifyTexture(p); + Global::get().o->verifyTexture(p); #endif } } @@ -647,13 +644,13 @@ QVariant UserModel::otherRoles(const QModelIndex &idx, int role) const { return p->qsName; } else { if (p->qsComment.isEmpty()) { - p->qsComment = QString::fromUtf8(g.db->blob(p->qbaCommentHash)); + p->qsComment = QString::fromUtf8(Global::get().db->blob(p->qbaCommentHash)); if (p->qsComment.isEmpty()) { const_cast< UserModel * >(this)->uiSessionComment = p->uiSession; MumbleProto::RequestBlob mprb; mprb.add_session_comment(p->uiSession); - g.sh->sendMessage(mprb); + Global::get().sh->sendMessage(mprb); return QVariant(); } } @@ -670,13 +667,13 @@ QVariant UserModel::otherRoles(const QModelIndex &idx, int role) const { return c->qsName; } else { if (c->qsDesc.isEmpty()) { - c->qsDesc = QString::fromUtf8(g.db->blob(c->qbaDescHash)); + c->qsDesc = QString::fromUtf8(Global::get().db->blob(c->qbaDescHash)); if (c->qsDesc.isEmpty()) { const_cast< UserModel * >(this)->iChannelDescription = c->iId; MumbleProto::RequestBlob mprb; mprb.add_channel_description(c->iId); - g.sh->sendMessage(mprb); + Global::get().sh->sendMessage(mprb); return QVariant(); } } @@ -871,7 +868,7 @@ ModelItem *UserModel::moveItem(ModelItem *oldparent, ModelItem *newparent, Model // Check whether the moved item is currently selected and if so, store it as a persistent // model index in active. Also clear the selection as we're going to mess with the active // item. - QTreeView *v = g.mw->qtvUsers; + QTreeView *v = Global::get().mw->qtvUsers; QItemSelectionModel *sel = v->selectionModel(); QPersistentModelIndex active; QModelIndex oindex = createIndex(oldrow, 0, oldItem); @@ -967,7 +964,7 @@ void UserModel::expandAll(Channel *c) { } while (!chans.isEmpty()) { c = chans.pop(); - g.mw->qtvUsers->setExpanded(index(c), true); + Global::get().mw->qtvUsers->setExpanded(index(c), true); } } @@ -975,7 +972,7 @@ void UserModel::collapseEmpty(Channel *c) { while (c) { ModelItem *mi = ModelItem::c_qhChannels.value(c); if (mi->iUsers == 0) - g.mw->qtvUsers->setExpanded(index(c), false); + Global::get().mw->qtvUsers->setExpanded(index(c), false); else break; c = c->cParent; @@ -983,17 +980,17 @@ void UserModel::collapseEmpty(Channel *c) { } void UserModel::ensureSelfVisible() { - if (!g.uiSession) + if (!Global::get().uiSession) return; - g.mw->qtvUsers->scrollTo(index(ClientUser::get(g.uiSession))); + Global::get().mw->qtvUsers->scrollTo(index(ClientUser::get(Global::get().uiSession))); } void UserModel::recheckLinks() { - if (!g.uiSession) + if (!Global::get().uiSession) return; - ClientUser *clientUser = ClientUser::get(g.uiSession); + ClientUser *clientUser = ClientUser::get(Global::get().uiSession); if (!clientUser) return; @@ -1062,8 +1059,8 @@ void UserModel::removeUser(ClientUser *p) { // First remove all listener proxies this user has at the moment removeChannelListener(p); - if (g.uiSession && p->uiSession == g.uiSession) - g.uiSession = 0; + if (Global::get().uiSession && p->uiSession == Global::get().uiSession) + Global::get().uiSession = 0; Channel *c = p->cChannel; ModelItem *item = ModelItem::c_qhUsers.value(p); ModelItem *citem = ModelItem::c_qhChannels.value(c); @@ -1085,7 +1082,7 @@ void UserModel::removeUser(ClientUser *p) { citem = citem->parent; } - if (g.s.ceExpand == Settings::ChannelsWithUsers) + if (Global::get().s.ceExpand == Settings::ChannelsWithUsers) collapseEmpty(c); updateOverlay(); @@ -1102,7 +1099,7 @@ void UserModel::moveUser(ClientUser *p, Channel *np) { item = moveItem(opi, pi, item); - if (p->uiSession == g.uiSession) { + if (p->uiSession == Global::get().uiSession) { ensureSelfVisible(); recheckLinks(); } @@ -1116,7 +1113,7 @@ void UserModel::moveUser(ClientUser *p, Channel *np) { pi = pi->parent; } - if (g.s.ceExpand == Settings::ChannelsWithUsers) { + if (Global::get().s.ceExpand == Settings::ChannelsWithUsers) { expandAll(np); collapseEmpty(oc); } @@ -1166,27 +1163,27 @@ void UserModel::setComment(ClientUser *cu, const QString &comment) { cu->qsComment = comment; if (!comment.isEmpty()) { - g.db->setBlob(cu->qbaCommentHash, cu->qsComment.toUtf8()); + Global::get().db->setBlob(cu->qbaCommentHash, cu->qsComment.toUtf8()); if (cu->uiSession == uiSessionComment) { uiSessionComment = 0; item->bCommentSeen = false; if (bClicked) { - QRect r = g.mw->qtvUsers->visualRect(index(cu)); - QWhatsThis::showText(g.mw->qtvUsers->viewport()->mapToGlobal(r.bottomRight()), - data(index(cu, 0), Qt::ToolTipRole).toString(), g.mw->qtvUsers); + QRect r = Global::get().mw->qtvUsers->visualRect(index(cu)); + QWhatsThis::showText(Global::get().mw->qtvUsers->viewport()->mapToGlobal(r.bottomRight()), + data(index(cu, 0), Qt::ToolTipRole).toString(), Global::get().mw->qtvUsers); } else { - QToolTip::showText(QCursor::pos(), data(index(cu, 0), Qt::ToolTipRole).toString(), g.mw->qtvUsers); + QToolTip::showText(QCursor::pos(), data(index(cu, 0), Qt::ToolTipRole).toString(), Global::get().mw->qtvUsers); } } else if (cu->uiSession == ~uiSessionComment) { uiSessionComment = 0; - if (cu->uiSession == g.uiSession) { - QTimer::singleShot(0, g.mw, SLOT(on_qaSelfComment_triggered())); + if (cu->uiSession == Global::get().uiSession) { + QTimer::singleShot(0, Global::get().mw, SLOT(on_qaSelfComment_triggered())); } else { - g.mw->cuContextUser = cu; - QTimer::singleShot(0, g.mw, SLOT(on_qaUserCommentView_triggered())); + Global::get().mw->cuContextUser = cu; + QTimer::singleShot(0, Global::get().mw, SLOT(on_qaUserCommentView_triggered())); } } else { - item->bCommentSeen = g.db->seenComment(item->hash(), cu->qbaCommentHash); + item->bCommentSeen = Global::get().db->seenComment(item->hash(), cu->qbaCommentHash); newstate = item->bCommentSeen ? 2 : 1; } } else { @@ -1209,7 +1206,7 @@ void UserModel::setCommentHash(ClientUser *cu, const QByteArray &hash) { cu->qsComment = QString(); cu->qbaCommentHash = hash; - item->bCommentSeen = g.db->seenComment(item->hash(), cu->qbaCommentHash); + item->bCommentSeen = Global::get().db->seenComment(item->hash(), cu->qbaCommentHash); newstate = item->bCommentSeen ? 2 : 1; if (oldstate != newstate) { @@ -1230,20 +1227,20 @@ void UserModel::setComment(Channel *c, const QString &comment) { c->qsDesc = comment; if (!comment.isEmpty()) { - g.db->setBlob(c->qbaDescHash, c->qsDesc.toUtf8()); + Global::get().db->setBlob(c->qbaDescHash, c->qsDesc.toUtf8()); if (c->iId == iChannelDescription) { iChannelDescription = -1; item->bCommentSeen = false; if (bClicked) { - QRect r = g.mw->qtvUsers->visualRect(index(c)); - QWhatsThis::showText(g.mw->qtvUsers->viewport()->mapToGlobal(r.bottomRight()), - data(index(c, 0), Qt::ToolTipRole).toString(), g.mw->qtvUsers); + QRect r = Global::get().mw->qtvUsers->visualRect(index(c)); + QWhatsThis::showText(Global::get().mw->qtvUsers->viewport()->mapToGlobal(r.bottomRight()), + data(index(c, 0), Qt::ToolTipRole).toString(), Global::get().mw->qtvUsers); } else { - QToolTip::showText(QCursor::pos(), data(index(c, 0), Qt::ToolTipRole).toString(), g.mw->qtvUsers); + QToolTip::showText(QCursor::pos(), data(index(c, 0), Qt::ToolTipRole).toString(), Global::get().mw->qtvUsers); } } else { - item->bCommentSeen = g.db->seenComment(item->hash(), c->qbaDescHash); + item->bCommentSeen = Global::get().db->seenComment(item->hash(), c->qbaDescHash); newstate = item->bCommentSeen ? 2 : 1; } } else { @@ -1266,7 +1263,7 @@ void UserModel::setCommentHash(Channel *c, const QByteArray &hash) { c->qsDesc = QString(); c->qbaDescHash = hash; - item->bCommentSeen = g.db->seenComment(item->hash(), hash); + item->bCommentSeen = Global::get().db->seenComment(item->hash(), hash); newstate = item->bCommentSeen ? 2 : 1; if (oldstate != newstate) { @@ -1288,9 +1285,9 @@ void UserModel::seenComment(const QModelIndex &idx) { emit dataChanged(idx, idx); if (item->pUser) - g.db->setSeenComment(item->hash(), item->pUser->qbaCommentHash); + Global::get().db->setSeenComment(item->hash(), item->pUser->qbaCommentHash); else - g.db->setSeenComment(item->hash(), item->cChan->qbaDescHash); + Global::get().db->setSeenComment(item->hash(), item->cChan->qbaDescHash); } void UserModel::renameChannel(Channel *c, const QString &name) { @@ -1341,8 +1338,8 @@ Channel *UserModel::addChannel(int id, Channel *p, const QString &name) { citem->qlChildren.insert(row, item); endInsertRows(); - if (g.s.ceExpand == Settings::AllChannels) - g.mw->qtvUsers->setExpanded(index(item), true); + if (Global::get().s.ceExpand == Settings::AllChannels) + Global::get().mw->qtvUsers->setExpanded(index(item), true); return c; } @@ -1418,7 +1415,7 @@ void UserModel::setSelectedChannelListener(unsigned int userSession, int channel return; } - QTreeView *v = g.mw->qtvUsers; + QTreeView *v = Global::get().mw->qtvUsers; if (v) { v->setCurrentIndex(idx); } @@ -1461,7 +1458,7 @@ void UserModel::removeChannelListener(ModelItem *item, ModelItem *citem) { citem = citem->parent; } - if (g.s.ceExpand == Settings::ChannelsWithUsers) + if (Global::get().s.ceExpand == Settings::ChannelsWithUsers) collapseEmpty(c); updateOverlay(); @@ -1527,7 +1524,7 @@ void UserModel::moveChannel(Channel *c, Channel *p) { ensureSelfVisible(); - if (g.s.ceExpand == Settings::ChannelsWithUsers) { + if (Global::get().s.ceExpand == Settings::ChannelsWithUsers) { collapseEmpty(oc); } } @@ -1609,7 +1606,7 @@ void UserModel::setSelectedUser(unsigned int session) { return; } - QTreeView *v = g.mw->qtvUsers; + QTreeView *v = Global::get().mw->qtvUsers; if (v) { v->setCurrentIndex(idx); } @@ -1653,7 +1650,7 @@ void UserModel::setSelectedChannel(int id) { return; } - QTreeView *v = g.mw->qtvUsers; + QTreeView *v = Global::get().mw->qtvUsers; if (v) { v->setCurrentIndex(idx); } @@ -1690,7 +1687,7 @@ void UserModel::on_channelListenerLocalVolumeAdjustmentChanged(int channelID, fl Q_UNUSED(oldValue); Q_UNUSED(newValue); - const QModelIndex idx = channelListenerIndex(ClientUser::get(g.uiSession), Channel::get(channelID)); + const QModelIndex idx = channelListenerIndex(ClientUser::get(Global::get().uiSession), Channel::get(channelID)); emit dataChanged(idx, idx); } @@ -1699,8 +1696,8 @@ void UserModel::toggleChannelFiltered(Channel *c) { if (c) { c->bFiltered = !c->bFiltered; - ServerHandlerPtr sh = g.sh; - g.db->setChannelFiltered(sh->qbaDigest, c->iId, c->bFiltered); + ServerHandlerPtr sh = Global::get().sh; + Global::get().db->setChannelFiltered(sh->qbaDigest, c->iId, c->bFiltered); idx = index(c); } @@ -1774,17 +1771,17 @@ bool UserModel::dropMimeData(const QMimeData *md, Qt::DropAction, int row, int c if (!isChannel) { // User dropped somewhere int ret; - switch (g.s.ceUserDrag) { + switch (Global::get().s.ceUserDrag) { case Settings::Ask: ret = - QMessageBox::question(g.mw, QLatin1String("Mumble"), tr("Are you sure you want to drag this user?"), + QMessageBox::question(Global::get().mw, QLatin1String("Mumble"), tr("Are you sure you want to drag this user?"), QMessageBox::Yes, QMessageBox::No); if (ret == QMessageBox::No) return false; break; case Settings::DoNothing: - g.l->log(Log::Information, + Global::get().l->log(Log::Information, MainWindow::tr("You have User Dragging set to \"Do Nothing\" so the user wasn't moved.")); return false; break; @@ -1794,13 +1791,13 @@ bool UserModel::dropMimeData(const QMimeData *md, Qt::DropAction, int row, int c MumbleProto::UserState mpus; mpus.set_session(uiSession); mpus.set_channel_id(c->iId); - g.sh->sendMessage(mpus); + Global::get().sh->sendMessage(mpus); } else if (c->iId != iId) { // Channel dropped somewhere (not on itself) int ret; - switch (g.s.ceChannelDrag) { + switch (Global::get().s.ceChannelDrag) { case Settings::Ask: - ret = QMessageBox::question(g.mw, QLatin1String("Mumble"), + ret = QMessageBox::question(Global::get().mw, QLatin1String("Mumble"), tr("Are you sure you want to drag this channel?"), QMessageBox::Yes, QMessageBox::No); @@ -1808,7 +1805,7 @@ bool UserModel::dropMimeData(const QMimeData *md, Qt::DropAction, int row, int c return false; break; case Settings::DoNothing: - g.l->log( + Global::get().l->log( Log::Information, MainWindow::tr("You have Channel Dragging set to \"Do Nothing\" so the channel wasn't moved.")); return false; @@ -1816,7 +1813,7 @@ bool UserModel::dropMimeData(const QMimeData *md, Qt::DropAction, int row, int c case Settings::Move: break; default: - g.l->log(Log::CriticalError, MainWindow::tr("Unknown Channel Drag mode in UserModel::dropMimeData.")); + Global::get().l->log(Log::CriticalError, MainWindow::tr("Unknown Channel Drag mode in UserModel::dropMimeData.")); return false; break; } @@ -1905,7 +1902,7 @@ bool UserModel::dropMimeData(const QMimeData *md, Qt::DropAction, int row, int c } else { // Not enough space, other channels have to be moved if (static_cast< long long >(pi->channelAt(ilast)->iPosition) + 40 > INT_MAX) { - QMessageBox::critical(g.mw, QLatin1String("Mumble"), + QMessageBox::critical(Global::get().mw, QLatin1String("Mumble"), tr("Cannot perform this movement automatically, please reset the " "numeric sorting indicators or adjust it manually.")); return false; @@ -1916,7 +1913,7 @@ bool UserModel::dropMimeData(const QMimeData *md, Qt::DropAction, int row, int c MumbleProto::ChannelState mpcs; mpcs.set_channel_id(tmp->iId); mpcs.set_position(tmp->iPosition + 40); - g.sh->sendMessage(mpcs); + Global::get().sh->sendMessage(mpcs); } } inewpos = upper->iPosition + 20; @@ -1926,7 +1923,7 @@ bool UserModel::dropMimeData(const QMimeData *md, Qt::DropAction, int row, int c } if (inewpos > INT_MAX || inewpos < INT_MIN) { - QMessageBox::critical(g.mw, QLatin1String("Mumble"), + QMessageBox::critical(Global::get().mw, QLatin1String("Mumble"), tr("Cannot perform this movement automatically, please reset the numeric sorting " "indicators or adjust it manually.")); return false; @@ -1937,7 +1934,7 @@ bool UserModel::dropMimeData(const QMimeData *md, Qt::DropAction, int row, int c if (dropped->parent() != c) mpcs.set_parent(c->iId); mpcs.set_position(static_cast< int >(inewpos)); - g.sh->sendMessage(mpcs); + Global::get().sh->sendMessage(mpcs); } return true; @@ -1945,9 +1942,9 @@ bool UserModel::dropMimeData(const QMimeData *md, Qt::DropAction, int row, int c void UserModel::updateOverlay() const { #ifdef USE_OVERLAY - g.o->updateOverlay(); + Global::get().o->updateOverlay(); #endif - g.lcd->updateUserView(); + Global::get().lcd->updateUserView(); } @@ -1957,7 +1954,7 @@ QString UserModel::createDisplayString(const ClientUser &user, bool isChannelLis // the volume adjustment differently. float volumeAdjustment = 1.0f; if (isChannelListener) { - if (parentChannel && user.uiSession == g.uiSession) { + if (parentChannel && user.uiSession == Global::get().uiSession) { // Only the listener of the local user can have a volume adjustment volumeAdjustment = ChannelListener::getListenerLocalVolumeAdjustment(parentChannel->iId); } @@ -1980,12 +1977,12 @@ QString UserModel::createDisplayString(const ClientUser &user, bool isChannelLis // Create a tag that indicates the volume adjustments QString volumeTag; - if (std::abs(localVolumeDecibel) > 0 && g.s.bShowVolumeAdjustments) { + if (std::abs(localVolumeDecibel) > 0 && Global::get().s.bShowVolumeAdjustments) { volumeTag = QString::asprintf("|%+d|", localVolumeDecibel); } QString displayString; - if (!g.s.bShowNicknamesOnly || nickname.isEmpty()) { + if (!Global::get().s.bShowNicknamesOnly || nickname.isEmpty()) { displayString += user.qsName; } else { displayString += nickname; @@ -1995,7 +1992,7 @@ QString UserModel::createDisplayString(const ClientUser &user, bool isChannelLis displayString += " " + friendTag; } - if (!g.s.bShowNicknamesOnly && !nickname.isEmpty() && user.qsName.compare(nickname, Qt::CaseInsensitive) != 0) { + if (!Global::get().s.bShowNicknamesOnly && !nickname.isEmpty() && user.qsName.compare(nickname, Qt::CaseInsensitive) != 0) { displayString += " " + QString::fromLatin1("[%1]").arg(nickname); } diff --git a/src/mumble/UserView.cpp b/src/mumble/UserView.cpp index 57b885636..7767b966a 100644 --- a/src/mumble/UserView.cpp +++ b/src/mumble/UserView.cpp @@ -11,16 +11,13 @@ #include "MainWindow.h" #include "ServerHandler.h" #include "UserModel.h" +#include "Global.h" #include <QtGui/QDesktopServices> #include <QtGui/QHelpEvent> #include <QtGui/QPainter> #include <QtWidgets/QWhatsThis> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - const int UserDelegate::FLAG_ICON_DIMENSION = 16; const int UserDelegate::FLAG_ICON_PADDING = 1; const int UserDelegate::FLAG_DIMENSION = 18; @@ -139,7 +136,7 @@ bool UserView::event(QEvent *evt) { /** * This function is used to create custom behaviour when clicking - * on user/channel flags (e.g. showing the comment) + * on user/channel flags (e.Global::get(). showing the comment) */ void UserView::mouseReleaseEvent(QMouseEvent *evt) { QPoint clickPosition = evt->pos(); @@ -227,14 +224,14 @@ void UserView::nodeActivated(const QModelIndex &idx) { UserModel *um = static_cast< UserModel * >(model()); ClientUser *p = um->getUser(idx); if (p) { - g.mw->openTextMessageDialog(p); + Global::get().mw->openTextMessageDialog(p); return; } Channel *c = um->getChannel(idx); if (c) { // if a channel is activated join it - g.sh->joinChannel(g.uiSession, c->iId); + Global::get().sh->joinChannel(Global::get().uiSession, c->iId); } } @@ -345,14 +342,14 @@ void UserView::updateChannel(const QModelIndex &idx) { } if (c && idx.parent().isValid()) { - if (g.s.bFilterActive == false) { + if (Global::get().s.bFilterActive == false) { setRowHidden(idx.row(), idx.parent(), false); } else { bool isChannelUserIsIn = false; // Check whether user resides in this channel or a subchannel - if (g.uiSession != 0) { - const ClientUser *user = ClientUser::get(g.uiSession); + if (Global::get().uiSession != 0) { + const ClientUser *user = ClientUser::get(Global::get().uiSession); if (user) { Channel *chan = user->cChannel; while (chan) { @@ -368,7 +365,7 @@ void UserView::updateChannel(const QModelIndex &idx) { if (channelFiltered(c) && !isChannelUserIsIn) { setRowHidden(idx.row(), idx.parent(), true); } else { - if (g.s.bFilterHidesEmptyChannels && !channelHasUsers(c)) { + if (Global::get().s.bFilterHidesEmptyChannels && !channelHasUsers(c)) { setRowHidden(idx.row(), idx.parent(), true); } else { setRowHidden(idx.row(), idx.parent(), false); diff --git a/src/mumble/VersionCheck.cpp b/src/mumble/VersionCheck.cpp index c001873ee..fab59f446 100644 --- a/src/mumble/VersionCheck.cpp +++ b/src/mumble/VersionCheck.cpp @@ -8,6 +8,7 @@ #include "MainWindow.h" #include "Utils.h" #include "WebFetch.h" +#include "Global.h" #ifdef Q_OS_WIN # include "win.h" @@ -24,10 +25,6 @@ # include <softpub.h> #endif -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - VersionCheck::VersionCheck(bool autocheck, QObject *p, bool focus) : QObject(p), m_preparationWatcher() { connect(&m_preparationWatcher, &QFutureWatcher< void >::finished, this, &VersionCheck::performRequest); @@ -52,13 +49,13 @@ VersionCheck::VersionCheck(bool autocheck, QObject *p, bool focus) : QObject(p), #else queryItems << qMakePair(QString::fromLatin1("os"), QString::fromLatin1("Unix")); #endif - if (!g.s.bUsage) + if (!Global::get().s.bUsage) queryItems << qMakePair(QString::fromLatin1("nousage"), QString::fromLatin1("1")); if (autocheck) queryItems << qMakePair(QString::fromLatin1("auto"), QString::fromLatin1("1")); queryItems << qMakePair(QString::fromLatin1("locale"), - g.s.qsLanguage.isEmpty() ? QLocale::system().name() : g.s.qsLanguage); + Global::get().s.qsLanguage.isEmpty() ? QLocale::system().name() : Global::get().s.qsLanguage); QFile f(qApp->applicationFilePath()); if (!f.open(QIODevice::ReadOnly)) { @@ -91,10 +88,10 @@ void VersionCheck::fetched(QByteArray a, QUrl url) { if (!a.isEmpty()) { #ifdef SNAPSHOT_BUILD if (url.path() == QLatin1String("/v1/banner")) { - g.mw->msgBox(QString::fromUtf8(a)); + Global::get().mw->msgBox(QString::fromUtf8(a)); } else if (url.path() == QLatin1String("/v1/version-check")) { # ifndef Q_OS_WIN - g.mw->msgBox(QString::fromUtf8(a)); + Global::get().mw->msgBox(QString::fromUtf8(a)); # else QDomDocument qdd; qdd.setContent(a); @@ -106,10 +103,10 @@ void VersionCheck::fetched(QByteArray a, QUrl url) { fetch.setHost(QString()); fetch.setScheme(QString()); if (!fetch.isValid()) { - g.mw->msgBox(QString::fromUtf8(a)); + Global::get().mw->msgBox(QString::fromUtf8(a)); } else { QString filename = - g.qdBasePath.absoluteFilePath(QLatin1String("Snapshots/") + QFileInfo(fetch.path()).fileName()); + Global::get().qdBasePath.absoluteFilePath(QLatin1String("Snapshots/") + QFileInfo(fetch.path()).fileName()); QFile qf(filename); if (qf.exists()) { @@ -136,7 +133,7 @@ void VersionCheck::fetched(QByteArray a, QUrl url) { if (ts == 0) { if (QMessageBox::question( - g.mw, tr("Upgrade Mumble"), + Global::get().mw, tr("Upgrade Mumble"), tr("A new version of Mumble has been detected and automatically downloaded. It is " "recommended that you either upgrade to this version, or downgrade to the " "latest stable release. Do you want to launch the installer now?"), @@ -152,22 +149,22 @@ void VersionCheck::fetched(QByteArray a, QUrl url) { execinfo.nShow = SW_NORMAL; if (ShellExecuteExW(&execinfo)) { - g.mw->bSuppressAskOnQuit = true; + Global::get().mw->bSuppressAskOnQuit = true; qApp->closeAllWindows(); } else { - g.mw->msgBox(tr("Failed to launch snapshot installer.")); + Global::get().mw->msgBox(tr("Failed to launch snapshot installer.")); } } } else { - g.mw->msgBox(tr("Corrupt download of new version detected. Automatically removed.")); + Global::get().mw->msgBox(tr("Corrupt download of new version detected. Automatically removed.")); qf.remove(); } // Delete all but the N most recent snapshots size_t numberOfSnapshotsToKeep = 1; - QDir snapdir(g.qdBasePath.absolutePath() + QLatin1String("/Snapshots/"), QString(), QDir::Name, + QDir snapdir(Global::get().qdBasePath.absolutePath() + QLatin1String("/Snapshots/"), QString(), QDir::Name, QDir::Files); foreach (const QFileInfo fileInfo, @@ -182,7 +179,7 @@ void VersionCheck::fetched(QByteArray a, QUrl url) { file.remove(); } } else { - g.mw->msgBox(tr("Downloading new snapshot from %1 to %2") + Global::get().mw->msgBox(tr("Downloading new snapshot from %1 to %2") .arg(fetch.toString().toHtmlEscaped(), filename.toHtmlEscaped())); WebFetch::fetch(QLatin1String("dl"), fetch, this, SLOT(fetched(QByteArray, QUrl))); return; @@ -190,25 +187,25 @@ void VersionCheck::fetched(QByteArray a, QUrl url) { } } else { QString filename = - g.qdBasePath.absoluteFilePath(QLatin1String("Snapshots/") + QFileInfo(url.path()).fileName()); + Global::get().qdBasePath.absoluteFilePath(QLatin1String("Snapshots/") + QFileInfo(url.path()).fileName()); QFile qf(filename); if (qf.open(QIODevice::WriteOnly)) { qf.write(a); qf.close(); - new VersionCheck(true, g.mw); + new VersionCheck(true, Global::get().mw); } else { - g.mw->msgBox(tr("Failed to write new version to disk.")); + Global::get().mw->msgBox(tr("Failed to write new version to disk.")); } # endif } #else Q_UNUSED(url); - g.mw->msgBox(QString::fromUtf8(a)); + Global::get().mw->msgBox(QString::fromUtf8(a)); #endif } } else { - g.mw->msgBox(tr("Mumble failed to retrieve version information from the central server.")); + Global::get().mw->msgBox(tr("Mumble failed to retrieve version information from the central server.")); } deleteLater(); diff --git a/src/mumble/VoiceRecorder.cpp b/src/mumble/VoiceRecorder.cpp index 2d3cffdb9..bba6bf34b 100644 --- a/src/mumble/VoiceRecorder.cpp +++ b/src/mumble/VoiceRecorder.cpp @@ -8,15 +8,12 @@ #include "AudioOutput.h" #include "ClientUser.h" #include "ServerHandler.h" +#include "Global.h" #include "../Timer.h" #include <boost/make_shared.hpp> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - VoiceRecorder::RecordBuffer::RecordBuffer(int recordInfoIndex_, boost::shared_array< float > buffer_, int samples_, quint64 absoluteStartSample_) @@ -97,10 +94,10 @@ QString VoiceRecorder::expandTemplateVariables(const QString &path, const QStrin QString time(m_recordingStartTime.time().toString(QLatin1String("hh-mm-ss"))); QString hostname(QLatin1String("Unknown")); - if (g.sh && g.uiSession != 0) { + if (Global::get().sh && Global::get().uiSession != 0) { unsigned short port; QString uname, pw; - g.sh->getConnectionInfo(hostname, port, uname, pw); + Global::get().sh->getConnectionInfo(hostname, port, uname, pw); } // Create hash which stores the names of the variables with the corresponding values. @@ -167,7 +164,7 @@ SF_INFO VoiceRecorder::createSoundFileInfo() const { Q_ASSERT(m_config.sampleRate != 0); // When adding new formats make sure to properly configure needed additional - // behavior after opening the file handle (e.g. to enable clipping). + // behavior after opening the file handle (e.Global::get(). to enable clipping). // Convert |fmFormat| to a SF_INFO structure for libsndfile. SF_INFO sfinfo; @@ -283,7 +280,7 @@ bool VoiceRecorder::ensureFileIsOpenedFor(SF_INFO &soundFileInfo, boost::shared_ void VoiceRecorder::run() { Q_ASSERT(!m_recording); - if (g.sh && g.sh->uiVersion < 0x010203) + if (Global::get().sh && Global::get().sh->uiVersion < 0x010203) return; SF_INFO soundFileInfo = createSoundFileInfo(); @@ -296,7 +293,7 @@ void VoiceRecorder::run() { m_sleepLock.lock(); m_sleepCondition.wait(&m_sleepLock); - if (!m_recording || m_abort || (g.sh && g.sh->uiVersion < 0x010203)) { + if (!m_recording || m_abort || (Global::get().sh && Global::get().sh->uiVersion < 0x010203)) { m_sleepLock.unlock(); break; } diff --git a/src/mumble/VoiceRecorderDialog.cpp b/src/mumble/VoiceRecorderDialog.cpp index b3103f0c0..e3d9ddc12 100644 --- a/src/mumble/VoiceRecorderDialog.cpp +++ b/src/mumble/VoiceRecorderDialog.cpp @@ -8,15 +8,12 @@ #include "AudioOutput.h" #include "ServerHandler.h" #include "VoiceRecorder.h" +#include "Global.h" #include <QtGui/QCloseEvent> #include <QtWidgets/QFileDialog> #include <QtWidgets/QMessageBox> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - VoiceRecorderDialog::VoiceRecorderDialog(QWidget *p) : QDialog(p), qtTimer(new QTimer(this)) { qtTimer->setObjectName(QLatin1String("qtTimer")); qtTimer->setInterval(200); @@ -25,10 +22,10 @@ VoiceRecorderDialog::VoiceRecorderDialog(QWidget *p) : QDialog(p), qtTimer(new Q qleTargetDirectory->setAccessibleName(tr("Target directory")); qleFilename->setAccessibleName(tr("Filename")); - qleTargetDirectory->setText(g.s.qsRecordingPath); - qleFilename->setText(g.s.qsRecordingFile); - qrbDownmix->setChecked(g.s.rmRecordingMode == Settings::RecordingMixdown); - qrbMultichannel->setChecked(g.s.rmRecordingMode == Settings::RecordingMultichannel); + qleTargetDirectory->setText(Global::get().s.qsRecordingPath); + qleFilename->setText(Global::get().s.qsRecordingFile); + qrbDownmix->setChecked(Global::get().s.rmRecordingMode == Settings::RecordingMixdown); + qrbMultichannel->setChecked(Global::get().s.rmRecordingMode == Settings::RecordingMultichannel); QString qsTooltip = QString::fromLatin1("%1" "<table>" @@ -64,10 +61,10 @@ VoiceRecorderDialog::VoiceRecorderDialog(QWidget *p) : QDialog(p), qtTimer(new Q qcbFormat->addItem(VoiceRecorderFormat::getFormatDescription(static_cast< VoiceRecorderFormat::Format >(fm))); } - if (g.s.iRecordingFormat < 0 || g.s.iRecordingFormat > VoiceRecorderFormat::kEnd) - g.s.iRecordingFormat = 0; + if (Global::get().s.iRecordingFormat < 0 || Global::get().s.iRecordingFormat > VoiceRecorderFormat::kEnd) + Global::get().s.iRecordingFormat = 0; - qcbFormat->setCurrentIndex(g.s.iRecordingFormat); + qcbFormat->setCurrentIndex(Global::get().s.iRecordingFormat); } VoiceRecorderDialog::~VoiceRecorderDialog() { @@ -75,8 +72,8 @@ VoiceRecorderDialog::~VoiceRecorderDialog() { } void VoiceRecorderDialog::closeEvent(QCloseEvent *evt) { - if (g.sh) { - VoiceRecorderPtr recorder(g.sh->recorder); + if (Global::get().sh) { + VoiceRecorderPtr recorder(Global::get().sh->recorder); if (recorder && recorder->isRunning()) { int ret = QMessageBox::warning(this, tr("Recorder still running"), tr("Closing the recorder without stopping it will discard unwritten audio. " @@ -92,15 +89,15 @@ void VoiceRecorderDialog::closeEvent(QCloseEvent *evt) { } } - g.s.qsRecordingPath = qleTargetDirectory->text(); - g.s.qsRecordingFile = qleFilename->text(); + Global::get().s.qsRecordingPath = qleTargetDirectory->text(); + Global::get().s.qsRecordingFile = qleFilename->text(); if (qrbDownmix->isChecked()) - g.s.rmRecordingMode = Settings::RecordingMixdown; + Global::get().s.rmRecordingMode = Settings::RecordingMixdown; else - g.s.rmRecordingMode = Settings::RecordingMultichannel; + Global::get().s.rmRecordingMode = Settings::RecordingMultichannel; int i = qcbFormat->currentIndex(); - g.s.iRecordingFormat = (i == -1) ? 0 : i; + Global::get().s.iRecordingFormat = (i == -1) ? 0 : i; reset(); evt->accept(); @@ -109,13 +106,13 @@ void VoiceRecorderDialog::closeEvent(QCloseEvent *evt) { } void VoiceRecorderDialog::on_qpbStart_clicked() { - if (!g.uiSession || !g.sh) { + if (!Global::get().uiSession || !Global::get().sh) { QMessageBox::critical(this, tr("Recorder"), tr("Unable to start recording. Not connected to a server.")); reset(); return; } - if (g.sh->uiVersion < 0x010203) { + if (Global::get().sh->uiVersion < 0x010203) { QMessageBox::critical(this, tr("Recorder"), tr("The server you are currently connected to is version 1.2.2 or older. " "For privacy reasons, recording on servers of versions older than 1.2.3 " @@ -124,7 +121,7 @@ void VoiceRecorderDialog::on_qpbStart_clicked() { return; } - if (g.sh->recorder) { + if (Global::get().sh->recorder) { QMessageBox::information(this, tr("Recorder"), tr("There is already a recorder active for this server.")); return; } @@ -158,11 +155,11 @@ void VoiceRecorderDialog::on_qpbStart_clicked() { qleFilename->setText(basename); - AudioOutputPtr ao(g.ao); + AudioOutputPtr ao(Global::get().ao); if (!ao) return; - g.sh->announceRecordingState(true); + Global::get().sh->announceRecordingState(true); // Create the recorder VoiceRecorder::Config config; @@ -171,8 +168,8 @@ void VoiceRecorderDialog::on_qpbStart_clicked() { config.mixDownMode = qrbDownmix->isChecked(); config.recordingFormat = static_cast< VoiceRecorderFormat::Format >(ifm); - g.sh->recorder.reset(new VoiceRecorder(this, config)); - VoiceRecorderPtr recorder(g.sh->recorder); + Global::get().sh->recorder.reset(new VoiceRecorder(this, config)); + VoiceRecorderPtr recorder(Global::get().sh->recorder); // Wire it up connect(&*recorder, SIGNAL(recording_started()), this, SLOT(onRecorderStarted())); @@ -188,12 +185,12 @@ void VoiceRecorderDialog::on_qpbStart_clicked() { } void VoiceRecorderDialog::on_qpbStop_clicked() { - if (!g.sh) { + if (!Global::get().sh) { reset(); return; } - VoiceRecorderPtr recorder(g.sh->recorder); + VoiceRecorderPtr recorder(Global::get().sh->recorder); if (!recorder) { reset(); return; @@ -209,18 +206,18 @@ void VoiceRecorderDialog::on_qpbStop_clicked() { } void VoiceRecorderDialog::on_qtTimer_timeout() { - if (!g.sh) { + if (!Global::get().sh) { reset(); return; } - if (!g.uiSession) { + if (!Global::get().uiSession) { reset(false); return; } - VoiceRecorderPtr recorder(g.sh->recorder); - if (!g.sh->recorder) { + VoiceRecorderPtr recorder(Global::get().sh->recorder); + if (!Global::get().sh->recorder) { reset(); return; } @@ -239,11 +236,11 @@ void VoiceRecorderDialog::on_qpbTargetDirectoryBrowse_clicked() { void VoiceRecorderDialog::reset(bool resettimer) { qtTimer->stop(); - if (g.sh) { - VoiceRecorderPtr recorder(g.sh->recorder); + if (Global::get().sh) { + VoiceRecorderPtr recorder(Global::get().sh->recorder); if (recorder) { - g.sh->recorder.reset(); - g.sh->announceRecordingState(false); + Global::get().sh->recorder.reset(); + Global::get().sh->announceRecordingState(false); } } diff --git a/src/mumble/WASAPI.cpp b/src/mumble/WASAPI.cpp index f73b061cf..f41204abd 100644 --- a/src/mumble/WASAPI.cpp +++ b/src/mumble/WASAPI.cpp @@ -16,9 +16,6 @@ #include "MainWindow.h" #include "Utils.h" - -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. #include "Global.h" // Now that Win7 is published, which includes public versions of these @@ -37,7 +34,7 @@ IAudioSessionQuery : public IUnknown { /// Convert the configured 'wasapi/role' to an ERole. static ERole WASAPIRoleFromSettings() { - QString role = g.s.qsWASAPIRole.toLower().trimmed(); + QString role = Global::get().s.qsWASAPIRole.toLower().trimmed(); if (role == QLatin1String("console")) { return eConsole; @@ -201,7 +198,7 @@ AudioInput *WASAPIInputRegistrar::create() { } const QList< audioDevice > WASAPIInputRegistrar::getDeviceChoices() { - return WASAPISystem::mapToDevice(WASAPISystem::getInputDevices(), g.s.qsWASAPIInput); + return WASAPISystem::mapToDevice(WASAPISystem::getInputDevices(), Global::get().s.qsWASAPIInput); } void WASAPIInputRegistrar::setDeviceChoice(const QVariant &choice, Settings &s) { @@ -225,7 +222,7 @@ AudioOutput *WASAPIOutputRegistrar::create() { } const QList< audioDevice > WASAPIOutputRegistrar::getDeviceChoices() { - return WASAPISystem::mapToDevice(WASAPISystem::getOutputDevices(), g.s.qsWASAPIOutput); + return WASAPISystem::mapToDevice(WASAPISystem::getOutputDevices(), Global::get().s.qsWASAPIOutput); } void WASAPIOutputRegistrar::setDeviceChoice(const QVariant &choice, Settings &s) { @@ -406,7 +403,7 @@ void WASAPIInput::run() { HANDLE hMmThread; float *tbuff = nullptr; short *sbuff = nullptr; - bool doecho = g.s.doEcho(); + bool doecho = Global::get().s.doEcho(); REFERENCE_TIME def, min, latency, want; bool exclusive = false; @@ -420,13 +417,13 @@ void WASAPIInput::run() { } // Open mic device. - pMicDevice = openNamedOrDefaultDevice(g.s.qsWASAPIInput, eCapture, WASAPIRoleFromSettings()); + pMicDevice = openNamedOrDefaultDevice(Global::get().s.qsWASAPIInput, eCapture, WASAPIRoleFromSettings()); if (!pMicDevice) goto cleanup; // Open echo capture device. if (doecho) { - pEchoDevice = openNamedOrDefaultDevice(g.s.qsWASAPIOutput, eRender, WASAPIRoleFromSettings()); + pEchoDevice = openNamedOrDefaultDevice(Global::get().s.qsWASAPIOutput, eRender, WASAPIRoleFromSettings()); if (!pEchoDevice) doecho = false; } @@ -444,7 +441,7 @@ void WASAPIInput::run() { want = qMax< REFERENCE_TIME >(min, 100000); qWarning("WASAPIInput: Latencies %lld %lld => %lld", def, min, want); - if (g.s.bExclusiveInput && !doecho) { + if (Global::get().s.bExclusiveInput && !doecho) { for (int channels = 1; channels <= 2; ++channels) { ZeroMemory(&wfe, sizeof(wfe)); wfe.Format.cbSize = 0; @@ -473,7 +470,7 @@ void WASAPIInput::run() { } if (!micpwfxe) { - if (g.s.bExclusiveInput) + if (Global::get().s.bExclusiveInput) qWarning("WASAPIInput: Failed to open exclusive mode."); if (!getAndCheckMixFormat("WASAPIInput", "Mic", pMicAudioClient, &micpwfx, &micpwfxe, &eMicFormat)) { @@ -486,7 +483,7 @@ void WASAPIInput::run() { qWarning("WASAPIInput: Mic Initialize failed: hr=0x%08lx", hr); if (hr == E_ACCESSDENIED) { WASAPIInputRegistrar::hasOSPermissionDenied = true; - g.mw->msgBox(tr("Access to the microphone was denied. Please check that your operating system's " + Global::get().mw->msgBox(tr("Access to the microphone was denied. Please check that your operating system's " "microphone settings allow Mumble to use the microphone.")); } goto cleanup; @@ -719,7 +716,7 @@ void WASAPIOutput::setVolumes(IMMDevice *pDevice, bool talking) { DWORD dwMumble = GetCurrentProcessId(); qmVolumes.clear(); - if (qFuzzyCompare(g.s.fOtherVolume, 1.0f)) + if (qFuzzyCompare(Global::get().s.fOtherVolume, 1.0f)) return; // FIXME: Try to keep the session object around when returning volume. @@ -791,7 +788,7 @@ bool WASAPIOutput::setVolumeForSessionControl2(IAudioSessionControl2 *control2, if (SUCCEEDED(hr = pVolume->GetMute(&bMute)) && !bMute) { float fVolume = 1.0f; if (SUCCEEDED(hr = pVolume->GetMasterVolume(&fVolume)) && !qFuzzyCompare(fVolume, 0.0f)) { - float fSetVolume = fVolume * g.s.fOtherVolume; + float fSetVolume = fVolume * Global::get().s.fOtherVolume; if (SUCCEEDED(hr = pVolume->SetMasterVolume(fSetVolume, nullptr))) { hr = pVolume->GetMasterVolume(&fSetVolume); qmVolumes.insert(pVolume, VolumePair(fVolume, fSetVolume)); @@ -887,7 +884,7 @@ void WASAPIOutput::run() { unsigned int chanmasks[32]; QMap< DWORD, float > qmVolumes; bool lastspoke = false; - REFERENCE_TIME bufferDuration = (g.s.iOutputDelay > 1) ? (g.s.iOutputDelay + 1) * 100000 : 0; + REFERENCE_TIME bufferDuration = (Global::get().s.iOutputDelay > 1) ? (Global::get().s.iOutputDelay + 1) * 100000 : 0; bool exclusive = false; bool mixed = false; @@ -901,7 +898,7 @@ void WASAPIOutput::run() { } // Open the output device. - pDevice = openNamedOrDefaultDevice(g.s.qsWASAPIOutput, eRender, WASAPIRoleFromSettings()); + pDevice = openNamedOrDefaultDevice(Global::get().s.qsWASAPIOutput, eRender, WASAPIRoleFromSettings()); if (!pDevice) goto cleanup; @@ -918,7 +915,7 @@ void WASAPIOutput::run() { want = qMax< REFERENCE_TIME >(min, 100000); qWarning("WASAPIOutput: Latencies %lld %lld => %lld", def, min, want); - if (g.s.bExclusiveOutput) { + if (Global::get().s.bExclusiveOutput) { hr = pAudioClient->GetMixFormat(&pwfx); if (FAILED(hr)) { qWarning("WASAPIOutput: GetMixFormat failed: hr=0x%08lx", hr); @@ -929,7 +926,7 @@ void WASAPIOutput::run() { pwfxe = reinterpret_cast< WAVEFORMATEXTENSIBLE * >(pwfx); } - if (!g.s.bPositionalAudio) { + if (!Global::get().s.bPositionalAudio) { // Override mix format and request stereo pwfx->nChannels = 2; if (pwfxe) { @@ -963,14 +960,14 @@ void WASAPIOutput::run() { } if (!pwfx) { - if (g.s.bExclusiveOutput) + if (Global::get().s.bExclusiveOutput) qWarning("WASAPIOutput: Failed to open exclusive mode."); if (!getAndCheckMixFormat("WASAPIOutput", "Output", pAudioClient, &pwfx, &pwfxe, &eSampleFormat)) { goto cleanup; } - if (!g.s.bPositionalAudio) { + if (!Global::get().s.bPositionalAudio) { pwfx->nChannels = 2; pwfx->nBlockAlign = pwfx->nChannels * pwfx->wBitsPerSample / 8; pwfx->nAvgBytesPerSec = pwfx->nBlockAlign * pwfx->nSamplesPerSec; @@ -1016,7 +1013,7 @@ void WASAPIOutput::run() { iMixerFreq = pwfx->nSamplesPerSec; qWarning("WASAPIOutput: Periods %lldus %lldus (latency %lldus)", def / 10LL, min / 10LL, latency / 10LL); - qWarning("WASAPIOutput: Buffer is %dus (%d)", (bufferFrameCount * 1000000) / iMixerFreq, g.s.iOutputDelay); + qWarning("WASAPIOutput: Buffer is %dus (%d)", (bufferFrameCount * 1000000) / iMixerFreq, Global::get().s.iOutputDelay); hr = pAudioClient->GetService(__uuidof(IAudioRenderClient), (void **) &pRenderClient); if (FAILED(hr)) { @@ -1062,8 +1059,8 @@ void WASAPIOutput::run() { while (bRunning && !FAILED(hr)) { if (!exclusive) { // Attenuate stream volumes. - if (lastspoke != (g.bAttenuateOthers || mixed)) { - lastspoke = g.bAttenuateOthers || mixed; + if (lastspoke != (Global::get().bAttenuateOthers || mixed)) { + lastspoke = Global::get().bAttenuateOthers || mixed; setVolumes(pDevice, lastspoke); } @@ -1097,12 +1094,12 @@ void WASAPIOutput::run() { if (exclusive) break; - if (!g.s.bAttenuateOthers && !g.bAttenuateOthers) { + if (!Global::get().s.bAttenuateOthers && !Global::get().bAttenuateOthers) { mixed = false; } - if (lastspoke != (g.bAttenuateOthers || mixed)) { - lastspoke = g.bAttenuateOthers || mixed; + if (lastspoke != (Global::get().bAttenuateOthers || mixed)) { + lastspoke = Global::get().bAttenuateOthers || mixed; setVolumes(pDevice, lastspoke); } diff --git a/src/mumble/WASAPINotificationClient.cpp b/src/mumble/WASAPINotificationClient.cpp index 28c8c5708..342128655 100644 --- a/src/mumble/WASAPINotificationClient.cpp +++ b/src/mumble/WASAPINotificationClient.cpp @@ -6,14 +6,11 @@ #include "MainWindow.h" #include "WASAPINotificationClient.h" +#include "Global.h" #include <QtCore/QMutexLocker> #include <boost/thread/once.hpp> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - HRESULT STDMETHODCALLTYPE WASAPINotificationClient::OnDefaultDeviceChanged(EDataFlow flow, ERole role, LPCWSTR pwstrDefaultDevice) { const QString device = QString::fromWCharArray(pwstrDefaultDevice); @@ -169,7 +166,7 @@ WASAPINotificationClient::WASAPINotificationClient() : QObject(), pEnumerator(0) return; } - g.mw->connect(this, SIGNAL(doResetAudio()), SLOT(onResetAudio()), Qt::QueuedConnection); + Global::get().mw->connect(this, SIGNAL(doResetAudio()), SLOT(onResetAudio()), Qt::QueuedConnection); pEnumerator->RegisterEndpointNotificationCallback(this); } diff --git a/src/mumble/WebFetch.cpp b/src/mumble/WebFetch.cpp index 1bd8c53a6..60339c247 100644 --- a/src/mumble/WebFetch.cpp +++ b/src/mumble/WebFetch.cpp @@ -6,18 +6,15 @@ #include "WebFetch.h" #include "NetworkConfig.h" +#include "Global.h" #include <QtNetwork/QNetworkReply> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - WebFetch::WebFetch(QString service, QUrl url, QObject *obj, const char *slot) : QObject(), qoObject(obj), cpSlot(slot), m_service(service) { url.setScheme(QLatin1String("https")); - if (!g.s.qsServicePrefix.isEmpty()) { + if (!Global::get().s.qsServicePrefix.isEmpty()) { url.setHost(prefixedServiceHost()); } else { url.setHost(serviceHost()); @@ -29,10 +26,10 @@ WebFetch::WebFetch(QString service, QUrl url, QObject *obj, const char *slot) } QString WebFetch::prefixedServiceHost() const { - if (g.s.qsServicePrefix.isEmpty()) { + if (Global::get().s.qsServicePrefix.isEmpty()) { return serviceHost(); } - return QString::fromLatin1("%1-%2.mumble.info").arg(g.s.qsServicePrefix, m_service); + return QString::fromLatin1("%1-%2.mumble.info").arg(Global::get().s.qsServicePrefix, m_service); } QString WebFetch::serviceHost() const { @@ -70,7 +67,7 @@ void WebFetch::finished() { if (name == QLatin1String("Use-Service-Prefix")) { QRegExp servicePrefixRegExp(QLatin1String("^[a-zA-Z]+$")); if (servicePrefixRegExp.exactMatch(value)) { - g.s.qsServicePrefix = value.toLower(); + Global::get().s.qsServicePrefix = value.toLower(); } } } @@ -79,7 +76,7 @@ void WebFetch::finished() { emit fetched(a, url, headers); deleteLater(); } else if (url.host() == prefixedServiceHost() && url.host() != serviceHost()) { - // We have tried to fetch from a local service domain (e.g. de-update.mumble.info) + // We have tried to fetch from a local service domain (e.Global::get(). de-update.mumble.info) // which has failed, so naturally we want to try the non-local one (update.mumble.info) // as well as maybe that one will work. // This of course only makes sense, if prefixedServiceHost() and serviceHost() are in fact diff --git a/src/mumble/main.cpp b/src/mumble/main.cpp index 0801d9b3b..12b3ddf6d 100644 --- a/src/mumble/main.cpp +++ b/src/mumble/main.cpp @@ -59,8 +59,6 @@ # include <shellapi.h> #endif -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. #include "Global.h" #ifdef BOOST_NO_EXCEPTIONS @@ -95,14 +93,14 @@ bool positionIsOnScreen(QPoint point) { QPoint getTalkingUIPosition() { QPoint talkingUIPos = QPoint(0, 0); - if (g.s.qpTalkingUI_Position != Settings::UNSPECIFIED_POSITION && positionIsOnScreen(g.s.qpTalkingUI_Position)) { + if (Global::get().s.qpTalkingUI_Position != Settings::UNSPECIFIED_POSITION && positionIsOnScreen(Global::get().s.qpTalkingUI_Position)) { // Restore last position - talkingUIPos = g.s.qpTalkingUI_Position; + talkingUIPos = Global::get().s.qpTalkingUI_Position; } else { // Place the TalkingUI next to the MainWindow by default - const QPoint mainWindowPos = g.mw->pos(); + const QPoint mainWindowPos = Global::get().mw->pos(); const int horizontalBuffer = 10; - const QPoint defaultPos = QPoint(mainWindowPos.x() + g.mw->size().width() + horizontalBuffer, mainWindowPos.y()); + const QPoint defaultPos = QPoint(mainWindowPos.x() + Global::get().mw->size().width() + horizontalBuffer, mainWindowPos.y()); if (positionIsOnScreen(defaultPos)) { talkingUIPos = defaultPos; @@ -111,8 +109,8 @@ QPoint getTalkingUIPosition() { // We have to ask the TalkingUI to adjust its size in order to get a proper // size from it (instead of a random default one). - g.talkingUI->adjustSize(); - const QSize talkingUISize = g.talkingUI->size(); + Global::get().talkingUI->adjustSize(); + const QSize talkingUISize = Global::get().talkingUI->size(); // The screen should always be found at this point as we have chosen to pos to be on a screen const QScreen *screen = screenAt(talkingUIPos); @@ -217,8 +215,8 @@ int main(int argc, char **argv) { qsrand(QDateTime::currentDateTime().toTime_t()); #endif - g.le = QSharedPointer< LogEmitter >(new LogEmitter()); - g.c = new DeveloperConsole(); + Global::get().le = QSharedPointer< LogEmitter >(new LogEmitter()); + Global::get().c = new DeveloperConsole(); os_init(); @@ -319,10 +317,10 @@ int main(int argc, char **argv) { bAllowMultiple = true; } else if (args.at(i) == QLatin1String("-n") || args.at(i) == QLatin1String("--noidentity")) { suppressIdentity = true; - g.s.bSuppressIdentity = true; + Global::get().s.bSuppressIdentity = true; } else if (args.at(i) == QLatin1String("-jn") || args.at(i) == QLatin1String("--jackname")) { if (i + 1 < args.count()) { - g.s.qsJackClientName = QString(args.at(i + 1)); + Global::get().s.qsJackClientName = QString(args.at(i + 1)); customJackClientName = true; ++i; } else { @@ -331,7 +329,7 @@ int main(int argc, char **argv) { } } else if (args.at(i) == QLatin1String("--window-title-ext")) { if (i + 1 < args.count()) { - g.windowTitlePostfix = QString(args.at(i + 1)); + Global::get().windowTitlePostfix = QString(args.at(i + 1)); ++i; } else { qCritical("Missing argument for --window-title-ext!"); @@ -361,9 +359,9 @@ int main(int argc, char **argv) { return 1; } } else if (args.at(i) == QLatin1String("--dump-input-streams")) { - g.bDebugDumpInput = true; + Global::get().bDebugDumpInput = true; } else if (args.at(i) == QLatin1String("--print-echocancel-queue")) { - g.bDebugPrintQueue = true; + Global::get().bDebugPrintQueue = true; } else { if (!bRpcMode) { QUrl u = QUrl::fromEncoded(args.at(i).toUtf8()); @@ -466,7 +464,7 @@ int main(int argc, char **argv) { // modes enabled. This gives us exclusive access to the file. // If another Mumble instance attempts to open the file, it will fail, // and that instance will know to terminate itself. - UserLockFile userLockFile(g.qdBasePath.filePath(QLatin1String("mumble.lock"))); + UserLockFile userLockFile(Global::get().qdBasePath.filePath(QLatin1String("mumble.lock"))); if (!bAllowMultiple) { if (!userLockFile.acquire()) { qWarning("Another process has already acquired the lock file at '%s'. Terminating...", @@ -477,7 +475,7 @@ int main(int argc, char **argv) { #endif // Load preferences - g.s.load(); + Global::get().s.load(); // Check whether we need to enable accessibility features #ifdef Q_OS_WIN @@ -488,7 +486,7 @@ int main(int argc, char **argv) { SystemParametersInfo(SPI_GETHIGHCONTRAST, sizeof(HIGHCONTRAST), &hc, 0); if (hc.dwFlags & HCF_HIGHCONTRASTON) - g.s.bHighContrast = true; + Global::get().s.bHighContrast = true; } #endif @@ -507,7 +505,7 @@ int main(int argc, char **argv) { } #endif - const QString locale = g.s.qsLanguage.isEmpty() ? qsSystemLocale : g.s.qsLanguage; + const QString locale = Global::get().s.qsLanguage.isEmpty() ? qsSystemLocale : Global::get().s.qsLanguage; qWarning("Locale is \"%s\" (System: \"%s\")", qPrintable(locale), qPrintable(qsSystemLocale)); QTranslator translator; @@ -550,7 +548,7 @@ int main(int argc, char **argv) { // Initialize proxy settings NetworkConfig::SetupProxy(); - g.nam = new QNetworkAccessManager(); + Global::get().nam = new QNetworkAccessManager(); #ifndef NO_CRASH_REPORT CrashReporter *cr = new CrashReporter(); @@ -559,19 +557,19 @@ int main(int argc, char **argv) { #endif // Initialize database - g.db = new Database(QLatin1String("main")); + Global::get().db = new Database(QLatin1String("main")); #ifdef USE_ZEROCONF // Initialize zeroconf - g.zeroconf = new Zeroconf(); + Global::get().zeroconf = new Zeroconf(); #endif #ifdef USE_OVERLAY - g.o = new Overlay(); - g.o->setActive(g.s.os.bEnable); + Global::get().o = new Overlay(); + Global::get().o->setActive(Global::get().s.os.bEnable); #endif - g.lcd = new LCD(); + Global::get().lcd = new LCD(); // Process any waiting events before initializing our MainWindow. // The mumble:// URL support for Mac OS X happens through AppleEvents, @@ -579,31 +577,31 @@ int main(int argc, char **argv) { a.processEvents(); // Main Window - g.mw = new MainWindow(nullptr); - g.mw->show(); + Global::get().mw = new MainWindow(nullptr); + Global::get().mw->show(); - g.talkingUI = new TalkingUI(); + Global::get().talkingUI = new TalkingUI(); // Set TalkingUI's position - g.talkingUI->move(getTalkingUIPosition()); + Global::get().talkingUI->move(getTalkingUIPosition()); // By setting the TalkingUI's position **before** making it visible tends to more reliably include the // window's frame to be included in the positioning calculation on X11 (at least using KDE Plasma) - g.talkingUI->setVisible(g.s.bShowTalkingUI); + Global::get().talkingUI->setVisible(Global::get().s.bShowTalkingUI); - QObject::connect(g.mw, &MainWindow::userAddedChannelListener, g.talkingUI, &TalkingUI::on_channelListenerAdded); - QObject::connect(g.mw, &MainWindow::userRemovedChannelListener, g.talkingUI, &TalkingUI::on_channelListenerRemoved); - QObject::connect(&ChannelListener::get(), &ChannelListener::localVolumeAdjustmentsChanged, g.talkingUI, + QObject::connect(Global::get().mw, &MainWindow::userAddedChannelListener, Global::get().talkingUI, &TalkingUI::on_channelListenerAdded); + QObject::connect(Global::get().mw, &MainWindow::userRemovedChannelListener, Global::get().talkingUI, &TalkingUI::on_channelListenerRemoved); + QObject::connect(&ChannelListener::get(), &ChannelListener::localVolumeAdjustmentsChanged, Global::get().talkingUI, &TalkingUI::on_channelListenerLocalVolumeAdjustmentChanged); - QObject::connect(g.mw, &MainWindow::serverSynchronized, g.talkingUI, &TalkingUI::on_serverSynchronized); + QObject::connect(Global::get().mw, &MainWindow::serverSynchronized, Global::get().talkingUI, &TalkingUI::on_serverSynchronized); // Initialize logger // Log::log() needs the MainWindow to already exist. Thus creating the Log instance // before the MainWindow one, does not make sense. if you need logging before this // point, use Log::logOrDefer() - g.l = new Log(); - g.l->processDeferredLogs(); + Global::get().l = new Log(); + Global::get().l->processDeferredLogs(); #ifdef Q_OS_WIN // Set mumble_mw_hwnd in os_win.cpp. @@ -612,18 +610,18 @@ int main(int argc, char **argv) { #endif #ifdef USE_DBUS - new MumbleDBus(g.mw); - QDBusConnection::sessionBus().registerObject(QLatin1String("/"), g.mw); + new MumbleDBus(Global::get().mw); + QDBusConnection::sessionBus().registerObject(QLatin1String("/"), Global::get().mw); QDBusConnection::sessionBus().registerService(QLatin1String("net.sourceforge.mumble.mumble")); #endif SocketRPC *srpc = new SocketRPC(QLatin1String("Mumble")); - g.l->log(Log::Information, MainWindow::tr("Welcome to Mumble.")); + Global::get().l->log(Log::Information, MainWindow::tr("Welcome to Mumble.")); // Plugins - g.p = new Plugins(nullptr); - g.p->rescanPlugins(); + Global::get().p = new Plugins(nullptr); + Global::get().p->rescanPlugins(); Audio::start(); @@ -631,98 +629,98 @@ int main(int argc, char **argv) { // Configuration updates bool runaudiowizard = false; - if (g.s.uiUpdateCounter == 0) { + if (Global::get().s.uiUpdateCounter == 0) { // Previous version was an pre 1.2.3 release or this is the first run runaudiowizard = true; - } else if (g.s.uiUpdateCounter == 1) { + } else if (Global::get().s.uiUpdateCounter == 1) { // Previous versions used old idle action style, convert it - if (g.s.iIdleTime == 5 * 60) { // New default - g.s.iaeIdleAction = Settings::Nothing; + if (Global::get().s.iIdleTime == 5 * 60) { // New default + Global::get().s.iaeIdleAction = Settings::Nothing; } else { - g.s.iIdleTime = 60 * qRound(g.s.iIdleTime / 60.); // Round to minutes - g.s.iaeIdleAction = Settings::Deafen; // Old behavior + Global::get().s.iIdleTime = 60 * qRound(Global::get().s.iIdleTime / 60.); // Round to minutes + Global::get().s.iaeIdleAction = Settings::Deafen; // Old behavior } } if (runaudiowizard) { - AudioWizard *aw = new AudioWizard(g.mw); + AudioWizard *aw = new AudioWizard(Global::get().mw); aw->exec(); delete aw; } - g.s.uiUpdateCounter = 2; + Global::get().s.uiUpdateCounter = 2; - if (!CertWizard::validateCert(g.s.kpCertificate)) { + if (!CertWizard::validateCert(Global::get().s.kpCertificate)) { QDir qd(QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation)); QFile qf(qd.absoluteFilePath(QLatin1String("MumbleAutomaticCertificateBackup.p12"))); if (qf.open(QIODevice::ReadOnly | QIODevice::Unbuffered)) { Settings::KeyPair kp = CertWizard::importCert(qf.readAll()); qf.close(); if (CertWizard::validateCert(kp)) - g.s.kpCertificate = kp; + Global::get().s.kpCertificate = kp; } - if (!CertWizard::validateCert(g.s.kpCertificate)) { - CertWizard *cw = new CertWizard(g.mw); + if (!CertWizard::validateCert(Global::get().s.kpCertificate)) { + CertWizard *cw = new CertWizard(Global::get().mw); cw->exec(); delete cw; - if (!CertWizard::validateCert(g.s.kpCertificate)) { - g.s.kpCertificate = CertWizard::generateNewCert(); + if (!CertWizard::validateCert(Global::get().s.kpCertificate)) { + Global::get().s.kpCertificate = CertWizard::generateNewCert(); if (qf.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Unbuffered)) { - qf.write(CertWizard::exportCert(g.s.kpCertificate)); + qf.write(CertWizard::exportCert(Global::get().s.kpCertificate)); qf.close(); } } } } - if (QDateTime::currentDateTime().daysTo(g.s.kpCertificate.first.first().expiryDate()) < 14) - g.l->log(Log::Warning, + if (QDateTime::currentDateTime().daysTo(Global::get().s.kpCertificate.first.first().expiryDate()) < 14) + Global::get().l->log(Log::Warning, CertWizard::tr("<b>Certificate Expiry:</b> Your certificate is about to expire. You need to renew it, " "or you will no longer be able to connect to servers you are registered on.")); #ifdef QT_NO_DEBUG // Only perform the version-check for non-debug builds - if (g.s.bUpdateCheck) { + if (Global::get().s.bUpdateCheck) { // Use different settings for the version checks depending on whether this is a snapshot build // or a normal release build # ifndef SNAPSHOT_BUILD // release build - new VersionCheck(true, g.mw); + new VersionCheck(true, Global::get().mw); # else // snapshot build - new VersionCheck(false, g.mw, true); + new VersionCheck(false, Global::get().mw, true); # endif } #else - g.mw->msgBox(MainWindow::tr("Skipping version check in debug mode.")); + Global::get().mw->msgBox(MainWindow::tr("Skipping version check in debug mode.")); #endif - if (g.s.bPluginCheck) { - g.p->checkUpdates(); + if (Global::get().s.bPluginCheck) { + Global::get().p->checkUpdates(); } if (url.isValid()) { OpenURLEvent *oue = new OpenURLEvent(url); - qApp->postEvent(g.mw, oue); + qApp->postEvent(Global::get().mw, oue); #ifdef Q_OS_MAC } else if (!a.quLaunchURL.isEmpty()) { OpenURLEvent *oue = new OpenURLEvent(a.quLaunchURL); - qApp->postEvent(g.mw, oue); + qApp->postEvent(Global::get().mw, oue); #endif } else { - g.mw->on_qaServerConnect_triggered(true); + Global::get().mw->on_qaServerConnect_triggered(true); } - if (!g.bQuit) + if (!Global::get().bQuit) res = a.exec(); - g.s.save(); + Global::get().s.save(); url.clear(); - ServerHandlerPtr sh = g.sh; + ServerHandlerPtr sh = Global::get().sh; if (sh) { if (sh->isRunning()) { url = sh->getServerURL(); @@ -745,31 +743,31 @@ int main(int argc, char **argv) { delete srpc; - g.sh.reset(); + Global::get().sh.reset(); while (sh && !sh.unique()) QThread::yieldCurrentThread(); sh.reset(); - delete g.talkingUI; - delete g.mw; + delete Global::get().talkingUI; + delete Global::get().mw; - delete g.nam; - delete g.lcd; + delete Global::get().nam; + delete Global::get().lcd; - delete g.db; - delete g.p; - delete g.l; + delete Global::get().db; + delete Global::get().p; + delete Global::get().l; #ifdef USE_ZEROCONF - delete g.zeroconf; + delete Global::get().zeroconf; #endif #ifdef USE_OVERLAY - delete g.o; + delete Global::get().o; #endif - delete g.c; - g.le.clear(); + delete Global::get().c; + Global::get().le.clear(); DeferInit::run_destroyers(); @@ -811,7 +809,7 @@ int main(int argc, char **argv) { if (suppressIdentity) arguments << QLatin1String("--noidentity"); if (customJackClientName) - arguments << QLatin1String("--jackname ") + g.s.qsJackClientName; + arguments << QLatin1String("--jackname ") + Global::get().s.qsJackClientName; if (!url.isEmpty()) arguments << url.toString(); diff --git a/src/mumble/os_macx.mm b/src/mumble/os_macx.mm index cab6c4c83..c33b7a6d0 100644 --- a/src/mumble/os_macx.mm +++ b/src/mumble/os_macx.mm @@ -9,12 +9,10 @@ # include "Overlay.h" #endif #include "Utils.h" +#include "Global.h" #include <CoreFoundation/CoreFoundation.h> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - char *os_lang = nullptr; static FILE *fConsole = nullptr; @@ -117,7 +115,7 @@ static void crashhandler_signals_restore() { } static void crashhandler_init() { - QString dump = g.qdBasePath.filePath(QLatin1String("mumble.dmp")); + QString dump = Global::get().qdBasePath.filePath(QLatin1String("mumble.dmp")); if (strncpy(crashhandler_fn, dump.toUtf8().data(), PATH_MAX)) { crashhandler_signals_setup(); /* todo: Change the behavior of the Apple crash dialog? Maybe? */ @@ -140,7 +138,7 @@ void os_init() { // Make a copy of the global LogEmitter, such that // os_macx.mm doesn't have to consider the deletion // of the Global object and its LogEmitter object. - le = g.le; + le = Global::get().le; if (home) { size_t len = strlen(home) + strlen(logpath) + 1; diff --git a/src/mumble/os_unix.cpp b/src/mumble/os_unix.cpp index a8fadb3b1..4c86ad0df 100644 --- a/src/mumble/os_unix.cpp +++ b/src/mumble/os_unix.cpp @@ -49,7 +49,7 @@ void os_init() { // Make a copy of the global LogEmitter, such that // os_unix.cpp doesn't have to consider the deletion // of the Global object and its LogEmitter object. - le = g.le; + le = Global::get().le; qInstallMessageHandler(mumbleMessageOutputWithContext); } diff --git a/src/mumble/os_win.cpp b/src/mumble/os_win.cpp index a148b291a..317183bb9 100644 --- a/src/mumble/os_win.cpp +++ b/src/mumble/os_win.cpp @@ -12,6 +12,7 @@ #include "Version.h" #include "win.h" +#include "Global.h" #include <cfloat> #include <cmath> @@ -29,10 +30,6 @@ #include <shlobj.h> #include <shobjidl.h> -// We define a global macro called 'g'. This can lead to issues when included code uses 'g' as a type or parameter name -// (like protobuf 3.7 does). As such, for now, we have to make this our last include. -#include "Global.h" - extern "C" { void __cpuid(int a[4], int b); void mumble_speex_init(); @@ -258,10 +255,10 @@ void os_init() { // Make a copy of the global LogEmitter, such that // os_win.cpp doesn't have to consider the deletion // of the Global object and its LogEmitter object. - le = g.le; + le = Global::get().le; #ifdef QT_NO_DEBUG - QString console = g.qdBasePath.filePath(QLatin1String("Console.txt")); + QString console = Global::get().qdBasePath.filePath(QLatin1String("Console.txt")); fConsole = _wfsopen(console.toStdWString().c_str(), L"a+", _SH_DENYWR); if (fConsole) { @@ -290,7 +287,7 @@ void os_init() { musComment.Buffer = wcComment; musComment.BufferSize = static_cast< ULONG >(wcslen(wcComment) * sizeof(wchar_t)); - QString dump = g.qdBasePath.filePath(QLatin1String("mumble.dmp")); + QString dump = Global::get().qdBasePath.filePath(QLatin1String("mumble.dmp")); QFileInfo fi(dump); QDir::root().mkpath(fi.absolutePath()); @@ -300,7 +297,7 @@ void os_init() { #endif - g.qdBasePath.mkpath(QLatin1String("Snapshots")); + Global::get().qdBasePath.mkpath(QLatin1String("Snapshots")); if (bIsWin7) SetCurrentProcessExplicitAppUserModelID(L"net.sourceforge.mumble.Mumble"); } |