Skip to content

Commit 867add9

Browse files
committed
Auto select added terminal, improve ui
1 parent 4e64768 commit 867add9

File tree

2 files changed

+25
-12
lines changed

2 files changed

+25
-12
lines changed

src/terminal_combo_row.rs

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ mod imp {
2222
pub struct TerminalComboRow {
2323
#[property(get, set)]
2424
root_store: RefCell<RootStore>,
25+
pub selected_item_signal_handler: RefCell<Option<glib::SignalHandlerId>>,
2526
}
2627

2728
#[glib::derived_properties]
@@ -33,13 +34,15 @@ mod imp {
3334
obj.set_title("Preferred Terminal");
3435
obj.set_use_subtitle(true);
3536

36-
obj.connect_selected_item_notify(clone!(
37+
let signal_handler = obj.connect_selected_item_notify(clone!(
3738
#[weak]
3839
obj,
3940
move |combo| {
40-
let Some(selected) = combo.selected_item().and_downcast::<StringObject>() else {
41+
let Some(selected) = combo.selected_item().and_downcast::<StringObject>()
42+
else {
4143
return;
4244
};
45+
4346
if let Some(terminal) = obj
4447
.root_store()
4548
.terminal_repository()
@@ -50,6 +53,9 @@ mod imp {
5053
}
5154
));
5255

56+
self.selected_item_signal_handler
57+
.replace(Some(signal_handler));
58+
5359
obj.reload_terminals();
5460
}
5561

@@ -120,7 +126,8 @@ impl TerminalComboRow {
120126
}
121127

122128
pub fn set_selected_by_name(&self, name: &str) {
123-
let Some(terminals_strings) = self.model().unwrap().downcast::<gtk::StringList>().ok() else {
129+
let Some(terminals_strings) = self.model().unwrap().downcast::<gtk::StringList>().ok()
130+
else {
124131
return;
125132
};
126133
for i in 0..terminals_strings.n_items() {
@@ -145,11 +152,16 @@ impl TerminalComboRow {
145152
.collect::<Vec<_>>();
146153

147154
let terminal_list = gtk::StringList::new(&terminals);
148-
self.set_model(Some(&terminal_list));
149155

150-
if let Some(selected_terminal) = self.root_store().selected_terminal() {
151-
self.set_selected_by_name(&selected_terminal.name);
156+
let signal_handler = self.imp().selected_item_signal_handler.borrow();
157+
self.block_signal(&signal_handler.as_ref().unwrap());
158+
{
159+
self.set_model(Some(&terminal_list));
160+
if let Some(selected_terminal) = self.root_store().selected_terminal() {
161+
self.set_selected_by_name(&selected_terminal.name);
162+
}
152163
}
164+
self.unblock_signal(&signal_handler.as_ref().unwrap());
153165
}
154166
}
155167

src/window.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -591,10 +591,9 @@ impl DistroShelfWindow {
591591
terminal_group.set_title("Terminal Settings");
592592
let terminal_combo_row = TerminalComboRow::new_with_params(self.root_store());
593593

594-
let delete_btn = gtk::Button::from_icon_name("user-trash-symbolic");
595-
delete_btn.add_css_class("flat");
596-
delete_btn.add_css_class("circular");
597-
delete_btn.set_tooltip_text(Some("Remove this terminal"));
594+
let delete_btn = gtk::Button::with_label("Delete");
595+
delete_btn.add_css_class("destructive-action");
596+
delete_btn.add_css_class("pill");
598597

599598
if let Some(selected) = terminal_combo_row.selected_item() {
600599
let selected_name = selected
@@ -697,7 +696,7 @@ impl DistroShelfWindow {
697696
terminal_group.add(&terminal_combo_row);
698697

699698
// Add Custom Terminal Button
700-
let add_terminal_btn = gtk::Button::with_label("Add Custom Terminal");
699+
let add_terminal_btn = gtk::Button::with_label("Add Custom");
701700
add_terminal_btn.add_css_class("pill");
702701
add_terminal_btn.set_halign(gtk::Align::Start);
703702

@@ -824,13 +823,15 @@ impl DistroShelfWindow {
824823
match this
825824
.root_store()
826825
.terminal_repository()
827-
.save_terminal(terminal)
826+
.save_terminal(terminal.clone())
828827
{
829828
Ok(_) => {
830829
// Show success toast
831830
let toast = adw::Toast::new("Custom terminal added successfully");
832831

833832
terminal_combo_row.reload_terminals();
833+
terminal_combo_row
834+
.set_selected_by_name(&terminal.name);
834835

835836
this.add_toast(toast);
836837
custom_dialog.close();

0 commit comments

Comments
 (0)