mirror of
https://github.com/scorpion-26/gBar.git
synced 2024-11-24 04:02:09 +00:00
Toggle audio sink/source on icon click
A click on the mic/speaker icon now mutes/unmutes the sink/source. Implements https://github.com/scorpion-26/gBar/issues/81
This commit is contained in:
parent
2974233a5e
commit
c9bc79c956
4 changed files with 57 additions and 4 deletions
22
src/Bar.cpp
22
src/Bar.cpp
|
@ -286,8 +286,8 @@ namespace Bar
|
|||
|
||||
Widget* audioSlider;
|
||||
Widget* micSlider;
|
||||
Text* audioIcon;
|
||||
Text* micIcon;
|
||||
Button* audioIcon;
|
||||
Button* micIcon;
|
||||
void OnChangeVolumeSink(Slider&, double value)
|
||||
{
|
||||
System::SetVolumeSink(value);
|
||||
|
@ -315,6 +315,18 @@ namespace Bar
|
|||
System::SetVolumeSource(micVolume);
|
||||
}
|
||||
|
||||
void OnToggleSink(Button& button)
|
||||
{
|
||||
System::AudioInfo info = System::GetAudioInfo();
|
||||
System::SetMutedSink(!info.sinkMuted);
|
||||
}
|
||||
|
||||
void OnToggleSource(Button& button)
|
||||
{
|
||||
System::AudioInfo info = System::GetAudioInfo();
|
||||
System::SetMutedSource(!info.sourceMuted);
|
||||
}
|
||||
|
||||
TimerResult UpdateAudio(Widget&)
|
||||
{
|
||||
System::AudioInfo info = System::GetAudioInfo();
|
||||
|
@ -344,7 +356,7 @@ namespace Bar
|
|||
}
|
||||
else
|
||||
{
|
||||
((Slider*)micSlider)->SetValue(info.sinkVolume);
|
||||
((Slider*)micSlider)->SetValue(info.sourceVolume);
|
||||
}
|
||||
if (info.sourceMuted)
|
||||
{
|
||||
|
@ -605,18 +617,20 @@ namespace Bar
|
|||
Utils::SetTransform(*box, {-1, false, SideToAlignment(side)});
|
||||
box->SetOrientation(Utils::GetOrientation());
|
||||
{
|
||||
auto icon = Widget::Create<Text>();
|
||||
auto icon = Widget::Create<Button>();
|
||||
icon->SetAngle(Utils::GetAngle());
|
||||
switch (type)
|
||||
{
|
||||
case AudioType::Input:
|
||||
icon->SetClass("mic-icon");
|
||||
icon->SetText(Config::Get().speakerHighIcon);
|
||||
icon->OnClick(DynCtx::OnToggleSource);
|
||||
DynCtx::micIcon = icon.get();
|
||||
break;
|
||||
case AudioType::Output:
|
||||
icon->SetClass("audio-icon");
|
||||
icon->SetText(Config::Get().micHighIcon);
|
||||
icon->OnClick(DynCtx::OnToggleSink);
|
||||
if (!RotatedIcons())
|
||||
Utils::SetTransform(*icon, {-1, true, Alignment::Fill, 0, 6});
|
||||
DynCtx::audioIcon = icon.get();
|
||||
|
|
|
@ -234,6 +234,34 @@ namespace PulseAudio
|
|||
system(cmd.c_str());
|
||||
}
|
||||
|
||||
inline void SetMutedSink(bool muted)
|
||||
{
|
||||
if (muted)
|
||||
{
|
||||
LOG("Audio: Mute sink");
|
||||
system("pamixer --mute");
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG("Audio: Unmute sink");
|
||||
system("pamixer --unmute");
|
||||
}
|
||||
}
|
||||
|
||||
inline void SetMutedSource(bool muted)
|
||||
{
|
||||
if (muted)
|
||||
{
|
||||
LOG("Audio: Mute source");
|
||||
system("pamixer --default-source --mute");
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG("Audio: Unmute source");
|
||||
system("pamixer --default-source --unmute");
|
||||
}
|
||||
}
|
||||
|
||||
inline void Shutdown()
|
||||
{
|
||||
pa_mainloop_free(mainLoop);
|
||||
|
|
|
@ -484,6 +484,15 @@ namespace System
|
|||
PulseAudio::SetVolumeSource(volume);
|
||||
}
|
||||
|
||||
void SetMutedSink(bool muted)
|
||||
{
|
||||
PulseAudio::SetMutedSink(muted);
|
||||
}
|
||||
void SetMutedSource(bool muted)
|
||||
{
|
||||
PulseAudio::SetMutedSource(muted);
|
||||
}
|
||||
|
||||
#ifdef WITH_WORKSPACES
|
||||
void PollWorkspaces(const std::string& monitor, uint32_t numWorkspaces)
|
||||
{
|
||||
|
|
|
@ -85,6 +85,8 @@ namespace System
|
|||
AudioInfo GetAudioInfo();
|
||||
void SetVolumeSink(double volume);
|
||||
void SetVolumeSource(double volume);
|
||||
void SetMutedSink(bool muted);
|
||||
void SetMutedSource(bool muted);
|
||||
|
||||
#ifdef WITH_WORKSPACES
|
||||
enum class WorkspaceStatus
|
||||
|
|
Loading…
Reference in a new issue