From d9ad7ecb4fdb11631ad0928fd54bbf04ed9659ce Mon Sep 17 00:00:00 2001 From: Ilya Zlobintsev Date: Wed, 12 Aug 2026 09:39:55 +0300 Subject: [PATCH] fix: correctly set "enable editing" in VF curve editor init (#1148) --- lact-gui/src/app/pages/oc_page/vf_curve.rs | 24 +++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/lact-gui/src/app/pages/oc_page/vf_curve.rs b/lact-gui/src/app/pages/oc_page/vf_curve.rs index 67610b13..be3db380 100644 --- a/lact-gui/src/app/pages/oc_page/vf_curve.rs +++ b/lact-gui/src/app/pages/oc_page/vf_curve.rs @@ -5,6 +5,7 @@ use crate::{ use amdgpu_sysfs::gpu_handle::PowerLevelId; use gtk::{ gdk, + glib::object::ObjectExt, prelude::{ AdjustmentExt, BoxExt as _, ButtonExt as _, CheckButtonExt as _, DrawingAreaExtManual as _, EventControllerExt as _, GestureSingleExt as _, GtkWindowExt as _, OrientableExt as _, @@ -198,6 +199,7 @@ impl relm4::Component for VfCurveEditor { set_digits: 0, }, + #[name = "enable_editing_button"] gtk::CheckButton { set_label: Some(&fl!(I18N, "vf-curve-enable-editing")), set_halign: gtk::Align::End, @@ -209,7 +211,7 @@ impl relm4::Component for VfCurveEditor { connect_toggled[drawing_area] => move |_| { APP_BROKER.send(AppMsg::SettingsChanged); drawing_area.queue_draw(); - } + } @ enable_editing_signal, }, gtk::Button { @@ -219,11 +221,7 @@ impl relm4::Component for VfCurveEditor { set_valign: gtk::Align::Center, #[watch] - set_sensitive: { - model.points.borrow() - .iter() - .any(|point| point.freq != point.base_freq) - }, + set_sensitive: curve_is_configured(&model.points.borrow()), connect_clicked => VfCurveEditorMsg::ResetCurve, connect_clicked => move |_| { @@ -340,6 +338,14 @@ impl relm4::Component for VfCurveEditor { .set(Self::freq_limits_range(&points, offset_range)); } + widgets + .enable_editing_button + .block_signal(&widgets.enable_editing_signal); + self.allow_editing.set_value(curve_is_configured(&points)); + widgets + .enable_editing_button + .unblock_signal(&widgets.enable_editing_signal); + if points.is_empty() { root.set_visible(false); } @@ -513,7 +519,7 @@ impl VfCurveEditor { Rectangle::new([(x - 15, y + 2), (x, y - 1)], colors.success.filled()) }); - if points.iter().any(|point| point.freq != point.base_freq) { + if curve_is_configured(points) { let base_line_style = colors.success.mix(0.3); chart .draw_series(LineSeries::new( @@ -899,3 +905,7 @@ fn offset_freq(base_freq: u32, offset: i32) -> u32 { base_freq.saturating_add(offset as u32) } } + +fn curve_is_configured(points: &[NvidiaVfPoint]) -> bool { + points.iter().any(|point| point.freq != point.base_freq) +}