diff --git a/cosmic-settings/src/pages/input/mod.rs b/cosmic-settings/src/pages/input/mod.rs index 64470bee9..6af238a05 100644 --- a/cosmic-settings/src/pages/input/mod.rs +++ b/cosmic-settings/src/pages/input/mod.rs @@ -23,6 +23,7 @@ pub enum Message { DisableWhileTyping(bool, bool), PrimaryButtonSelected(cosmic::widget::segmented_button::Entity, bool), SetAcceleration(bool, bool), + SetMiddleButtonEmulation(bool, bool), SetMouseSpeed(f64, bool), SetNaturalScroll(bool, bool), SetSecondaryClickBehavior(Option, bool), @@ -123,6 +124,12 @@ impl Page { }); } + Message::SetMiddleButtonEmulation(enabled, touchpad) => { + self.update_input(touchpad, |conf| { + conf.middle_button_emulation = Some(enabled); + }); + }, + Message::SetNaturalScroll(enabled, touchpad) => self.update_input(touchpad, |x| { x.scroll_config .get_or_insert(ScrollConfig::default()) diff --git a/cosmic-settings/src/pages/input/mouse.rs b/cosmic-settings/src/pages/input/mouse.rs index dacc31181..097fdd25a 100644 --- a/cosmic-settings/src/pages/input/mouse.rs +++ b/cosmic-settings/src/pages/input/mouse.rs @@ -54,6 +54,8 @@ fn mouse() -> Section { let mouse_speed = descriptions.insert(fl!("mouse", "speed")); let primary_button = descriptions.insert(fl!("primary-button")); let acceleration_desc = descriptions.insert(fl!("acceleration-desc")); + let middle_button_emulation = descriptions.insert(fl!("middle-button-emulation")); + let middle_button_emulation_desc = descriptions.insert(fl!("middle-button-emulation-desc")); Section::default() .descriptions(descriptions) @@ -110,6 +112,17 @@ fn mouse() -> Section { |x| Message::SetAcceleration(x, false), ), ) + .add( + settings::item::builder(&descriptions[middle_button_emulation]) + .description(&descriptions[middle_button_emulation_desc]) + .toggler( + input + .input_default + .middle_button_emulation + .unwrap_or(false), + |x| Message::SetMiddleButtonEmulation(x, false), + ), + ) .apply(Element::from) .map(crate::pages::Message::Input) }) diff --git a/cosmic-settings/src/pages/input/touchpad.rs b/cosmic-settings/src/pages/input/touchpad.rs index bf71e96f7..197218b9a 100644 --- a/cosmic-settings/src/pages/input/touchpad.rs +++ b/cosmic-settings/src/pages/input/touchpad.rs @@ -154,6 +154,8 @@ fn click_behavior() -> Section { let button_areas = descriptions.insert(fl!("click-behavior", "button-areas")); let tap_to_click = descriptions.insert(fl!("tap-to-click")); let _tap_to_click_desc = descriptions.insert(fl!("tap-to-click", "desc")); + let middle_button_emulation = descriptions.insert(fl!("middle-button-emulation")); + let middle_button_emulation_desc = descriptions.insert(fl!("middle-button-emulation-desc")); Section::default() .title(fl!("click-behavior")) @@ -197,6 +199,16 @@ fn click_behavior() -> Section { Message::TapToClick, ), ) + .add( + settings::item::builder(&descriptions[middle_button_emulation]) + .description(&descriptions[middle_button_emulation_desc]) + .toggler( + page.input_touchpad + .middle_button_emulation + .unwrap_or(false), + |x| Message::SetMiddleButtonEmulation(x, false), + ), + ) .apply(Element::from) .map(crate::pages::Message::Input) }) diff --git a/i18n/en/cosmic_settings.ftl b/i18n/en/cosmic_settings.ftl index f532ed440..8fa428383 100644 --- a/i18n/en/cosmic_settings.ftl +++ b/i18n/en/cosmic_settings.ftl @@ -530,6 +530,9 @@ disable-while-typing = Disable while typing input-devices = Input Devices .desc = Input Devices +middle-button-emulation = Enable middle button emulation +middle-button-emulation-desc = Emulates a middle button click when pressing the left and right buttons simultaneously. + primary-button = Primary button .desc = Sets the order of physical buttons. .left = Left