1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
//! Window behavior section of the window settings tab.
use crate::SettingsUI;
use crate::section::collapsing_section;
use par_term_config::WindowType;
use std::collections::HashSet;
pub(super) fn show_behavior_section(
ui: &mut egui::Ui,
settings: &mut SettingsUI,
changes_this_frame: &mut bool,
collapsed: &mut HashSet<String>,
) {
collapsing_section(
ui,
"Window Behavior",
"window_behavior",
false,
collapsed,
|ui| {
if ui
.checkbox(
&mut settings.config.window.window_decorations,
"Window decorations",
)
.changed()
{
settings.has_changes = true;
*changes_this_frame = true;
}
if ui
.checkbox(
&mut settings.config.window.window_always_on_top,
"Always on top",
)
.changed()
{
settings.has_changes = true;
*changes_this_frame = true;
}
if ui
.checkbox(&mut settings.config.lock_window_size, "Lock window size")
.on_hover_text("Prevent window from being resized by the user")
.changed()
{
settings.has_changes = true;
*changes_this_frame = true;
}
if ui
.checkbox(
&mut settings.config.show_window_number,
"Show window number in title",
)
.on_hover_text(
"Display window index number in the title bar (useful for multiple windows)",
)
.changed()
{
settings.has_changes = true;
*changes_this_frame = true;
}
ui.add_space(8.0);
// Window type dropdown
ui.horizontal(|ui| {
ui.label("Window type:");
let current_type = settings.config.window_type;
egui::ComboBox::from_id_salt("window_window_type")
.selected_text(current_type.display_name())
.show_ui(ui, |ui| {
for window_type in WindowType::all() {
if ui
.selectable_value(
&mut settings.config.window_type,
*window_type,
window_type.display_name(),
)
.changed()
{
settings.has_changes = true;
*changes_this_frame = true;
}
}
});
});
// Target monitor setting
ui.horizontal(|ui| {
ui.label("Target monitor:");
let mut monitor_index = settings.config.target_monitor.unwrap_or(0) as i32;
let mut use_default = settings.config.target_monitor.is_none();
if ui
.checkbox(&mut use_default, "Auto")
.on_hover_text("Let the OS decide which monitor to open on")
.changed()
{
if use_default {
settings.config.target_monitor = None;
} else {
settings.config.target_monitor = Some(0);
}
settings.has_changes = true;
*changes_this_frame = true;
}
if !use_default
&& ui
.add(egui::Slider::new(&mut monitor_index, 0..=7))
.on_hover_text("Monitor index (0 = primary)")
.changed()
{
settings.config.target_monitor = Some(monitor_index as usize);
settings.has_changes = true;
*changes_this_frame = true;
}
});
if settings.config.window_type.is_edge() {
ui.colored_label(
egui::Color32::YELLOW,
"Note: Edge-anchored windows take effect on next window creation",
);
}
// Target macOS Space setting (only visible on macOS)
if cfg!(target_os = "macos") {
ui.add_space(8.0);
ui.horizontal(|ui| {
ui.label("Target Space:");
let mut space_number = settings.config.target_space.unwrap_or(1) as i32;
let mut use_default = settings.config.target_space.is_none();
if ui
.checkbox(&mut use_default, "Auto")
.on_hover_text("Let the OS decide which Space (virtual desktop) to open on")
.changed()
{
if use_default {
settings.config.target_space = None;
} else {
settings.config.target_space = Some(1);
}
settings.has_changes = true;
*changes_this_frame = true;
}
if !use_default
&& ui
.add(egui::Slider::new(&mut space_number, 1..=16))
.on_hover_text("Space number in Mission Control (1 = first Space)")
.changed()
{
settings.config.target_space = Some(space_number as u32);
settings.has_changes = true;
*changes_this_frame = true;
}
});
ui.colored_label(
egui::Color32::YELLOW,
"Note: Target Space takes effect on next window creation",
);
}
},
);
}