Detailed changes
@@ -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),
@@ -293,6 +293,7 @@ impl Element for Flex {
position,
delta,
precise,
+ ..
}) = event
{
if *remaining_space < 0. && bounds.contains_point(position) {
@@ -316,6 +316,7 @@ impl Element for List {
position,
delta,
precise,
+ ..
}) = event
{
if bounds.contains_point(*position)
@@ -315,6 +315,7 @@ impl Element for UniformList {
position,
delta,
precise,
+ ..
}) = event
{
if bounds.contains_point(*position)
@@ -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)]
@@ -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
@@ -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)