Adjust to design and hard-code Copy and Paste special keys
This commit is contained in:
parent
1b980df309
commit
b9b2153230
2 changed files with 36 additions and 26 deletions
58
src/main.rs
58
src/main.rs
|
|
@ -970,13 +970,18 @@ impl App {
|
||||||
|
|
||||||
fn keyboard_shortcuts(&self) -> Element<'_, Message> {
|
fn keyboard_shortcuts(&self) -> Element<'_, Message> {
|
||||||
let cosmic_theme::Spacing {
|
let cosmic_theme::Spacing {
|
||||||
space_xxs, space_m, ..
|
space_xxs,
|
||||||
|
space_s,
|
||||||
|
space_m,
|
||||||
|
space_l,
|
||||||
|
space_xl,
|
||||||
|
..
|
||||||
} = self.core().system_theme().cosmic().spacing;
|
} = self.core().system_theme().cosmic().spacing;
|
||||||
|
|
||||||
let pad_m = [space_xxs, space_m];
|
let pad_action = [space_xxs, space_m];
|
||||||
let div_m = 16;
|
let div_action = space_s;
|
||||||
let pad_l = [space_xxs, space_m + 32];
|
let pad_binding = [space_xxs, space_xl];
|
||||||
let div_l = div_m + 32;
|
let div_binding = space_l;
|
||||||
|
|
||||||
let mut groups = Vec::new();
|
let mut groups = Vec::new();
|
||||||
//TODO: fix text input focus going outside bounds
|
//TODO: fix text input focus going outside bounds
|
||||||
|
|
@ -1021,17 +1026,22 @@ impl App {
|
||||||
widget::tooltip::Position::Top,
|
widget::tooltip::Position::Top,
|
||||||
));
|
));
|
||||||
|
|
||||||
list = list.list_item_padding(pad_m);
|
list = list.list_item_padding(pad_action);
|
||||||
list = list.add(widget::settings::item::builder(action_label).control(buttons));
|
list = list.divider_padding(div_action);
|
||||||
list = list.divider_padding(div_m);
|
list = list.add(widget::settings::item_row(vec![
|
||||||
|
widget::text::heading(action_label)
|
||||||
|
.width(Length::Fill)
|
||||||
|
.into(),
|
||||||
|
buttons.into(),
|
||||||
|
]));
|
||||||
|
|
||||||
if bindings.is_empty() {
|
if bindings.is_empty() {
|
||||||
list = list.list_item_padding(pad_l);
|
list = list.list_item_padding(pad_binding);
|
||||||
list = list.add(widget::text::body(fl!("no-shortcuts")));
|
list = list.add(widget::text::body(fl!("no-shortcuts")));
|
||||||
list = list.divider_padding(div_l);
|
list = list.divider_padding(div_binding);
|
||||||
} else {
|
} else {
|
||||||
for resolved in bindings {
|
for resolved in bindings {
|
||||||
list = list.list_item_padding(pad_l);
|
list = list.list_item_padding(pad_binding);
|
||||||
list = list.add(
|
list = list.add(
|
||||||
widget::settings::item::builder(shortcuts::binding_display(
|
widget::settings::item::builder(shortcuts::binding_display(
|
||||||
&resolved.binding,
|
&resolved.binding,
|
||||||
|
|
@ -1045,12 +1055,12 @@ impl App {
|
||||||
)),
|
)),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
list = list.divider_padding(div_l);
|
list = list.divider_padding(div_binding);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.shortcut_capture == Some(action) {
|
if self.shortcut_capture == Some(action) {
|
||||||
list = list.list_item_padding(pad_l);
|
list = list.list_item_padding(pad_binding);
|
||||||
list = list.add(
|
list = list.add(
|
||||||
widget::row::with_children(vec![
|
widget::row::with_children(vec![
|
||||||
widget::text::body(fl!("shortcut-capture-hint")).into(),
|
widget::text::body(fl!("shortcut-capture-hint")).into(),
|
||||||
|
|
@ -1061,7 +1071,7 @@ impl App {
|
||||||
])
|
])
|
||||||
.spacing(space_xxs),
|
.spacing(space_xxs),
|
||||||
);
|
);
|
||||||
list = list.divider_padding(div_l);
|
list = list.divider_padding(div_binding);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2345,17 +2355,19 @@ impl Application for App {
|
||||||
config_set!(focus_follow_mouse, focus_follow_mouse);
|
config_set!(focus_follow_mouse, focus_follow_mouse);
|
||||||
}
|
}
|
||||||
Message::Key(modifiers, key) => {
|
Message::Key(modifiers, key) => {
|
||||||
if self.shortcut_conflict.is_some() {
|
// Hard-coded keys
|
||||||
if key == Key::Named(Named::Escape) {
|
match key {
|
||||||
self.clear_shortcut_conflict();
|
Key::Named(Named::Copy) => {
|
||||||
|
return self.update(Message::Copy(None));
|
||||||
}
|
}
|
||||||
return Task::none();
|
Key::Named(Named::Paste) => {
|
||||||
|
return self.update(Message::Paste(None));
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handle shortcut capture
|
||||||
if let Some(action) = self.shortcut_capture {
|
if let Some(action) = self.shortcut_capture {
|
||||||
if key == Key::Named(Named::Escape) {
|
|
||||||
self.shortcut_capture = None;
|
|
||||||
return Task::none();
|
|
||||||
}
|
|
||||||
if let Some(binding) = shortcuts::binding_from_key(modifiers, key) {
|
if let Some(binding) = shortcuts::binding_from_key(modifiers, key) {
|
||||||
self.shortcut_capture = None;
|
self.shortcut_capture = None;
|
||||||
if let Some(existing_action) =
|
if let Some(existing_action) =
|
||||||
|
|
@ -2375,6 +2387,8 @@ impl Application for App {
|
||||||
}
|
}
|
||||||
return Task::none();
|
return Task::none();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handle configurable keys
|
||||||
for (key_bind, action) in &self.key_binds {
|
for (key_bind, action) in &self.key_binds {
|
||||||
if key_bind.matches(modifiers, &key) {
|
if key_bind.matches(modifiers, &key) {
|
||||||
return self.update(action.message(None));
|
return self.update(action.message(None));
|
||||||
|
|
|
||||||
|
|
@ -446,14 +446,12 @@ fn fallback_shortcuts() -> Shortcuts {
|
||||||
// Standard key bindings
|
// Standard key bindings
|
||||||
bind!([Ctrl, Shift], "A", SelectAll);
|
bind!([Ctrl, Shift], "A", SelectAll);
|
||||||
bind!([Ctrl, Shift], "C", Copy);
|
bind!([Ctrl, Shift], "C", Copy);
|
||||||
bind!([], "Copy", Copy);
|
|
||||||
bind!([Ctrl], "c", CopyOrSigint);
|
bind!([Ctrl], "c", CopyOrSigint);
|
||||||
bind!([Ctrl, Shift], "F", Find);
|
bind!([Ctrl, Shift], "F", Find);
|
||||||
bind!([Ctrl, Shift], "N", WindowNew);
|
bind!([Ctrl, Shift], "N", WindowNew);
|
||||||
bind!([Ctrl, Shift], "Q", WindowClose);
|
bind!([Ctrl, Shift], "Q", WindowClose);
|
||||||
bind!([Ctrl, Shift], "T", TabNew);
|
bind!([Ctrl, Shift], "T", TabNew);
|
||||||
bind!([Ctrl, Shift], "V", Paste);
|
bind!([Ctrl, Shift], "V", Paste);
|
||||||
bind!([], "Paste", Paste);
|
|
||||||
bind!([Shift], "Insert", PastePrimary);
|
bind!([Shift], "Insert", PastePrimary);
|
||||||
bind!([Ctrl, Shift], "W", TabClose);
|
bind!([Ctrl, Shift], "W", TabClose);
|
||||||
bind!([Ctrl], ",", Settings);
|
bind!([Ctrl], ",", Settings);
|
||||||
|
|
@ -507,8 +505,6 @@ fn fallback_shortcuts() -> Shortcuts {
|
||||||
|
|
||||||
fn key_from_string(value: &str) -> Option<Key> {
|
fn key_from_string(value: &str) -> Option<Key> {
|
||||||
match value {
|
match value {
|
||||||
"Copy" => Some(Key::Named(Named::Copy)),
|
|
||||||
"Paste" => Some(Key::Named(Named::Paste)),
|
|
||||||
"Insert" => Some(Key::Named(Named::Insert)),
|
"Insert" => Some(Key::Named(Named::Insert)),
|
||||||
"Tab" => Some(Key::Named(Named::Tab)),
|
"Tab" => Some(Key::Named(Named::Tab)),
|
||||||
"F11" => Some(Key::Named(Named::F11)),
|
"F11" => Some(Key::Named(Named::F11)),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue