Remove `selection_start_point/side`
diff --git a/src/event.rs b/src/event.rs
index de12d3b..19f1ef3 100644
--- a/src/event.rs
+++ b/src/event.rs
@@ -14,7 +14,7 @@
 use cli::Options;
 use display::OnResize;
 use index::{Line, Column, Side, Point};
-use input::{self, MouseBinding, KeyBinding, ActionContext as InputActionContext};
+use input::{self, MouseBinding, KeyBinding};
 use selection::Selection;
 use sync::FairMutex;
 use term::{Term, SizeInfo, TermMode};
@@ -76,28 +76,26 @@
     }
 
     fn update_selection(&mut self, point: Point, side: Side) {
-        self.selection_modified = true;
         // Update selection if one exists
         if let Some(ref mut selection) = *self.selection {
+            self.selection_modified = true;
             selection.update(point, side);
-            return;
         }
-
-        // Otherwise, start a regular selection
-        self.simple_selection(point, side);
     }
 
     fn simple_selection(&mut self, point: Point, side: Side) {
-        self.start_selection(Selection::simple(point, side));
+        *self.selection = Some(Selection::simple(point, side));
+        self.selection_modified = true;
     }
 
     fn semantic_selection(&mut self, point: Point) {
-        let selection = Selection::semantic(point, self.terminal);
-        self.start_selection(selection);
+        *self.selection = Some(Selection::semantic(point, self.terminal));
+        self.selection_modified = true;
     }
 
     fn line_selection(&mut self, point: Point) {
-        self.start_selection(Selection::lines(point));
+        *self.selection = Some(Selection::lines(point));
+        self.selection_modified = true;
     }
 
     fn mouse_coords(&self) -> Option<Point> {
@@ -138,18 +136,6 @@
     }
 }
 
-impl<'a, N: Notify + 'a> ActionContext<'a, N> {
-    /// Helper to create selections
-    fn start_selection(&mut self, selection: Selection) {
-        // Reset beginning of selection once selection is started
-        self.mouse_mut().selection_start_point = None;
-        self.mouse_mut().selection_start_side = None;
-
-        *self.selection = Some(selection);
-        self.selection_modified = true;
-    }
-}
-
 pub enum ClickState {
     None,
     Click,
@@ -171,8 +157,6 @@
     pub column: Column,
     pub cell_side: Side,
     pub lines_scrolled: f32,
-    pub selection_start_point: Option<Point>,
-    pub selection_start_side: Option<Side>,
 }
 
 impl Default for Mouse {
@@ -190,8 +174,6 @@
             column: Column(0),
             cell_side: Side::Left,
             lines_scrolled: 0.0,
-            selection_start_point: None,
-            selection_start_side: None,
         }
     }
 }
diff --git a/src/input.rs b/src/input.rs
index fe897b2..4e78ae1 100644
--- a/src/input.rs
+++ b/src/input.rs
@@ -270,9 +270,11 @@
         self.ctx.mouse_mut().x = x;
         self.ctx.mouse_mut().y = y;
 
-        if let Some((point, cell_side)) = self.get_mouse_pos() {
+        let size_info = self.ctx.size_info();
+        if let Some(point) = size_info.pixels_to_coords(x as usize, y as usize) {
             let prev_line = mem::replace(&mut self.ctx.mouse_mut().line, point.line);
             let prev_col = mem::replace(&mut self.ctx.mouse_mut().column, point.col);
+            let cell_side = self.get_mouse_side();
 
             self.ctx.mouse_mut().cell_side = cell_side;
 
@@ -283,16 +285,10 @@
                     || !self.ctx.terminal_mode().intersects(TermMode::MOUSE_REPORT_CLICK | motion_mode)
                 )
             {
-                let start_point = self.ctx.mouse().selection_start_point;
-                let start_side = self.ctx.mouse().selection_start_side;
-                if let (Some(point), Some(side)) = (start_point, start_side) {
-                    self.ctx.update_selection(point, side);
-                } else {
-                    self.ctx.update_selection(Point {
-                        line: point.line,
-                        col: point.col
-                    }, cell_side);
-                }
+                self.ctx.update_selection(Point {
+                    line: point.line,
+                    col: point.col
+                }, cell_side);
             } else if self.ctx.terminal_mode().intersects(motion_mode)
                 // Only report motion when changing cells
                 && (
@@ -391,13 +387,14 @@
                 ClickState::TripleClick
             },
             _ => {
+                self.ctx.clear_selection();
+
                 // Store click position for accurate selection
-                if let Some((point, side)) = self.get_mouse_pos() {
-                    self.ctx.mouse_mut().selection_start_point = Some(point);
-                    self.ctx.mouse_mut().selection_start_side = Some(side);
+                if let Some(point) = self.ctx.mouse_coords() {
+                    let side = self.get_mouse_side();
+                    self.ctx.simple_selection(point, side);
                 }
 
-                self.ctx.clear_selection();
                 let report_modes = TermMode::MOUSE_REPORT_CLICK | TermMode::MOUSE_DRAG | TermMode::MOUSE_MOTION;
                 if !modifiers.shift && self.ctx.terminal_mode().intersects(report_modes) {
                     match button {
@@ -415,25 +412,20 @@
         };
     }
 
-    fn get_mouse_pos(&self) -> Option<(Point, Side)> {
-        let x = self.ctx.mouse().x;
-        let y = self.ctx.mouse().y;
-
+    fn get_mouse_side(&self) -> Side {
         let size_info = self.ctx.size_info();
-        if let Some(point) = size_info.pixels_to_coords(x as usize, y as usize) {
-            let cell_x = (x as usize - size_info.padding_x as usize) % size_info.cell_width as usize;
-            let half_cell_width = (size_info.cell_width / 2.0) as usize;
+        let x = self.ctx.mouse().x;
 
-            let cell_side = if cell_x > half_cell_width {
-                Side::Right
-            } else {
-                Side::Left
-            };
+        let cell_x = (x as usize - size_info.padding_x as usize) % size_info.cell_width as usize;
+        let half_cell_width = (size_info.cell_width / 2.0) as usize;
 
-            Some((point, cell_side))
+        let cell_side = if cell_x > half_cell_width {
+            Side::Right
         } else {
-            None
-        }
+            Side::Left
+        };
+
+        cell_side
     }
 
     pub fn on_mouse_release(&mut self, button: MouseButton, modifiers: ModifiersState) {