diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2019-11-10 16:20:35 +1100 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2019-11-10 22:32:13 +1100 |
commit | e85310c0a92a89167530241bdc3fc5f66a48706d (patch) | |
tree | f7989a8b002d2d5aa847460cae112aac9f64b669 /pkg/gui/files_panel.go | |
parent | cd17b46b55e312b3ba4e3ab9d3d96a8eeb20fded (diff) |
add mouse support
Diffstat (limited to 'pkg/gui/files_panel.go')
-rw-r--r-- | pkg/gui/files_panel.go | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/pkg/gui/files_panel.go b/pkg/gui/files_panel.go index f73d84cdb..6b8847e8c 100644 --- a/pkg/gui/files_panel.go +++ b/pkg/gui/files_panel.go @@ -27,24 +27,21 @@ func (gui *Gui) getSelectedFile(g *gocui.Gui) (*commands.File, error) { return gui.State.Files[selectedLine], nil } -func (gui *Gui) handleFilesFocus(g *gocui.Gui, v *gocui.View) error { +func (gui *Gui) handleFilesClick(g *gocui.Gui, v *gocui.View) error { if gui.popupPanelFocused() { return nil } - cx, cy := v.Cursor() - _, oy := v.Origin() + prevSelectedLineIdx := gui.State.Panels.Files.SelectedLine + newSelectedLineIdx := v.SelectedLineIdx() - prevSelectedLine := gui.State.Panels.Files.SelectedLine - newSelectedLine := cy - oy - - if newSelectedLine > len(gui.State.Files)-1 || len(utils.Decolorise(gui.State.Files[newSelectedLine].DisplayString)) < cx { + if newSelectedLineIdx > len(gui.State.Files)-1 { return gui.handleFileSelect(gui.g, v, false) } - gui.State.Panels.Files.SelectedLine = newSelectedLine + gui.State.Panels.Files.SelectedLine = newSelectedLineIdx - if prevSelectedLine == newSelectedLine && gui.currentViewName() == v.Name() { + if prevSelectedLineIdx == newSelectedLineIdx && gui.currentViewName() == v.Name() { return gui.handleFilePress(gui.g, v) } else { return gui.handleFileSelect(gui.g, v, true) @@ -77,12 +74,16 @@ func (gui *Gui) handleFileSelect(g *gocui.Gui, v *gocui.View, alreadySelected bo leftContent := content if file.HasStagedChanges && file.HasUnstagedChanges { gui.State.SplitMainPanel = true + gui.getMainView().Title = gui.Tr.SLocalize("UnstagedChanges") + gui.getSecondaryView().Title = gui.Tr.SLocalize("StagedChanges") } else { gui.State.SplitMainPanel = false if file.HasUnstagedChanges { leftContent = content + gui.getMainView().Title = gui.Tr.SLocalize("UnstagedChanges") } else { leftContent = contentCached + gui.getMainView().Title = gui.Tr.SLocalize("StagedChanges") } } @@ -189,7 +190,11 @@ func (gui *Gui) stageSelectedFile(g *gocui.Gui) error { } func (gui *Gui) handleEnterFile(g *gocui.Gui, v *gocui.View) error { - file, err := gui.getSelectedFile(g) + return gui.enterFile(false, -1) +} + +func (gui *Gui) enterFile(forceSecondaryFocused bool, selectedLineIdx int) error { + file, err := gui.getSelectedFile(gui.g) if err != nil { if err != gui.Errors.ErrNoFiles { return err @@ -197,18 +202,21 @@ func (gui *Gui) handleEnterFile(g *gocui.Gui, v *gocui.View) error { return nil } if file.HasInlineMergeConflicts { - return gui.handleSwitchToMerge(g, v) + return gui.handleSwitchToMerge(gui.g, gui.getFilesView()) } if file.HasMergeConflicts { - return gui.createErrorPanel(g, gui.Tr.SLocalize("FileStagingRequirements")) + return gui.createErrorPanel(gui.g, gui.Tr.SLocalize("FileStagingRequirements")) } if err := gui.changeContext("main", "staging"); err != nil { return err } - if err := gui.switchFocus(g, v, gui.getMainView()); err != nil { + if err := gui.changeContext("secondary", "staging"); err != nil { + return err + } + if err := gui.switchFocus(gui.g, gui.getFilesView(), gui.getMainView()); err != nil { return err } - return gui.refreshStagingPanel() + return gui.refreshStagingPanel(forceSecondaryFocused, selectedLineIdx) } func (gui *Gui) handleFilePress(g *gocui.Gui, v *gocui.View) error { |