actions: Shortcut handling changes for #1005

This commit is contained in:
Victoria Brekenfeld 2025-02-26 17:13:31 +01:00 committed by Victoria Brekenfeld
parent 638684642c
commit d76f372c29
6 changed files with 286 additions and 477 deletions

View file

@ -1,8 +1,6 @@
use cosmic_comp_config::workspace::WorkspaceLayout;
use cosmic_settings_config::shortcuts::State as KeyState;
use cosmic_settings_config::shortcuts::{self, Modifiers, Shortcuts};
use cosmic_settings_config::shortcuts::{self, Modifiers};
use smithay::input::keyboard::ModifiersState;
use xkbcommon::xkb;
#[derive(Clone, Debug, Eq, PartialEq)]
pub enum Action {
@ -23,88 +21,6 @@ pub enum PrivateAction {
),
}
pub fn add_default_bindings(shortcuts: &mut Shortcuts, workspace_layout: WorkspaceLayout) {
let (
workspace_previous,
workspace_next,
(output_previous, output_previous_dir),
(output_next, output_next_dir),
) = match workspace_layout {
WorkspaceLayout::Horizontal => (
[xkb::Keysym::Left, xkb::Keysym::h],
[xkb::Keysym::Right, xkb::Keysym::l],
(
[xkb::Keysym::Up, xkb::Keysym::k],
shortcuts::action::Direction::Up,
),
(
[xkb::Keysym::Down, xkb::Keysym::j],
shortcuts::action::Direction::Down,
),
),
WorkspaceLayout::Vertical => (
[xkb::Keysym::Up, xkb::Keysym::k],
[xkb::Keysym::Down, xkb::Keysym::j],
(
[xkb::Keysym::Left, xkb::Keysym::h],
shortcuts::action::Direction::Left,
),
(
[xkb::Keysym::Right, xkb::Keysym::l],
shortcuts::action::Direction::Right,
),
),
};
shortcuts.insert_default_binding(
Modifiers::new().logo().ctrl(),
workspace_previous.iter().copied(),
shortcuts::Action::PreviousWorkspace,
);
shortcuts.insert_default_binding(
Modifiers::new().logo().ctrl(),
workspace_next.iter().copied(),
shortcuts::Action::NextWorkspace,
);
shortcuts.insert_default_binding(
Modifiers::new().logo().ctrl().shift(),
workspace_previous.iter().copied(),
shortcuts::Action::MoveToPreviousWorkspace,
);
shortcuts.insert_default_binding(
Modifiers::new().logo().ctrl().shift(),
workspace_next.iter().copied(),
shortcuts::Action::MoveToNextWorkspace,
);
shortcuts.insert_default_binding(
Modifiers::new().logo().ctrl(),
output_previous.iter().copied(),
shortcuts::Action::SwitchOutput(output_previous_dir),
);
shortcuts.insert_default_binding(
Modifiers::new().logo().ctrl(),
output_next.iter().copied(),
shortcuts::Action::SwitchOutput(output_next_dir),
);
shortcuts.insert_default_binding(
Modifiers::new().logo().ctrl().shift(),
output_previous.iter().copied(),
shortcuts::Action::MoveToOutput(output_previous_dir),
);
shortcuts.insert_default_binding(
Modifiers::new().logo().ctrl().shift(),
output_next.iter().copied(),
shortcuts::Action::MoveToOutput(output_next_dir),
);
}
/// Convert `cosmic_settings_config::shortcuts::State` to `smithay::backend::input::KeyState`.
pub fn cosmic_keystate_to_smithay(value: KeyState) -> smithay::backend::input::KeyState {
match value {

View file

@ -192,7 +192,6 @@ impl Config {
})
.expect("Failed to add cosmic-config to the event loop");
let xdg = xdg::BaseDirectories::new().ok();
let workspace = get_config::<WorkspaceConfig>(&config, "workspaces");
let cosmic_comp_config =
CosmicCompConfig::get_entry(&config).unwrap_or_else(|(errs, c)| {
@ -241,10 +240,7 @@ impl Config {
// Source key bindings from com.system76.CosmicSettings.Shortcuts
let settings_context = shortcuts::context().expect("Failed to load shortcuts config");
let system_actions = shortcuts::system_actions(&settings_context);
let mut shortcuts = shortcuts::shortcuts(&settings_context);
// Add any missing default shortcuts recommended by the compositor.
key_bindings::add_default_bindings(&mut shortcuts, workspace.workspace_layout);
let shortcuts = shortcuts::shortcuts(&settings_context);
// Listen for updates to the keybindings config.
match cosmic_config::calloop::ConfigWatchSource::new(&settings_context) {
@ -254,11 +250,7 @@ impl Config {
match key.as_str() {
// Reload the keyboard shortcuts config.
"custom" | "defaults" => {
let mut shortcuts = shortcuts::shortcuts(&config);
let layout = get_config::<WorkspaceConfig>(&config, "workspaces")
.workspace_layout;
key_bindings::add_default_bindings(&mut shortcuts, layout);
state.common.config.shortcuts = shortcuts;
state.common.config.shortcuts = shortcuts::shortcuts(&config);
}
"system_actions" => {