Fixed mouse scroll events in opener
This commit is contained in:
parent
52b07bfc0b
commit
517c952606
4 changed files with 25 additions and 21 deletions
|
|
@ -480,12 +480,12 @@ impl RawEvent {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn to_mouse(&self, area: Area, drag_id_counter: &mut usize) -> Option<Action> {
|
pub fn to_mouse(&self, drag_id_counter: &mut usize) -> Option<Action> {
|
||||||
let TerminalEvent::Mouse(ev) = self.0 else {
|
let TerminalEvent::Mouse(ev) = self.0 else {
|
||||||
return None;
|
return None;
|
||||||
};
|
};
|
||||||
|
|
||||||
if let Some(pos) = area.contains([ev.column as isize, ev.row as isize]) {
|
let pos = [ev.column as isize, ev.row as isize];
|
||||||
let action = match ev.kind {
|
let action = match ev.kind {
|
||||||
MouseEventKind::ScrollUp => MouseAction::Scroll(Dir::Up),
|
MouseEventKind::ScrollUp => MouseAction::Scroll(Dir::Up),
|
||||||
MouseEventKind::ScrollDown => MouseAction::Scroll(Dir::Down),
|
MouseEventKind::ScrollDown => MouseAction::Scroll(Dir::Down),
|
||||||
|
|
@ -498,8 +498,5 @@ impl RawEvent {
|
||||||
};
|
};
|
||||||
let is_ctrl = ev.modifiers == KeyModifiers::CONTROL;
|
let is_ctrl = ev.modifiers == KeyModifiers::CONTROL;
|
||||||
Some(Action::Mouse(action, pos, is_ctrl, *drag_id_counter))
|
Some(Action::Mouse(action, pos, is_ctrl, *drag_id_counter))
|
||||||
} else {
|
|
||||||
None
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -97,7 +97,9 @@ impl Input {
|
||||||
self.refocus(buffer, cursor_id);
|
self.refocus(buffer, cursor_id);
|
||||||
Ok(Resp::handled(None))
|
Ok(Resp::handled(None))
|
||||||
}
|
}
|
||||||
Some(Action::Mouse(MouseAction::Scroll(dir), pos, _, _)) if is_doc => {
|
Some(Action::Mouse(MouseAction::Scroll(dir), pos, _, _))
|
||||||
|
if is_doc && self.last_area.contains(pos).is_some() =>
|
||||||
|
{
|
||||||
let dist = [1, 1];
|
let dist = [1, 1];
|
||||||
let dfocus = match dir {
|
let dfocus = match dir {
|
||||||
Dir::Up => [0, -1],
|
Dir::Up => [0, -1],
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,6 @@ pub struct Panes {
|
||||||
selected: usize,
|
selected: usize,
|
||||||
panes: Vec<Pane>,
|
panes: Vec<Pane>,
|
||||||
last_area: Area,
|
last_area: Area,
|
||||||
drag_id_counter: usize,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Panes {
|
impl Panes {
|
||||||
|
|
@ -30,7 +29,6 @@ impl Panes {
|
||||||
})
|
})
|
||||||
.collect(),
|
.collect(),
|
||||||
last_area: Default::default(),
|
last_area: Default::default(),
|
||||||
drag_id_counter: 0,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -46,7 +44,6 @@ impl Element for Panes {
|
||||||
.map(Action::PaneMove)
|
.map(Action::PaneMove)
|
||||||
.or_else(|| e.to_pane_open().map(Action::PaneOpen))
|
.or_else(|| e.to_pane_open().map(Action::PaneOpen))
|
||||||
.or_else(|| e.to_pane_close())
|
.or_else(|| e.to_pane_close())
|
||||||
.or_else(|| e.to_mouse(self.last_area, &mut self.drag_id_counter))
|
|
||||||
}) {
|
}) {
|
||||||
Some(Action::PaneMove(Dir::Left)) => {
|
Some(Action::PaneMove(Dir::Left)) => {
|
||||||
self.selected = (self.selected + self.panes.len() - 1) % self.panes.len();
|
self.selected = (self.selected + self.panes.len() - 1) % self.panes.len();
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ pub struct Root {
|
||||||
panes: Panes,
|
panes: Panes,
|
||||||
status: Status,
|
status: Status,
|
||||||
tasks: Vec<Task>,
|
tasks: Vec<Task>,
|
||||||
|
drag_id_counter: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub enum Task {
|
pub enum Task {
|
||||||
|
|
@ -35,12 +36,19 @@ impl Root {
|
||||||
panes: Panes::new(state, buffers),
|
panes: Panes::new(state, buffers),
|
||||||
status: Status,
|
status: Status,
|
||||||
tasks: Vec::new(),
|
tasks: Vec::new(),
|
||||||
|
drag_id_counter: 0,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Element<()> for Root {
|
impl Element<()> for Root {
|
||||||
fn handle(&mut self, state: &mut State, mut event: Event) -> Result<Resp<()>, Event> {
|
fn handle(&mut self, state: &mut State, mut event: Event) -> Result<Resp<()>, Event> {
|
||||||
|
// Perform any top-level conversion of raw events
|
||||||
|
let mut event = event
|
||||||
|
.to_action(|e| e.to_mouse(&mut self.drag_id_counter))
|
||||||
|
.map(Event::Action)
|
||||||
|
.unwrap_or(event);
|
||||||
|
|
||||||
// Pass the event down through the list of tasks until we meet one that can handle it
|
// Pass the event down through the list of tasks until we meet one that can handle it
|
||||||
let mut task_idx = self.tasks.len();
|
let mut task_idx = self.tasks.len();
|
||||||
let event = loop {
|
let event = loop {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue