From d0fbd565c4860723de62a44465cdbe067200e67b Mon Sep 17 00:00:00 2001 From: nokyan Date: Wed, 29 Apr 2026 21:34:38 +0200 Subject: [PATCH 1/8] Remove period after 'Unsaved work might be lost' --- src/ui/pages/applications/mod.rs | 2 +- src/ui/pages/processes/mod.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ui/pages/applications/mod.rs b/src/ui/pages/applications/mod.rs index f0f89c67..9044023c 100644 --- a/src/ui/pages/applications/mod.rs +++ b/src/ui/pages/applications/mod.rs @@ -983,7 +983,7 @@ fn get_action_name(action: ProcessAction, name: &str) -> String { fn get_action_warning(action: ProcessAction) -> String { match action { - ProcessAction::TERM => i18n("Unsaved work might be lost."), + ProcessAction::TERM => i18n("Unsaved work might be lost"), ProcessAction::STOP => i18n( "Halting an app can come with serious risks such as losing data and security implications. Use with caution.", ), diff --git a/src/ui/pages/processes/mod.rs b/src/ui/pages/processes/mod.rs index 45134e24..e961afad 100644 --- a/src/ui/pages/processes/mod.rs +++ b/src/ui/pages/processes/mod.rs @@ -1306,7 +1306,7 @@ fn get_action_name_multiple(action: ProcessAction, count: usize) -> String { fn get_action_warning(action: ProcessAction) -> String { match action { - ProcessAction::TERM => i18n("Unsaved work might be lost."), + ProcessAction::TERM => i18n("Unsaved work might be lost"), ProcessAction::STOP => i18n( "Halting a process can come with serious risks such as losing data and security implications. Use with caution.", ), From 0730619633e0f1f5788e40c78f29d3cc8ebe8305 Mon Sep 17 00:00:00 2001 From: nokyan Date: Wed, 29 Apr 2026 21:45:42 +0200 Subject: [PATCH 2/8] Remove app version from window title in dev builds --- src/ui/window.rs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/ui/window.rs b/src/ui/window.rs index 72a96051..07993876 100644 --- a/src/ui/window.rs +++ b/src/ui/window.rs @@ -47,7 +47,6 @@ mod imp { }; use crate::{ - config::VERSION, ui::{ pages::{ applications::ResApplications, cpu::ResCPU, memory::ResMemory, @@ -172,9 +171,6 @@ mod imp { // Devel Profile if PROFILE == "Devel" { obj.add_css_class("devel"); - obj.set_title(Some( - format!("{} ({})", obj.title().unwrap_or_default(), VERSION).trim(), - )); } // Load latest window state From 36c3cd3d41d568c50b34cf785ee6b2bbce1d5f1c Mon Sep 17 00:00:00 2001 From: nokyan Date: Wed, 29 Apr 2026 22:08:07 +0200 Subject: [PATCH 3/8] Remove arrow from popover menus --- data/resources/ui/pages/applications.ui | 1 + data/resources/ui/pages/processes.ui | 2 ++ 2 files changed, 3 insertions(+) diff --git a/data/resources/ui/pages/applications.ui b/data/resources/ui/pages/applications.ui index 786eebce..11340ee2 100644 --- a/data/resources/ui/pages/applications.ui +++ b/data/resources/ui/pages/applications.ui @@ -46,6 +46,7 @@ popover_menu app_context_menu + false diff --git a/data/resources/ui/pages/processes.ui b/data/resources/ui/pages/processes.ui index 1a2aeb52..b59dc9de 100644 --- a/data/resources/ui/pages/processes.ui +++ b/data/resources/ui/pages/processes.ui @@ -88,10 +88,12 @@ popover_menu process_context_menu + false popover_menu_multiple process_context_menu_multiple + false From 6f819f28647f706abedf46a553d3bb959b0b6775 Mon Sep 17 00:00:00 2001 From: nokyan Date: Thu, 30 Apr 2026 06:55:45 +0200 Subject: [PATCH 4/8] Reveal bottom bar of Processes and Apps only if there's a selection --- data/resources/ui/pages/applications.ui | 3 ++- data/resources/ui/pages/processes.ui | 3 ++- src/ui/pages/applications/mod.rs | 24 +++++++++++-------- src/ui/pages/processes/mod.rs | 31 ++++++++++++++----------- 4 files changed, 36 insertions(+), 25 deletions(-) diff --git a/data/resources/ui/pages/applications.ui b/data/resources/ui/pages/applications.ui index 11340ee2..2b123e39 100644 --- a/data/resources/ui/pages/applications.ui +++ b/data/resources/ui/pages/applications.ui @@ -49,7 +49,7 @@ false - + @@ -72,6 +72,7 @@ + false 16 diff --git a/data/resources/ui/pages/processes.ui b/data/resources/ui/pages/processes.ui index b59dc9de..8fd62d69 100644 --- a/data/resources/ui/pages/processes.ui +++ b/data/resources/ui/pages/processes.ui @@ -96,7 +96,7 @@ false - + @@ -119,6 +119,7 @@ + false 16 diff --git a/src/ui/pages/applications/mod.rs b/src/ui/pages/applications/mod.rs index 9044023c..2e79b084 100644 --- a/src/ui/pages/applications/mod.rs +++ b/src/ui/pages/applications/mod.rs @@ -64,6 +64,8 @@ mod imp { pub information_button: TemplateChild, #[template_child] pub end_application_button: TemplateChild, + #[template_child] + pub toolbar_view: TemplateChild, pub store: RefCell, pub selection_model: RefCell, @@ -129,6 +131,7 @@ mod imp { sender: Default::default(), applications_scrolled_window: Default::default(), end_application_button: Default::default(), + toolbar_view: Default::default(), uses_progress_bar: Cell::new(false), icon: RefCell::new(ThemedIcon::new("app-symbolic").into()), tab_name: Cell::from(glib::GString::from(i18n("Apps"))), @@ -595,10 +598,12 @@ impl ResApplications { imp.selection_model .borrow() .connect_selection_changed(clone!( - #[weak(rename_to = this)] - self, + #[weak] + imp, move |model, _, _| { - let imp = this.imp(); + imp.toolbar_view + .set_reveal_bottom_bars(model.selected_item().is_some()); + let is_system_processes = model.selected_item().is_some_and(|object| { object .downcast::() @@ -606,6 +611,7 @@ impl ResApplications { .id() .is_none() }); + imp.information_button .set_sensitive(model.selected() != u32::MAX); imp.end_application_button @@ -617,10 +623,9 @@ impl ResApplications { .set_key_capture_widget(self.parent().as_ref()); imp.search_entry.connect_search_changed(clone!( - #[strong(rename_to = this)] - self, + #[weak] + imp, move |_| { - let imp = this.imp(); if let Some(filter) = imp.filter_model.borrow().filter() { filter.changed(FilterChange::Different); } @@ -667,8 +672,8 @@ impl ResApplications { if let Some(column_view_sorter) = imp.column_view.borrow().sorter() { column_view_sorter.connect_changed(clone!( - #[weak(rename_to = this)] - self, + #[weak] + imp, move |sorter, _| { if let Some(sorter) = sorter.downcast_ref::() { let current_column = sorter @@ -676,8 +681,7 @@ impl ResApplications { .map(|column| column.as_ptr() as usize) .unwrap_or_default(); - let current_column_number = this - .imp() + let current_column_number = imp .columns .borrow() .iter() diff --git a/src/ui/pages/processes/mod.rs b/src/ui/pages/processes/mod.rs index e961afad..fa250b3b 100644 --- a/src/ui/pages/processes/mod.rs +++ b/src/ui/pages/processes/mod.rs @@ -99,6 +99,8 @@ mod imp { #[template_child] pub end_process_button: TemplateChild, #[template_child] + pub toolbar_view: TemplateChild, + #[template_child] pub end_process_menu: TemplateChild, #[template_child] pub end_process_menu_multiple: TemplateChild, @@ -164,6 +166,7 @@ mod imp { options_button: Default::default(), information_button: Default::default(), end_process_button: Default::default(), + toolbar_view: Default::default(), end_process_menu: Default::default(), end_process_menu_multiple: Default::default(), store: gio::ListStore::new::().into(), @@ -802,15 +805,19 @@ impl ResProcesses { imp.selection_model .borrow() .connect_selection_changed(clone!( - #[weak(rename_to = this)] - self, + #[weak] + imp, move |model, _, _| { - let imp = this.imp(); let bitset = model.selection(); - imp.information_button.set_sensitive(bitset.size() == 1); - imp.options_button.set_sensitive(bitset.size() == 1); - imp.end_process_button.set_sensitive(bitset.size() > 0); + let one_selected = bitset.size() == 1; + let multiple_selected = bitset.size() > 0; + + imp.toolbar_view.set_reveal_bottom_bars(multiple_selected); + + imp.information_button.set_sensitive(one_selected); + imp.options_button.set_sensitive(one_selected); + imp.end_process_button.set_sensitive(multiple_selected); if bitset.size() <= 1 { imp.end_process_button.set_label(&i18n("End Process")); @@ -828,10 +835,9 @@ impl ResProcesses { .set_key_capture_widget(self.parent().as_ref()); imp.search_entry.connect_search_changed(clone!( - #[strong(rename_to = this)] - self, + #[weak] + imp, move |_| { - let imp = this.imp(); if let Some(filter) = imp.filter_model.borrow().filter() { filter.changed(FilterChange::Different); } @@ -897,8 +903,8 @@ impl ResProcesses { if let Some(column_view_sorter) = imp.column_view.borrow().sorter() { column_view_sorter.connect_changed(clone!( - #[weak(rename_to = this)] - self, + #[weak] + imp, move |sorter, _| { if let Some(sorter) = sorter.downcast_ref::() { let current_column = sorter @@ -906,8 +912,7 @@ impl ResProcesses { .map(|column| column.as_ptr() as usize) .unwrap_or_default(); - let current_column_number = this - .imp() + let current_column_number = imp .columns .borrow() .iter() From eae77277fccf290b5e70c87716de710db2a384f4 Mon Sep 17 00:00:00 2001 From: nokyan Date: Thu, 30 Apr 2026 07:10:00 +0200 Subject: [PATCH 5/8] Unreveal bottom bars when the selection has become empty --- src/ui/pages/applications/mod.rs | 6 ++++++ src/ui/pages/processes/mod.rs | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/src/ui/pages/applications/mod.rs b/src/ui/pages/applications/mod.rs index 2e79b084..318313f1 100644 --- a/src/ui/pages/applications/mod.rs +++ b/src/ui/pages/applications/mod.rs @@ -834,6 +834,12 @@ impl ResApplications { sorter.changed(gtk::SorterChange::Different); } + if imp.selection_model.borrow().selection().size() == 0 { + imp.toolbar_view.set_reveal_bottom_bars(false); + imp.information_button.set_sensitive(false); + imp.end_application_button.set_sensitive(false); + } + // -1 because we don't want to count System Processes self.set_tab_usage_string(i18n_f( "Running Apps: {}", diff --git a/src/ui/pages/processes/mod.rs b/src/ui/pages/processes/mod.rs index fa250b3b..90cd555b 100644 --- a/src/ui/pages/processes/mod.rs +++ b/src/ui/pages/processes/mod.rs @@ -1114,6 +1114,13 @@ impl ResProcesses { sorter.changed(gtk::SorterChange::Different); } + if imp.selection_model.borrow().selection().size() == 0 { + imp.toolbar_view.set_reveal_bottom_bars(false); + imp.information_button.set_sensitive(false); + imp.options_button.set_sensitive(false); + imp.end_process_button.set_sensitive(false); + } + self.set_tab_usage_string(i18n_f( "Running Processes: {}", &[&(store.n_items()).to_string()], From 3ebf817de0fc9e259352cc43a0de2e37b9ad59c6 Mon Sep 17 00:00:00 2001 From: nokyan Date: Wed, 6 May 2026 19:17:00 +0200 Subject: [PATCH 6/8] Redesign Process Options dialog --- .../ui/dialogs/process_options_dialog.ui | 24 +++++++++++-------- src/ui/dialogs/process_options_dialog.rs | 4 ++-- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/data/resources/ui/dialogs/process_options_dialog.ui b/data/resources/ui/dialogs/process_options_dialog.ui index eb086c3a..6c76af8f 100644 --- a/data/resources/ui/dialogs/process_options_dialog.ui +++ b/data/resources/ui/dialogs/process_options_dialog.ui @@ -66,7 +66,6 @@ - Process Options Niceness @@ -98,17 +97,22 @@ - - - Processor Affinity - - - center + + + + + Processor Affinity + + + + select-all-symbolic - Toggle All + Toggle All - - Select which processor cores the process is allowed to run on + + diff --git a/src/ui/dialogs/process_options_dialog.rs b/src/ui/dialogs/process_options_dialog.rs index 22192900..6c7e3928 100644 --- a/src/ui/dialogs/process_options_dialog.rs +++ b/src/ui/dialogs/process_options_dialog.rs @@ -33,7 +33,7 @@ mod imp { #[template_child] pub priority_row: TemplateChild, #[template_child] - pub affinity_row: TemplateChild, + pub affinity_group: TemplateChild, #[template_child] pub select_all_button: TemplateChild, @@ -160,7 +160,7 @@ impl ResProcessOptionsDialog { } )); - imp.affinity_row.add_row(&switch_row); + imp.affinity_group.add(&switch_row); imp.cpu_rows.borrow_mut().push(switch_row); } From de73ea82478fcfa2ee56fbc9f4fd0e97454dc560 Mon Sep 17 00:00:00 2001 From: nokyan Date: Wed, 6 May 2026 19:18:53 +0200 Subject: [PATCH 7/8] Adjusted tooltips for Process/App Information and Process Options --- data/resources/ui/pages/applications.ui | 4 ++-- data/resources/ui/pages/processes.ui | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/data/resources/ui/pages/applications.ui b/data/resources/ui/pages/applications.ui index 2b123e39..ac514f98 100644 --- a/data/resources/ui/pages/applications.ui +++ b/data/resources/ui/pages/applications.ui @@ -86,9 +86,9 @@ info-symbolic false - Show App Information + App Information - Show App Information + App Information