hopefully fix sched badge

This commit is contained in:
Ward from fusion-voyager-3 2024-06-22 19:41:31 +03:00
parent 63eda09368
commit 112f56ad9c
2 changed files with 37 additions and 73 deletions

View File

@ -84,6 +84,11 @@ pub fn content(
.orientation(Orientation::Vertical) .orientation(Orientation::Vertical)
.build(); .build();
let sched_ext_badge_box = adw::Bin::builder()
.hexpand(true)
.vexpand(true)
.build();
let kernel_branch_expander_row = adw::ExpanderRow::builder() let kernel_branch_expander_row = adw::ExpanderRow::builder()
.subtitle(t!("kernel_branch_expander_row_subtitle")) .subtitle(t!("kernel_branch_expander_row_subtitle"))
.build(); .build();
@ -147,7 +152,7 @@ pub fn content(
.height_request(50) .height_request(50)
.width_request(50) .width_request(50)
.tooltip_text(t!("config_kernel_button_tooltip_text")) .tooltip_text(t!("config_kernel_button_tooltip_text"))
.sensitive(is_scx_kernel()) .sensitive(!is_scx_kernel())
.hexpand(true) .hexpand(true)
.build(); .build();
config_kernel_button.add_css_class("circular"); config_kernel_button.add_css_class("circular");
@ -157,9 +162,9 @@ pub fn content(
.set_tooltip_text(Some(&t!("config_kernel_button_tooltip_text_no_scx").to_string())); .set_tooltip_text(Some(&t!("config_kernel_button_tooltip_text_no_scx").to_string()));
} }
config_kernel_button.connect_clicked(clone!(@weak content_stack, @weak window => move |_| { config_kernel_button.connect_clicked(clone!(@weak content_stack, @weak window, @weak sched_ext_badge_box => move |_| {
content_stack.add_named( content_stack.add_named(
&sched_ext::sched_ext_page(&content_stack, &window), &sched_ext::sched_ext_page(&content_stack, &window, &sched_ext_badge_box),
Some("sched_ext_page"), Some("sched_ext_page"),
); );
content_stack.set_visible_child_name("sched_ext_page") content_stack.set_visible_child_name("sched_ext_page")
@ -192,7 +197,9 @@ pub fn content(
load_badge_async_context.spawn_local(clone!(@weak content_box, @weak loading_box, @weak kernel_badge_box, @strong selected_kernel_branch, @strong db_load_complete => async move { load_badge_async_context.spawn_local(clone!(@weak content_box, @weak loading_box, @weak kernel_badge_box, @strong selected_kernel_branch, @strong db_load_complete => async move {
while let Ok(_state) = load_badge_async_receiver.recv().await { while let Ok(_state) = load_badge_async_receiver.recv().await {
if *db_load_complete.borrow() == true { if *db_load_complete.borrow() == true {
create_kernel_badges(&kernel_badge_box, &get_running_kernel_info(), &selected_kernel_branch); let running_kernel_info = get_running_kernel_info();
create_kernel_badges(&kernel_badge_box, &running_kernel_info, &selected_kernel_branch);
create_current_sched_badge(&sched_ext_badge_box, &running_kernel_info);
loading_box.set_visible(false); loading_box.set_visible(false);
content_box.set_sensitive(true) content_box.set_sensitive(true)
} }
@ -563,3 +570,25 @@ fn save_branch_config(branch: &str) {
} }
} }
} }
fn create_current_sched_badge(
badge_box: &adw::Bin,
running_kernel_info: &RunningKernelInfo,
) {
//while let Some(widget) = badge_box.last_child() {
// badge_box.remove(&widget);
//}
let kernel_badges_size_group = gtk::SizeGroup::new(SizeGroupMode::Both);
let kernel_badges_size_group0 = gtk::SizeGroup::new(SizeGroupMode::Both);
let kernel_badges_size_group1 = gtk::SizeGroup::new(SizeGroupMode::Both);
badge_box.set_child(Some(&crate::content::create_kernel_badge(
&t!("kernel_badge_running_sched_label").to_string(),
&running_kernel_info.sched,
"background-accent-bg",
&kernel_badges_size_group,
&kernel_badges_size_group0,
&kernel_badges_size_group1,
)));
}

View File

@ -13,7 +13,7 @@ use std::rc::Rc;
use std::time::Duration; use std::time::Duration;
use std::{fs, io, thread}; use std::{fs, io, thread};
pub fn sched_ext_page(content_stack: &gtk::Stack, window: &adw::ApplicationWindow) -> gtk::Box { pub fn sched_ext_page(content_stack: &gtk::Stack, window: &adw::ApplicationWindow, badge_box: &adw::Bin) -> gtk::Box {
let main_box = gtk::Box::builder() let main_box = gtk::Box::builder()
.hexpand(true) .hexpand(true)
.vexpand(true) .vexpand(true)
@ -48,22 +48,8 @@ pub fn sched_ext_page(content_stack: &gtk::Stack, window: &adw::ApplicationWindo
.build(); .build();
main_label.add_css_class("symbolic-accent-bg"); main_label.add_css_class("symbolic-accent-bg");
let badge_box = gtk::Box::builder()
.hexpand(true)
.valign(Align::Start)
.orientation(Orientation::Vertical)
.build();
let initial_running_kernel_info = get_running_kernel_info(); let initial_running_kernel_info = get_running_kernel_info();
create_current_sched_badge(
&badge_box,
&initial_running_kernel_info,
&kernel_badges_size_group,
&kernel_badges_size_group0,
&kernel_badges_size_group1,
);
let selected_scx_sched = Rc::new(RefCell::new(initial_running_kernel_info.clone().sched)); let selected_scx_sched = Rc::new(RefCell::new(initial_running_kernel_info.clone().sched));
let cmd_status_dialog = adw::MessageDialog::builder() let cmd_status_dialog = adw::MessageDialog::builder()
@ -128,37 +114,18 @@ pub fn sched_ext_page(content_stack: &gtk::Stack, window: &adw::ApplicationWindo
apply_button.add_css_class("pill"); apply_button.add_css_class("pill");
apply_button.add_css_class("destructive-action"); apply_button.add_css_class("destructive-action");
apply_button.connect_clicked(clone! (@weak badge_box, @weak kernel_badges_size_group, @weak kernel_badges_size_group0, @weak kernel_badges_size_group1, @weak selected_scx_sched => move |_| { apply_button.connect_clicked(clone! (@weak selected_scx_sched => move |_| {
let selected_scx_sched_clone1 = selected_scx_sched.borrow().clone(); let selected_scx_sched_clone1 = selected_scx_sched.borrow().clone();
match change_scx_scheduler(&selected_scx_sched_clone1) {
match change_scx_scheduler(&selected_scx_sched_clone1,
&badge_box,
&kernel_badges_size_group,
&kernel_badges_size_group0,
&kernel_badges_size_group1,) {
Ok(_) => { Ok(_) => {
cmd_status_dialog.set_heading(Some(&t!("sched_ext_cmd_status_dialog_heading_success").to_string())); cmd_status_dialog.set_heading(Some(&t!("sched_ext_cmd_status_dialog_heading_success").to_string()));
cmd_status_dialog.set_body(format!("{}: {}", t!("sched_ext_cmd_status_dialog_body_success"), &selected_scx_sched_clone1).as_str()); cmd_status_dialog.set_body(format!("{}: {}", t!("sched_ext_cmd_status_dialog_body_success"), &selected_scx_sched_clone1).as_str());
cmd_status_dialog.present(); cmd_status_dialog.present();
create_current_sched_badge(
&badge_box,
&get_running_kernel_info(),
&kernel_badges_size_group,
&kernel_badges_size_group0,
&kernel_badges_size_group1,
);
} }
Err(_) => { Err(_) => {
cmd_status_dialog.set_heading(Some(&t!("sched_ext_cmd_status_dialog_heading_failed").to_string())); cmd_status_dialog.set_heading(Some(&t!("sched_ext_cmd_status_dialog_heading_failed").to_string()));
cmd_status_dialog.set_body(format!("{}: {}", t!("sched_ext_cmd_status_dialog_body_failed"), &selected_scx_sched_clone1).as_str()); cmd_status_dialog.set_body(format!("{}: {}", t!("sched_ext_cmd_status_dialog_body_failed"), &selected_scx_sched_clone1).as_str());
cmd_status_dialog.present(); cmd_status_dialog.present();
create_current_sched_badge(
&badge_box,
&get_running_kernel_info(),
&kernel_badges_size_group,
&kernel_badges_size_group0,
&kernel_badges_size_group1,
);
} }
}; };
})); }));
@ -188,7 +155,7 @@ pub fn sched_ext_page(content_stack: &gtk::Stack, window: &adw::ApplicationWindo
window_bottombar.append(&back_button); window_bottombar.append(&back_button);
window_bottombar.append(&apply_button); window_bottombar.append(&apply_button);
main_box.append(&badge_box); main_box.append(badge_box);
main_box.append(&scx_sched_expander_row_boxedlist); main_box.append(&scx_sched_expander_row_boxedlist);
main_box.append(&main_icon); main_box.append(&main_icon);
main_box.append(&main_label); main_box.append(&main_label);
@ -197,27 +164,6 @@ pub fn sched_ext_page(content_stack: &gtk::Stack, window: &adw::ApplicationWindo
main_box main_box
} }
fn create_current_sched_badge(
badge_box: &gtk::Box,
running_kernel_info: &RunningKernelInfo,
kernel_badges_size_group: &gtk::SizeGroup,
kernel_badges_size_group0: &gtk::SizeGroup,
kernel_badges_size_group1: &gtk::SizeGroup,
) {
while let Some(widget) = badge_box.last_child() {
badge_box.remove(&widget);
}
badge_box.append(&crate::content::create_kernel_badge(
&t!("kernel_badge_running_sched_label").to_string(),
&running_kernel_info.sched,
"background-accent-bg",
&kernel_badges_size_group,
&kernel_badges_size_group0,
&kernel_badges_size_group1,
));
}
fn scx_sched_expandable( fn scx_sched_expandable(
expander_row: &adw::ExpanderRow, expander_row: &adw::ExpanderRow,
selected_scx_sched: &Rc<RefCell<String>>, selected_scx_sched: &Rc<RefCell<String>>,
@ -317,10 +263,6 @@ fn get_current_scx_scheduler() -> String {
fn change_scx_scheduler( fn change_scx_scheduler(
scx_sched: &str, scx_sched: &str,
badge_box: &gtk::Box,
kernel_badges_size_group: &gtk::SizeGroup,
kernel_badges_size_group0: &gtk::SizeGroup,
kernel_badges_size_group1: &gtk::SizeGroup,
) -> Result<(), io::Error> { ) -> Result<(), io::Error> {
cmd!( cmd!(
"pkexec", "pkexec",
@ -332,12 +274,5 @@ fn change_scx_scheduler(
) )
) )
.run()?; .run()?;
create_current_sched_badge(
&badge_box,
&get_running_kernel_info(),
&kernel_badges_size_group,
&kernel_badges_size_group0,
&kernel_badges_size_group1,
);
Ok(()) Ok(())
} }