Added modifiers to scroll wheel eevent

Mikayla Maki created

Change summary

crates/editor/src/element.rs             | 1 +
crates/gpui/src/elements/flex.rs         | 1 +
crates/gpui/src/elements/list.rs         | 1 +
crates/gpui/src/elements/uniform_list.rs | 1 +
crates/gpui/src/platform/event.rs        | 4 ++++
crates/gpui/src/platform/mac/event.rs    | 6 ++++++
crates/terminal/src/terminal.rs          | 3 ++-
7 files changed, 16 insertions(+), 1 deletion(-)

Detailed changes

crates/editor/src/element.rs 🔗

@@ -1582,6 +1582,7 @@ impl Element for EditorElement {
                 position,
                 delta,
                 precise,
+                ..
             }) => self.scroll(*position, *delta, *precise, layout, paint, cx),
 
             &Event::ModifiersChanged(event) => self.modifiers_changed(event, cx),

crates/gpui/src/elements/flex.rs 🔗

@@ -293,6 +293,7 @@ impl Element for Flex {
                 position,
                 delta,
                 precise,
+                ..
             }) = event
             {
                 if *remaining_space < 0. && bounds.contains_point(position) {

crates/gpui/src/platform/event.rs 🔗

@@ -24,6 +24,10 @@ pub struct ScrollWheelEvent {
     pub position: Vector2F,
     pub delta: Vector2F,
     pub precise: bool,
+    pub ctrl: bool,
+    pub alt: bool,
+    pub shift: bool,
+    pub cmd: bool,
 }
 
 #[derive(Hash, PartialEq, Eq, Copy, Clone, Debug)]

crates/gpui/src/platform/mac/event.rs 🔗

@@ -148,6 +148,8 @@ impl Event {
                 })
             }
             NSEventType::NSScrollWheel => window_height.map(|window_height| {
+                let modifiers = native_event.modifierFlags();
+
                 Self::ScrollWheel(ScrollWheelEvent {
                     position: vec2f(
                         native_event.locationInWindow().x as f32,
@@ -158,6 +160,10 @@ impl Event {
                         native_event.scrollingDeltaY() as f32,
                     ),
                     precise: native_event.hasPreciseScrollingDeltas() == YES,
+                    ctrl: modifiers.contains(NSEventModifierFlags::NSControlKeyMask),
+                    alt: modifiers.contains(NSEventModifierFlags::NSAlternateKeyMask),
+                    shift: modifiers.contains(NSEventModifierFlags::NSShiftKeyMask),
+                    cmd: modifiers.contains(NSEventModifierFlags::NSCommandKeyMask),
                 })
             }),
             NSEventType::NSLeftMouseDragged

crates/terminal/src/terminal.rs 🔗

@@ -703,7 +703,7 @@ impl Terminal {
 
     ///Scroll the terminal
     pub fn scroll(&mut self, scroll: &ScrollWheelEvent, origin: Vector2F) {
-        if self.mouse_mode(false) {
+        if self.mouse_mode(scroll.shift) {
             //TODO: Currently this only sends the current scroll reports as they come in. Alacritty
             //Sends the *entire* scroll delta on *every* scroll event, only resetting it when
             //The scroll enters 'TouchPhase::Started'. Do I need to replicate this?
@@ -720,6 +720,7 @@ impl Terminal {
         } else if self
             .last_mode
             .contains(TermMode::ALT_SCREEN | TermMode::ALTERNATE_SCROLL)
+            && !scroll.shift
         {
             //TODO: See above TODO, also applies here.
             let scroll_lines = ((scroll.delta.y() * ALACRITTY_SCROLL_MULTIPLIER)