fix: Use buffer for all audio sliders

This commit is contained in:
Fabio Lenherr / DashieTM 2023-11-18 15:28:23 +01:00
parent 5a0e5d86bb
commit 03fc3790c0
19 changed files with 145 additions and 59 deletions

View file

@ -1,4 +1,3 @@
use std::cell::RefCell;
use std::sync::Arc;
use std::time::{Duration, SystemTime};
@ -9,8 +8,7 @@ use dbus::blocking::Connection;
use dbus::Error;
use glib::subclass::types::ObjectSubclassIsExt;
use glib::{clone, Cast, Propagation};
use gtk::prelude::ScaleExt;
use gtk::{gio, PositionType, StringObject};
use gtk::{gio, StringObject};
use ReSet_Lib::audio::audio::InputStream;
use super::inputStreamEntryImpl;

View file

@ -1,6 +1,6 @@
use std::sync::atomic::Ordering;
use std::sync::Arc;
use std::time::Duration;
use std::time::{Duration, SystemTime};
use crate::components::base::listEntry::ListEntry;
use crate::components::base::utils::{
@ -159,6 +159,15 @@ pub fn populate_sinks(output_box: Arc<SinkBox>) {
let sink = imp.resetDefaultSink.borrow();
let index = sink.index;
let channels = sink.channels;
{
let mut time = imp.volumeTimeStamp.borrow_mut();
if time.is_some()
&& time.unwrap().elapsed().unwrap() < Duration::from_millis(50)
{
return Propagation::Proceed;
}
*time = Some(SystemTime::now());
}
set_sink_volume(value, index, channels);
Propagation::Proceed
});

View file

@ -1,6 +1,7 @@
use std::cell::RefCell;
use std::collections::HashMap;
use std::sync::{Arc, RwLock};
use std::time::SystemTime;
use crate::components::base::listEntry::ListEntry;
use crate::components::output::inputStreamEntry::InputStreamEntry;
@ -46,6 +47,7 @@ pub struct SinkBox {
// the full name
pub resetSinkMap: Arc<RwLock<HashMap<String, (u32, u32, String)>>>,
// pub : Arc<Mutex<Vec<ListEntry>>>,
pub volumeTimeStamp: RefCell<Option<SystemTime>>,
}
#[glib::object_subclass]

View file

@ -1,5 +1,5 @@
use std::sync::Arc;
use std::time::Duration;
use std::time::{Duration, SystemTime};
use adw::glib;
use adw::glib::Object;
@ -42,6 +42,13 @@ impl SinkEntry {
let sink = imp.stream.borrow();
let index = sink.index;
let channels = sink.channels;
{
let mut time = imp.volumeTimeStamp.borrow_mut();
if time.is_some() && time.unwrap().elapsed().unwrap() < Duration::from_millis(50) {
return Propagation::Proceed;
}
*time = Some(SystemTime::now());
}
set_sink_volume(value, index, channels);
Propagation::Proceed
}),

View file

@ -1,5 +1,6 @@
use std::cell::RefCell;
use std::sync::Arc;
use std::time::SystemTime;
use crate::components::output::sinkEntry;
use gtk::subclass::prelude::*;
@ -23,6 +24,7 @@ pub struct SinkEntry {
#[template_child]
pub resetVolumeMeter: TemplateChild<ProgressBar>,
pub stream: Arc<RefCell<Sink>>,
pub volumeTimeStamp: RefCell<Option<SystemTime>>,
}
#[glib::object_subclass]