154 lines
6.3 KiB
Diff
154 lines
6.3 KiB
Diff
|
|
From 2c6ae961ff33c45c9d9d7758715af3b52d2db052 Mon Sep 17 00:00:00 2001
|
|||
|
|
From: luoqing <luoqing@kylinsec.com.cn>
|
|||
|
|
Date: Thu, 7 Sep 2023 19:21:39 +0800
|
|||
|
|
Subject: [PATCH] fix(audio-tray):Fixed an issue where the volume tray icon did
|
|||
|
|
not change with the volume after the default Sink was changed
|
|||
|
|
MIME-Version: 1.0
|
|||
|
|
Content-Type: text/plain; charset=UTF-8
|
|||
|
|
Content-Transfer-Encoding: 8bit
|
|||
|
|
|
|||
|
|
- 修复默认Sink变更后,音量托盘图标不随音量大小改变的问题
|
|||
|
|
|
|||
|
|
Closed #14124
|
|||
|
|
---
|
|||
|
|
.../src/system-tray/audio-system-tray.cpp | 27 +++++++++++--------
|
|||
|
|
.../audio/src/system-tray/audio-system-tray.h | 1 -
|
|||
|
|
.../src/system-tray/volume-setting-page.cpp | 2 ++
|
|||
|
|
.../src/system-tray/volume-setting-page.h | 22 ++++++++-------
|
|||
|
|
4 files changed, 30 insertions(+), 22 deletions(-)
|
|||
|
|
|
|||
|
|
diff --git a/plugins/audio/src/system-tray/audio-system-tray.cpp b/plugins/audio/src/system-tray/audio-system-tray.cpp
|
|||
|
|
index 00e90f7..0c6aca6 100644
|
|||
|
|
--- a/plugins/audio/src/system-tray/audio-system-tray.cpp
|
|||
|
|
+++ b/plugins/audio/src/system-tray/audio-system-tray.cpp
|
|||
|
|
@@ -41,7 +41,6 @@ AudioSystemTray::AudioSystemTray(QWidget *parent) : QWidget(parent)
|
|||
|
|
initVolumeSettingPage(defaultSinkPath);
|
|||
|
|
initMixedSettingPage();
|
|||
|
|
|
|||
|
|
- m_sink = new AudioDeviceInterface(AUDIO_DBUS_NAME, defaultSinkPath, QDBusConnection::sessionBus());
|
|||
|
|
m_statusNotifierManager = new StatusNotifierManagerInterface(STATUS_NOTIFIER_MANAGER, STATUS_NOTIFIER_MANAGER_OBJECT_NAME, QDBusConnection::sessionBus(), this);
|
|||
|
|
m_systemTray = new QSystemTrayIcon();
|
|||
|
|
|
|||
|
|
@@ -82,8 +81,11 @@ void AudioSystemTray::initMixedSettingPage()
|
|||
|
|
void AudioSystemTray::initTrayIcon()
|
|||
|
|
{
|
|||
|
|
getTrayIconStyle();
|
|||
|
|
- double currentVolumeDouble = m_sink->volume() * 100;
|
|||
|
|
- KLOG_INFO() << "currentVolumeDouble" << round(currentVolumeDouble);
|
|||
|
|
+
|
|||
|
|
+ QDBusPendingReply<QString> defaultSinkPath = m_audioInterface->GetDefaultSink();
|
|||
|
|
+ AudioDeviceInterface defaultSink (AUDIO_DBUS_NAME, defaultSinkPath, QDBusConnection::sessionBus());
|
|||
|
|
+ double currentVolumeDouble = defaultSink.volume() * 100;
|
|||
|
|
+ KLOG_INFO() << "current Volume Double" << round(currentVolumeDouble);
|
|||
|
|
setTrayIcon(round(currentVolumeDouble));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@@ -117,11 +119,12 @@ void AudioSystemTray::initConnect()
|
|||
|
|
{
|
|||
|
|
connect(m_systemTray, &QSystemTrayIcon::activated, this, &AudioSystemTray::handleAudioTrayClicked);
|
|||
|
|
|
|||
|
|
- connect(m_sink, &AudioDeviceInterface::volumeChanged, [=](double value)
|
|||
|
|
- {
|
|||
|
|
- int currentVolume = round(value * 100); //表示数值的时候向上取整
|
|||
|
|
- KLOG_DEBUG() << "m_sink volumeChanged :" << currentVolume;
|
|||
|
|
- setTrayIcon(currentVolume); });
|
|||
|
|
+ connect(m_volumeSettingPage,&VolumeSettingPage::volumeChanged,[=](double value)
|
|||
|
|
+ {
|
|||
|
|
+ int currentVolume = round(value * 100); //表示数值的时候向上取整
|
|||
|
|
+ KLOG_DEBUG() << "m_sink volumeChanged :" << currentVolume;
|
|||
|
|
+ setTrayIcon(currentVolume);
|
|||
|
|
+ });
|
|||
|
|
|
|||
|
|
connect(m_statusNotifierManager, &StatusNotifierManagerInterface::StyleChanged, [=](const QString &style)
|
|||
|
|
{
|
|||
|
|
@@ -129,9 +132,11 @@ void AudioSystemTray::initConnect()
|
|||
|
|
//重新获取style
|
|||
|
|
getTrayIconStyle();
|
|||
|
|
//获取当前音量值重新设置TrayIcon
|
|||
|
|
- m_sink->volume();
|
|||
|
|
- double currentVolumeDouble = m_sink->volume() * 100;
|
|||
|
|
- setTrayIcon(round(currentVolumeDouble)); });
|
|||
|
|
+ QDBusPendingReply<QString> defaultSinkPath = m_audioInterface->GetDefaultSink();
|
|||
|
|
+ AudioDeviceInterface defaultSink (AUDIO_DBUS_NAME, defaultSinkPath, QDBusConnection::sessionBus());
|
|||
|
|
+ double currentVolumeDouble = defaultSink.volume() * 100;
|
|||
|
|
+ setTrayIcon(round(currentVolumeDouble));
|
|||
|
|
+ });
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void AudioSystemTray::handleAudioTrayClicked(QSystemTrayIcon::ActivationReason reason)
|
|||
|
|
diff --git a/plugins/audio/src/system-tray/audio-system-tray.h b/plugins/audio/src/system-tray/audio-system-tray.h
|
|||
|
|
index 16846e6..a61284e 100644
|
|||
|
|
--- a/plugins/audio/src/system-tray/audio-system-tray.h
|
|||
|
|
+++ b/plugins/audio/src/system-tray/audio-system-tray.h
|
|||
|
|
@@ -68,7 +68,6 @@ private:
|
|||
|
|
|
|||
|
|
StatusNotifierManagerInterface* m_statusNotifierManager;
|
|||
|
|
AudioInterface* m_audioInterface;
|
|||
|
|
- AudioDeviceInterface* m_sink;
|
|||
|
|
|
|||
|
|
QString m_colorTheme;
|
|||
|
|
int xTray, yTray, heightTray, widthTray;
|
|||
|
|
diff --git a/plugins/audio/src/system-tray/volume-setting-page.cpp b/plugins/audio/src/system-tray/volume-setting-page.cpp
|
|||
|
|
index fac69a6..54b8f10 100644
|
|||
|
|
--- a/plugins/audio/src/system-tray/volume-setting-page.cpp
|
|||
|
|
+++ b/plugins/audio/src/system-tray/volume-setting-page.cpp
|
|||
|
|
@@ -132,6 +132,7 @@ void VolumeSettingPage::handleVolumeChanged(double value)
|
|||
|
|
setVolumeIcon(currentVolume);
|
|||
|
|
ui->volumeSetting->setValue(currentVolume);
|
|||
|
|
ui->volumeSetting->blockSignals(false);
|
|||
|
|
+ emit volumeChanged(value);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void VolumeSettingPage::handleMuteButtonClicked()
|
|||
|
|
@@ -144,6 +145,7 @@ void VolumeSettingPage::handleMuteButtonClicked()
|
|||
|
|
|
|||
|
|
void VolumeSettingPage::handleDefaultSinkChanged(int index)
|
|||
|
|
{
|
|||
|
|
+ KLOG_DEBUG() << "Default Sink Changed";
|
|||
|
|
// delete and restart init defaultSink
|
|||
|
|
if (m_sink != nullptr)
|
|||
|
|
{
|
|||
|
|
diff --git a/plugins/audio/src/system-tray/volume-setting-page.h b/plugins/audio/src/system-tray/volume-setting-page.h
|
|||
|
|
index 4719021..80f0098 100644
|
|||
|
|
--- a/plugins/audio/src/system-tray/volume-setting-page.h
|
|||
|
|
+++ b/plugins/audio/src/system-tray/volume-setting-page.h
|
|||
|
|
@@ -40,16 +40,6 @@ public:
|
|||
|
|
QPixmap trayIconColorSwitch(const QString &iconPath);
|
|||
|
|
void disableSettings();
|
|||
|
|
|
|||
|
|
-private:
|
|||
|
|
- void initDbusServiceWatcher();
|
|||
|
|
- void initAudioDevice();
|
|||
|
|
- void initAudioStream();
|
|||
|
|
- template <class Audio>
|
|||
|
|
- void initSettings(Audio *audio);
|
|||
|
|
- template <class Audio>
|
|||
|
|
- void clickMuteButton(Audio *audio);
|
|||
|
|
-
|
|||
|
|
-
|
|||
|
|
public slots:
|
|||
|
|
void handleVolumeChanged(double value);
|
|||
|
|
void handleMuteButtonClicked();
|
|||
|
|
@@ -60,6 +50,18 @@ public slots:
|
|||
|
|
void setVolumeIcon(int value);
|
|||
|
|
void hideLine();
|
|||
|
|
|
|||
|
|
+private:
|
|||
|
|
+ void initDbusServiceWatcher();
|
|||
|
|
+ void initAudioDevice();
|
|||
|
|
+ void initAudioStream();
|
|||
|
|
+ template <class Audio>
|
|||
|
|
+ void initSettings(Audio *audio);
|
|||
|
|
+ template <class Audio>
|
|||
|
|
+ void clickMuteButton(Audio *audio);
|
|||
|
|
+
|
|||
|
|
+signals:
|
|||
|
|
+ void volumeChanged(double value);
|
|||
|
|
+
|
|||
|
|
private:
|
|||
|
|
Ui::VolumeSettingPage *ui;
|
|||
|
|
AudioInterface *m_audioInterface;
|
|||
|
|
--
|
|||
|
|
2.33.0
|
|||
|
|
|