mirror of
https://gitlab.com/asus-linux/asusctl.git
synced 2026-02-06 00:15:04 +01:00
Rmeove notification handle tracking limit
Fixes issue with KDE profile change notif disappearing. closes #353
This commit is contained in:
@@ -12,7 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
- Move FX506HC to FX506H in arua DB to catch full series of this range
|
- Move FX506HC to FX506H in arua DB to catch full series of this range
|
||||||
- Move FX506LH to FX506L in arua DB to catch full series of this range
|
- Move FX506LH to FX506L in arua DB to catch full series of this range
|
||||||
- Support for GV601VI LED modes
|
- Support for GV601VI LED modes
|
||||||
|
- Rmeove notification handle tracking limit, fixes KDE issue with profile notif
|
||||||
|
|
||||||
## [v4.6.2]
|
## [v4.6.2]
|
||||||
- Fix rog-control-center not reopening if `startup_in_background` is set
|
- Fix rog-control-center not reopening if `startup_in_background` is set
|
||||||
|
|||||||
@@ -225,7 +225,11 @@ impl CtrlKbdLed {
|
|||||||
self.write_mode(&effect)?;
|
self.write_mode(&effect)?;
|
||||||
self.config.read(); // refresh config if successful
|
self.config.read(); // refresh config if successful
|
||||||
self.config.set_builtin(effect);
|
self.config.set_builtin(effect);
|
||||||
|
if self.config.brightness == LedBrightness::Off {
|
||||||
|
self.config.brightness = LedBrightness::Med;
|
||||||
|
}
|
||||||
self.config.write();
|
self.config.write();
|
||||||
|
self.set_brightness(self.config.brightness)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -233,6 +237,11 @@ impl CtrlKbdLed {
|
|||||||
/// write the raw factory mode packets - when doing this it is expected that
|
/// write the raw factory mode packets - when doing this it is expected that
|
||||||
/// only the first `Vec` (`effect[0]`) is valid.
|
/// only the first `Vec` (`effect[0]`) is valid.
|
||||||
pub fn write_effect_block(&mut self, effect: &UsbPackets) -> Result<(), RogError> {
|
pub fn write_effect_block(&mut self, effect: &UsbPackets) -> Result<(), RogError> {
|
||||||
|
if self.config.brightness == LedBrightness::Off {
|
||||||
|
self.config.brightness = LedBrightness::Med;
|
||||||
|
self.config.write();
|
||||||
|
}
|
||||||
|
|
||||||
let pkt_type = effect[0][1];
|
let pkt_type = effect[0][1];
|
||||||
const PER_KEY_TYPE: u8 = 0xbc;
|
const PER_KEY_TYPE: u8 = 0xbc;
|
||||||
|
|
||||||
|
|||||||
@@ -77,17 +77,6 @@ impl EnabledNotifications {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! notify {
|
|
||||||
($notifier:expr, $last_notif:ident) => {
|
|
||||||
if let Some(notif) = $last_notif.take() {
|
|
||||||
notif.close();
|
|
||||||
}
|
|
||||||
if let Ok(x) = $notifier {
|
|
||||||
$last_notif.replace(x);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: drop the macro and use generics plus closure
|
// TODO: drop the macro and use generics plus closure
|
||||||
macro_rules! recv_notif {
|
macro_rules! recv_notif {
|
||||||
($proxy:ident,
|
($proxy:ident,
|
||||||
@@ -100,7 +89,6 @@ macro_rules! recv_notif {
|
|||||||
$msg:literal,
|
$msg:literal,
|
||||||
$notifier:ident) => {
|
$notifier:ident) => {
|
||||||
|
|
||||||
let last_notif = $last_notif.clone();
|
|
||||||
let notifs_enabled1 = $notif_enabled.clone();
|
let notifs_enabled1 = $notif_enabled.clone();
|
||||||
let page_states1 = $page_states.clone();
|
let page_states1 = $page_states.clone();
|
||||||
|
|
||||||
@@ -119,10 +107,8 @@ macro_rules! recv_notif {
|
|||||||
if let Ok(out) = e.args() {
|
if let Ok(out) = e.args() {
|
||||||
if let Ok(config) = notifs_enabled1.lock() {
|
if let Ok(config) = notifs_enabled1.lock() {
|
||||||
if config.all_enabled && config.$signal {
|
if config.all_enabled && config.$signal {
|
||||||
if let Ok(ref mut lock) = last_notif.lock() {
|
trace!("zbus signal {}", stringify!($signal));
|
||||||
trace!("zbus signal {} locked last_notif", stringify!($signal));
|
$notifier($msg, &out.$($out_arg)+()).ok();
|
||||||
notify!($notifier($msg, &out.$($out_arg)+()), lock);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if let Ok(mut lock) = page_states1.lock() {
|
if let Ok(mut lock) = page_states1.lock() {
|
||||||
@@ -130,21 +116,18 @@ macro_rules! recv_notif {
|
|||||||
lock.set_notified();
|
lock.set_notified();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
sleep(Duration::from_millis(500)).await;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
type SharedHandle = Arc<Mutex<Option<NotificationHandle>>>;
|
|
||||||
|
|
||||||
pub fn start_notifications(
|
pub fn start_notifications(
|
||||||
config: &Config,
|
config: &Config,
|
||||||
page_states: &Arc<Mutex<SystemState>>,
|
page_states: &Arc<Mutex<SystemState>>,
|
||||||
enabled_notifications: &Arc<Mutex<EnabledNotifications>>,
|
enabled_notifications: &Arc<Mutex<EnabledNotifications>>,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let last_notification: SharedHandle = Arc::new(Mutex::new(None));
|
|
||||||
|
|
||||||
// Setup the AC/BAT commands that will run on poweer status change
|
// Setup the AC/BAT commands that will run on poweer status change
|
||||||
unsafe {
|
unsafe {
|
||||||
let prog: Vec<&str> = config.ac_command.split_whitespace().collect();
|
let prog: Vec<&str> = config.ac_command.split_whitespace().collect();
|
||||||
@@ -299,7 +282,6 @@ pub fn start_notifications(
|
|||||||
});
|
});
|
||||||
|
|
||||||
let page_states1 = page_states.clone();
|
let page_states1 = page_states.clone();
|
||||||
let last_notification1 = last_notification.clone();
|
|
||||||
tokio::spawn(async move {
|
tokio::spawn(async move {
|
||||||
let conn = zbus::Connection::system()
|
let conn = zbus::Connection::system()
|
||||||
.await
|
.await
|
||||||
@@ -332,11 +314,6 @@ pub fn start_notifications(
|
|||||||
lock.bios.dedicated_gfx = out.mode;
|
lock.bios.dedicated_gfx = out.mode;
|
||||||
lock.set_notified();
|
lock.set_notified();
|
||||||
}
|
}
|
||||||
if let Ok(ref mut lock) = last_notification1.lock() {
|
|
||||||
if let Some(notif) = lock.take() {
|
|
||||||
notif.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
do_mux_notification("Reboot required. BIOS GPU MUX mode set to", &out.mode)
|
do_mux_notification("Reboot required. BIOS GPU MUX mode set to", &out.mode)
|
||||||
.ok();
|
.ok();
|
||||||
}
|
}
|
||||||
@@ -351,7 +328,6 @@ pub fn start_notifications(
|
|||||||
for dev in dev {
|
for dev in dev {
|
||||||
if dev.is_dgpu() {
|
if dev.is_dgpu() {
|
||||||
let notifs_enabled1 = enabled_notifications.clone();
|
let notifs_enabled1 = enabled_notifications.clone();
|
||||||
let last_notif = last_notification.clone();
|
|
||||||
let page_states1 = page_states.clone();
|
let page_states1 = page_states.clone();
|
||||||
// Plain old thread is perfectly fine since most of this is potentially blocking
|
// Plain old thread is perfectly fine since most of this is potentially blocking
|
||||||
tokio::spawn(async move {
|
tokio::spawn(async move {
|
||||||
@@ -363,15 +339,7 @@ pub fn start_notifications(
|
|||||||
if config.all_enabled && config.receive_notify_gfx_status {
|
if config.all_enabled && config.receive_notify_gfx_status {
|
||||||
// Required check because status cycles through
|
// Required check because status cycles through
|
||||||
// active/unknown/suspended
|
// active/unknown/suspended
|
||||||
if let Ok(ref mut lock) = last_notif.lock() {
|
do_gpu_status_notif("dGPU status changed:", &status).ok();
|
||||||
notify!(
|
|
||||||
do_gpu_status_notif(
|
|
||||||
"dGPU status changed:",
|
|
||||||
&status
|
|
||||||
),
|
|
||||||
lock
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if let Ok(mut lock) = page_states1.lock() {
|
if let Ok(mut lock) = page_states1.lock() {
|
||||||
@@ -478,7 +446,7 @@ where
|
|||||||
notif
|
notif
|
||||||
.summary(NOTIF_HEADER)
|
.summary(NOTIF_HEADER)
|
||||||
.body(&format!("{message} {data}"))
|
.body(&format!("{message} {data}"))
|
||||||
.timeout(2000)
|
.timeout(-1)
|
||||||
//.hint(Hint::Resident(true))
|
//.hint(Hint::Resident(true))
|
||||||
.hint(Hint::Category("device".into()));
|
.hint(Hint::Category("device".into()));
|
||||||
|
|
||||||
@@ -554,7 +522,7 @@ fn do_gfx_action_notif(message: &str, action: GfxUserAction, mode: GpuMode) -> R
|
|||||||
//.hint(Hint::Resident(true))
|
//.hint(Hint::Resident(true))
|
||||||
.hint(Hint::Category("device".into()))
|
.hint(Hint::Category("device".into()))
|
||||||
.urgency(Urgency::Critical)
|
.urgency(Urgency::Critical)
|
||||||
.timeout(3000)
|
.timeout(-1)
|
||||||
.icon("dialog-warning")
|
.icon("dialog-warning")
|
||||||
.hint(Hint::Transient(true));
|
.hint(Hint::Transient(true));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user